Source file ppx_deriving_json_common.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
# 1 "ppx/native/ppx_deriving_json_common.ml"
open Ppxlib
open Ppx_deriving_tools.Conv
let get_of_variant_case ?mark_as_seen ~variant ~polyvariant = function
| Vcs_ctx_variant ctx -> Attribute.get ?mark_as_seen variant ctx
| Vcs_ctx_polyvariant ctx -> Attribute.get ?mark_as_seen polyvariant ctx
let get_of_variant ?mark_as_seen ~variant ~polyvariant = function
| Vrt_ctx_variant ctx -> Attribute.get ?mark_as_seen variant ctx
| Vrt_ctx_polyvariant ctx -> Attribute.get ?mark_as_seen polyvariant ctx
let attr_json_as ctx =
Attribute.declare "json.as" ctx
Ast_pattern.(single_expr_payload (estring __'))
(fun x -> x)
let vcs_attr_json_as =
let variant = attr_json_as Attribute.Context.constructor_declaration in
let polyvariant = attr_json_as Attribute.Context.rtag in
get_of_variant_case ~variant ~polyvariant
let ld_attr_json_key =
Attribute.get
(Attribute.declare "json.key" Attribute.Context.label_declaration
Ast_pattern.(single_expr_payload (estring __'))
(fun x -> x))
let ld_attr_json_option =
Attribute.get
(Attribute.declare "json.option" Attribute.Context.label_declaration
Ast_pattern.(pstr nil)
())
let ctx =
Attribute.declare "json.allow_extra_fields" ctx
Ast_pattern.(pstr nil)
()
let =
Attribute.get
(attr_json_allow_extra_fields Attribute.Context.type_declaration)
let =
Attribute.get
(attr_json_allow_extra_fields
Attribute.Context.constructor_declaration)
let ld_attr_json_default =
Attribute.get
(Attribute.declare "json.default" Attribute.Context.label_declaration
Ast_pattern.(single_expr_payload __)
(fun x -> x))
let ld_attr_default ld =
match ld_attr_json_default ld with
| Some e -> Some e
| None -> (
match ld_attr_json_option ld with
| Some () ->
let loc = ld.pld_loc in
Some [%expr Stdlib.Option.None]
| None -> None)