Codec.Json.Bidirectional.Value
- Package
- purescript-json-codecs
- Repository
- jordanmartinez/purescript-json-codecs
Codecs in this module follow a naming convention:
- the
jprefix indicates a primitive JSON codec (e.g.null,number,boolean,string,array, andobject) - 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
Codecsuffix is added:identityforIdentitybecomesidentityCodecvoidforVoidbecomesvoidCodecmapforMapbecomesmapCodec
- when a buildler-like API is needed, the
Primsuffix is addedobjectandobjectPrimrecordandrecordPrimvariantandvariantPrim
- 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 rows. (JPropCodec e extra (Record ()) -> JPropCodec e extra (Record rows)) -> JsonCodec e extra (Record rows)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 -> Constraintclass 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 -> Constraintclass 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 -> Constraintclass 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