xref: /linux/rust/zerocopy/benches/formats/coco_dynamic_padding.rs (revision b079329b8691768962aa514b8f8c9077ca352459)
1*c3739801SMiguel Ojeda use zerocopy_derive::*;
2*c3739801SMiguel Ojeda 
3*c3739801SMiguel Ojeda // The only valid value of this type are the bytes `0xC0C0`.
4*c3739801SMiguel Ojeda #[derive(TryFromBytes, KnownLayout, Immutable)]
5*c3739801SMiguel Ojeda #[repr(u16)]
6*c3739801SMiguel Ojeda pub enum C0C0 {
7*c3739801SMiguel Ojeda     _XC0C0 = 0xC0C0,
8*c3739801SMiguel Ojeda }
9*c3739801SMiguel Ojeda 
10*c3739801SMiguel Ojeda #[derive(FromBytes, KnownLayout, Immutable, SplitAt)]
11*c3739801SMiguel Ojeda #[repr(C, align(4))]
12*c3739801SMiguel Ojeda pub struct Packet<Magic> {
13*c3739801SMiguel Ojeda     magic_number: Magic,
14*c3739801SMiguel Ojeda     milk: u8,
15*c3739801SMiguel Ojeda     mug_size: u8,
16*c3739801SMiguel Ojeda     temperature: [u8; 5],
17*c3739801SMiguel Ojeda     marshmallows: [[u8; 3]],
18*c3739801SMiguel Ojeda }
19*c3739801SMiguel Ojeda 
20*c3739801SMiguel Ojeda /// A packet begining with the magic number `0xC0C0`.
21*c3739801SMiguel Ojeda pub type CocoPacket = Packet<C0C0>;
22*c3739801SMiguel Ojeda 
23*c3739801SMiguel Ojeda /// A packet beginning with any two initialized bytes.
24*c3739801SMiguel Ojeda pub type LocoPacket = Packet<[u8; 2]>;
25