brackets/
lib.rs

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}