All Downloads are FREE. Search and download functionalities are using the official Maven repository.

izumi.fundamentals.platform.resources.IzArtifactMaterializer.scala Maven / Gradle / Ivy

package izumi.fundamentals.platform.resources

import scala.reflect.macros.blackbox
import scala.language.experimental.macros

final case class IzArtifactMaterializer(get: IzArtifact) extends AnyVal

object IzArtifactMaterializer {
  @inline def currentArtifact(implicit ev: IzArtifactMaterializer): IzArtifact = ev.get

  implicit def materialize: IzArtifactMaterializer = macro IzArtifactMaterializerMacro.make
}

object IzArtifactMaterializerMacro {
  def make(c: blackbox.Context): c.Expr[IzArtifactMaterializer] = {
    import c.universe.*

    c.Expr[IzArtifactMaterializer] {
      q"""{
          import _root_.izumi.fundamentals.platform.build.{BuildAttributes => BA}
          import _root_.izumi.fundamentals.platform.build.{MacroParameters => MP}

          new ${typeOf[IzArtifactMaterializer]}(new ${typeOf[IzArtifact]}(
            new ${typeOf[IzArtifactId]}(MP.projectGroupId().getOrElse("???"), MP.artifactName().getOrElse("???")),
            new ${typeOf[ArtifactVersion]}(MP.artifactVersion().getOrElse("???")),
            new ${typeOf[BuildStatus]}(BA.userName().getOrElse("???"), BA.javaVersion().getOrElse("???"), MP.sbtVersion().getOrElse("???"), BA.buildTimestamp()),
            new ${typeOf[GitStatus]}(MP.gitBranch().getOrElse("???"), MP.gitRepoClean().getOrElse(false), MP.gitHeadCommit().getOrElse("???")),
          ))
          }
       """
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy