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 B16FutureDecode<I,O,E>{ fn future_decode<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_decode_impl { ($i:ty,$o:ty) => { impl B16FutureDecode<$i,$o,B16DecodeError> for B16<$o>{ fn future_decode<F>(f:F) -> Then< F, Result<$o,B16DecodeError>, fn(Result<F::Item,F::Error>)->Result<$o,B16DecodeError> > where F: Future<Item=$i> { f.then(|v|->Result<$o,B16DecodeError>{ match v{ Ok(o) => B16::<$o>::decode(o), Err(_) => Err(B16DecodeError::Undefined) } }) } } } } future_decode_impl!(String,u8); future_decode_impl!(Vec<u8>,u8); future_decode_impl!(String,i8); future_decode_impl!(Vec<u8>,i8); future_decode_impl!(String,u16); future_decode_impl!(Vec<u8>,u16); future_decode_impl!(String,i16); future_decode_impl!(Vec<u8>,i16); future_decode_impl!(String,u32); future_decode_impl!(Vec<u8>,u32); future_decode_impl!(String,i32); future_decode_impl!(Vec<u8>,i32); future_decode_impl!(String,u64); future_decode_impl!(Vec<u8>,u64); future_decode_impl!(String,i64); future_decode_impl!(Vec<u8>,i64); future_decode_impl!(String,String); future_decode_impl!(String,Vec<u8>); future_decode_impl!(Vec<u8>,Vec<u8>); future_decode_impl!(String,Vec<i8>); future_decode_impl!(Vec<u8>,Vec<i8>); future_decode_impl!(String,Vec<u16>); future_decode_impl!(Vec<u8>,Vec<u16>); future_decode_impl!(String,Vec<i16>); future_decode_impl!(Vec<u8>,Vec<i16>); future_decode_impl!(String,Vec<u32>); future_decode_impl!(Vec<u8>,Vec<u32>); future_decode_impl!(String,Vec<i32>); future_decode_impl!(Vec<u8>,Vec<i32>); future_decode_impl!(String,Vec<u64>); future_decode_impl!(Vec<u8>,Vec<u64>); future_decode_impl!(String,Vec<i64>); future_decode_impl!(Vec<u8>,Vec<i64>);