From: Jorge Aparicio Date: Tue, 3 Jun 2014 15:49:26 +0000 (-0500) Subject: Implement ToJson for &[T], and add tests. Closes #14619 X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=a413d005a77d294f6e7b173b898684d56224b19f;p=rust.git Implement ToJson for &[T], and add tests. Closes #14619 --- diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs index 5e23c9c3451..82f9294fc9a 100644 --- a/src/libserialize/json.rs +++ b/src/libserialize/json.rs @@ -2227,6 +2227,10 @@ fn to_json(&self) -> Json { } } +impl<'a, A:ToJson> ToJson for &'a [A] { + fn to_json(&self) -> Json { List(self.iter().map(|elt| elt.to_json()).collect()) } +} + impl ToJson for ~[A] { fn to_json(&self) -> Json { List(self.iter().map(|elt| elt.to_json()).collect()) } } @@ -3334,6 +3338,56 @@ fn test_stack() { assert!(stack.get(1) == Key("foo")); } + #[test] + fn test_to_json() { + use collections::{HashMap,TreeMap}; + use super::ToJson; + + let list2 = List(vec!(Number(1.0_f64), Number(2.0_f64))); + let list3 = List(vec!(Number(1.0f64), Number(2.0f64), Number(3.0f64))); + let object = { + let mut tree_map = TreeMap::new(); + tree_map.insert("a".to_string(), Number(1.0_f64)); + tree_map.insert("b".to_string(), Number(2.0_f64)); + Object(box tree_map) + }; + + assert_eq!(list2.to_json(), list2); + assert_eq!(object.to_json(), object); + assert_eq!(3_i.to_json(), Number(3.0_f64)); + assert_eq!(4_i8.to_json(), Number(4.0_f64)); + assert_eq!(5_i16.to_json(), Number(5.0_f64)); + assert_eq!(6_i32.to_json(), Number(6.0_f64)); + assert_eq!(7_i64.to_json(), Number(7.0_f64)); + assert_eq!(8_u.to_json(), Number(8.0_f64)); + assert_eq!(9_u8.to_json(), Number(9.0_f64)); + assert_eq!(10_u16.to_json(), Number(10.0_f64)); + assert_eq!(11_u32.to_json(), Number(11.0_f64)); + assert_eq!(12_u64.to_json(), Number(12.0_f64)); + assert_eq!(13.0_f32.to_json(), Number(13.0_f64)); + assert_eq!(14.0_f64.to_json(), Number(14.0_f64)); + assert_eq!(().to_json(), Null); + assert_eq!(true.to_json(), Boolean(true)); + assert_eq!(false.to_json(), Boolean(false)); + assert_eq!("abc".to_string().to_json(), String("abc".to_string())); + assert_eq!((1, 2).to_json(), list2); + assert_eq!((1, 2, 3).to_json(), list3); + assert_eq!([1, 2].to_json(), list2); + assert_eq!((&[1, 2, 3]).to_json(), list3); + assert_eq!((~[1, 2]).to_json(), list2); + assert_eq!(vec!(1, 2, 3).to_json(), list3); + let mut tree_map = TreeMap::new(); + tree_map.insert("a".to_string(), 1); + tree_map.insert("b".to_string(), 2); + assert_eq!(tree_map.to_json(), object); + let mut hash_map = HashMap::new(); + hash_map.insert("a".to_string(), 1); + hash_map.insert("b".to_string(), 2); + assert_eq!(hash_map.to_json(), object); + assert_eq!(Some(15).to_json(), Number(15 as f64)); + assert_eq!(None::.to_json(), Null); + } + #[bench] fn bench_streaming_small(b: &mut Bencher) { b.iter( || {