trait MutableSchemaBasedValueBuilder[Target, Context] extends AnyRef

Base trait for mutable builders producing a value based on a schema, such as codec decoders.

The implementation is stack safe and consists of a series of invocations of the protected methods the trait defines. Maintaining the state of the builder, such as stream position etc. is the responsibility of the implementation class via mutable state.

The Target type parameter is the base type for the generated values - this in many cases can be Any but potentially could be used to track errors in value level as well - although failure in the context handler manipulation methods cannot be expressed this way.

The Context type parameter is a use-case dependent type that is managed in a stack during the execution of the builder. The implementation can generate new context values for the value's subtrees and it can be used to track local state required for gathering all information for the value to be created. The current context value is also propagated to any exception thrown so it can be used to provide detailed location information for decoder errors.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. MutableSchemaBasedValueBuilder
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Abstract Value Members

  1. abstract def createDictionary(context: Context, schema: Map[_, _], values: Chunk[(Target, Target)]): Target

    Creates the dictionary value from the chunk of key-value pairs

    Creates the dictionary value from the chunk of key-value pairs

    Attributes
    protected
  2. abstract def createDynamic(context: Context): Option[Target]

    Creates a Dynamic value.

    Creates a Dynamic value. If the returned value is None, it indicates that the builder does not have any built-in support for Dynamic values, and it will be built using Dynamic's schema.

    Attributes
    protected
  3. abstract def createEither(context: Context, schema: Either[_, _], value: Either[Target, Target]): Target

    Create the either value from an inner value

    Create the either value from an inner value

    Attributes
    protected
  4. abstract def createEnum(context: Context, cases: Chunk[Case[_, _]], index: Int, value: Target): Target

    Creates an enum value from the read constructor value

    Creates an enum value from the read constructor value

    Attributes
    protected
  5. abstract def createOptional(context: Context, schema: Optional[_], value: Option[Target]): Target

    Creates the optional value from the inner value

    Creates the optional value from the inner value

    Attributes
    protected
  6. abstract def createPrimitive(context: Context, typ: StandardType[_]): Target

    Creates a primitive value of the given standard type

    Creates a primitive value of the given standard type

    Attributes
    protected
  7. abstract def createRecord(context: Context, record: Record[_], values: Chunk[(Int, Target)]): Target

    Creates a record value from the gathered field values

    Creates a record value from the gathered field values

    Attributes
    protected
  8. abstract def createSequence(context: Context, schema: Sequence[_, _, _], values: Chunk[Target]): Target

    Creates the sequence value from the chunk of element values

    Creates the sequence value from the chunk of element values

    Attributes
    protected
  9. abstract def createSet(context: Context, schema: Set[_], values: Chunk[Target]): Target

    Creates the set value from the chunk of element values

    Creates the set value from the chunk of element values

    Attributes
    protected
  10. abstract def createTuple(context: Context, schema: Tuple2[_, _], left: Target, right: Target): Target

    Creates the tuple from the constructed first and second values

    Creates the tuple from the constructed first and second values

    Attributes
    protected
  11. abstract def fail(context: Context, message: String): Target

    Fail the builder with the given message

    Fail the builder with the given message

    Attributes
    protected
  12. abstract def finishedCreatingOneDictionaryElement(context: Context, schema: Map[_, _], index: Int): Boolean

    Called after constructing a single dictionary element.

    Called after constructing a single dictionary element. The context is the context of the whole dictionary. If the returned value is true, a next element will be read otherwise the dictionary is completed and createDictionary is called.

    Attributes
    protected
  13. abstract def finishedCreatingOneSequenceElement(context: Context, schema: Sequence[_, _, _], index: Int): Boolean

    Called after constructing a single sequence element.

    Called after constructing a single sequence element. The context is the context of the whole sequence. If the returned value is true, a next element will be read otherwise the sequence is completed and createSequence is called.

    Attributes
    protected
  14. abstract def finishedCreatingOneSetElement(context: Context, schema: Set[_], index: Int): Boolean

    Called after constructing a single set element.

    Called after constructing a single set element. The context is the context of the whole set. If the returned value is true, a next element will be read otherwise the set is completed and createSet is called.

    Attributes
    protected
  15. abstract val initialContext: Context

    The initial (top-level) context value

    The initial (top-level) context value

    Attributes
    protected
  16. abstract def startCreatingDictionary(context: Context, schema: Map[_, _]): Option[Context]

    The next value to build is a dictionary.

    The next value to build is a dictionary. If the returned value is None, the builder creates an empty dictionary, otherwise it calls startCreatingOneDictionaryElement, startCreatingOneDictionaryValue and finishedCreatingOneDictionaryElement for each element with the returned context.

    Attributes
    protected
  17. abstract def startCreatingEither(context: Context, schema: Either[_, _]): Either[Context, Context]

    The next value to be created is an either value with the given schema.

    The next value to be created is an either value with the given schema. Similarly to optional values, this method is responsible for gathering enough information to decide whether the created value will be a Left or a Right. The result value represents this, and for each case allows specifying a context that will be used to create the inner value.

    Attributes
    protected
  18. abstract def startCreatingEnum(context: Context, cases: Chunk[Case[_, _]]): (Context, Int)

    The next value to build is an enum with the given schema

    The next value to build is an enum with the given schema

    Attributes
    protected
  19. abstract def startCreatingOneDictionaryElement(context: Context, schema: Map[_, _]): Context

    Called before constructing a next dictionary element.

    Called before constructing a next dictionary element. The returned context is used for constructing that single element's key.

    Attributes
    protected
  20. abstract def startCreatingOneDictionaryValue(context: Context, schema: Map[_, _]): Context

    Called after the key of a single element was created, before the value gets created.

    Called after the key of a single element was created, before the value gets created. The returned context is for constructing the element's value part.

    Attributes
    protected
  21. abstract def startCreatingOneSequenceElement(context: Context, schema: Sequence[_, _, _]): Context

    Called before constructing a next sequence element.

    Called before constructing a next sequence element. The returned context is used for constructing that single element.

    Attributes
    protected
  22. abstract def startCreatingOneSetElement(context: Context, schema: Set[_]): Context

    Called before constructing a next set element.

    Called before constructing a next set element. The returned context is used for constructing that single element.

    Attributes
    protected
  23. abstract def startCreatingOptional(context: Context, schema: Optional[_]): Option[Context]

    The next value to be created is an optional value.

    The next value to be created is an optional value. If the result is None, the optional value created will be None. If it is a context, that context will be used to create the optional value.

    Attributes
    protected
  24. abstract def startCreatingRecord(context: Context, record: Record[_]): Context

    The next value to build is a record with the given schema

    The next value to build is a record with the given schema

    Attributes
    protected
  25. abstract def startCreatingSequence(context: Context, schema: Sequence[_, _, _]): Option[Context]

    The next value to build is a sequence.

    The next value to build is a sequence. If the returned value is None, the builder creates an empty sequence, otherwise it calls startCreatingOneSequenceElement and finishedCreatingOneSequenceElement for each element with the returned context.

    Attributes
    protected
  26. abstract def startCreatingSet(context: Context, schema: Set[_]): Option[Context]

    The next value to build is a set.

    The next value to build is a set. If the returned value is None, the builder creates an empty set, otherwise it calls startCreatingOneSetElement and finishedCreatingOneSetElement for each element with the returned context.

    Attributes
    protected
  27. abstract def startCreatingTuple(context: Context, schema: Tuple2[_, _]): Context

    The next value to be created is a tuple with the given schema.

    The next value to be created is a tuple with the given schema. The returned context is used to construct the first element of the tuple.

    Attributes
    protected
  28. abstract def startReadingField(context: Context, record: Record[_], index: Int): Option[(Context, Int)]

    Called for each field of a record.

    Called for each field of a record. The resulting tuple is either None indicating there are no more fields to read, or it contains an updated context belonging to the field and the next field's index in the schema. This allows the implementation to instantiate fields in a different order than what the schema defines.

    The index parameter is a 0-based index, incremented by one for each field read within a record.

    Attributes
    protected
  29. abstract def startReadingSecondTupleElement(context: Context, schema: Tuple2[_, _]): Context

    Called after finished constructing the first element, before constructing the second.

    Called after finished constructing the first element, before constructing the second. The returned context is used to construct the second value.

    Attributes
    protected
  30. abstract def transform(context: Context, value: Target, f: (Any) => Either[String, Any], schema: Schema[_]): Target

    Transforms a value with the given function that can fail.

    Transforms a value with the given function that can fail. Making this customizable allows encoding the failure in Target.

    Attributes
    protected

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  6. def create[A](schema: Schema[A]): Target

    Create a value of type A with the provided schema using this builder

  7. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  8. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  9. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  10. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  11. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  12. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  13. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  14. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  15. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  16. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  17. def toString(): String
    Definition Classes
    AnyRef → Any
  18. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  19. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  20. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from AnyRef

Inherited from Any

Ungrouped