Instance Constructors
-
new
InternalTag
(fieldName: String, removeTagForSubcodec: Boolean)
Value Members
-
def
!=
(arg0: AnyRef): Boolean
-
def
!=
(arg0: Any): Boolean
-
def
##
(): Int
-
def
==
(arg0: AnyRef): Boolean
-
def
==
(arg0: Any): Boolean
-
def
asInstanceOf
[T0]
: T0
-
def
canEqual
(arg0: Any): Boolean
-
def
clone
(): AnyRef
-
def
eq
(arg0: AnyRef): Boolean
-
def
equals
(arg0: Any): Boolean
-
val
fieldName
: String
-
def
finalize
(): Unit
-
def
getClass
(): java.lang.Class[_]
-
def
hashCode
(): Int
-
def
isInstanceOf
[T0]
: Boolean
-
def
ne
(arg0: AnyRef): Boolean
-
def
notify
(): Unit
-
def
notifyAll
(): Unit
-
def
productArity
: Int
-
def
productElement
(arg0: Int): Any
-
def
productIterator
: Iterator[Any]
-
def
productPrefix
: String
-
val
removeTagForSubcodec
: Boolean
-
def
synchronized
[T0]
(arg0: ⇒ T0): T0
-
def
toString
(): String
-
def
wait
(): Unit
-
def
wait
(arg0: Long, arg1: Int): Unit
-
def
wait
(arg0: Long): Unit
-
def
productElements
: Iterator[Any]
Inherited from Serializable
Inherited from Serializable
Inherited from Product
Inherited from Equals
Inherited from AnyRef
Inherited from Any
Specifies that the base codec should add (and possibly remove) an extra field to the objects generated by the subclasses' JsonCodecs (and they must be objects).
abstract class Base case class SubclassA(name: String) extends Base case class SubclassB(x: Int, y: Int) extends Base implicit val aCodec = SimpleJsonCodecBuilder[SubclassA].build("name", _.name) implicit val bCodec = SimpleJsonCodecBuilder[SubclassB].build("x", _.x, "y", _.y) val baseCodec = SimpleHierarchyCodecBuilder[Base](InternalTag("type")). branch[SubclassA]("a"). branch[SubclassB]("b"). build println(baseCodec.encode(SubclassA("John"))) // { "type" : "a", "name" : "John" } println(baseCodec.encode(SubclassB(1, 2))) // { "type" : "b", "x" : 1, "y" : 2 }