final case class Discriminated[X, D](codec: Codec[D], framing: CodecTransformation) extends Product with Serializable
Wrapper class that indicates subtypes of X
are discriminated by type D
using the supplied Codec[D]
.
For example, an implicit Discriminated
value can be defined in the companion
of a sealed trait, along with implicit Discriminator
values in each subtype
companion. Given such implicits, a codec for the trait can be automatically
derived using Codec[X]
.
Contains an optional codec transformation, which is applied to every component codec before encoding/decoding. This allows common structure, e.g., size based framing, to be specified in one location.
For example, if each discriminated subtype is prefixed by a size field, the framing could be specified as:
Discriminated[X, D](uint, new CodecTransformation { def apply[Z](c: Codec[Z]) = variableSizeBytes(uint16, c) })
- X
type that can be discriminated by discriminator values of type
D
- D
value type that discriminates
Y
in context ofX
from other types using discriminators ofD
for some typeY
- Source
- Discriminated.scala
- Grouped
- Alphabetic
- By Inheritance
- Discriminated
- Serializable
- Product
- Equals
- AnyRef
- Any
- by ValueEnrichedWithTuplingSupport
- by TransformSyntax
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new Discriminated(codec: Codec[D])
- new Discriminated(codec: Codec[D], framing: CodecTransformation)
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##(): Int
- Definition Classes
- AnyRef → Any
- def +(other: String): String
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toany2stringadd[Discriminated[X, D]] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
- def ->[B](y: B): (Discriminated[X, D], B)
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toArrowAssoc[Discriminated[X, D]] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- val a: Discriminated[X, D]
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toValueEnrichedWithTuplingSupport[Discriminated[X, D]] performed by method ValueEnrichedWithTuplingSupport in scodec.codecs.
- Definition Classes
- ValueEnrichedWithTuplingSupport
- def as[B](implicit as: Transformer[D, B]): Discriminated[X, B]
Transforms using implicitly available evidence that such a transformation is possible.
Transforms using implicitly available evidence that such a transformation is possible.
Typical transformations include converting:
- an
F[L]
for someL <: HList
to/from anF[CC]
for some case classCC
, where the types in the case class are aligned with the types inL
- an
F[C]
for someC <: Coproduct
to/from anF[SC]
for some sealed classSC
, where the component types in the coproduct are the leaf subtypes of the sealed class.
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- an
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def bind[Y <: X](discriminator: D)(implicit ev: =:!=[Y, X]): Discriminator[X, Y, D]
Binds the discriminator value
D
to typeY
. - def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- val codec: Codec[D]
- def ensuring(cond: (Discriminated[X, D]) => Boolean, msg: => Any): Discriminated[X, D]
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toEnsuring[Discriminated[X, D]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: (Discriminated[X, D]) => Boolean): Discriminated[X, D]
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toEnsuring[Discriminated[X, D]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean, msg: => Any): Discriminated[X, D]
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toEnsuring[Discriminated[X, D]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- def ensuring(cond: Boolean): Discriminated[X, D]
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toEnsuring[Discriminated[X, D]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def exmap[B](f: (D) => Attempt[B], g: (B) => Attempt[D]): Discriminated[X, B]
Transforms using two functions,
A => Attempt[B]
andB => Attempt[A]
.Transforms using two functions,
A => Attempt[B]
andB => Attempt[A]
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- def exmapc[B](f: (D) => Attempt[B])(g: (B) => Attempt[D]): Discriminated[X, B]
Curried version of
exmap
.Curried version of
exmap
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- def formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toStringFormat[Discriminated[X, D]] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
- val framing: CodecTransformation
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def narrow[B](f: (D) => Attempt[B], g: (B) => D): Discriminated[X, B]
Transforms using two functions,
A => Attempt[B]
andB => A
.Transforms using two functions,
A => Attempt[B]
andB => A
.The supplied functions form an injection from
B
toA
. Hence, this method converts from a larger to a smaller type. Hence, the namenarrow
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- def narrowc[B](f: (D) => Attempt[B])(g: (B) => D): Discriminated[X, B]
Curried version of
narrow
.Curried version of
narrow
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- 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()
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- val self: Discriminated[X, D]
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- def widen[B](f: (D) => B, g: (B) => Attempt[D]): Discriminated[X, B]
Transforms using two functions,
A => B
andB => Attempt[A]
.Transforms using two functions,
A => B
andB => Attempt[A]
.The supplied functions form an injection from
A
toB
. Hence, this method converts from a smaller to a larger type. Hence, the namewiden
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- def widenOpt[B](f: (D) => B, g: (B) => Option[D]): Discriminated[X, B]
Transforms using two functions,
A => B
andB => Option[A]
.Transforms using two functions,
A => B
andB => Option[A]
.Particularly useful when combined with case class apply/unapply. E.g.,
widenOpt(fa, Foo.apply, Foo.unapply)
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- def widenOptc[B](f: (D) => B)(g: (B) => Option[D]): Discriminated[X, B]
Curried version of
widenOpt
.Curried version of
widenOpt
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- def widenc[B](f: (D) => B)(g: (B) => Attempt[D]): Discriminated[X, B]
Curried version of
widen
.Curried version of
widen
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- def xmap[B](f: (D) => B, g: (B) => D): Discriminated[X, B]
Transforms using the isomorphism described by two functions,
A => B
andB => A
.Transforms using the isomorphism described by two functions,
A => B
andB => A
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- def xmapc[B](f: (D) => B)(g: (B) => D): Discriminated[X, B]
Curried version of
xmap
.Curried version of
xmap
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- def ~[B](b: B): (Discriminated[X, D], B)
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toValueEnrichedWithTuplingSupport[Discriminated[X, D]] performed by method ValueEnrichedWithTuplingSupport in scodec.codecs.
- Definition Classes
- ValueEnrichedWithTuplingSupport
Deprecated Value Members
- def pxmap[B](f: (D) => B, g: (B) => Option[D]): Discriminated[X, B]
Transforms using two functions,
A => B
andB => Option[A]
.Transforms using two functions,
A => B
andB => Option[A]
.Particularly useful when combined with case class apply/unapply. E.g.,
pxmap(fa, Foo.apply, Foo.unapply)
.- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toTransformSyntax[[D]Discriminated[X, D], D] performed by method TransformSyntax in scodec.This conversion will take place only if an implicit value of type Transform[[D]Discriminated[X, D]] is in scope.
- Definition Classes
- TransformSyntax
- Annotations
- @deprecated
- Deprecated
(Since version 1.7.0) Use widenOpt instead
- def →[B](y: B): (Discriminated[X, D], B)
- Implicit
- This member is added by an implicit conversion from Discriminated[X, D] toArrowAssoc[Discriminated[X, D]] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @deprecated
- Deprecated
(Since version 2.13.0) Use
->
instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.