fidl_next_protocol/
wire.rs1use core::mem::MaybeUninit;
6
7use fidl_next_codec::{
8 Decode, DecodeError, Encodable, Encode, EncodeError, EncodeRef, Slot, WireU32, WireU64,
9 ZeroPadding,
10};
11
12use zerocopy::IntoBytes;
13
14#[derive(Clone, Copy, Debug, IntoBytes)]
16#[repr(C)]
17pub struct WireMessageHeader {
18 pub txid: WireU32,
20 pub flags: [u8; 3],
22 pub magic_number: u8,
24 pub ordinal: WireU64,
26}
27
28unsafe impl ZeroPadding for WireMessageHeader {
29 #[inline]
30 fn zero_padding(_: &mut MaybeUninit<Self>) {
31 }
33}
34
35pub const FLAG_0_WIRE_FORMAT_V2_BIT: u8 = 0b0000_0010;
37
38pub const MAGIC_NUMBER: u8 = 0x01;
40
41impl Encodable for WireMessageHeader {
42 type Encoded = WireMessageHeader;
43}
44
45unsafe impl<E: ?Sized> Encode<E> for WireMessageHeader {
46 #[inline]
47 fn encode(
48 self,
49 encoder: &mut E,
50 out: &mut MaybeUninit<Self::Encoded>,
51 ) -> Result<(), EncodeError> {
52 self.encode_ref(encoder, out)
53 }
54}
55
56unsafe impl<E: ?Sized> EncodeRef<E> for WireMessageHeader {
57 #[inline]
58 fn encode_ref(
59 &self,
60 _: &mut E,
61 out: &mut MaybeUninit<Self::Encoded>,
62 ) -> Result<(), EncodeError> {
63 out.write(*self);
64 Ok(())
65 }
66}
67
68unsafe impl<D: ?Sized> Decode<D> for WireMessageHeader {
69 #[inline]
70 fn decode(_: Slot<'_, Self>, _: &mut D) -> Result<(), DecodeError> {
71 Ok(())
72 }
73}