use super::{BorrowDecode, BorrowDecoder, Decode, Decoder}; use crate::error::DecodeError; macro_rules! impl_tuple { () => {}; ($first:ident $(, $extra:ident)*) => { impl<'de, $first $(, $extra)*> BorrowDecode<'de> for ($first, $($extra, )*) where $first: BorrowDecode<'de>, $( $extra : BorrowDecode<'de>, )* { fn borrow_decode>(decoder: &mut BD) -> Result { Ok(( $first::borrow_decode(decoder)?, $($extra :: borrow_decode(decoder)?, )* )) } } impl<$first $(, $extra)*> Decode for ($first, $($extra, )*) where $first: Decode, $( $extra : Decode, )* { fn decode(decoder: &mut DE) -> Result { Ok(( $first::decode(decoder)?, $($extra :: decode(decoder)?, )* )) } } } } impl_tuple!(A); impl_tuple!(A, B); impl_tuple!(A, B, C); impl_tuple!(A, B, C, D); impl_tuple!(A, B, C, D, E); impl_tuple!(A, B, C, D, E, F); impl_tuple!(A, B, C, D, E, F, G); impl_tuple!(A, B, C, D, E, F, G, H); impl_tuple!(A, B, C, D, E, F, G, H, I); impl_tuple!(A, B, C, D, E, F, G, H, I, J); impl_tuple!(A, B, C, D, E, F, G, H, I, J, K); impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L); impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L, M); impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L, M, N); impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O); impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P);