bytevec::bytevec_impls! [] [src]

macro_rules! bytevec_impls {
    {$(impl $name:ident {$($field:ident : $t:ty),*})*} => { ... };
}

Implements the byte serialization traits for the given structures.

This macro implements both the ByteEncodable and ByteDecodable traits for the given struct definitions. This macro does not declare the struct definitions, the user should either declare them separately or use the bytevec_decl trait.

This trait also allows the user to create a partial implementation of the serialization operations for a select number of the fields of the structure. If the actual definition of the struct has more fields than the one provided to the macro, only the listed fields in the macro invocation will be serialized and deserialized. In the deserialization process, the rest of the fields of the struct will be initialized using the value returned from the Default::default() method, so the struct must implement Default.

Examples

#[derive(PartialEq, Eq, Debug, Default)]
struct Vertex3d {
    x: u32,
    y: u32,
    z: u32
}

bytevec_impls! {
    impl Vertex3d {
        x: u32,
        y: u32
    }
}

fn main() {
    let p1 = Vertex3d {x: 32, y: 436, z: 0};
    let bytes = p1.encode::<u32>().unwrap();
    let p2 = Vertex3d::decode::<u32>(&bytes).unwrap();
    assert_eq!(p1, p2);
}