Library
Module
Module type
Parameter
Class
Class type
Derive decoders for a Decodeable.value
.
module M : Decodeable
type value = M.value
The type of values to be decoded (e.g. JSON or Yaml).
type error = value exposed_error
val pp_error : Format.formatter -> error -> unit
type 'a decoder = (M.value, 'a) exposed_decoder
The type of decoders.
Use the functions below to construct decoders for your data types.
To run a decoder, pass it to decode_value
.
val string : string decoder
Decode a string
.
val int : int decoder
Decode an int
.
val float : float decoder
Decode a float
.
val bool : bool decoder
Decode a bool
.
Decode a collection into an OCaml list, skipping elements for which the decoder returns None.
Decode an object, requiring exactly one field.
maybe d
is a decoder that always succeeds. If d
succeeds with x
, then maybe d
succeeds with Some x
, otherwise if d
fails, then maybe d
succeeds with None
.
For example, maybe (field "hello" int)
:
{"hello": 123}
, will succeed with Some 123
{"hello": null}
, will succeed with None
{"world": 123}
, will succeed with None
["a", "list", "of", "strings"]
, will succeed with None
nullable d
will succeed with None
if the JSON value is null
. If the JSON value is non-null
, it wraps the result of running x
in a Some
.
For example, field "hello" (nullable int)
:
{"hello": 123}
, will succeed with Some 123
{"hello": null}
, will succeed with None
{"world": 123}
, will fail["a", "list", "of", "strings"]
, will failTry two decoders and then combine the result. We can use this to decode objects with many fields (but it's preferable to use Infix.(>>=)
- see the README).
val keys : string list decoder
Decode all of the keys of an object to a list of strings.
Decode an object into a list of key-value pairs.
Decode an object into a list of values, where the value decoder depends on the key.
keys'
is for when your keys might not be strings - probably only likely for Yaml.
Decode an object into a String.Map.t
.
val succeed : 'a -> 'a decoder
A decoder that always succeeds with the argument, ignoring the input.
val fail : string -> 'a decoder
A decoder that always fails with the given message, ignoring the input.
Create decoders that depend on previous results.
Recursive decoders.
let my_decoder = fix (fun my_decoder -> ...)
allows you to define my_decoder
in terms of itself.
module Infix : sig ... end
module Pipeline : sig ... end