diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index cefe46ef..cfff6704 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -881,6 +881,15 @@ impl Deserialize for Box { } } +impl Deserialize for Box<[T]> { + fn deserialize(deserializer: &mut D) -> Result, D::Error> + where D: Deserializer, + { + let v: Vec = try!(Deserialize::deserialize(deserializer)); + Ok(v.into_boxed_slice()) + } +} + impl Deserialize for Arc { fn deserialize(deserializer: &mut D) -> Result, D::Error> where D: Deserializer, diff --git a/serde_tests/tests/test_de.rs b/serde_tests/tests/test_de.rs index f5bc158b..45d0b332 100644 --- a/serde_tests/tests/test_de.rs +++ b/serde_tests/tests/test_de.rs @@ -664,6 +664,21 @@ declare_tests! { Token::Unit, ], } + test_box { + Box::new(0i32) => vec![Token::I32(0)], + } + test_boxed_slice { + Box::new([0, 1, 2]) => vec![ + Token::SeqStart(Some(3)), + Token::SeqSep, + Token::I32(0), + Token::SeqSep, + Token::I32(1), + Token::SeqSep, + Token::I32(2), + Token::SeqEnd, + ], + } test_net_ipv4addr { "1.2.3.4".parse::().unwrap() => vec![Token::Str("1.2.3.4")], } diff --git a/serde_tests/tests/test_ser.rs b/serde_tests/tests/test_ser.rs index a67a6921..2a8117a1 100644 --- a/serde_tests/tests/test_ser.rs +++ b/serde_tests/tests/test_ser.rs @@ -262,6 +262,21 @@ declare_ser_tests! { Token::EnumMapEnd, ], } + test_box { + Box::new(0i32) => &[Token::I32(0)], + } + test_boxed_slice { + Box::new([0, 1, 2]) => &[ + Token::SeqArrayStart(3), + Token::SeqSep, + Token::I32(0), + Token::SeqSep, + Token::I32(1), + Token::SeqSep, + Token::I32(2), + Token::SeqEnd, + ], + } test_net_ipv4addr { "1.2.3.4".parse::().unwrap() => &[Token::Str("1.2.3.4")], }