To be used in conjunction with flatten.
It can be applied on one or more of case class fields in a sealed hierarchy to instruct the
auto-materialized GenCodec that this particular field may appear before _case field in the serialized format
during reading.
@flatten sealedtrait Base
caseclass FirstCase(@outOfOrder tag: String, int: Int) extends Base
caseclass SecondCase(dbl: Double) extends Base
object Base {
implicitval codec: GenCodec[Base] = GenCodec.materialize[Base]
}
The following JSON (assuming this is the representation used) would correctly deserialize as
FirstCase("someTag", 42):
Field annotated with @outOfOrder annotation doesn't have to be present in every case class, but if it is present,
all case classes must annotate it and give it exactly the same type. The annotation may also be inherited, e.g.
@flatten sealedtrait Base {
@outOfOrder def tag: String
}
caseclass FirstCase(tag: String, int: Int) extends Base
caseclass SecondCase(tag: String, dbl: Double) extends Base
To be used in conjunction with flatten. It can be applied on one or more of case class fields in a sealed hierarchy to instruct the auto-materialized
GenCodec
that this particular field may appear before_case
field in the serialized format during reading.The following JSON (assuming this is the representation used) would correctly deserialize as
FirstCase("someTag", 42)
:Field annotated with
@outOfOrder
annotation doesn't have to be present in every case class, but if it is present, all case classes must annotate it and give it exactly the same type. The annotation may also be inherited, e.g.