mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-25 16:17:55 +00:00
implement Serializable/Deserializable for box types
This commit is contained in:
@@ -9,8 +9,11 @@
|
||||
// except according to those terms.
|
||||
|
||||
use std::collections::{HashMap, TreeMap};
|
||||
use std::gc::{GC, Gc};
|
||||
use std::hash::Hash;
|
||||
use std::num;
|
||||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
|
||||
#[deriving(Clone, PartialEq, Show)]
|
||||
pub enum Token {
|
||||
@@ -471,6 +474,48 @@ impl_deserializable!(String, expect_string)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
impl<T: Deserializable> Deserializable for Box<T> {
|
||||
#[inline]
|
||||
fn deserialize_token<
|
||||
D: Deserializer<E>,
|
||||
E
|
||||
>(d: &mut D, token: Token) -> Result<Box<T>, E> {
|
||||
Ok(box try!(Deserializable::deserialize_token(d, token)))
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Deserializable + 'static> Deserializable for Gc<T> {
|
||||
#[inline]
|
||||
fn deserialize_token<
|
||||
D: Deserializer<E>,
|
||||
E
|
||||
>(d: &mut D, token: Token) -> Result<Gc<T>, E> {
|
||||
Ok(box (GC) try!(Deserializable::deserialize_token(d, token)))
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Deserializable> Deserializable for Rc<T> {
|
||||
#[inline]
|
||||
fn deserialize_token<
|
||||
D: Deserializer<E>,
|
||||
E
|
||||
>(d: &mut D, token: Token) -> Result<Rc<T>, E> {
|
||||
Ok(Rc::new(try!(Deserializable::deserialize_token(d, token))))
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Deserializable + Send + Share> Deserializable for Arc<T> {
|
||||
#[inline]
|
||||
fn deserialize_token<
|
||||
D: Deserializer<E>,
|
||||
E
|
||||
>(d: &mut D, token: Token) -> Result<Arc<T>, E> {
|
||||
Ok(Arc::new(try!(Deserializable::deserialize_token(d, token))))
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
impl<T: Deserializable> Deserializable for Option<T> {
|
||||
#[inline]
|
||||
fn deserialize_token<
|
||||
|
||||
Reference in New Issue
Block a user