diff options
| author | Jorge Aparicio <japaricious@gmail.com> | 2014-11-06 11:25:09 -0500 |
|---|---|---|
| committer | Jorge Aparicio <japaricious@gmail.com> | 2014-11-06 13:08:24 -0500 |
| commit | 679eb9191dd06a2e0dacf3602da56765211fd76a (patch) | |
| tree | 5f54112030558429db3a1e1729faa5ef5b0da9ed /src/libserialize/serialize.rs | |
| parent | 60a669a1743b845dfa349684ef057bc98ec6d840 (diff) | |
| download | rust-679eb9191dd06a2e0dacf3602da56765211fd76a.tar.gz rust-679eb9191dd06a2e0dacf3602da56765211fd76a.zip | |
DTSify libserialize traits
- ToBase64 - FromBase64 - ToHex - FromHex - ToJson - Encodable
Diffstat (limited to 'src/libserialize/serialize.rs')
| -rw-r--r-- | src/libserialize/serialize.rs | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/libserialize/serialize.rs b/src/libserialize/serialize.rs index b7c37defbfa..7539a6dc348 100644 --- a/src/libserialize/serialize.rs +++ b/src/libserialize/serialize.rs @@ -169,7 +169,7 @@ pub trait Decoder<E> { fn error(&mut self, err: &str) -> E; } -pub trait Encodable<S:Encoder<E>, E> { +pub trait Encodable<S:Encoder<E>, E> for Sized? { fn encode(&self, s: &mut S) -> Result<(), E>; } @@ -297,9 +297,9 @@ impl<E, D:Decoder<E>> Decodable<D, E> for i64 { } } -impl<'a, E, S:Encoder<E>> Encodable<S, E> for &'a str { +impl<E, S:Encoder<E>> Encodable<S, E> for str { fn encode(&self, s: &mut S) -> Result<(), E> { - s.emit_str(*self) + s.emit_str(self) } } @@ -375,24 +375,31 @@ impl<E, D:Decoder<E>> Decodable<D, E> for () { } } -impl<'a, E, S:Encoder<E>,T:Encodable<S, E>> Encodable<S, E> for &'a T { +impl<'a, E, S: Encoder<E>, Sized? T: Encodable<S, E>> Encodable<S, E> for &'a T { fn encode(&self, s: &mut S) -> Result<(), E> { (**self).encode(s) } } -impl<E, S:Encoder<E>,T:Encodable<S, E>> Encodable<S, E> for Box<T> { +impl<E, S: Encoder<E>, Sized? T: Encodable<S, E>> Encodable<S, E> for Box<T> { fn encode(&self, s: &mut S) -> Result<(), E> { (**self).encode(s) } } -impl<E, D:Decoder<E>,T:Decodable<D, E>> Decodable<D, E> for Box<T> { +impl<E, D:Decoder<E>, T: Decodable<D, E>> Decodable<D, E> for Box<T> { fn decode(d: &mut D) -> Result<Box<T>, E> { Ok(box try!(Decodable::decode(d))) } } +impl<E, D:Decoder<E>, T: Decodable<D, E>> Decodable<D, E> for Box<[T]> { + fn decode(d: &mut D) -> Result<Box<[T]>, E> { + let v: Vec<T> = try!(Decodable::decode(d)); + Ok(v.into_boxed_slice()) + } +} + impl<E, S:Encoder<E>,T:Encodable<S, E>> Encodable<S, E> for Rc<T> { #[inline] fn encode(&self, s: &mut S) -> Result<(), E> { @@ -407,7 +414,7 @@ impl<E, D:Decoder<E>,T:Decodable<D, E>> Decodable<D, E> for Rc<T> { } } -impl<'a, E, S:Encoder<E>,T:Encodable<S, E>> Encodable<S, E> for &'a [T] { +impl<E, S:Encoder<E>,T:Encodable<S, E>> Encodable<S, E> for [T] { fn encode(&self, s: &mut S) -> Result<(), E> { s.emit_seq(self.len(), |s| { for (i, e) in self.iter().enumerate() { |
