diff --git a/derivation/src/main/scala/io/bullet/borer/derivation/MapBasedCodecs.scala b/derivation/src/main/scala/io/bullet/borer/derivation/MapBasedCodecs.scala index 73f40d9d..a5c5c872 100644 --- a/derivation/src/main/scala/io/bullet/borer/derivation/MapBasedCodecs.scala +++ b/derivation/src/main/scala/io/bullet/borer/derivation/MapBasedCodecs.scala @@ -166,7 +166,7 @@ object MapBasedCodecs { val key = p.key() val writeKey = q"w.${TermName(s"write${key.productPrefix}")}(${literal(key.value)})" val isBasic = basicParams contains p - val method = TermName(s"write${if (isBasic) p.paramType.tpe.toString else ""}") + val method = TermName(s"write${if (isBasic) p.paramType.tpe.dealias.toString else ""}") val rawWriteEntry = q"$writeKey.$method(value.${p.name})" if (isBasic) { if (p.defaultValueMethod.isDefined) q"if (${encName(p, "o")}) $rawWriteEntry" else rawWriteEntry @@ -251,7 +251,7 @@ object MapBasedCodecs { params.filterNot(p => p.isBasicType && decodersForParams(p).exists(isDefinedOn(_, decoderCompanion))) def readField(p: CaseParam) = { - val tpe = p.paramType.tpe + val tpe = p.paramType.tpe.dealias if (nonBasicParams contains p) q"r.read[$tpe]()(${decName(p)})" else q"r.${TermName(s"read$tpe")}()" } diff --git a/derivation/src/test/scala/io/bullet/borer/derivation/MiscSpec.scala b/derivation/src/test/scala/io/bullet/borer/derivation/MiscSpec.scala index a1b1e365..53247598 100644 --- a/derivation/src/test/scala/io/bullet/borer/derivation/MiscSpec.scala +++ b/derivation/src/test/scala/io/bullet/borer/derivation/MiscSpec.scala @@ -107,10 +107,18 @@ object MiscSpec extends AbstractBorerSpec { "Custom 'Unit' type" - { sealed trait Unit - implicit val unitDecoder: Decoder[Unit] = Decoder(_ => null) + implicit val unitDecoder: Decoder[Unit] = Decoder { r => r.readNull(); null } final case class Foo(value: Double, unit: Unit) implicit val fooDecoder: Decoder[Foo] = MapBasedCodecs.deriveDecoder + verifyDecoding("null", null) + } + + "Type alias" - { + type Foo = String + case class Bar(bar: Foo) + implicit val barCodec: Codec[Bar] = MapBasedCodecs.deriveCodec + roundTrip("""{"bar":"yeah"}""", Bar("yeah")) } } }