Skip to content

Commit

Permalink
Fix generic record construction for fields with fieldName annotation
Browse files Browse the repository at this point in the history
  • Loading branch information
987Nabil committed Jun 27, 2024
1 parent e3ede68 commit 53f6093
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -330,9 +330,10 @@ object DeriveSchema {
}
}
val fromMap = {
val casts = fieldTypes.map { termSymbol =>
val casts = fieldTypes.zip(fieldAnnotations).map { case (termSymbol, annotations) =>
val newName = getFieldName(annotations).getOrElse(termSymbol.name.toString.trim)
q"""
try m.apply(${termSymbol.name.toString.trim}).asInstanceOf[${termSymbol.typeSignature}]
try m.apply(${newName}).asInstanceOf[${termSymbol.typeSignature}]
catch {
case _: ClassCastException => throw new RuntimeException("Field " + ${termSymbol.name.toString.trim} + " has invalid type")
case _: Throwable => throw new RuntimeException("Field " + ${termSymbol.name.toString.trim} + " is missing")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -814,7 +814,7 @@ object JsonCodec {
if (Lexer.firstField(trace, in)) {
while ({
val field = Lexer.string(trace, in).toString
structure.find(_.name == field) match {
structure.find(f => f.name == field || f.annotations.collectFirst{case fieldName(name) => name}.contains(field)) match {
case Some(Schema.Field(label, schema, _, _, _, _)) =>
val trace_ = JsonError.ObjectAccess(label) :: trace
Lexer.char(trace_, in, ':')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1906,7 +1906,7 @@ object JsonCodecSpec extends ZIOSpecDefault {
f20: Option[String] = None,
f21: Option[String] = None,
f22: Option[String] = None,
f23: Option[String] = None
@fieldName("$f23") f23: Option[String] = None
)

object RecordExample {
Expand Down

0 comments on commit 53f6093

Please sign in to comment.