1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
pub trait B16FutureEncode<I,O,E>{ fn future_encode<F>(f:F) -> Then< F, Result<O,E>, fn(Result<F::Item,F::Error>)->Result<O,E> > where F: Future<Item=I>; } macro_rules! future_encode_impl { ($i:ty,$o:ty) => { impl B16FutureEncode<$i,$o,B16EncodeError> for B16<$o>{ fn future_encode<F>(f:F) -> Then< F, Result<$o,B16EncodeError>, fn(Result<F::Item,F::Error>)->Result<$o,B16EncodeError> > where F: Future<Item=$i> { f.then(|v|->Result<$o,B16EncodeError>{ match v{ Ok(o) => B16::<$o>::encode(o), Err(_) => Err(B16EncodeError::Undefined) } }) } } } } future_encode_impl!(u8,String); future_encode_impl!(u8,Vec<u8>); future_encode_impl!(i8,String); future_encode_impl!(i8,Vec<u8>); future_encode_impl!(u16,String); future_encode_impl!(u16,Vec<u8>); future_encode_impl!(i16,String); future_encode_impl!(i16,Vec<u8>); future_encode_impl!(u32,String); future_encode_impl!(u32,Vec<u8>); future_encode_impl!(i32,String); future_encode_impl!(i32,Vec<u8>); future_encode_impl!(u64,String); future_encode_impl!(u64,Vec<u8>); future_encode_impl!(i64,String); future_encode_impl!(i64,Vec<u8>); future_encode_impl!(String,String); future_encode_impl!(Vec<u8>,String); future_encode_impl!(Vec<u8>,Vec<u8>); future_encode_impl!(Vec<i8>,String); future_encode_impl!(Vec<i8>,Vec<u8>); future_encode_impl!(Vec<u16>,String); future_encode_impl!(Vec<u16>,Vec<u8>); future_encode_impl!(Vec<i16>,String); future_encode_impl!(Vec<i16>,Vec<u8>); future_encode_impl!(Vec<u32>,String); future_encode_impl!(Vec<u32>,Vec<u8>); future_encode_impl!(Vec<i32>,String); future_encode_impl!(Vec<i32>,Vec<u8>); future_encode_impl!(Vec<u64>,String); future_encode_impl!(Vec<u64>,Vec<u8>); future_encode_impl!(Vec<i64>,String); future_encode_impl!(Vec<i64>,Vec<u8>);