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

scala.build.options.WithBuildRequirements.scala Maven / Gradle / Ivy

There is a newer version: 1.6.1
Show newest version
package scala.build.options

import scala.build.options.BuildRequirements.ScopeRequirement

final case class WithBuildRequirements[+T](
  requirements: BuildRequirements,
  value: T
) {
  def needsScalaVersion: Boolean =
    requirements.needsScalaVersion
  def withScalaVersion(sv: MaybeScalaVersion): Either[String, WithBuildRequirements[T]] =
    requirements.withScalaVersion(sv).map { updatedRequirements =>
      copy(requirements = updatedRequirements)
    }
  def withPlatform(pf: Platform): Either[String, WithBuildRequirements[T]] =
    requirements.withPlatform(pf).map { updatedRequirements =>
      copy(requirements = updatedRequirements)
    }
  def scopedValue(defaultScope: Scope): HasScope[T] =
    HasScope(requirements.scope.map(_.scope).getOrElse(defaultScope), value)
  def map[U](f: T => U): WithBuildRequirements[U] =
    copy(value = f(value))
}

object WithBuildRequirements {
  extension [T](t: T) {
    def withBuildRequirements(buildRequirements: BuildRequirements): WithBuildRequirements[T] =
      WithBuildRequirements(buildRequirements, t)

    def withEmptyRequirements: WithBuildRequirements[T] =
      t.withBuildRequirements(BuildRequirements())

    def withScopeRequirement(scope: Scope): WithBuildRequirements[T] =
      t.withBuildRequirements(BuildRequirements(scope = Some(ScopeRequirement(scope = scope))))
  }
  extension [T](t: WithBuildRequirements[Seq[T]]) {
    def flatten: Seq[WithBuildRequirements[T]] =
      t.value.map { v =>
        WithBuildRequirements(t.requirements, v)
      }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy