class outOfOrder extends Annotation with StaticAnnotation
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 sealed trait Base case class FirstCase(@outOfOrder tag: String, int: Int) extends Base case class SecondCase(dbl: Double) extends Base object Base { implicit val codec: GenCodec[Base] = GenCodec.materialize[Base] }
The following JSON (assuming this is the representation used) would correctly deserialize as
FirstCase("someTag", 42)
:
{"tag": "someTag", "_case": "FirstCase", "int": 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 sealed trait Base { @outOfOrder def tag: String } case class FirstCase(tag: String, int: Int) extends Base case class SecondCase(tag: String, dbl: Double) extends Base
The direct motivation for this annotation was the ability to use flatten on MongoDB entities with an _id
field.
When reading entities from MongoDB, the _id
field is always at the beginning of a BSON document and therefore
GenCodec
must be able to read it before it knows which case class of sealed hierarchy is being deserialized.
- Alphabetic
- By Inheritance
- outOfOrder
- StaticAnnotation
- Annotation
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new outOfOrder()
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )