Codec.Json.Bidirectional.Value
- Package
- purescript-json-codecs
- Repository
- jordanmartinez/purescript-json-codecs
Codecs in this module follow a naming convention:
- the
j
prefix indicates a primitive JSON codec (e.g.null
,number
,boolean
,string``,
array, and
object`) - the type's name is used to refer to the codec for that type except in two cases:
- when the name clashes with a commonly used function/value, the
Codec
suffix is added:identity
forIdentity
becomesidentityCodec
void
forVoid
becomesvoidCodec
map
forMap
becomesmapCodec
- when a buildler-like API is needed, the
Prim
suffix is addedobject
andobjectPrim
record
andrecordPrim
variant
andvariantPrim
- when the name clashes with a commonly used function/value, the
#nonEmptyString Source
nonEmptyString :: forall e extra. JsonCodec e extra NonEmptyString
#indexedArray Source
indexedArray :: forall e extra a. JIndexedCodec e extra a -> JsonCodec e extra a
#nonEmptyArray Source
nonEmptyArray :: forall e extra a. JsonCodec e extra a -> JsonCodec e extra (NonEmptyArray a)
#objectPrim Source
objectPrim :: forall e extra a. JPropCodec e extra a -> JsonCodec e extra a
#fieldRequired Source
fieldRequired :: forall e extra a. String -> JsonCodec e extra a -> JPropCodec e extra a
#fieldOptional Source
fieldOptional :: forall e extra a. String -> JsonCodec e extra a -> JPropCodec e extra (Maybe a)
#record Source
record :: forall e extra rl codecs to. RowToList codecs rl => InsertRequiredPropCodecs e extra rl codecs () to => Record codecs -> JsonCodec e extra (Record to)
Codec for records where all fields are required and
the JSON object's order of fields doesn't matter
when using this codec to encode a value to JSON.
If some fields are optional or the order matters,
see recordPrim
.
record
{ requiredFieldName1: pje $ string
, requiredFieldName2: pje $ array int
}
#recordPrim Source
recordPrim :: forall e extra a. (JPropCodec e extra (Record ()) -> JPropCodec e extra a) -> JsonCodec e extra a
Codec builder for records where the field order matters
when encoding JSON, and the underlying JSON object
may contain optional fields. If order doesn't matter and
all fields are required, see record
.
-- Order of fields is based on alphabetical ordering of labels
recordPrim $
requiredProps
{ requiredFieldName1: pje $ string
, requiredFieldName2: pje $ array int
}
>>> optionalProps
{ optionalFieldName1: pje $ string
, optionalFieldName2: pje $ array int
}
-- Order of fields is based on order below
recordPrim $
requiredProp (Proxy :: _ "requiredFieldName1") (pje $ string)
>>> optionalProp (Proxy :: _ "optionalFieldName2") (pje $ array int)
>>> optionalProp (Proxy :: _ "optionalFieldName1") (pje $ string)
>>> requiredProp (Proxy :: _ "requiredFieldName2") (pje $ array int)
#requiredProp Source
requiredProp :: forall e extra sym a r r'. IsSymbol sym => Cons sym a r r' => Proxy sym -> JsonCodec e extra a -> JPropCodec e extra (Record r) -> JPropCodec e extra (Record r')
See recordPrim
#requiredProps Source
requiredProps :: forall e extra rl codecs from to. RowToList codecs rl => InsertRequiredPropCodecs e extra rl codecs from to => Record codecs -> (JPropCodec e extra (Record from) -> JPropCodec e extra (Record to))
See recordPrim
#optionalProp Source
optionalProp :: forall e extra sym a r r'. IsSymbol sym => Cons sym (Maybe a) r r' => Proxy sym -> JsonCodec e extra a -> JPropCodec e extra (Record r) -> JPropCodec e extra (Record r')
See recordPrim
#optionalProps Source
optionalProps :: forall e extra rl codecs from to. RowToList codecs rl => InsertOptionalPropCodecs e extra rl codecs from to => Record codecs -> (JPropCodec e extra (Record from) -> JPropCodec e extra (Record to))
See recordPrim
#variant Source
variant :: forall e extra rows rl out. RowToList rows rl => VariantJsonCodec e extra rl rows out => DecodeErrorAccumulatorFn e extra (Object Json) (Variant out) -> Record rows -> JsonCodec e extra (Variant out)
Codec for Variant
where the order of the handlers
(e.g. which tag is checked first) does not matter.
If that is not the case, see variantPrim
.
variant
{ tag1: pje $ string
, tag2: pje $ array int
}
#variantPrim Source
variantPrim :: forall e extra rows. DecodeErrorAccumulatorFn e extra (Object Json) (Variant rows) -> ((DecodeErrorAccumulatorFn e extra (Object Json) (Variant ()) -> JsonCodec' e extra (Object Json) (Variant ())) -> (DecodeErrorAccumulatorFn e extra (Object Json) (Variant rows) -> JsonCodec' e extra (Object Json) (Variant rows))) -> JsonCodec e extra (Variant rows)
Codec for Variant
where the order of the handlers
(e.g. which tag is checked first) DOES matter.
If that is not the case and you want simpler syntax,
see variant
.
variantPrim $
variantCase (Proxy :: _ "tag2") (Tuple (addCtorHintC "SomeCtorWithArg") $ Right $ pje $ array int)
>>> variantCase (Proxy :: _ "tag1") (Tuple (addCtorHintC "SomeCtorNoArg") $ Left unit)
#variantCase Source
variantCase :: forall e extra sym a tail row. IsSymbol sym => Cons sym a tail row => Proxy sym -> Tuple (JsonCodec' e extra (Object Json) (Variant row) -> JsonCodec' e extra (Object Json) (Variant row)) (Either a (JsonCodec e extra a)) -> ((DecodeErrorAccumulatorFn e extra (Object Json) (Variant tail) -> JsonCodec' e extra (Object Json) (Variant tail)) -> (DecodeErrorAccumulatorFn e extra (Object Json) (Variant row) -> JsonCodec' e extra (Object Json) (Variant row)))
See variantPrim
.
#identityCodec Source
identityCodec :: forall e extra a. JsonCodec e extra a -> JsonCodec e extra (Identity a)
#nonEmptyList Source
nonEmptyList :: forall e extra a. JsonCodec e extra a -> JsonCodec e extra (NonEmptyList a)
#nonEmptySet Source
nonEmptySet :: forall e extra a. Ord a => JsonCodec e extra a -> JsonCodec e extra (NonEmptySet a)
#InsertRequiredPropCodecs Source
class InsertRequiredPropCodecs :: Type -> Type -> RowList Type -> Row Type -> Row Type -> Row Type -> Constraint
class InsertRequiredPropCodecs e extra rl codecs from to | e extra rl -> codecs from to where
Members
insertRequiredPropCodecs :: RlJCodec e extra rl codecs -> (JPropCodec e extra (Record from) -> JPropCodec e extra (Record to))
Instances
InsertRequiredPropCodecs e extra Nil () same same
(Cons sym (JsonCodec e extra a) codecRows' codecRows, InsertRequiredPropCodecs e extra tail codecRows' start from, Cons sym a from to, IsSymbol sym) => InsertRequiredPropCodecs e extra (Cons sym (JsonCodec e extra a) tail) codecRows start to
#InsertOptionalPropCodecs Source
class InsertOptionalPropCodecs :: Type -> Type -> RowList Type -> Row Type -> Row Type -> Row Type -> Constraint
class InsertOptionalPropCodecs e extra rl codecs from to | e extra rl -> codecs from to where
Members
insertOptionalPropCodecs :: RlJCodec e extra rl codecs -> (JPropCodec e extra (Record from) -> JPropCodec e extra (Record to))
Instances
InsertOptionalPropCodecs e extra Nil () same same
(Cons sym (JsonCodec e extra a) codecRows' codecRows, InsertOptionalPropCodecs e extra tail codecRows' start from, Cons sym (Maybe a) from to, IsSymbol sym) => InsertOptionalPropCodecs e extra (Cons sym (JsonCodec e extra a) tail) codecRows start to
#VariantJsonCodec Source
class VariantJsonCodec :: Type -> Type -> RowList Type -> Row Type -> Row Type -> Constraint
class VariantJsonCodec e extra rowlist row out | e extra rowlist -> row out where
Members
variantJsonCodec :: RlRecord e extra rowlist row -> ((DecodeErrorAccumulatorFn e extra (Object Json) (Variant ()) -> JsonCodec' e extra (Object Json) (Variant ())) -> (DecodeErrorAccumulatorFn e extra (Object Json) (Variant out) -> JsonCodec' e extra (Object Json) (Variant out)))
Instances
VariantJsonCodec e extra Nil () ()
(Cons sym (Tuple (JsonCodec' e extra (Object Json) (Variant out) -> JsonCodec' e extra (Object Json) (Variant out)) (Either a (JsonCodec e extra a))) codecRows' codecRows, VariantJsonCodec e extra tail codecRows' out', Cons sym a out' out, IsSymbol sym) => VariantJsonCodec e extra (Cons sym (Tuple (JsonCodec' e extra (Object Json) (Variant out) -> JsonCodec' e extra (Object Json) (Variant out)) (Either a (JsonCodec e extra a))) tail) codecRows out
- Modules
- Codec.
Codec - Codec.
Decoder - Codec.
Decoder. Qualified - Codec.
Json. Bidirectional. Class - Codec.
Json. Bidirectional. Value - Codec.
Json. Errors. AnsiDodoError - Codec.
Json. Errors. DecodeMessages - Codec.
Json. Errors. NoError - Codec.
Json. Errors. PlainDodoError - Codec.
Json. Errors. PrimitiveJsonError - Codec.
Json. Errors. Tree - Codec.
Json. JsonCodec - Codec.
Json. JsonDecoder - Codec.
Json. Newtypes - Codec.
Json. Types - Codec.
Json. Unidirectional. Decode. Class - Codec.
Json. Unidirectional. Decode. Value - Codec.
Json. Unidirectional. Encode. Class - Codec.
Json. Unidirectional. Encode. Value - Data.
V. Semigroup. Qualified