diff --git a/src/de/impls.rs b/src/de/impls.rs index bfad1e07..73ee53ee 100644 --- a/src/de/impls.rs +++ b/src/de/impls.rs @@ -3,6 +3,8 @@ use std::hash::Hash; use std::marker::PhantomData; use std::num::FromPrimitive; use std::path; +use std::rc::Rc; +use std::sync::Arc; use de::{ Deserialize, @@ -650,3 +652,31 @@ impl Deserialize for path::PathBuf { } } +/////////////////////////////////////////////////////////////////////////////// + +impl Deserialize for Box { + fn deserialize(deserializer: &mut D) -> Result, D::Error> + where D: Deserializer, + { + let val = try!(Deserialize::deserialize(deserializer)); + Ok(Box::new(val)) + } +} + +impl Deserialize for Arc { + fn deserialize(deserializer: &mut D) -> Result, D::Error> + where D: Deserializer, + { + let val = try!(Deserialize::deserialize(deserializer)); + Ok(Arc::new(val)) + } +} + +impl Deserialize for Rc { + fn deserialize(deserializer: &mut D) -> Result, D::Error> + where D: Deserializer, + { + let val = try!(Deserialize::deserialize(deserializer)); + Ok(Rc::new(val)) + } +}