v2 / vlib / x / json2 / tests / decode_object_test.v
79 lines · 69 sloc · 1.22 KB · 2d33a7f2819dd5fc1f4aa3b3ca0bcc660810d7af
Raw
1import x.json2 as json
2
3pub struct Stru {
4 val int
5 val2 string
6 val3 Stru2
7}
8
9pub struct Stru2 {
10 a int
11 brazilian_steak string
12}
13
14struct StructType[T] {
15mut:
16 val T
17}
18
19struct StructTypeOption[T] {
20mut:
21 val ?T
22}
23
24struct StructTypePointer[T] {
25mut:
26 val &T
27}
28
29fn test_array_of_strings() {
30 // Structs
31 assert json.decode[StructType[string]]('{"val": "2"}')! == StructType{
32 val: '2'
33 }
34 assert json.decode[StructType[int]]('{"val": 2}')! == StructType{
35 val: 2
36 }
37
38 // maps
39 assert json.decode[map[string]string]('{"val": "2"}')! == {
40 'val': '2'
41 }
42 assert json.decode[map[string]int]('{"val": 2}')! == {
43 'val': 2
44 }
45
46 // nested map
47 assert json.decode[map[string]map[string]string]('{"val": {"val2": "2"}}')! == {
48 'val': {
49 'val2': '2'
50 }
51 }
52
53 // nested struct
54 assert json.decode[Stru]('{"val": 1, "val2": "lala", "val3": {"a": 2, "brazilian_steak": "leleu"}}')! == Stru{
55 val: 1
56 val2: 'lala'
57 val3: Stru2{
58 a: 2
59 brazilian_steak: 'leleu'
60 }
61 }
62
63 // pretty print
64 assert json.decode[Stru]('{
65 "val": 1,
66 "val2": "lala",
67 "val3": {
68 "a": 2,
69 "brazilian_steak": "leleu"
70 }
71 }')! == Stru{
72 val: 1
73 val2: 'lala'
74 val3: Stru2{
75 a: 2
76 brazilian_steak: 'leleu'
77 }
78 }
79}
80