[][src]Derive Macro lain_derive::BinarySerialize

#[derive(BinarySerialize)]
{
    // Attributes available to this derive:
    #[lain]
}

Implements [lain::traits::BinarySerialize] on the given struct/enum. The byteorder of fields can be overridden with #[byteorder(big)] or #[byteorder(little)]

Example

This example deliberately fails to compile
extern crate lain;

use lain::{BinarySerialize, hexdump};

use std::io::BufWriter;

#[derive(BinarySerialize)]
struct LittleEndianStruct {
   little_endian_field: u32,
}

#[derive(BinarySerialize)]
struct MyStruct {
   field1: u32,
   #[byteorder(little)]
   field2: LittleEndianStruct,
}

fn serialize_struct() {
   let s = MyStruct {
       field1: 0xAABBCCDD,
       field2: AlwaysLittleEndianStruct {
           little_endian_field: 0x00112233,
       },
   };

   let mut serialized_buffer = [0u8; std::mem::size_of::<MyStruct>()];
   {
       let buffer_ref: &mut [u8] = &mut serialized_buffer;
       let mut writer = BufWriter::new(buffer_ref);
       s.binary_serialize::<_, lain::byteorder::BigEndian>(&mut writer);
   }
   println!("{}", &hexdump(serialized_buffer.iter()));
   // Output:
   // ------00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
   // 0000: AA BB CC DD 33 22 11 00
}