Skip to content

Commit

Permalink
Add deserialize impls for smart pointers
Browse files Browse the repository at this point in the history
This allows deserializing into a Box/Arc/Rc pointer
  • Loading branch information
alexcrichton committed Apr 2, 2015
1 parent ed569bd commit e150553
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/de/impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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))
}
}

0 comments on commit e150553

Please sign in to comment.