Determines whether serialization format implemented by this Output
preserves particular arbitrary
"metadata" which is identified by InputMetadata which is usually an object
(e.g.
Determines whether serialization format implemented by this Output
preserves particular arbitrary
"metadata" which is identified by InputMetadata which is usually an object
(e.g. companion object of metadata value type T
).
An example of InputMetadata is
JsonType supported by
JsonStringOutput.
If this method returns true
then codec may optimize its encoded format and assume that a corresponding
Input
implementation will return a non-empty Opt
from its readMetadata
implementation when passed the
same InputMetadata identifier.
If this method returns false
then this Output
does not support this
medatata type and codec should fall back to some other serialization strategy.
This ugly workaround has been introduced when standard Option
encoding changed from zero-or-one element list
encoding to unwrapped-or-null encoding which effectively disallowed serializing null
and Some(null)
.
This ugly workaround has been introduced when standard Option
encoding changed from zero-or-one element list
encoding to unwrapped-or-null encoding which effectively disallowed serializing null
and Some(null)
.
If some Output
implementation still wants to use the list encoding, it may do it by overriding this method
and returning true
.
Attempts to write some arbitrary custom "native" value that this output may or may not support.
Attempts to write some arbitrary custom "native" value that this output may or may not support.
The custom type is identified by an instance of TypeMarker
which is usually an object (e.g. companion
object of the custom T
type itself). This way Input
and Output
implementations may support other
native types than the ones supported by default by Input
and Output
interfaces.
Codecs may use this method to optimize encoded format in case it it possible with particular Output
implementation. GenCodec
may generally assume that if this method returns true
then corresponding
Input
will return a non-empty Opt
from readCustom
method.
false
returned by this method indicates that this output does not support this particular type.
In such situation the codec must fall back to some other strategy. If the native type is supported but there was
some error writing it then a WriteFailure
should be thrown instead of returning false
.