Jsont.ObjectMapping JSON objects.
The type for mapping JSON objects to values of type 'o. The 'dec type is used to construct 'o from members see mem.
val map : ?kind:string -> ?doc:string -> 'dec -> ('o, 'dec) mapmap dec is an empty JSON object decoded by function dec.
kind names the entities represented by the map and doc documents them. Both default to "".dec is a constructor eventually returning a value of type 'o to be saturated with calls to mem, case_mem or keep_unknown. This is needed for decoding. Use enc_only if the result is only used for encoding.val map' :
?kind:string ->
?doc:string ->
?enc_meta:('o -> Meta.t) ->
(Meta.t -> 'dec) ->
('o, 'dec) mapmap' dec is like map except you get the object's decoding metdata in dec and enc_meta is used to recover it on encoding.
enc_only () is like map' but can only be used for encoding.
finish map is a JSON type for objects mapped by map. Raises Invalid_argument if map describes a member name more than once.
module Mem : sig ... endMember maps.
val mem :
?doc:string ->
?dec_absent:'a ->
?enc:('o -> 'a) ->
?enc_omit:('a -> bool) ->
string ->
'a t ->
('o, 'a -> 'b) map ->
('o, 'b) mapmem name t map is a member named name of type t for an object of type 'o being constructed by map.
doc is a documentation string for the member. Defaults to "".dec_absent, if specified, is the value used for the decoding direction when the member named name is missing. If unspecified decoding errors when the member is absent. See also opt_mem and this example.enc is used to project the member's value from the object representation 'o for encoding to JSON with t. It can be omitted if the result is only used for decoding.enc_omit is for the encoding direction. If the member value returned by enc returns true on enc_omit, the member is omited in the encoded JSON object. Defaults to Fun.const false. See also opt_mem and this example.val opt_mem :
?doc:string ->
?enc:('o -> 'a option) ->
string ->
'a t ->
('o, 'a option -> 'b) map ->
('o, 'b) mapopt_mem name t map is:
let dec_absent = None and enc_omit = Option.is_none in
Jsont.Object.mem name (Jsont.some t) map ~dec_absent ~enc_omitA shortcut to represent optional members of type 'a with 'a option values.
Read the cookbook on case objects.
module Case : sig ... endCase objects.
val case_mem :
?doc:string ->
?tag_compare:('tag -> 'tag -> int) ->
?tag_to_string:('tag -> string) ->
?dec_absent:'tag ->
?enc:('o -> 'cases) ->
?enc_omit:('tag -> bool) ->
?enc_case:('cases -> ('cases, 'tag) Case.value) ->
string ->
'tag t ->
('cases, 'tag) Case.t list ->
('o, 'cases -> 'a) map ->
('o, 'a) mapcase_mem name t cases map is mostly like mem except the member name selects an object representation according to the member value of type t:
doc is a documentation string for the member. Defaults to "".tag_compare is used to compare tags. Defaults to Stdlib.comparetag_to_string is used to stringify tags for improving error reporting.dec_absent, if specified, is the case value used for the decoding direction when the case member named name is missing. If unspecified decoding errors when the member is absent.enc is used to project the value in which cases are stored from the object representation 'o for encoding to JSON. It can be omitted if the result is only used for decoding.enc_case determines the actual case value from the value returned by enc.enc_omit is used on the tag of the case returned by enc_case to determine if the case member can be ommited in the encoded JSON objectcases enumerates all the cases, it is needed for decoding.The names of the members of each case must be disjoint from name or those of map otherwise Invalid_argument is raised on finish. Raises Invalid_argument if case_mem was already called on map.
Read the cookbook on unknown object members.
On case objects each individual case has its own behaviour unless the combinators are used on the case object map in which case it overrides the behaviour of cases. For those cases that use keep_unknown they will get the result of an empty builder in their decoding function and the encoder is ignored on encode.
module Mems : sig ... endUniform members.
skip_unknown map makes map skip unknown members. This is the default, no need to specify it. Raises Invalid_argument if keep_unknown was already specified on map.
error_unknown map makes map error on unknown members. Raises Invalid_argument if keep_unknown was already specified on map. See this example.
val keep_unknown :
?enc:('o -> 'mems) ->
('mems, _, _) Mems.map ->
('o, 'mems -> 'a) map ->
('o, 'a) mapkeep_unknown mems map makes map keep unknown member with mems. Raises Invalid_argument if keep_unknown was already specified on map. See this this example, Mems.string_map and Jsont.json_mems.
as_string_map t maps object to key-value maps of type t. See also Mems.string_map and Jsont.json_mems.
val zero : unit tzero ignores JSON objects on decoding and encodes an empty object.