1 module D
= Decoders_ezjsonm.Decode
6 match time
|> Ptime.of_rfc3339
|> Ptime.rfc3339_error_to_msg
with
7 | Ok
(t
, _
, _
) -> succeed t
8 | Error `Msg err
-> fail err
10 let singleton_or_list dec
=
11 D.(one_of
["singleton", (dec
>|= fun v
-> [v
]);
13 "null", null
>|= fun () -> []])
15 let lossy_list_of dec
=
17 list
(one_of
["known", (dec
>|= fun v
-> `Value v
)(*; "unknown", value >|= fun v -> `Raw v*)])
20 let constant ?msg target
=
23 if String.equal str target
26 | None
-> fail
(Printf.sprintf
"expected %s received %s" target str
)
27 | Some msg
-> fail
(Printf.sprintf msg str
)
29 let field_or_default field' decoder default
=
31 let+ field
= field_opt field' decoder
in
32 Option.value ~default field
34 let list_ignoring_unknown ty
=
36 list
(maybe ty
) >|= fun v
-> List.filter_map
Fun.id v
42 let* items = field
"orderedItems" (list obj
) in
43 succeed
(true, items));
45 let* items = field
"items" (list obj
) in
46 succeed
(false, items)