Add deserialize impls for smart pointers

This allows deserializing into a Box/Arc/Rc pointer
This commit is contained in:
Alex Crichton
2015-04-02 12:53:51 -07:00
parent ed569bd3f6
commit e150553d58
+30
View File
@@ -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<T: Deserialize> Deserialize for Box<T> {
fn deserialize<D>(deserializer: &mut D) -> Result<Box<T>, D::Error>
where D: Deserializer,
{
let val = try!(Deserialize::deserialize(deserializer));
Ok(Box::new(val))
}
}
impl<T: Deserialize> Deserialize for Arc<T> {
fn deserialize<D>(deserializer: &mut D) -> Result<Arc<T>, D::Error>
where D: Deserializer,
{
let val = try!(Deserialize::deserialize(deserializer));
Ok(Arc::new(val))
}
}
impl<T: Deserialize> Deserialize for Rc<T> {
fn deserialize<D>(deserializer: &mut D) -> Result<Rc<T>, D::Error>
where D: Deserializer,
{
let val = try!(Deserialize::deserialize(deserializer));
Ok(Rc::new(val))
}
}