Product types are disambiguated by a (:key value ...)
.
Product types are disambiguated by an extra layer containing a single key which is the name of the type of product contained in the value.
Sometimes the wire format needs to match an existing format and
SexpNil
behaviour needs to be customised.
a SexpFormat[HList]
or SexpFormat[Coproduct]
would not retain the
type information for the full generic that it is serialising.
a SexpFormat[HList]
or SexpFormat[Coproduct]
would not retain the
type information for the full generic that it is serialising.
This allows us to pass the wrapped type, achieving: 1) custom
CoproductHint
s on a per-trait level 2) configurable null
behaviour
on a per product level 3) clearer error messages.
This is intentionally not an SexpFormat
to avoid ambiguous
implicit errors, even though it implements its interface.
All values serialising to SexpNil
will be included in the wire format.
No values serialising to SexpNil
will be included in the wire format.
Format for LabelledGenerics
that uses the HList
or Coproduct
marshaller above.
Format for LabelledGenerics
that uses the HList
or Coproduct
marshaller above.
Blah.Aux[T, Repr]
is a trick to work around scala compiler
constraints. We'd really like to have only one type parameter
(T
) implicit list g: LabelledGeneric[T], f:
Cached[Strict[SexpFormat[T.Repr]]]
but that's not possible.
Automatically create product/coproduct marshallers (i.e. families of sealed traits and case classes/objects) for s-express.
This uses s-expression data as the underlying format, as opposed to alists. Alists are arguably a better wire format because they allow for arbitrarily complex keys, but we're applying the Principle of Least Power.
Based on spray-json-shapeless, with the same caveats.