Skip to content

Commit c5b6d2a

Browse files
authored
decoder2: prepare for moving into json2 (#25039)
1 parent 13ba08f commit c5b6d2a

8 files changed

Lines changed: 702 additions & 696 deletions

File tree

vlib/x/json2/decoder2/check.v

Lines changed: 444 additions & 0 deletions
Large diffs are not rendered by default.

vlib/x/json2/decoder2/decode.v

Lines changed: 49 additions & 457 deletions
Large diffs are not rendered by default.

vlib/x/json2/decoder2/decode_sumtype.v

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ fn (mut decoder Decoder) check_element_type_valid[T](element T, current_node &No
9292
return decoder.check_struct_type_valid(element, current_node)
9393
}
9494
}
95-
else {}
9695
}
9796

9897
return false
@@ -304,7 +303,6 @@ fn (mut decoder Decoder) init_sumtype_by_value_kind[T](mut val T, value_info Val
304303
}
305304
}
306305
}
307-
else {}
308306
}
309307

310308
if failed_struct {

vlib/x/json2/decoder2/decode_test.v

Lines changed: 0 additions & 230 deletions
This file was deleted.
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
import x.json2.decoder2 as json
2+
import x.json2
3+
4+
fn test_check_if_json_match() {
5+
// /* Test wrong string values */
6+
mut has_error := false
7+
8+
json.decode[string]('{"key": "value"}') or {
9+
if err is json.JsonDecodeError {
10+
assert err.line == 1
11+
assert err.character == 1
12+
assert err.message == 'Data: Expected string, but got object'
13+
}
14+
has_error = true
15+
}
16+
assert has_error, 'Expected error'
17+
has_error = false
18+
19+
json.decode[map[string]string]('"value"') or {
20+
if err is json.JsonDecodeError {
21+
assert err.line == 1
22+
assert err.character == 1
23+
assert err.message == 'Data: Expected object, but got string_'
24+
}
25+
has_error = true
26+
}
27+
assert has_error, 'Expected error'
28+
has_error = false
29+
30+
json.decode[[]int]('{"key": "value"}') or {
31+
if err is json.JsonDecodeError {
32+
assert err.line == 1
33+
assert err.character == 1
34+
assert err.message == 'Data: Expected array, but got object'
35+
}
36+
has_error = true
37+
}
38+
assert has_error, 'Expected error'
39+
has_error = false
40+
41+
json.decode[string]('[1, 2, 3]') or {
42+
if err is json.JsonDecodeError {
43+
assert err.line == 1
44+
assert err.character == 1
45+
assert err.message == 'Data: Expected string, but got array'
46+
}
47+
has_error = true
48+
}
49+
assert has_error, 'Expected error'
50+
has_error = false
51+
52+
json.decode[int]('{"key": "value"}') or {
53+
if err is json.JsonDecodeError {
54+
assert err.line == 1
55+
assert err.character == 1
56+
assert err.message == 'Data: Expected number, but got object'
57+
}
58+
has_error = true
59+
}
60+
assert has_error, 'Expected error'
61+
has_error = false
62+
63+
json.decode[bool]('{"key": "value"}') or {
64+
if err is json.JsonDecodeError {
65+
assert err.line == 1
66+
assert err.character == 1
67+
assert err.message == 'Data: Expected boolean, but got object'
68+
}
69+
has_error = true
70+
}
71+
assert has_error, 'Expected error'
72+
has_error = false
73+
74+
// /* Right string values */
75+
json.decode[string]('"value"') or { assert false }
76+
77+
json.decode[map[string]string]('{"key": "value"}') or { assert false }
78+
79+
json.decode[[]int]('[1, 2, 3]') or { assert false }
80+
81+
json.decode[string]('"string"') or { assert false }
82+
83+
json.decode[int]('123') or { assert false }
84+
85+
json.decode[bool]('true') or { assert false }
86+
87+
json.decode[bool]('false') or { assert false }
88+
}
89+
90+
fn test_check_json_format() {
91+
json_and_error_message := [
92+
{
93+
'json': ']'
94+
'error': 'Syntax: unknown value kind'
95+
},
96+
{
97+
'json': '}'
98+
'error': 'Syntax: unknown value kind'
99+
},
100+
{
101+
'json': 'truely'
102+
'error': 'Syntax: invalid value. Unexpected character after boolean end'
103+
},
104+
{
105+
'json': '0[1]'
106+
'error': 'Syntax: invalid value. Unexpected character after number end'
107+
},
108+
{
109+
'json': '[1, 2, g3]'
110+
'error': 'Syntax: unknown value kind'
111+
},
112+
{
113+
'json': '[1, 2,, 3]'
114+
'error': 'Syntax: unknown value kind'
115+
},
116+
{
117+
'json': '{"key": 123'
118+
'error': 'Syntax: EOF error: braces are not closed'
119+
},
120+
{
121+
'json': '{"key": 123,'
122+
'error': 'Syntax: EOF error: Expecting object key after `,`'
123+
},
124+
{
125+
'json': '{"key": 123, "key2": 456,}'
126+
'error': 'Syntax: Expecting object key after `,`'
127+
},
128+
{
129+
'json': '[[1, 2, 3], [4, 5, 6],]'
130+
'error': 'Syntax: Cannot use `,`, before `]`'
131+
},
132+
]
133+
134+
for json_and_error in json_and_error_message {
135+
mut has_error := false
136+
137+
json.decode[json2.Any](json_and_error['json']) or {
138+
if err is json.JsonDecodeError {
139+
assert err.message == json_and_error['error']
140+
}
141+
has_error = true
142+
}
143+
assert has_error, 'Expected error ${json_and_error['error']}'
144+
}
145+
}

0 commit comments

Comments
 (0)