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
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);