fidl_next_protocol/
buffer.rs1use fidl_next_codec::{
6 DecodeError, DecoderExt as _, EncodeError, EncoderExt as _, WireI32, WireU32, WireU64,
7};
8
9use crate::{FLAG_0_WIRE_FORMAT_V2_BIT, MAGIC_NUMBER, Transport, WireEpitaph, WireMessageHeader};
10
11pub fn encode_header<T: Transport>(
13 buffer: &mut T::SendBuffer,
14 txid: u32,
15 ordinal: u64,
16) -> Result<(), EncodeError> {
17 buffer.encode_next(WireMessageHeader {
18 txid: WireU32(txid),
19 flags: [FLAG_0_WIRE_FORMAT_V2_BIT, 0, 0],
20 magic_number: MAGIC_NUMBER,
21 ordinal: WireU64(ordinal),
22 })
23}
24
25pub fn decode_header<T: Transport>(
27 mut buffer: &mut T::RecvBuffer,
28) -> Result<(u32, u64), DecodeError> {
29 let (txid, ordinal) = {
30 let header = buffer.decode_owned::<WireMessageHeader>()?;
31 (*header.txid, *header.ordinal)
32 };
33
34 Ok((txid, ordinal))
35}
36
37pub fn encode_epitaph<T: Transport>(
39 buffer: &mut T::SendBuffer,
40 error: i32,
41) -> Result<(), EncodeError> {
42 buffer.encode_next(WireEpitaph { error: WireI32(error) })
43}
44
45pub fn decode_epitaph<T: Transport>(mut buffer: &mut T::RecvBuffer) -> Result<i32, DecodeError> {
47 Ok(*buffer.decode_owned::<WireEpitaph>()?.error)
48}