Codecs
There are two critical aspects to codecs, encode a data type to json, and decode a data type from json. Encoding is handled by theEncodeJson
type class.
Decoding is handled by the DecodeJson
type class.
Both can be defined at once using the CodecJson
type class.
EncodeJson
Defining an encode json instance is straight forward, you just need to provide a function that takes your type and produces a json object.
We also provide a set of very convenient methods for building EncodeJson instances.
DecodeJson
Defining a decode json instance is more involved, as you have to handle the chance of failure where you may not be able to decode your type.
DecodeJson
works on a HCursor. This
allows codecs to be combined whilst mainting efficiency and
tracking cursor movements for nice error messages.
Defining a DecodeJson
directly you need to build your data
type from a cursor and return a
DecodeResult.
We also provide a set of very convenient methods for building DecodeJson instances.
CodecJson
CodecJson allows you to construct both an encode and decode at the same time.
Defining a CodecJson
you pass two arguments, the first is as per EncodeJson
,
the second is as per DecodeJson
.
We also provide a set of very convenient methods for building CodecJson instances.