package atdgen-codec-runtime

  1. Overview
  2. Docs
Runtime for atdgen generated bucklescript converters

Install

Dune Dependency

Authors

  1. M
    Martin Jambon <martin@mjambon.com>
  2. R
    Rudi Grinberg <rudi.grinberg@gmail.com>
  3. M
    Martin Jambon <martin@r2c.dev>
  4. M
    Martin Jambon <github@mjambon.com>
  5. I
    Ivan Jager <aij+git@mrph.org>
  6. O
    oleksiy <oleksiy.golovko@ahrefs.com>
  7. D
    David Sheets <sheets@alum.mit.edu>
  8. R
    Rudi Grinberg <me@rgrinberg.com>
  9. M
    Martin Jambon <martin@esper.com>
  10. J
    Jeff Meister <nanaki@gmail.com>
  11. C
    Caio Wakamatsu <caio.wakamatsu@ahrefs.com>
  12. C
    Carmelo Piccione <carmelo.piccione@gmail.com>
  13. D
    Daniel Weil <danweil68@gmail.com>
  14. E
    Egor Chemokhonenko <egor.chemohonenko@ahrefs.com>
  15. Gabriel Scherer
  16. R
    Raman Varabets <roman.vorobets@gmail.com>
  17. T
    tzm <frank@boldsolutions.de>
  18. M
    Mathieu Baudet <mathieubaudet@fb.com>
  19. O
    Oleksiy Golovko <alexei.golovko@gmail.com>
  20. R
    Rauan Mayemir <rauan@mayemir.io>
  21. C
    Carmelo Piccione <cep1@solvuu.com>
  22. J
    John Billings <john@monkeynut.org>
  23. L
    Louis Roché <louis@louisroche.net>
  24. B
    Brendan Long <self@brendanlong.com>
  25. C
    Chris Yocum <cyocum@gmail.com>
  26. L
    Louis Roché (Ahrefs) <louis.roche@ahrefs.com>
  27. L
    Louis Roché <louis.roche@ahrefs.com>
  28. P
    Pavel Antoshkin <pavel.antoshkin@ahrefs.com>
  29. P
    Pierre Boutillier <pierre.boutillier@laposte.net>
  30. S
    Shon Feder <shon.feder@key.me>
  31. A
    Anurag Soni <anuragsoni.13@gmail.com>
  32. A
    Arjun Ravi Narayan <arjunravinarayan@gmail.com>
  33. A
    Asya-kawai <kawai-toshiki@aintek.xyz>
  34. C
    Christophe Troestler <christophe.Troestler@umons.ac.be>
  35. Damien Doligez
  36. D
    Daniel M <dan.mntg@gmail.com>
  37. D
    Ding Xiang Fei <dingxiangfei2009@protonmail.ch>
  38. F
    François Pottier <francois.pottier@inria.fr>
  39. J
    Javier Chavarri <javier.chavarri@gmail.com>
  40. K
    Kate <kit.ty.kate@disroot.org>
  41. L
    Louis <louis.roche@ahrefs.com>
  42. L
    Louis Roché <louis@cryptosense.com>
  43. R
    Raman Varabets <raman+git@ahrefs.com>
  44. S
    Stephane Legrand <slegrand45@gmail.com>
  45. V
    Vincent Bernardoff <vb@luminar.eu.org>
  46. H
    haoyang <haoyang@esper.co>
  47. P
    pmundkur <prashanth.mundkur@gmail.com>
  48. Y
    ygrek <ygrek@autistici.org>

Maintainers

Sources

atdgen-codec-runtime-2.4.0.tbz
sha256=9d5b2ccaa21813efc8161b8a9f4371d630837c4b991be90664c5f332e6f75adb
sha512=de470d3082025989126327f056fa9901870c49a1adfffa1fcdad80fcd6cd04a9ab46e1d713302dc5fbda289a15013fb086c0c0691a7fd86fe414d3e9d9950de6

doc/src/atdgen-codec-runtime/encode.ml.html

Source file encode.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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
type 'a t = 'a -> Json.t

let make f = f

let encode f x = f x

let bool b = `Bool b
let char c = `String (String.make 1 c)
let string s = `String s
let unit () = `Null
let float f = `Float f
let int i = `Int i

let list f xs = `List (List.map f xs)
let array f xs = `List (Array.to_list (Array.map f xs))

let int32 s = `String (Int32.to_string s)
let int64 s = `String (Int64.to_string s)

type ('a, 'b) spec =
  { name: string
  ; data: 'a
  ; encode: 'b t
  }

type 'a field_spec =
  | Optional of ('a option, 'a) spec * 'a option
  | Required of ('a, 'a) spec * 'a option

type field = F : 'a field_spec -> field

let field ?default encode ~name data =
  F (Required (
    { name
    ; data
    ; encode
    }, default
  ))

let field_o ?default encode ~name data =
  F (Optional (
    { name
    ; data
    ; encode
    }, default
  ))

let obj fields =
  `Assoc (
    List.fold_left (fun acc (F f) ->
      match f with
      | Required ({ name; data; encode}, None) ->
          (name, encode data)::acc
      | Required ({ name; data; encode}, Some default) ->
          if default = data then
            acc
          else
            (name, encode data)::acc
      | Optional ({ name; data; encode}, default) ->
          match data, default with
          | None, _ -> acc
          | Some s, Some default ->
              if s = default then
                acc
              else
                (name, encode s)::acc
          | Some s, None ->
              (name, encode s)::acc
    ) [] fields
  )

let tuple1 f x = `Tuple [f x]
let tuple2 f g (w, x) = `Tuple [f w; g x]
let tuple3 f g h (w, x, y) = `Tuple [f w; g x; h y]
let tuple4 f g h i (w, x, y, z) = `Tuple [f w; g x; h y;i z]

let constr0 s = `Variant (s, None)
let constr1 s f x = `Variant (s, Some (f x))

let contramap f g b = g (f b)

let nullable f = function
  | None -> `Null
  | Some s -> f s

let option_as_constr f = function
  | None -> `Variant ("None", None)
  | Some s -> `Variant ("Some", Some (f s))

let adapter (restore: Json.t -> Json.t) (writer: 'a t) x =
  let encoded = writer x in
  restore encoded
OCaml

Innovation. Community. Security.