1
Fork 0

DTSify libserialize traits

- ToBase64
- FromBase64
- ToHex
- FromHex
- ToJson
- Encodable
This commit is contained in:
Jorge Aparicio 2014-11-06 11:25:09 -05:00
parent 60a669a174
commit 679eb9191d
4 changed files with 25 additions and 18 deletions

View file

@ -54,13 +54,13 @@ static URLSAFE_CHARS: &'static[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\
0123456789-_"; 0123456789-_";
/// A trait for converting a value to base64 encoding. /// A trait for converting a value to base64 encoding.
pub trait ToBase64 { pub trait ToBase64 for Sized? {
/// Converts the value of `self` to a base64 value following the specified /// Converts the value of `self` to a base64 value following the specified
/// format configuration, returning the owned string. /// format configuration, returning the owned string.
fn to_base64(&self, config: Config) -> String; fn to_base64(&self, config: Config) -> String;
} }
impl<'a> ToBase64 for &'a [u8] { impl ToBase64 for [u8] {
/** /**
* Turn a vector of `u8` bytes into a base64 string. * Turn a vector of `u8` bytes into a base64 string.
* *
@ -155,7 +155,7 @@ impl<'a> ToBase64 for &'a [u8] {
} }
/// A trait for converting from base64 encoded values. /// A trait for converting from base64 encoded values.
pub trait FromBase64 { pub trait FromBase64 for Sized? {
/// Converts the value of `self`, interpreted as base64 encoded data, into /// Converts the value of `self`, interpreted as base64 encoded data, into
/// an owned vector of bytes, returning the vector. /// an owned vector of bytes, returning the vector.
fn from_base64(&self) -> Result<Vec<u8>, FromBase64Error>; fn from_base64(&self) -> Result<Vec<u8>, FromBase64Error>;
@ -192,7 +192,7 @@ impl error::Error for FromBase64Error {
} }
} }
impl<'a> FromBase64 for &'a str { impl FromBase64 for str {
/** /**
* Convert any base64 encoded string (literal, `@`, `&`, or `~`) * Convert any base64 encoded string (literal, `@`, `&`, or `~`)
* to the byte values it encodes. * to the byte values it encodes.
@ -227,7 +227,7 @@ impl<'a> FromBase64 for &'a str {
} }
} }
impl<'a> FromBase64 for &'a [u8] { impl FromBase64 for [u8] {
fn from_base64(&self) -> Result<Vec<u8>, FromBase64Error> { fn from_base64(&self) -> Result<Vec<u8>, FromBase64Error> {
let mut r = Vec::new(); let mut r = Vec::new();
let mut buf: u32 = 0; let mut buf: u32 = 0;

View file

@ -16,7 +16,7 @@ use std::string;
use std::error; use std::error;
/// A trait for converting a value to hexadecimal encoding /// A trait for converting a value to hexadecimal encoding
pub trait ToHex { pub trait ToHex for Sized? {
/// Converts the value of `self` to a hex value, returning the owned /// Converts the value of `self` to a hex value, returning the owned
/// string. /// string.
fn to_hex(&self) -> String; fn to_hex(&self) -> String;
@ -24,7 +24,7 @@ pub trait ToHex {
static CHARS: &'static[u8] = b"0123456789abcdef"; static CHARS: &'static[u8] = b"0123456789abcdef";
impl<'a> ToHex for &'a [u8] { impl ToHex for [u8] {
/** /**
* Turn a vector of `u8` bytes into a hexadecimal string. * Turn a vector of `u8` bytes into a hexadecimal string.
* *
@ -54,7 +54,7 @@ impl<'a> ToHex for &'a [u8] {
} }
/// A trait for converting hexadecimal encoded values /// A trait for converting hexadecimal encoded values
pub trait FromHex { pub trait FromHex for Sized? {
/// Converts the value of `self`, interpreted as hexadecimal encoded data, /// Converts the value of `self`, interpreted as hexadecimal encoded data,
/// into an owned vector of bytes, returning the vector. /// into an owned vector of bytes, returning the vector.
fn from_hex(&self) -> Result<Vec<u8>, FromHexError>; fn from_hex(&self) -> Result<Vec<u8>, FromHexError>;
@ -92,7 +92,7 @@ impl error::Error for FromHexError {
} }
impl<'a> FromHex for &'a str { impl FromHex for str {
/** /**
* Convert any hexadecimal encoded string (literal, `@`, `&`, or `~`) * Convert any hexadecimal encoded string (literal, `@`, `&`, or `~`)
* to the byte values it encodes. * to the byte values it encodes.

View file

@ -2303,7 +2303,7 @@ impl ::Decoder<DecoderError> for Decoder {
} }
/// A trait for converting values to JSON /// A trait for converting values to JSON
pub trait ToJson { pub trait ToJson for Sized? {
/// Converts the value of `self` to an instance of JSON /// Converts the value of `self` to an instance of JSON
fn to_json(&self) -> Json; fn to_json(&self) -> Json;
} }
@ -2389,7 +2389,7 @@ tuple_impl!{A, B, C, D, E, F, G, H, I, J}
tuple_impl!{A, B, C, D, E, F, G, H, I, J, K} tuple_impl!{A, B, C, D, E, F, G, H, I, J, K}
tuple_impl!{A, B, C, D, E, F, G, H, I, J, K, L} tuple_impl!{A, B, C, D, E, F, G, H, I, J, K, L}
impl<'a, A: ToJson> ToJson for &'a [A] { impl<A: ToJson> ToJson for [A] {
fn to_json(&self) -> Json { List(self.iter().map(|elt| elt.to_json()).collect()) } fn to_json(&self) -> Json { List(self.iter().map(|elt| elt.to_json()).collect()) }
} }

View file

@ -169,7 +169,7 @@ pub trait Decoder<E> {
fn error(&mut self, err: &str) -> 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>; 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> { 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> { fn encode(&self, s: &mut S) -> Result<(), E> {
(**self).encode(s) (**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> { fn encode(&self, s: &mut S) -> Result<(), E> {
(**self).encode(s) (**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> { fn decode(d: &mut D) -> Result<Box<T>, E> {
Ok(box try!(Decodable::decode(d))) 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> { impl<E, S:Encoder<E>,T:Encodable<S, E>> Encodable<S, E> for Rc<T> {
#[inline] #[inline]
fn encode(&self, s: &mut S) -> Result<(), E> { 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> { fn encode(&self, s: &mut S) -> Result<(), E> {
s.emit_seq(self.len(), |s| { s.emit_seq(self.len(), |s| {
for (i, e) in self.iter().enumerate() { for (i, e) in self.iter().enumerate() {