@@ -21,48 +21,46 @@ type allow_extra_fields = {a: int} [@@deriving json] [@@json.allow_extra_fields]
21
21
type allow_extra_fields2 = A of {a : int } [@ json.allow_extra_fields] [@@ deriving json ]
22
22
type drop_default_option = { a : int ; b_opt : int option ; [@ option ] [@ json.drop_default] } [@@ deriving json ]
23
23
24
- module Cases = struct
25
- type json = Ppx_deriving_json_runtime .t
26
- type of_json = C : string * (json -> 'a ) * ('a -> json ) * 'a -> of_json
27
- let of_json_cases = [
28
- C ({| 1 | }, user_of_json, user_to_json, 1 );
29
- C ({| 1.1 | }, floaty_of_json, floaty_to_json, 1.1 );
30
- C ({| 1.0 | }, floaty_of_json, floaty_to_json, 1.0 );
31
- C ({| 42 | }, floaty_of_json, floaty_to_json, 42.0 );
32
- C ({| " OK" | }, (param_of_json string_of_json), (param_to_json string_to_json), " OK" );
33
- C ({| " some" | }, opt_of_json, opt_to_json, (Some " some" ));
34
- C ({| [" Ok" , 1 ]| }, res_of_json, res_to_json, Ok 1 );
35
- C ({| [" Error" , " oops" ]| }, res_of_json, res_to_json, Error " oops" );
36
- C ({| [42 , " works" ]| }, tuple_of_json, tuple_to_json, (42 , " works" ));
37
- C ({| {" name" :" N" ," age" :1 }| }, record_of_json, record_to_json, {name= " N" ; age= 1 });
38
- C ({| [" A" ]| }, sum_of_json, sum_to_json, (A : sum ));
39
- C ({| [" B" , 42 ]| }, sum_of_json, sum_to_json, (B 42 : sum ));
40
- C ({| [" C" , {" name" : " cname" }]| }, sum_of_json, sum_to_json, (C {name= " cname" } : sum ));
41
- C ({| [" A" ]| }, sum_of_json, sum_to_json, (A : sum ));
42
- C ({| [" S2" , 42 , " hello" ]| }, sum2_of_json, sum2_to_json, (S2 (42 , " hello" )));
43
- C ({| [" B" , 42 ]| }, poly_of_json, poly_to_json, (`B 42 : poly ));
44
- C ({| [" P2" , 42 , " hello" ]| }, poly2_of_json, poly2_to_json, (`P2 (42 , " hello" ) : poly2));
45
- C ({| [" Fix" ,[" Fix" ,[" Fix" ,[" A" ]]]]| }, recur_of_json, recur_to_json, (Fix (Fix (Fix A ))));
46
- C ({| [" Fix" ,[" Fix" ,[" Fix" ,[" A" ]]]]| }, polyrecur_of_json, polyrecur_to_json, (`Fix (`Fix (`Fix `A ))));
47
- C ({| {" my_name" :" N" ," my_age" :1 }| }, record_aliased_of_json, record_aliased_to_json, {name= " N" ; age= 1 });
48
- C ({| {" my_name" :" N" }| }, record_aliased_of_json, record_aliased_to_json, {name= " N" ; age= 100 });
49
- C ({| {}| }, record_opt_of_json, record_opt_to_json, {k= None });
50
- C ({| {" k" :42 }| }, record_opt_of_json, record_opt_to_json, {k= Some 42 });
51
- C ({| [" A" ,1 ]| }, p2_of_json int_of_json string_of_json, p2_to_json int_to_json string_to_json, A 1 );
52
- C ({| [" B" ," ok" ]| }, p2_of_json int_of_json string_of_json, p2_to_json int_to_json string_to_json, B " ok" );
53
- C ({| {" a" :1 ," b" :2 }| }, allow_extra_fields_of_json, allow_extra_fields_to_json, {a= 1 });
54
- C ({| [" A" ,{" a" :1 ," b" :2 }]| }, allow_extra_fields2_of_json, allow_extra_fields2_to_json, A {a= 1 });
55
- C ({| {" a" :1 }| }, drop_default_option_of_json, drop_default_option_to_json, {a= 1 ; b_opt= None });
56
- C ({| {" a" :1 ," b_opt" :2 }| }, drop_default_option_of_json, drop_default_option_to_json, {a= 1 ; b_opt= Some 2 });
57
- ]
58
- let run' ~json_of_string ~json_to_string (C (data , of_json , to_json , v )) =
59
- print_endline (Printf. sprintf " JSON DATA: %s" data);
60
- let json = json_of_string data in
61
- let v' = of_json json in
62
- assert (v' = v);
63
- let json' = to_json v' in
64
- let data' = json_to_string json' in
65
- print_endline (Printf. sprintf " JSON REPRINT: %s" data')
66
- let run ~json_of_string ~json_to_string () =
67
- List. iter (run' ~json_of_string ~json_to_string ) of_json_cases
68
- end
24
+ type json = Ppx_deriving_json_runtime .t
25
+ type of_json = C : string * (json -> 'a ) * ('a -> json ) * 'a -> of_json
26
+ let of_json_cases = [
27
+ C ({| 1 | }, user_of_json, user_to_json, 1 );
28
+ C ({| 1.1 | }, floaty_of_json, floaty_to_json, 1.1 );
29
+ C ({| 1.0 | }, floaty_of_json, floaty_to_json, 1.0 );
30
+ C ({| 42 | }, floaty_of_json, floaty_to_json, 42.0 );
31
+ C ({| " OK" | }, (param_of_json string_of_json), (param_to_json string_to_json), " OK" );
32
+ C ({| " some" | }, opt_of_json, opt_to_json, (Some " some" ));
33
+ C ({| [" Ok" , 1 ]| }, res_of_json, res_to_json, Ok 1 );
34
+ C ({| [" Error" , " oops" ]| }, res_of_json, res_to_json, Error " oops" );
35
+ C ({| [42 , " works" ]| }, tuple_of_json, tuple_to_json, (42 , " works" ));
36
+ C ({| {" name" :" N" ," age" :1 }| }, record_of_json, record_to_json, {name= " N" ; age= 1 });
37
+ C ({| [" A" ]| }, sum_of_json, sum_to_json, (A : sum ));
38
+ C ({| [" B" , 42 ]| }, sum_of_json, sum_to_json, (B 42 : sum ));
39
+ C ({| [" C" , {" name" : " cname" }]| }, sum_of_json, sum_to_json, (C {name= " cname" } : sum ));
40
+ C ({| [" A" ]| }, sum_of_json, sum_to_json, (A : sum ));
41
+ C ({| [" S2" , 42 , " hello" ]| }, sum2_of_json, sum2_to_json, (S2 (42 , " hello" )));
42
+ C ({| [" B" , 42 ]| }, poly_of_json, poly_to_json, (`B 42 : poly ));
43
+ C ({| [" P2" , 42 , " hello" ]| }, poly2_of_json, poly2_to_json, (`P2 (42 , " hello" ) : poly2));
44
+ C ({| [" Fix" ,[" Fix" ,[" Fix" ,[" A" ]]]]| }, recur_of_json, recur_to_json, (Fix (Fix (Fix A ))));
45
+ C ({| [" Fix" ,[" Fix" ,[" Fix" ,[" A" ]]]]| }, polyrecur_of_json, polyrecur_to_json, (`Fix (`Fix (`Fix `A ))));
46
+ C ({| {" my_name" :" N" ," my_age" :1 }| }, record_aliased_of_json, record_aliased_to_json, {name= " N" ; age= 1 });
47
+ C ({| {" my_name" :" N" }| }, record_aliased_of_json, record_aliased_to_json, {name= " N" ; age= 100 });
48
+ C ({| {}| }, record_opt_of_json, record_opt_to_json, {k= None });
49
+ C ({| {" k" :42 }| }, record_opt_of_json, record_opt_to_json, {k= Some 42 });
50
+ C ({| [" A" ,1 ]| }, p2_of_json int_of_json string_of_json, p2_to_json int_to_json string_to_json, A 1 );
51
+ C ({| [" B" ," ok" ]| }, p2_of_json int_of_json string_of_json, p2_to_json int_to_json string_to_json, B " ok" );
52
+ C ({| {" a" :1 ," b" :2 }| }, allow_extra_fields_of_json, allow_extra_fields_to_json, {a= 1 });
53
+ C ({| [" A" ,{" a" :1 ," b" :2 }]| }, allow_extra_fields2_of_json, allow_extra_fields2_to_json, A {a= 1 });
54
+ C ({| {" a" :1 }| }, drop_default_option_of_json, drop_default_option_to_json, {a= 1 ; b_opt= None });
55
+ C ({| {" a" :1 ," b_opt" :2 }| }, drop_default_option_of_json, drop_default_option_to_json, {a= 1 ; b_opt= Some 2 });
56
+ ]
57
+ let run' (C (data , of_json , to_json , v )) =
58
+ print_endline (Printf. sprintf " JSON DATA: %s" data);
59
+ let json = Ppx_deriving_json_runtime. of_string data in
60
+ let v' = of_json json in
61
+ assert (v' = v);
62
+ let json' = to_json v' in
63
+ let data' = Ppx_deriving_json_runtime. to_string json' in
64
+ print_endline (Printf. sprintf " JSON REPRINT: %s" data')
65
+ let test () =
66
+ List. iter run' of_json_cases
0 commit comments