@greenlabs/ppx-spice 0.1.8 → 0.1.9-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +4 -0
- package/docs/GUIDE.md +139 -0
- package/package.json +1 -1
- package/ppx-windows.exe +0 -0
- package/.github/workflows/build_linux.yml +0 -41
- package/.github/workflows/build_macos.yml +0 -41
- package/.github/workflows/build_windows.yml +0 -41
- package/.github/workflows/print_esy_cache.js +0 -13
- package/.github/workflows/publish.yml +0 -161
- package/.github/workflows/publish_prerelease.yml +0 -177
- package/.vscode/settings.json +0 -6
- package/src/.ocamlformat +0 -0
- package/src/bin/bin.ml +0 -1
- package/src/bin/dune +0 -5
- package/src/dune +0 -1
- package/src/dune-project +0 -2
- package/src/dune-workspace +0 -3
- package/src/esy.lock/.gitattributes +0 -3
- package/src/esy.lock/.gitignore +0 -3
- package/src/esy.lock/index.json +0 -1196
- package/src/esy.lock/opam/astring.0.8.5/opam +0 -37
- package/src/esy.lock/opam/base-bytes.base/opam +0 -9
- package/src/esy.lock/opam/base-threads.base/opam +0 -6
- package/src/esy.lock/opam/base-unix.base/opam +0 -6
- package/src/esy.lock/opam/base.v0.14.1/opam +0 -36
- package/src/esy.lock/opam/biniou.1.2.1/opam +0 -45
- package/src/esy.lock/opam/cmdliner.1.0.4/opam +0 -36
- package/src/esy.lock/opam/cppo.1.6.8/opam +0 -37
- package/src/esy.lock/opam/csexp.1.5.1/opam +0 -60
- package/src/esy.lock/opam/dot-merlin-reader.4.1/opam +0 -30
- package/src/esy.lock/opam/dune-build-info.2.9.1/opam +0 -42
- package/src/esy.lock/opam/dune-configurator.2.9.1/opam +0 -47
- package/src/esy.lock/opam/dune.2.9.1/opam +0 -58
- package/src/esy.lock/opam/easy-format.1.3.2/opam +0 -46
- package/src/esy.lock/opam/fix.20201120/opam +0 -24
- package/src/esy.lock/opam/fpath.0.7.3/opam +0 -36
- package/src/esy.lock/opam/menhir.20211012/opam +0 -28
- package/src/esy.lock/opam/menhirLib.20211012/opam +0 -29
- package/src/esy.lock/opam/menhirSdk.20211012/opam +0 -29
- package/src/esy.lock/opam/ocaml-compiler-libs.v0.12.4/opam +0 -39
- package/src/esy.lock/opam/ocaml-lsp-server.1.8.3/opam +0 -54
- package/src/esy.lock/opam/ocamlbuild.0.14.0/opam +0 -36
- package/src/esy.lock/opam/ocamlfind.1.9.1/opam +0 -44
- package/src/esy.lock/opam/ocamlformat-rpc-lib.0.18.0/opam +0 -40
- package/src/esy.lock/opam/ocamlformat.0.19.0/opam +0 -55
- package/src/esy.lock/opam/ocp-indent.1.8.1/opam +0 -57
- package/src/esy.lock/opam/odoc-parser.0.9.0/opam +0 -45
- package/src/esy.lock/opam/pp.1.1.2/opam +0 -58
- package/src/esy.lock/opam/ppx_derivers.1.2.1/opam +0 -23
- package/src/esy.lock/opam/ppx_yojson_conv_lib.v0.14.0/opam +0 -24
- package/src/esy.lock/opam/ppxlib.0.23.0/opam +0 -62
- package/src/esy.lock/opam/re.1.10.3/opam +0 -46
- package/src/esy.lock/opam/result.1.5/opam +0 -22
- package/src/esy.lock/opam/seq.base/files/META.seq +0 -4
- package/src/esy.lock/opam/seq.base/files/seq.install +0 -3
- package/src/esy.lock/opam/seq.base/opam +0 -15
- package/src/esy.lock/opam/sexplib0.v0.14.0/opam +0 -26
- package/src/esy.lock/opam/stdio.v0.14.0/opam +0 -27
- package/src/esy.lock/opam/stdlib-shims.0.3.0/opam +0 -31
- package/src/esy.lock/opam/topkg.1.0.4/opam +0 -44
- package/src/esy.lock/opam/uchar.0.0.2/opam +0 -36
- package/src/esy.lock/opam/uucp.14.0.0/opam +0 -41
- package/src/esy.lock/opam/uuseg.14.0.0/opam +0 -43
- package/src/esy.lock/opam/uutf.1.0.2/opam +0 -40
- package/src/esy.lock/opam/yojson.1.7.0/opam +0 -38
- package/src/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override/files/ocamlbuild-0.14.0.patch +0 -463
- package/src/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.0_opam_override/package.json +0 -27
- package/src/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.1_opam_override/files/findlib-1.9.1.patch +0 -471
- package/src/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.1_opam_override/package.json +0 -61
- package/src/ppx/codecs.ml +0 -120
- package/src/ppx/decode_cases.ml +0 -18
- package/src/ppx/dune +0 -9
- package/src/ppx/polyvariants.ml +0 -288
- package/src/ppx/ppx_spice.ml +0 -19
- package/src/ppx/records.ml +0 -163
- package/src/ppx/signature.ml +0 -86
- package/src/ppx/structure.ml +0 -109
- package/src/ppx/tuple.ml +0 -68
- package/src/ppx/utils.ml +0 -117
- package/src/ppx/variants.ml +0 -257
- package/src/ppx_spice.opam +0 -21
- package/test/__tests__/test_optional_field_records.js +0 -91
- package/test/__tests__/test_optional_field_records.res +0 -98
- package/test/__tests__/test_polyvariants.js +0 -57
- package/test/__tests__/test_polyvariants.res +0 -41
- package/test/__tests__/test_records.js +0 -100
- package/test/__tests__/test_records.res +0 -111
- package/test/__tests__/test_variants.js +0 -85
- package/test/__tests__/test_variants.res +0 -63
- package/test/bsconfig.json +0 -27
- package/test/package.json +0 -18
- package/test/src/OptionalFieldRecords.js +0 -237
- package/test/src/OptionalFieldRecords.res +0 -23
- package/test/src/Polyvariants.js +0 -94
- package/test/src/Polyvariants.res +0 -5
- package/test/src/Polyvariants.resi +0 -5
- package/test/src/Records.js +0 -186
- package/test/src/Records.res +0 -17
- package/test/src/Records.resi +0 -17
- package/test/src/Spice.js +0 -448
- package/test/src/Spice_Codecs.js +0 -57
- package/test/src/Variants.js +0 -115
- package/test/src/Variants.res +0 -11
- package/test/src/Variants.resi +0 -11
- package/test/yarn.lock +0 -4194
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
var Spice = require("./Spice.js");
|
|
5
|
-
var Js_dict = require("rescript/lib/js/js_dict.js");
|
|
6
|
-
var Js_json = require("rescript/lib/js/js_json.js");
|
|
7
|
-
var Belt_Option = require("rescript/lib/js/belt_Option.js");
|
|
8
|
-
|
|
9
|
-
function t0_encode(v) {
|
|
10
|
-
return Js_dict.fromArray(Spice.filterOptional([
|
|
11
|
-
[
|
|
12
|
-
"a",
|
|
13
|
-
false,
|
|
14
|
-
Spice.intToJson(v.a)
|
|
15
|
-
],
|
|
16
|
-
[
|
|
17
|
-
"b",
|
|
18
|
-
true,
|
|
19
|
-
Spice.optionToJson(Spice.intToJson, v.b)
|
|
20
|
-
]
|
|
21
|
-
]));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function t0_decode(v) {
|
|
25
|
-
var dict = Js_json.classify(v);
|
|
26
|
-
if (typeof dict === "number") {
|
|
27
|
-
return Spice.error(undefined, "Not an object", v);
|
|
28
|
-
}
|
|
29
|
-
if (dict.TAG !== /* JSONObject */2) {
|
|
30
|
-
return Spice.error(undefined, "Not an object", v);
|
|
31
|
-
}
|
|
32
|
-
var dict$1 = dict._0;
|
|
33
|
-
var a = Spice.intFromJson(Belt_Option.getWithDefault(Js_dict.get(dict$1, "a"), null));
|
|
34
|
-
if (a.TAG === /* Ok */0) {
|
|
35
|
-
var b = Spice.optionFromJson(Spice.intFromJson, Belt_Option.getWithDefault(Js_dict.get(dict$1, "b"), null));
|
|
36
|
-
if (b.TAG === /* Ok */0) {
|
|
37
|
-
return {
|
|
38
|
-
TAG: /* Ok */0,
|
|
39
|
-
_0: {
|
|
40
|
-
a: a._0,
|
|
41
|
-
b: b._0
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
var e = b._0;
|
|
46
|
-
return {
|
|
47
|
-
TAG: /* Error */1,
|
|
48
|
-
_0: {
|
|
49
|
-
path: ".b" + e.path,
|
|
50
|
-
message: e.message,
|
|
51
|
-
value: e.value
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
var e$1 = a._0;
|
|
56
|
-
return {
|
|
57
|
-
TAG: /* Error */1,
|
|
58
|
-
_0: {
|
|
59
|
-
path: ".a" + e$1.path,
|
|
60
|
-
message: e$1.message,
|
|
61
|
-
value: e$1.value
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function t1_encode(v) {
|
|
67
|
-
return Js_dict.fromArray(Spice.filterOptional([
|
|
68
|
-
[
|
|
69
|
-
"a",
|
|
70
|
-
false,
|
|
71
|
-
Spice.intToJson(v.a)
|
|
72
|
-
],
|
|
73
|
-
[
|
|
74
|
-
"bs",
|
|
75
|
-
true,
|
|
76
|
-
Spice.optionToJson((function (param) {
|
|
77
|
-
return Spice.arrayToJson(Spice.intToJson, param);
|
|
78
|
-
}), v.bs)
|
|
79
|
-
]
|
|
80
|
-
]));
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function t1_decode(v) {
|
|
84
|
-
var dict = Js_json.classify(v);
|
|
85
|
-
if (typeof dict === "number") {
|
|
86
|
-
return Spice.error(undefined, "Not an object", v);
|
|
87
|
-
}
|
|
88
|
-
if (dict.TAG !== /* JSONObject */2) {
|
|
89
|
-
return Spice.error(undefined, "Not an object", v);
|
|
90
|
-
}
|
|
91
|
-
var dict$1 = dict._0;
|
|
92
|
-
var a = Spice.intFromJson(Belt_Option.getWithDefault(Js_dict.get(dict$1, "a"), null));
|
|
93
|
-
if (a.TAG === /* Ok */0) {
|
|
94
|
-
var bs = Spice.optionFromJson((function (param) {
|
|
95
|
-
return Spice.arrayFromJson(Spice.intFromJson, param);
|
|
96
|
-
}), Belt_Option.getWithDefault(Js_dict.get(dict$1, "bs"), null));
|
|
97
|
-
if (bs.TAG === /* Ok */0) {
|
|
98
|
-
return {
|
|
99
|
-
TAG: /* Ok */0,
|
|
100
|
-
_0: {
|
|
101
|
-
a: a._0,
|
|
102
|
-
bs: bs._0
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
var e = bs._0;
|
|
107
|
-
return {
|
|
108
|
-
TAG: /* Error */1,
|
|
109
|
-
_0: {
|
|
110
|
-
path: ".bs" + e.path,
|
|
111
|
-
message: e.message,
|
|
112
|
-
value: e.value
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
var e$1 = a._0;
|
|
117
|
-
return {
|
|
118
|
-
TAG: /* Error */1,
|
|
119
|
-
_0: {
|
|
120
|
-
path: ".a" + e$1.path,
|
|
121
|
-
message: e$1.message,
|
|
122
|
-
value: e$1.value
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function b_encode(v) {
|
|
128
|
-
switch (v) {
|
|
129
|
-
case /* B0 */0 :
|
|
130
|
-
return "B0";
|
|
131
|
-
case /* B1 */1 :
|
|
132
|
-
return "B1";
|
|
133
|
-
case /* B2 */2 :
|
|
134
|
-
return "B2";
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function b_decode(v) {
|
|
140
|
-
var str = Js_json.classify(v);
|
|
141
|
-
if (typeof str === "number") {
|
|
142
|
-
return Spice.error(undefined, "Not a JSONString", v);
|
|
143
|
-
}
|
|
144
|
-
if (str.TAG !== /* JSONString */0) {
|
|
145
|
-
return Spice.error(undefined, "Not a JSONString", v);
|
|
146
|
-
}
|
|
147
|
-
var str$1 = str._0;
|
|
148
|
-
if ("B0" === str$1) {
|
|
149
|
-
return {
|
|
150
|
-
TAG: /* Ok */0,
|
|
151
|
-
_0: /* B0 */0
|
|
152
|
-
};
|
|
153
|
-
} else if ("B1" === str$1) {
|
|
154
|
-
return {
|
|
155
|
-
TAG: /* Ok */0,
|
|
156
|
-
_0: /* B1 */1
|
|
157
|
-
};
|
|
158
|
-
} else if ("B2" === str$1) {
|
|
159
|
-
return {
|
|
160
|
-
TAG: /* Ok */0,
|
|
161
|
-
_0: /* B2 */2
|
|
162
|
-
};
|
|
163
|
-
} else {
|
|
164
|
-
return Spice.error(undefined, "Not matched", v);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
function t2_encode(v) {
|
|
169
|
-
return Js_dict.fromArray(Spice.filterOptional([
|
|
170
|
-
[
|
|
171
|
-
"a",
|
|
172
|
-
false,
|
|
173
|
-
Spice.intToJson(v.a)
|
|
174
|
-
],
|
|
175
|
-
[
|
|
176
|
-
"bs",
|
|
177
|
-
true,
|
|
178
|
-
Spice.optionToJson((function (param) {
|
|
179
|
-
return Spice.arrayToJson(b_encode, param);
|
|
180
|
-
}), v.bs)
|
|
181
|
-
]
|
|
182
|
-
]));
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
function t2_decode(v) {
|
|
186
|
-
var dict = Js_json.classify(v);
|
|
187
|
-
if (typeof dict === "number") {
|
|
188
|
-
return Spice.error(undefined, "Not an object", v);
|
|
189
|
-
}
|
|
190
|
-
if (dict.TAG !== /* JSONObject */2) {
|
|
191
|
-
return Spice.error(undefined, "Not an object", v);
|
|
192
|
-
}
|
|
193
|
-
var dict$1 = dict._0;
|
|
194
|
-
var a = Spice.intFromJson(Belt_Option.getWithDefault(Js_dict.get(dict$1, "a"), null));
|
|
195
|
-
if (a.TAG === /* Ok */0) {
|
|
196
|
-
var bs = Spice.optionFromJson((function (param) {
|
|
197
|
-
return Spice.arrayFromJson(b_decode, param);
|
|
198
|
-
}), Belt_Option.getWithDefault(Js_dict.get(dict$1, "bs"), null));
|
|
199
|
-
if (bs.TAG === /* Ok */0) {
|
|
200
|
-
return {
|
|
201
|
-
TAG: /* Ok */0,
|
|
202
|
-
_0: {
|
|
203
|
-
a: a._0,
|
|
204
|
-
bs: bs._0
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
var e = bs._0;
|
|
209
|
-
return {
|
|
210
|
-
TAG: /* Error */1,
|
|
211
|
-
_0: {
|
|
212
|
-
path: ".bs" + e.path,
|
|
213
|
-
message: e.message,
|
|
214
|
-
value: e.value
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
var e$1 = a._0;
|
|
219
|
-
return {
|
|
220
|
-
TAG: /* Error */1,
|
|
221
|
-
_0: {
|
|
222
|
-
path: ".a" + e$1.path,
|
|
223
|
-
message: e$1.message,
|
|
224
|
-
value: e$1.value
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
exports.t0_encode = t0_encode;
|
|
230
|
-
exports.t0_decode = t0_decode;
|
|
231
|
-
exports.t1_encode = t1_encode;
|
|
232
|
-
exports.t1_decode = t1_decode;
|
|
233
|
-
exports.b_encode = b_encode;
|
|
234
|
-
exports.b_decode = b_decode;
|
|
235
|
-
exports.t2_encode = t2_encode;
|
|
236
|
-
exports.t2_decode = t2_decode;
|
|
237
|
-
/* No side effect */
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
@spice
|
|
2
|
-
type t0 = {
|
|
3
|
-
a: int,
|
|
4
|
-
b?: int,
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
@spice
|
|
8
|
-
type t1 = {
|
|
9
|
-
a: int,
|
|
10
|
-
bs?: array<int>,
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
@spice
|
|
14
|
-
type b =
|
|
15
|
-
| @spice.as("B0") B0
|
|
16
|
-
| @spice.as("B1") B1
|
|
17
|
-
| @spice.as("B2") B2
|
|
18
|
-
|
|
19
|
-
@spice
|
|
20
|
-
type t2 = {
|
|
21
|
-
a: int,
|
|
22
|
-
bs?: array<b>,
|
|
23
|
-
}
|
package/test/src/Polyvariants.js
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
var Spice = require("./Spice.js");
|
|
5
|
-
var Js_json = require("rescript/lib/js/js_json.js");
|
|
6
|
-
var Js_array = require("rescript/lib/js/js_array.js");
|
|
7
|
-
var Belt_Array = require("rescript/lib/js/belt_Array.js");
|
|
8
|
-
|
|
9
|
-
function t_encode(v) {
|
|
10
|
-
if (v === "two") {
|
|
11
|
-
return "둘";
|
|
12
|
-
} else {
|
|
13
|
-
return "하나";
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function t_decode(v) {
|
|
18
|
-
var str = Js_json.classify(v);
|
|
19
|
-
if (typeof str === "number") {
|
|
20
|
-
return Spice.error(undefined, "Not a JSONString", v);
|
|
21
|
-
}
|
|
22
|
-
if (str.TAG !== /* JSONString */0) {
|
|
23
|
-
return Spice.error(undefined, "Not a JSONString", v);
|
|
24
|
-
}
|
|
25
|
-
var str$1 = str._0;
|
|
26
|
-
if ("하나" === str$1) {
|
|
27
|
-
return {
|
|
28
|
-
TAG: /* Ok */0,
|
|
29
|
-
_0: "one"
|
|
30
|
-
};
|
|
31
|
-
} else if ("둘" === str$1) {
|
|
32
|
-
return {
|
|
33
|
-
TAG: /* Ok */0,
|
|
34
|
-
_0: "two"
|
|
35
|
-
};
|
|
36
|
-
} else {
|
|
37
|
-
return Spice.error(undefined, "Not matched", v);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function t1_encode(v) {
|
|
42
|
-
if (v === "two") {
|
|
43
|
-
return ["two"];
|
|
44
|
-
} else {
|
|
45
|
-
return ["one"];
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function t1_decode(v) {
|
|
50
|
-
var json_arr = Js_json.classify(v);
|
|
51
|
-
if (typeof json_arr === "number") {
|
|
52
|
-
return Spice.error(undefined, "Not a polyvariant", v);
|
|
53
|
-
}
|
|
54
|
-
if (json_arr.TAG !== /* JSONArray */3) {
|
|
55
|
-
return Spice.error(undefined, "Not a polyvariant", v);
|
|
56
|
-
}
|
|
57
|
-
var json_arr$1 = json_arr._0;
|
|
58
|
-
if (json_arr$1.length === 0) {
|
|
59
|
-
return Spice.error(undefined, "Expected polyvariant, found empty array", v);
|
|
60
|
-
}
|
|
61
|
-
var tagged = Js_array.map(Js_json.classify, json_arr$1);
|
|
62
|
-
var match = Belt_Array.getExn(tagged, 0);
|
|
63
|
-
if (typeof match !== "number" && match.TAG === /* JSONString */0) {
|
|
64
|
-
switch (match._0) {
|
|
65
|
-
case "one" :
|
|
66
|
-
if (tagged.length !== 1) {
|
|
67
|
-
return Spice.error(undefined, "Invalid number of arguments to polyvariant constructor", v);
|
|
68
|
-
} else {
|
|
69
|
-
return {
|
|
70
|
-
TAG: /* Ok */0,
|
|
71
|
-
_0: "one"
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
case "two" :
|
|
75
|
-
if (tagged.length !== 1) {
|
|
76
|
-
return Spice.error(undefined, "Invalid number of arguments to polyvariant constructor", v);
|
|
77
|
-
} else {
|
|
78
|
-
return {
|
|
79
|
-
TAG: /* Ok */0,
|
|
80
|
-
_0: "two"
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
default:
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return Spice.error(undefined, "Invalid polymorphic constructor", Belt_Array.getExn(json_arr$1, 0));
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
exports.t_encode = t_encode;
|
|
91
|
-
exports.t_decode = t_decode;
|
|
92
|
-
exports.t1_encode = t1_encode;
|
|
93
|
-
exports.t1_decode = t1_decode;
|
|
94
|
-
/* No side effect */
|
package/test/src/Records.js
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
var Spice = require("./Spice.js");
|
|
5
|
-
var Js_dict = require("rescript/lib/js/js_dict.js");
|
|
6
|
-
var Js_json = require("rescript/lib/js/js_json.js");
|
|
7
|
-
var Belt_Option = require("rescript/lib/js/belt_Option.js");
|
|
8
|
-
|
|
9
|
-
function t_encode(v) {
|
|
10
|
-
return Js_dict.fromArray(Spice.filterOptional([
|
|
11
|
-
[
|
|
12
|
-
"spice-label",
|
|
13
|
-
false,
|
|
14
|
-
Spice.stringToJson(v.label)
|
|
15
|
-
],
|
|
16
|
-
[
|
|
17
|
-
"spice-value",
|
|
18
|
-
false,
|
|
19
|
-
Spice.intToJson(v.value)
|
|
20
|
-
]
|
|
21
|
-
]));
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function t_decode(v) {
|
|
25
|
-
var dict = Js_json.classify(v);
|
|
26
|
-
if (typeof dict === "number") {
|
|
27
|
-
return Spice.error(undefined, "Not an object", v);
|
|
28
|
-
}
|
|
29
|
-
if (dict.TAG !== /* JSONObject */2) {
|
|
30
|
-
return Spice.error(undefined, "Not an object", v);
|
|
31
|
-
}
|
|
32
|
-
var dict$1 = dict._0;
|
|
33
|
-
var label = Spice.stringFromJson(Belt_Option.getWithDefault(Js_dict.get(dict$1, "spice-label"), null));
|
|
34
|
-
if (label.TAG === /* Ok */0) {
|
|
35
|
-
var value = Spice.intFromJson(Belt_Option.getWithDefault(Js_dict.get(dict$1, "spice-value"), null));
|
|
36
|
-
if (value.TAG === /* Ok */0) {
|
|
37
|
-
return {
|
|
38
|
-
TAG: /* Ok */0,
|
|
39
|
-
_0: {
|
|
40
|
-
label: label._0,
|
|
41
|
-
value: value._0
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
var e = value._0;
|
|
46
|
-
return {
|
|
47
|
-
TAG: /* Error */1,
|
|
48
|
-
_0: {
|
|
49
|
-
path: ".spice-value" + e.path,
|
|
50
|
-
message: e.message,
|
|
51
|
-
value: e.value
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
var e$1 = label._0;
|
|
56
|
-
return {
|
|
57
|
-
TAG: /* Error */1,
|
|
58
|
-
_0: {
|
|
59
|
-
path: ".spice-label" + e$1.path,
|
|
60
|
-
message: e$1.message,
|
|
61
|
-
value: e$1.value
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function t1_encode(v) {
|
|
67
|
-
return Js_dict.fromArray(Spice.filterOptional([
|
|
68
|
-
[
|
|
69
|
-
"label",
|
|
70
|
-
false,
|
|
71
|
-
Spice.stringToJson(v.label)
|
|
72
|
-
],
|
|
73
|
-
[
|
|
74
|
-
"value",
|
|
75
|
-
false,
|
|
76
|
-
Spice.intToJson(v.value)
|
|
77
|
-
]
|
|
78
|
-
]));
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function t1_decode(v) {
|
|
82
|
-
var dict = Js_json.classify(v);
|
|
83
|
-
if (typeof dict === "number") {
|
|
84
|
-
return Spice.error(undefined, "Not an object", v);
|
|
85
|
-
}
|
|
86
|
-
if (dict.TAG !== /* JSONObject */2) {
|
|
87
|
-
return Spice.error(undefined, "Not an object", v);
|
|
88
|
-
}
|
|
89
|
-
var dict$1 = dict._0;
|
|
90
|
-
var label = Spice.stringFromJson(Belt_Option.getWithDefault(Js_dict.get(dict$1, "label"), null));
|
|
91
|
-
if (label.TAG === /* Ok */0) {
|
|
92
|
-
var value = Spice.intFromJson(Belt_Option.getWithDefault(Js_dict.get(dict$1, "value"), null));
|
|
93
|
-
if (value.TAG === /* Ok */0) {
|
|
94
|
-
return {
|
|
95
|
-
TAG: /* Ok */0,
|
|
96
|
-
_0: {
|
|
97
|
-
label: label._0,
|
|
98
|
-
value: value._0
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
var e = value._0;
|
|
103
|
-
return {
|
|
104
|
-
TAG: /* Error */1,
|
|
105
|
-
_0: {
|
|
106
|
-
path: ".value" + e.path,
|
|
107
|
-
message: e.message,
|
|
108
|
-
value: e.value
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
var e$1 = label._0;
|
|
113
|
-
return {
|
|
114
|
-
TAG: /* Error */1,
|
|
115
|
-
_0: {
|
|
116
|
-
path: ".label" + e$1.path,
|
|
117
|
-
message: e$1.message,
|
|
118
|
-
value: e$1.value
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function tOp_encode(v) {
|
|
124
|
-
return Js_dict.fromArray(Spice.filterOptional([
|
|
125
|
-
[
|
|
126
|
-
"label",
|
|
127
|
-
false,
|
|
128
|
-
Spice.optionToJson(Spice.stringToJson, v.label)
|
|
129
|
-
],
|
|
130
|
-
[
|
|
131
|
-
"value",
|
|
132
|
-
true,
|
|
133
|
-
Spice.optionToJson(Spice.intToJson, v.value)
|
|
134
|
-
]
|
|
135
|
-
]));
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function tOp_decode(v) {
|
|
139
|
-
var dict = Js_json.classify(v);
|
|
140
|
-
if (typeof dict === "number") {
|
|
141
|
-
return Spice.error(undefined, "Not an object", v);
|
|
142
|
-
}
|
|
143
|
-
if (dict.TAG !== /* JSONObject */2) {
|
|
144
|
-
return Spice.error(undefined, "Not an object", v);
|
|
145
|
-
}
|
|
146
|
-
var dict$1 = dict._0;
|
|
147
|
-
var label = Spice.optionFromJson(Spice.stringFromJson, Belt_Option.getWithDefault(Js_dict.get(dict$1, "label"), null));
|
|
148
|
-
if (label.TAG === /* Ok */0) {
|
|
149
|
-
var value = Spice.optionFromJson(Spice.intFromJson, Belt_Option.getWithDefault(Js_dict.get(dict$1, "value"), null));
|
|
150
|
-
if (value.TAG === /* Ok */0) {
|
|
151
|
-
return {
|
|
152
|
-
TAG: /* Ok */0,
|
|
153
|
-
_0: {
|
|
154
|
-
label: label._0,
|
|
155
|
-
value: value._0
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
var e = value._0;
|
|
160
|
-
return {
|
|
161
|
-
TAG: /* Error */1,
|
|
162
|
-
_0: {
|
|
163
|
-
path: ".value" + e.path,
|
|
164
|
-
message: e.message,
|
|
165
|
-
value: e.value
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
var e$1 = label._0;
|
|
170
|
-
return {
|
|
171
|
-
TAG: /* Error */1,
|
|
172
|
-
_0: {
|
|
173
|
-
path: ".label" + e$1.path,
|
|
174
|
-
message: e$1.message,
|
|
175
|
-
value: e$1.value
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
exports.t_encode = t_encode;
|
|
181
|
-
exports.t_decode = t_decode;
|
|
182
|
-
exports.t1_encode = t1_encode;
|
|
183
|
-
exports.t1_decode = t1_decode;
|
|
184
|
-
exports.tOp_encode = tOp_encode;
|
|
185
|
-
exports.tOp_decode = tOp_decode;
|
|
186
|
-
/* No side effect */
|
package/test/src/Records.res
DELETED