in multiversion/src/main/scala/multiversion/configs/DependencyConfig.scala [171:197]
def automaticCodec(d: DependencyConfig): JsonCodec[DependencyConfig] =
moped.macros.deriveCodec(d)
val automaticCodec: JsonCodec[DependencyConfig] =
automaticCodec(default)
implicit val codec: JsonCodec[DependencyConfig] =
new JsonCodec[DependencyConfig] {
def decode(context: DecodingContext): Result[DependencyConfig] = {
context.json match {
case FromJsonString(dep) => ValueResult(dep)
case obj: JsonObject =>
obj.value.get("dependency") match {
case Some(FromJsonString(dep)) =>
val newJson = JsonObject(
obj.members.filterNot(_.key.value == "dependency")
)
automaticCodec(dep).decode(context.withJson(newJson))
case _ =>
automaticCodec.decode(context)
}
case _ =>
automaticCodec.decode(context)
}
}
def encode(value: DependencyConfig): JsonElement =
automaticCodec.encode(value)
def shape: ClassShape = automaticCodec.shape
}