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}