Data.Codec.Argonaut.Compat
- Package
- purescript-codec-argonaut
- Repository
- garyb/purescript-codec-argonaut
Codecs that are compatible with purescript-argonaut-codecs
.
Re-exports from Data.Codec.Argonaut
#JsonDecodeError Source
data JsonDecodeError
Error type for failures while decoding.
Constructors
TypeMismatch String
UnexpectedValue Json
AtIndex Int JsonDecodeError
AtKey String JsonDecodeError
Named String JsonDecodeError
MissingValue
Instances
#JsonCodec Source
type JsonCodec a = BasicCodec (Either JsonDecodeError) Json a
Codec type for Json
values.
#JPropCodec Source
type JPropCodec a = Codec (Either JsonDecodeError) JObject (List JAssoc) a a
Codec type for JObject
prop/value pairs.
#JIndexedCodec Source
type JIndexedCodec a = Codec (Either JsonDecodeError) JArray (List Json) a a
Codec type for specifically indexed JArray
elements.
#recordProp Source
recordProp :: forall r' r a p. IsSymbol p => RowCons p a r r' => SProxy p -> JsonCodec a -> JPropCodec (Record r) -> JPropCodec (Record r')
Used with record
to define codecs for record types that encode into JSON
objects of the same shape. See the comment on record
for an example.
#record Source
record :: JPropCodec (Record ())
The starting value for a object-record codec. Used with recordProp
it
provides a convenient method for defining codecs for record types that
encode into JSON objects of the same shape.
For example:
myRecordCodec =
object "MyRecord" $ record
# recordProp (SProxy :: SProxy "tag") tagCodec
# recordProp (SProxy :: SProxy "value") valueCodec
#prop Source
prop :: forall a. String -> JsonCodec a -> JPropCodec a
A codec for a property of an object.
#printJsonDecodeError Source
printJsonDecodeError :: JsonDecodeError -> String
Prints a JsonDecodeError
as a somewhat readable error message.
#object Source
object :: forall a. String -> JPropCodec a -> JsonCodec a
A codec for objects that are encoded with specific properties.
#indexedArray Source
indexedArray :: forall a. String -> JIndexedCodec a -> JsonCodec a
A codec for types that are encoded as an array with a specific layout.
For example, given that we'd like to encode a Person as a 2-element array,
like so [ "Karl", 25 ]
, we could write the following codec:
type Person = { name ∷ String, age ∷ Int }
JA.indexedArray "Test Object" $
{ name: _, age: _ }
<$> _.name ~ index 0 JA.string
<*> _.age ~ index 1 JA.int
#index Source
index :: forall a. Int -> JsonCodec a -> JIndexedCodec a
A codec for an item in an indexedArray
.
#(~) Source
Operator alias for Data.Profunctor.lmap (left-associative / precedence 5)
GCodec
is defined as a Profunctor
so that lmap
can be used to target
specific fields when defining a codec for a product type. This operator
is a convenience for that:
tupleCodec =
Tuple
<$> fst ~ fstCodec
<*> snd ~ sndCodec