Skip to content

Default values not working with @key annotation in Scala 3 #360

@pharod

Description

@pharod
case class Person(
                     @key("first_name") firstName: String = "N/A",
                     @key("last_name") lastName: String)
object Person {
    implicit val rw: RW[Person] = macroRW
}

val json = """{"last_name": "Snow"}"""
val p = read[Person](json)

This code fragment executes with exception:

Exception in thread "main" java.lang.ExceptionInInitializerError
	at com.nitka.rb.RBSyncApp.main(RBSyncApp.scala)
Caused by: upickle.core.AbortException: missing keys in dictionary: first_name at index 20
	at ujson.CharParser$$anon$1.applyOrElse(CharParser.scala:343)
	at ujson.CharParser$$anon$1.applyOrElse(CharParser.scala:341)
	at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:35)
	at ujson.CharParser.liftedTree1$1(CharParser.scala:496)
	at ujson.CharParser.tryCloseCollection(CharParser.scala:496)
	at ujson.CharParser.parseNested(CharParser.scala:462)
	at ujson.CharParser.parseTopLevel0(CharParser.scala:323)
	at ujson.CharParser.parseTopLevel(CharParser.scala:307)
	at ujson.CharParser.parse(CharParser.scala:59)
	at ujson.StringParser$.transform(StringParser.scala:28)
	at ujson.StringParser$.transform(StringParser.scala:28)
	at ujson.Readable$fromTransformer.transform(Readable.scala:13)
	at upickle.Api.read$$anonfun$1(Api.scala:37)
	at upickle.core.TraceVisitor$.withTrace(TraceVisitor.scala:18)
	at upickle.Api.read(Api.scala:37)
	at upickle.Api.read$(Api.scala:17)
	at upickle.default$.read(Api.scala:133)
	at com.nitka.rb.RBSyncApp$.<clinit>(RBSyncApp.scala:76)
	... 1 more
Caused by: upickle.core.Abort: missing keys in dictionary: first_name
	at com.nitka.rb.RBSyncApp$$anon$1.make(RBSyncApp.scala:72)
	at com.nitka.rb.RBSyncApp$$anon$1.make(RBSyncApp.scala:72)
	at upickle.implicits.CaseClassReaderPiece$$anon$1.visitEnd(CaseClassReader.scala:30)
	... 16 more

Reproduced with uPickle version 1.4.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions