fdomain_client/fidl_next/
wire_types.rs1use super::{HandleEncoder, WireHandle, WireOptionalHandle};
6use crate::{Channel, Event, EventPair, Handle, HandleBased, Socket};
7use fidl_next_codec::{
8 Encodable, EncodableOption, Encode, EncodeError, EncodeOption, FromWire, FromWireOption,
9};
10use std::mem::MaybeUninit;
11
12macro_rules! handle_type {
13 ($name:ident) => {
14 impl Encodable for $name {
15 type Encoded = WireHandle;
16 }
17
18 unsafe impl<E: HandleEncoder + ?Sized> Encode<E> for $name {
19 fn encode(
20 self,
21 encoder: &mut E,
22 out: &mut MaybeUninit<Self::Encoded>,
23 ) -> Result<(), EncodeError> {
24 Encode::<E>::encode(self.into_handle(), encoder, out)
25 }
26 }
27
28 impl FromWire<WireHandle> for $name {
29 fn from_wire(wire: WireHandle) -> Self {
30 $name::from_handle(Handle::from_wire(wire))
31 }
32 }
33
34 impl EncodableOption for $name {
35 type EncodedOption = WireOptionalHandle;
36 }
37
38 unsafe impl<E: HandleEncoder + ?Sized> EncodeOption<E> for $name {
39 fn encode_option(
40 this: Option<Self>,
41 encoder: &mut E,
42 out: &mut MaybeUninit<Self::EncodedOption>,
43 ) -> Result<(), EncodeError> {
44 EncodeOption::<E>::encode_option(this.map(HandleBased::into_handle), encoder, out)
45 }
46 }
47
48 impl FromWireOption<WireOptionalHandle> for $name {
49 fn from_wire_option(wire: WireOptionalHandle) -> Option<Self> {
50 Handle::from_wire_option(wire).map(Self::from_handle)
51 }
52 }
53 };
54}
55
56handle_type!(Channel);
57handle_type!(Event);
58handle_type!(EventPair);
59handle_type!(Socket);