in magenta-lib/src/main/scala/magenta/deployment_type/Param.scala [49:93]
def get(pkg: DeploymentPackage): Option[T] =
pkg.pkgSpecificData
.get(name)
.flatMap(jsValue => parse(jsValue))
def parse(jsValue: JsValue): Option[T] = Json.fromJson[T](jsValue).asOpt
def apply(
pkg: DeploymentPackage,
target: DeployTarget,
reporter: DeployReporter
): T = {
val maybeValue = get(pkg)
val defaultFromContext = defaultValueFromContext.map(_(pkg, target))
val maybeDefault =
defaultValue.orElse(defaultFromContext.flatMap(_.right.toOption))
(maybeDefault, maybeValue) match {
// the bucket checks below are to aid migrating to this being a required field as we are simply guessing otherwise
case (Some(default), Some(value))
if default == value && !deprecatedDefault =>
reporter.info(
s"Parameter $name is unnecessarily explicitly set to the default value of $default"
)
case (Some(_), None) if deprecatedDefault =>
reporter.warning(
s"Parameter $name must always be explicitly set (the default is deprecated as it is quite magical™)"
)
case _ => // otherwise do nothing
}
(maybeValue, defaultValue, defaultFromContext) match {
case (Some(userDefined), _, _) => userDefined
case (_, Some(default), _) => default
case (_, _, Some(Right(contextDefault))) => contextDefault
case (_, _, Some(Left(contextError))) =>
throw new NoSuchElementException(
s"Error whilst generating default for parameter $name in package ${pkg.name} [${pkg.deploymentType.name}]: $contextError"
)
case _ =>
throw new NoSuchElementException(
s"Package ${pkg.name} [${pkg.deploymentType.name}] requires parameter $name of type ${manifest.runtimeClass.getSimpleName}"
)
}
}