Automatic and customizable compile time transformations between similar case classes and sealed traits/enums, essentially a thing that glues your code. Scala 3 only. Or is it duct 🤔
add support for for 'regional' configs, eg. Field.fallbackToNone and Field.fallbackToDefault with an additional .regional combinator (eg. Field.fallbackToDefault.regional(_.level1) which means that the defaults for missing fields will be only applied for things on the same level and 'below' the thing the user specifies)
final case class SourceToplevel(level1: SourceLevel1)
final case class SourceLevel1(str: String)
final case class DestToplevel(extra: Int = 111, level1: DestLevel1)
final case class DestLevel1(extra: String = "level1", str: String)
val source = SourceToplevel(SourceLevel1("str"))
source
.into[DestToplevel]
.transform(
Field.fallbackToDefault.regional(_.level1),
Field.const(_.extra, 123)
)
// will return DestToplevel(123, DestLevel1("level1", "str"))
source
.into[DestToplevel]
.transform(
Field.fallbackToDefault
)
// will return DestToplevel(111, DestLevel1("level1", "str"))
Field.fallbackToNone
andField.fallbackToDefault
with an additional.regional
combinator (eg.Field.fallbackToDefault.regional(_.level1)
which means that the defaults for missing fields will be only applied for things on the same level and 'below' the thing the user specifies)