1mod json;
2pub use brackets_macros::{FromJson, ToJson};
3pub use json::{FromJson, JsonArray, JsonObject, JsonParseError, ToJson};
4
5#[cfg(test)]
6mod test {
7
8 use crate::{self as brackets};
9 use crate::{FromJson, JsonObject};
10
11 const TEST_JSON: &'static str = r#"
12 {
13 "string_value": "Some Text Here",
14 "number_value": 1,
15 "object_value": {
16 "string_value": "Some Text Here 2",
17 "number_value": 2
18 },
19 "array_value": [
20 {
21 "object_value": {
22 "string_value": "Some Text Here 3",
23 "number_value": 3
24 }
25 },
26 {
27 "object_value": {
28 "string_value": "Some Text Here 4",
29 "number_value": 4
30 }
31 }
32 ],
33 "array_strings": [
34 "test0", "test1",
35 "test2"
36 ],
37 "array_nums": [
38 0, 1,
39 2, 3,
40 4
41 ],
42 "array_bools": [ true, false ],
43 "string_with_quotes": "Hello \"World!\""
44 }
45 "#;
46
47 #[derive(FromJson)]
48 struct Test {
49 string_value: String,
50 number_value: i32,
51 object_value: NestedTest,
52 array_value: Vec<NestedTestVecItem>,
53 array_strings: Vec<String>,
54 array_nums: Vec<i32>,
55 array_bools: Vec<bool>,
56 string_with_quotes: String
57 }
58
59 #[derive(FromJson)]
60 struct NestedTestVecItem {
61 object_value: NestedTest,
62 }
63
64 #[derive(FromJson)]
65 struct NestedTest {
66 string_value: String,
67 number_value: i32,
68 }
69
70 #[test]
71 fn string_value() {
72 let test = Test::from_json(&JsonObject::from_string(&TEST_JSON)).unwrap();
73 assert_eq!(test.string_value, "Some Text Here")
74 }
75
76 #[test]
77 fn number_value() {
78 let test = Test::from_json(&JsonObject::from_string(&TEST_JSON)).unwrap();
79 assert_eq!(test.number_value, 1)
80 }
81
82 #[test]
83 fn nested_string_value() {
84 let test = Test::from_json(&JsonObject::from_string(&TEST_JSON)).unwrap();
85 assert_eq!(test.object_value.string_value, "Some Text Here 2")
86 }
87
88 #[test]
89 fn nested_number_value() {
90 let test = Test::from_json(&JsonObject::from_string(&TEST_JSON)).unwrap();
91 assert_eq!(test.object_value.number_value, 2)
92 }
93
94 #[test]
95 fn array_value() {
96 let test = Test::from_json(&JsonObject::from_string(&TEST_JSON)).unwrap();
97 let mut i = 3;
98 for t in test.array_value {
99 assert_eq!(t.object_value.string_value, format!("Some Text Here {}", i));
100 assert_eq!(t.object_value.number_value, i);
101 i += 1;
102 }
103 }
104
105 #[test]
106 fn array_nums() {
107 let test = Test::from_json(&JsonObject::from_string(&TEST_JSON)).unwrap();
108 let mut i = 0;
109 for t in test.array_nums {
110 assert_eq!(t, i);
111 i += 1;
112 }
113 }
114
115 #[test]
116 fn array_strings() {
117 let test = Test::from_json(&JsonObject::from_string(&TEST_JSON)).unwrap();
118 let mut i = 0;
119 for t in test.array_strings {
120 assert_eq!(t, format!("test{}", i));
121 i += 1;
122 }
123 }
124
125 #[test]
126 fn array_bools() {
127 let test = Test::from_json(&JsonObject::from_string(&TEST_JSON)).unwrap();
128 assert_eq!(test.array_bools[0], true);
129 assert_eq!(test.array_bools[1], false);
130 }
131
132 #[test]
133 fn string_with_quotes() {
134 let test = Test::from_json(&JsonObject::from_string(&TEST_JSON)).unwrap();
135 assert_eq!(test.string_with_quotes, "Hello \"World!\"")
136 }
137}