json_macro/
lib.rs

1extern crate rustc_serialize;
2
3#[macro_export]
4macro_rules! json {
5    ([$($val:tt),*]) => {{
6    	use rustc_serialize::json::{Json, Array};
7        let mut array = Array::new();
8        $( array.push(json!($val)); )*
9        Json::Array(array)
10    }};
11    ({ $($key:expr => $val:tt),* }) => {{
12    	use rustc_serialize::json::{Json, Object};
13        let mut object = Object::new();
14        $( object.insert($key.to_owned(), json!($val)); )*
15        Json::Object(object)
16    }};
17    ($val:expr) => {{
18        use rustc_serialize::json::ToJson;
19        $val.to_json()
20    }};
21}
22
23#[macro_export]
24macro_rules! json_object {
25    { $($key:expr => $val:tt),* } => {{
26    	use rustc_serialize::json::Object;
27        let mut object = Object::new();
28        $( object.insert($key.to_owned(), json!($val)); )*
29        object
30    }};
31}
32
33
34mod test {
35
36	#[test]
37	fn test_json_plain() {
38		use rustc_serialize::json::{Json};
39		assert_eq!(Json::I64(1), json!(1i64));
40		assert_eq!(Json::U64(2), json!(2u64));
41		assert_eq!(Json::F64(3.1), json!(3.1f64));
42		assert_eq!(Json::String("string".to_string()), json!("string"));
43		assert_eq!(Json::Boolean(true), json!(true));
44		assert_eq!(Json::Null, json!(Json::Null));
45	}
46
47	#[test]
48	fn test_json_array() {
49		use rustc_serialize::json::{Json, Array};
50		let mut array = Array::new();
51		array.push(Json::I64(1));
52		array.push(Json::I64(2));
53		array.push(Json::I64(3));
54		array.push(Json::I64(4));
55		array.push(Json::I64(5));
56		assert_eq!(Json::Array(array), json!([1i64,2,3,4,5]));
57	}
58
59	#[test]
60	fn test_json_object() {
61		use rustc_serialize::json::{Json, Object};
62		let mut object = Object::new();
63		object.insert("one".to_string(), Json::F64(3.1));
64		let mut inner = Object::new();
65		inner.insert("sub".to_string(), Json::String("string".to_string()));
66		object.insert("two".to_string(), Json::Object(inner));		
67		assert_eq!(object, json_object!{
68			"one" => 3.1f64,
69			"two" => (Json::Object(json_object!{
70				"sub" => "string"
71			}))
72		});
73		assert_eq!(Json::Object(object), json!({
74			"one" => 3.1f64,
75			"two" => (json!({
76				"sub" => "string"
77			}))
78		}));
79	}
80}