arainko / ducktape

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 🤔
https://arainko.github.io/ducktape/
Other
402 stars 8 forks source link

Regional configs #109

Closed arainko closed 8 months ago

arainko commented 8 months ago
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"))