package decoders-sexplib

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file decode.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
open Decoders
open Sexplib0

module Sexplib_decodeable : Decode.Decodeable with type value = Sexp.t = struct
  type value = Sexp.t

  let pp fmt value =
    Format.fprintf fmt "@[%a@]"
      Sexp.pp_hum value

  let of_string (input : string) : (value, string) result =
    try Ok (Sexplib.Sexp.of_string input) with
    | Failure msg -> Error msg

  let of_file (file : string) : (value, string) result =
    try Ok (Sexplib.Sexp.load_sexp file) with
    | e -> Error (Printexc.to_string e)

  let try_get f value =
    try Some (f value) with
    | Sexp_conv.Of_sexp_error _ -> None

  let get_string = try_get Sexp_conv.string_of_sexp
  let get_int = try_get Sexp_conv.int_of_sexp
  let get_float = try_get Sexp_conv.float_of_sexp
  let get_null = try_get Sexp_conv.unit_of_sexp
  let get_bool = try_get Sexp_conv.bool_of_sexp

  let get_list = function
    | Sexp.List lst -> Some lst
    | _ -> None

  let get_key_value_pairs = function
    | Sexp.List lst ->
      lst |> Decoders_util.My_list.map (function
          | Sexp.List [key; value] -> Some (key, value)
          | Sexp.List (key :: values) -> Some (key, Sexp.List values)
          | _ -> None)
      |> Decoders_util.My_list.all_some
    | _ -> None

  let to_list values = Sexp.List values
end

include Decode.Make(Sexplib_decodeable)
OCaml

Innovation. Community. Security.