package spin

  1. Overview
  2. Docs

Module Spin.DecoderSource

Sourcetype error =
  1. | Decoder_error of string * Sexplib0.Sexp.t option
  2. | Decoder_errors of error list
  3. | Decoder_tag of string * error
Sourcetype 'a t = Sexplib0.Sexp.t -> ('a, error) Spin_std.Result.t

Error handling

Sourceval pp_error : Format.formatter -> error -> unit

Pretty-print an error.

Sourceval string_of_error : error -> string

Convert an error to a string.

Loading s-expressions

Sourceval of_string : string -> (Sexplib0.Sexp.t, error) Spin_std.Result.t

Load an s-expression from a string.

Sourceval of_sexps_string : string -> (Sexplib0.Sexp.t, error) Spin_std.Result.t

Load a list of s-expression from a string.

Sourceval of_file : string -> (Sexplib0.Sexp.t, error) Spin_std.Result.t

Load an s-expression from a file.

Sourceval of_sexps_file : string -> (Sexplib0.Sexp.t, error) Spin_std.Result.t

Load a list of s-expression from a file.

Decoding primitives

Sourceval string : string t

Decode a string.

Sourceval int : int t

Decode an int.

Sourceval float : float t

Decode a float.

Sourceval bool : bool t

Decode a bool.

Sourceval null : unit t

Decode a null.

Helpers

Sourceval string_matching : regex:string -> err:string -> string t

Decoding lists

Sourceval list : 'a t -> 'a list t

Decode a collection into an OCaml list.

Decoding records

Sourceval field : string -> 'a t -> 'a t

Decode a record from the field with the given name.

This will fail with an error if the field could not be found. It will also fail if several fields exist with the same name. Use fields if you want to decode a list of fields.

Sourceval fields : string -> 'a t -> 'a list t

Decode a list of record from the fields with the given name.

It returns an empty list if no fields with the given name exist.

Sourceval field_opt : string -> 'a t -> 'a option t

Decode a record from the field with the given name.

This will return None if the field could not be found. It will fail if several fields exist with the same name. Use fields if you want to decode a list of fields.

Inconsistent structure

Sourceval one_of_opt : (string * 'a t) list -> 'a option t

Try a sequence of different decoders.

Sourceval one_of : (string * 'a t) list -> 'a t

Try a sequence of different decoders and return an error if none of them worked.

Monadic operations

Sourceval return : 'a -> 'a t

Lift decoder from a value.

Sourceval map : ('a -> 'b) -> 'a t -> 'b t

Map over the output of a decoder.

Sourceval bind : 'a t -> ('a -> 'b t) -> 'b t

Create decoders that depend on previous outputs.

Sourceval product : 'a t -> 'b t -> ('a * 'b) t

Try two decoders and then combine the Result.t. We can use this to decode objects with many fields

Sourcemodule Infix : sig ... end
include module type of Infix
Sourceval (>|=) : 'a t -> ('a -> 'b) -> 'b t
Sourceval (>>=) : 'a t -> ('a -> 'b t) -> 'b t
Sourceval (<*>) : ('a -> 'b) t -> 'a t -> 'b t
Sourcemodule Syntax : sig ... end
include module type of Syntax
Sourceval (let*) : 'a t -> ('a -> 'b t) -> 'b t
Sourceval (let+) : 'a t -> ('a -> 'b) -> 'b t
Sourceval (and+) : 'a t -> 'b t -> ('a * 'b) t

Running decoders

Sourceval decode_sexp : Sexplib0.Sexp.t -> 'a t -> ('a, error) Spin_std.Result.t

Run a decoder on some input.

Sourceval decode_string : string -> 'a t -> ('a, error) Spin_std.Result.t

Run a decoder on a string.

Sourceval decode_sexps_string : string -> 'a t -> ('a, error) Spin_std.Result.t

Run a decoder on a string containing a list of s-expression.

Sourceval decode_file : string -> 'a t -> ('a, error) Spin_std.Result.t

Run a decoder on a file.

Sourceval decode_sexps_file : string -> 'a t -> ('a, error) Spin_std.Result.t

Run a decoder on a file containing a list of s-expression.

OCaml

Innovation. Community. Security.