Skip to content

Commit a413d00

Browse files
author
Jorge Aparicio
committed
Implement ToJson for &[T], and add tests. Closes #14619
1 parent 918dbfe commit a413d00

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

src/libserialize/json.rs

+54
Original file line numberDiff line numberDiff line change
@@ -2227,6 +2227,10 @@ impl<A:ToJson,B:ToJson,C:ToJson> ToJson for (A, B, C) {
22272227
}
22282228
}
22292229

2230+
impl<'a, A:ToJson> ToJson for &'a [A] {
2231+
fn to_json(&self) -> Json { List(self.iter().map(|elt| elt.to_json()).collect()) }
2232+
}
2233+
22302234
impl<A:ToJson> ToJson for ~[A] {
22312235
fn to_json(&self) -> Json { List(self.iter().map(|elt| elt.to_json()).collect()) }
22322236
}
@@ -3334,6 +3338,56 @@ mod tests {
33343338
assert!(stack.get(1) == Key("foo"));
33353339
}
33363340

3341+
#[test]
3342+
fn test_to_json() {
3343+
use collections::{HashMap,TreeMap};
3344+
use super::ToJson;
3345+
3346+
let list2 = List(vec!(Number(1.0_f64), Number(2.0_f64)));
3347+
let list3 = List(vec!(Number(1.0f64), Number(2.0f64), Number(3.0f64)));
3348+
let object = {
3349+
let mut tree_map = TreeMap::new();
3350+
tree_map.insert("a".to_string(), Number(1.0_f64));
3351+
tree_map.insert("b".to_string(), Number(2.0_f64));
3352+
Object(box tree_map)
3353+
};
3354+
3355+
assert_eq!(list2.to_json(), list2);
3356+
assert_eq!(object.to_json(), object);
3357+
assert_eq!(3_i.to_json(), Number(3.0_f64));
3358+
assert_eq!(4_i8.to_json(), Number(4.0_f64));
3359+
assert_eq!(5_i16.to_json(), Number(5.0_f64));
3360+
assert_eq!(6_i32.to_json(), Number(6.0_f64));
3361+
assert_eq!(7_i64.to_json(), Number(7.0_f64));
3362+
assert_eq!(8_u.to_json(), Number(8.0_f64));
3363+
assert_eq!(9_u8.to_json(), Number(9.0_f64));
3364+
assert_eq!(10_u16.to_json(), Number(10.0_f64));
3365+
assert_eq!(11_u32.to_json(), Number(11.0_f64));
3366+
assert_eq!(12_u64.to_json(), Number(12.0_f64));
3367+
assert_eq!(13.0_f32.to_json(), Number(13.0_f64));
3368+
assert_eq!(14.0_f64.to_json(), Number(14.0_f64));
3369+
assert_eq!(().to_json(), Null);
3370+
assert_eq!(true.to_json(), Boolean(true));
3371+
assert_eq!(false.to_json(), Boolean(false));
3372+
assert_eq!("abc".to_string().to_json(), String("abc".to_string()));
3373+
assert_eq!((1, 2).to_json(), list2);
3374+
assert_eq!((1, 2, 3).to_json(), list3);
3375+
assert_eq!([1, 2].to_json(), list2);
3376+
assert_eq!((&[1, 2, 3]).to_json(), list3);
3377+
assert_eq!((~[1, 2]).to_json(), list2);
3378+
assert_eq!(vec!(1, 2, 3).to_json(), list3);
3379+
let mut tree_map = TreeMap::new();
3380+
tree_map.insert("a".to_string(), 1);
3381+
tree_map.insert("b".to_string(), 2);
3382+
assert_eq!(tree_map.to_json(), object);
3383+
let mut hash_map = HashMap::new();
3384+
hash_map.insert("a".to_string(), 1);
3385+
hash_map.insert("b".to_string(), 2);
3386+
assert_eq!(hash_map.to_json(), object);
3387+
assert_eq!(Some(15).to_json(), Number(15 as f64));
3388+
assert_eq!(None::<int>.to_json(), Null);
3389+
}
3390+
33373391
#[bench]
33383392
fn bench_streaming_small(b: &mut Bencher) {
33393393
b.iter( || {

0 commit comments

Comments
 (0)