1mod json;
2mod slow_parse;
3mod parse;
4
5pub use json::JSONValue::{self, *};
6pub use slow_parse::*;
7pub use parse::*;
8
9#[cfg(test)]
10mod tests {
11 use super::*;
12 use pa_rs::parser::Parse;
13
14 #[test]
15 fn test_parse_json() {
16 let raw_json = "\
17 {\
18 \"squadName\": \"Super hero squad\",\
19 \"homeTown\": \"Metro City\",\
20 \"formed\": 2016,\
21 \"secretBase\": \"Super tower\",\
22 \"active\": true,\
23 \"members\": [\
24 {\
25 \"name\": \"Molecule Man\",\
26 \"age\": 29,\
27 \"secretIdentity\": \"Dan Jukes\",\
28 \"powers\": [\"Radiation resistance\", \"Turning tiny\", \"Radiation blast\"]\
29 },\
30 {\
31 \"name\": \"Madame Uppercut\",\
32 \"age\": 39,\
33 \"secretIdentity\": \"Jane Wilson\",\
34 \"powers\": [\
35 \"Million tonne punch\",\
36 \"Damage resistance\",\
37 \"Superhuman reflexes\"\
38 ]\
39 },\
40 {\
41 \"name\": \"Eternal Flame\",\
42 \"age\": 1000000,\
43 \"secretIdentity\": \"Unknown\",\
44 \"powers\": [\
45 \"Immortality\",\
46 \"Heat Immunity\",\
47 \"Inferno\",\
48 \"Teleportation\",\
49 \"Interdimensional travel\"\
50 ]\
51 }\
52 ]\
53 }\
54 ";
55
56 let s = String::from;
57
58 let parsed_json = JSONObject(vec![
59 (s("squadName"), JSONString(s("Super hero squad"))),
60 (s("homeTown"), JSONString(s("Metro City"))),
61 (s("formed"), JSONNumber(2016.0)),
62 (s("secretBase"), JSONString(s("Super tower"))),
63 (s("active"), JSONBool(true)),
64 (
65 s("members"),
66 JSONArray(vec![
67 JSONObject(vec![
68 (s("name"), JSONString(s("Molecule Man"))),
69 (s("age"), JSONNumber(29.0)),
70 (s("secretIdentity"), JSONString(s("Dan Jukes"))),
71 (
72 s("powers"),
73 JSONArray(vec![
74 JSONString(s("Radiation resistance")),
75 JSONString(s("Turning tiny")),
76 JSONString(s("Radiation blast")),
77 ]),
78 ),
79 ]),
80 JSONObject(vec![
81 (s("name"), JSONString(s("Madame Uppercut"))),
82 (s("age"), JSONNumber(39.0)),
83 (s("secretIdentity"), JSONString(s("Jane Wilson"))),
84 (
85 s("powers"),
86 JSONArray(vec![
87 JSONString(s("Million tonne punch")),
88 JSONString(s("Damage resistance")),
89 JSONString(s("Superhuman reflexes")),
90 ]),
91 ),
92 ]),
93 JSONObject(vec![
94 (s("name"), JSONString(s("Eternal Flame"))),
95 (s("age"), JSONNumber(1000000.0)),
96 (s("secretIdentity"), JSONString(s("Unknown"))),
97 (
98 s("powers"),
99 JSONArray(vec![
100 JSONString(s("Immortality")),
101 JSONString(s("Heat Immunity")),
102 JSONString(s("Inferno")),
103 JSONString(s("Teleportation")),
104 JSONString(s("Interdimensional travel")),
105 ]),
106 ),
107 ]),
108 ]),
109 ),
110 ]);
111
112 assert_eq!(parse_json().run(raw_json), Ok(parsed_json.clone()));
113 assert_eq!(JSONValueParser.run(raw_json), Ok(parsed_json));
114
115 println!("{:?}", JSONValueParser.run(raw_json));
116 }
117}