From e150553d589c12a59a894d1b36ae5573837a039a Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 2 Apr 2015 12:53:51 -0700 Subject: [PATCH] Add deserialize impls for smart pointers This allows deserializing into a Box/Arc/Rc pointer --- src/de/impls.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) 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)) + } +}