Skip to main content

fidl_next_protocol/
body.rs

1// Copyright 2026 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use fidl_next_codec::{AsDecoder, DecoderExt};
6
7use crate::Transport;
8use crate::wire::MessageHeader;
9
10/// The body of an encoded FIDL message.
11///
12/// This is a simple wrapper around `T::RecvBuffer` that skips the transaction
13/// header when `as_decoder` is called.
14pub struct Body<T: Transport> {
15    buffer: T::RecvBuffer,
16}
17
18impl<T: Transport> Body<T> {
19    /// Returns a new `Body` wrapping a `RecvBuffer`.
20    pub fn new(buffer: T::RecvBuffer) -> Self {
21        Self { buffer }
22    }
23}
24
25unsafe impl<'de, T: Transport> AsDecoder<'de> for Body<T> {
26    type Decoder = <T::RecvBuffer as AsDecoder<'de>>::Decoder;
27
28    fn as_decoder(&'de mut self) -> Self::Decoder {
29        let mut decoder = self.buffer.as_decoder();
30        let _ = decoder.take_slot::<MessageHeader>();
31        decoder
32    }
33}