use pastey::paste;
use taped::Tape;
use crate::{
Serialize,
error::{DecodeError, EncodeError},
read_write::{Read, Write},
};
macro_rules! impl_serialize_tuple {
($($T:ident),*) => { paste! {
impl<$($T: Serialize),*> Serialize for ($($T),*) {
fn encode(&self, dest: &mut Vec<u8>) -> Result<(), EncodeError> {
let ($([<$T:lower>]),*) = self;
$(
dest.write([<$T:lower>])?;
)*
Ok(())
}
fn decode(src: &mut Tape<'_, u8>) -> Result<Self, DecodeError> {
Ok(($(
src.read::<$T>()?
),*))
}
}
}};
}
impl_serialize_tuple!(T, U);
impl_serialize_tuple!(T, U, V);