fidl_fuchsia_fdomain__common/
fidl_fuchsia_fdomain__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3// fidl_experiment = allow_arbitrary_error_types
4// fidl_experiment = no_resource_attribute
5
6#![warn(clippy::all)]
7#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
8
9use bitflags::bitflags;
10use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
15pub enum SocketDisposition {
16    NoChange,
17    WriteEnabled,
18    WriteDisabled,
19    #[doc(hidden)]
20    __SourceBreaking {
21        unknown_ordinal: u32,
22    },
23}
24
25/// Pattern that matches an unknown `SocketDisposition` member.
26#[macro_export]
27macro_rules! SocketDispositionUnknown {
28    () => {
29        _
30    };
31}
32
33impl SocketDisposition {
34    #[inline]
35    pub fn from_primitive(prim: u32) -> Option<Self> {
36        match prim {
37            0 => Some(Self::NoChange),
38            1 => Some(Self::WriteEnabled),
39            2 => Some(Self::WriteDisabled),
40            _ => None,
41        }
42    }
43
44    #[inline]
45    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
46        match prim {
47            0 => Self::NoChange,
48            1 => Self::WriteEnabled,
49            2 => Self::WriteDisabled,
50            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
51        }
52    }
53
54    #[inline]
55    pub fn unknown() -> Self {
56        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
57    }
58
59    #[inline]
60    pub const fn into_primitive(self) -> u32 {
61        match self {
62            Self::NoChange => 0,
63            Self::WriteEnabled => 1,
64            Self::WriteDisabled => 2,
65            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
66        }
67    }
68
69    #[inline]
70    pub fn is_unknown(&self) -> bool {
71        match self {
72            Self::__SourceBreaking { unknown_ordinal: _ } => true,
73            _ => false,
74        }
75    }
76}
77
78#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
79pub enum SocketType {
80    Stream,
81    Datagram,
82    #[doc(hidden)]
83    __SourceBreaking {
84        unknown_ordinal: u32,
85    },
86}
87
88/// Pattern that matches an unknown `SocketType` member.
89#[macro_export]
90macro_rules! SocketTypeUnknown {
91    () => {
92        _
93    };
94}
95
96impl SocketType {
97    #[inline]
98    pub fn from_primitive(prim: u32) -> Option<Self> {
99        match prim {
100            0 => Some(Self::Stream),
101            1 => Some(Self::Datagram),
102            _ => None,
103        }
104    }
105
106    #[inline]
107    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
108        match prim {
109            0 => Self::Stream,
110            1 => Self::Datagram,
111            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
112        }
113    }
114
115    #[inline]
116    pub fn unknown() -> Self {
117        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
118    }
119
120    #[inline]
121    pub const fn into_primitive(self) -> u32 {
122        match self {
123            Self::Stream => 0,
124            Self::Datagram => 1,
125            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
126        }
127    }
128
129    #[inline]
130    pub fn is_unknown(&self) -> bool {
131        match self {
132            Self::__SourceBreaking { unknown_ordinal: _ } => true,
133            _ => false,
134        }
135    }
136}
137
138#[derive(Clone, Debug, PartialEq)]
139pub struct AioStopped {
140    pub error: Option<Box<Error>>,
141}
142
143impl fidl::Persistable for AioStopped {}
144
145#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
146#[repr(C)]
147pub struct BadHandleId {
148    pub id: u32,
149}
150
151impl fidl::Persistable for BadHandleId {}
152
153#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
154#[repr(C)]
155pub struct ChannelCreateChannelRequest {
156    pub handles: [NewHandleId; 2],
157}
158
159impl fidl::Persistable for ChannelCreateChannelRequest {}
160
161#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
162pub struct ChannelMessage {
163    pub data: Vec<u8>,
164    pub handles: Vec<HandleInfo>,
165}
166
167impl fidl::Persistable for ChannelMessage {}
168
169#[derive(Clone, Debug, PartialEq)]
170pub struct ChannelOnChannelStreamingDataRequest {
171    pub handle: HandleId,
172    pub channel_sent: ChannelSent,
173}
174
175impl fidl::Persistable for ChannelOnChannelStreamingDataRequest {}
176
177#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
178#[repr(C)]
179pub struct ChannelReadChannelRequest {
180    pub handle: HandleId,
181}
182
183impl fidl::Persistable for ChannelReadChannelRequest {}
184
185#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
186#[repr(C)]
187pub struct ChannelReadChannelStreamingStartRequest {
188    pub handle: HandleId,
189}
190
191impl fidl::Persistable for ChannelReadChannelStreamingStartRequest {}
192
193#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
194#[repr(C)]
195pub struct ChannelReadChannelStreamingStopRequest {
196    pub handle: HandleId,
197}
198
199impl fidl::Persistable for ChannelReadChannelStreamingStopRequest {}
200
201#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
202pub struct ChannelWriteChannelRequest {
203    pub handle: HandleId,
204    pub data: Vec<u8>,
205    pub handles: Handles,
206}
207
208impl fidl::Persistable for ChannelWriteChannelRequest {}
209
210#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
211pub struct ClosedDuringRead;
212
213impl fidl::Persistable for ClosedDuringRead {}
214
215#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
216#[repr(C)]
217pub struct EventCreateEventRequest {
218    pub handle: NewHandleId,
219}
220
221impl fidl::Persistable for EventCreateEventRequest {}
222
223#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
224#[repr(C)]
225pub struct EventPairCreateEventPairRequest {
226    pub handles: [NewHandleId; 2],
227}
228
229impl fidl::Persistable for EventPairCreateEventPairRequest {}
230
231#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
232pub struct FDomainCloseRequest {
233    pub handles: Vec<HandleId>,
234}
235
236impl fidl::Persistable for FDomainCloseRequest {}
237
238#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
239pub struct FDomainDuplicateRequest {
240    pub handle: HandleId,
241    pub new_handle: NewHandleId,
242    pub rights: fidl::Rights,
243}
244
245impl fidl::Persistable for FDomainDuplicateRequest {}
246
247#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
248#[repr(C)]
249pub struct FDomainGetKoidRequest {
250    pub handle: HandleId,
251}
252
253impl fidl::Persistable for FDomainGetKoidRequest {}
254
255#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
256#[repr(C)]
257pub struct FDomainGetNamespaceRequest {
258    pub new_handle: NewHandleId,
259}
260
261impl fidl::Persistable for FDomainGetNamespaceRequest {}
262
263#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
264pub struct FDomainReplaceRequest {
265    pub handle: HandleId,
266    pub new_handle: NewHandleId,
267    pub rights: fidl::Rights,
268}
269
270impl fidl::Persistable for FDomainReplaceRequest {}
271
272#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
273#[repr(C)]
274pub struct FDomainSignalPeerRequest {
275    pub handle: HandleId,
276    pub set: u32,
277    pub clear: u32,
278}
279
280impl fidl::Persistable for FDomainSignalPeerRequest {}
281
282#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
283#[repr(C)]
284pub struct FDomainSignalRequest {
285    pub handle: HandleId,
286    pub set: u32,
287    pub clear: u32,
288}
289
290impl fidl::Persistable for FDomainSignalRequest {}
291
292#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
293#[repr(C)]
294pub struct FDomainWaitForSignalsRequest {
295    pub handle: HandleId,
296    pub signals: u32,
297}
298
299impl fidl::Persistable for FDomainWaitForSignalsRequest {}
300
301#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
302#[repr(C)]
303pub struct FDomainGetKoidResponse {
304    pub koid: u64,
305}
306
307impl fidl::Persistable for FDomainGetKoidResponse {}
308
309#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
310#[repr(C)]
311pub struct FDomainWaitForSignalsResponse {
312    pub signals: u32,
313}
314
315impl fidl::Persistable for FDomainWaitForSignalsResponse {}
316
317#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
318pub struct HandleDisposition {
319    pub handle: HandleOp,
320    pub rights: fidl::Rights,
321}
322
323impl fidl::Persistable for HandleDisposition {}
324
325#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
326#[repr(C)]
327pub struct HandleId {
328    pub id: u32,
329}
330
331impl fidl::Persistable for HandleId {}
332
333#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
334pub struct HandleInfo {
335    pub handle: HandleId,
336    pub type_: fidl::ObjectType,
337    pub rights: fidl::Rights,
338}
339
340impl fidl::Persistable for HandleInfo {}
341
342#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
343#[repr(C)]
344pub struct NewHandleId {
345    pub id: u32,
346}
347
348impl fidl::Persistable for NewHandleId {}
349
350#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
351#[repr(C)]
352pub struct NewHandleIdOutOfRange {
353    pub id: u32,
354}
355
356impl fidl::Persistable for NewHandleIdOutOfRange {}
357
358#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
359pub struct NewHandleIdReused {
360    pub id: u32,
361    pub same_call: bool,
362}
363
364impl fidl::Persistable for NewHandleIdReused {}
365
366#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
367pub struct NoReadInProgress;
368
369impl fidl::Persistable for NoReadInProgress {}
370
371#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
372pub struct RightsUnknown {
373    pub rights: fidl::Rights,
374}
375
376impl fidl::Persistable for RightsUnknown {}
377
378#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
379#[repr(C)]
380pub struct SignalsUnknown {
381    pub signals: u32,
382}
383
384impl fidl::Persistable for SignalsUnknown {}
385
386#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
387pub struct SocketCreateSocketRequest {
388    pub options: SocketType,
389    pub handles: [NewHandleId; 2],
390}
391
392impl fidl::Persistable for SocketCreateSocketRequest {}
393
394#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
395pub struct SocketData {
396    pub data: Vec<u8>,
397    pub is_datagram: bool,
398}
399
400impl fidl::Persistable for SocketData {}
401
402#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
403pub struct SocketDispositionUnknown {
404    pub disposition: SocketDisposition,
405}
406
407impl fidl::Persistable for SocketDispositionUnknown {}
408
409#[derive(Clone, Debug, PartialEq)]
410pub struct SocketOnSocketStreamingDataRequest {
411    pub handle: HandleId,
412    pub socket_message: SocketMessage,
413}
414
415impl fidl::Persistable for SocketOnSocketStreamingDataRequest {}
416
417#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
418#[repr(C)]
419pub struct SocketReadSocketRequest {
420    pub handle: HandleId,
421    pub max_bytes: u64,
422}
423
424impl fidl::Persistable for SocketReadSocketRequest {}
425
426#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
427#[repr(C)]
428pub struct SocketReadSocketStreamingStartRequest {
429    pub handle: HandleId,
430}
431
432impl fidl::Persistable for SocketReadSocketStreamingStartRequest {}
433
434#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
435#[repr(C)]
436pub struct SocketReadSocketStreamingStopRequest {
437    pub handle: HandleId,
438}
439
440impl fidl::Persistable for SocketReadSocketStreamingStopRequest {}
441
442#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
443pub struct SocketSetSocketDispositionRequest {
444    pub handle: HandleId,
445    pub disposition: SocketDisposition,
446    pub disposition_peer: SocketDisposition,
447}
448
449impl fidl::Persistable for SocketSetSocketDispositionRequest {}
450
451#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
452pub struct SocketTypeUnknown {
453    pub type_: SocketType,
454}
455
456impl fidl::Persistable for SocketTypeUnknown {}
457
458#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
459pub struct SocketWriteSocketRequest {
460    pub handle: HandleId,
461    pub data: Vec<u8>,
462}
463
464impl fidl::Persistable for SocketWriteSocketRequest {}
465
466#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
467#[repr(C)]
468pub struct SocketWriteSocketResponse {
469    pub wrote: u64,
470}
471
472impl fidl::Persistable for SocketWriteSocketResponse {}
473
474#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
475pub struct StreamingReadInProgress;
476
477impl fidl::Persistable for StreamingReadInProgress {}
478
479#[derive(Clone, Debug, PartialEq)]
480pub struct WriteSocketError {
481    pub error: Error,
482    pub wrote: u64,
483}
484
485impl fidl::Persistable for WriteSocketError {}
486
487#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
488pub struct WrongHandleType {
489    pub expected: fidl::ObjectType,
490    pub got: fidl::ObjectType,
491}
492
493impl fidl::Persistable for WrongHandleType {}
494
495#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
496pub struct WroteToSelf;
497
498impl fidl::Persistable for WroteToSelf {}
499
500#[derive(Clone, Debug)]
501pub enum ChannelSent {
502    Message(ChannelMessage),
503    Stopped(AioStopped),
504    #[doc(hidden)]
505    __SourceBreaking {
506        unknown_ordinal: u64,
507    },
508}
509
510/// Pattern that matches an unknown `ChannelSent` member.
511#[macro_export]
512macro_rules! ChannelSentUnknown {
513    () => {
514        _
515    };
516}
517
518// Custom PartialEq so that unknown variants are not equal to themselves.
519impl PartialEq for ChannelSent {
520    fn eq(&self, other: &Self) -> bool {
521        match (self, other) {
522            (Self::Message(x), Self::Message(y)) => *x == *y,
523            (Self::Stopped(x), Self::Stopped(y)) => *x == *y,
524            _ => false,
525        }
526    }
527}
528
529impl ChannelSent {
530    #[inline]
531    pub fn ordinal(&self) -> u64 {
532        match *self {
533            Self::Message(_) => 1,
534            Self::Stopped(_) => 2,
535            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
536        }
537    }
538
539    #[inline]
540    pub fn unknown_variant_for_testing() -> Self {
541        Self::__SourceBreaking { unknown_ordinal: 0 }
542    }
543
544    #[inline]
545    pub fn is_unknown(&self) -> bool {
546        match self {
547            Self::__SourceBreaking { .. } => true,
548            _ => false,
549        }
550    }
551}
552
553impl fidl::Persistable for ChannelSent {}
554
555#[derive(Clone, Debug)]
556pub enum Error {
557    TargetError(i32),
558    BadHandleId(BadHandleId),
559    NewHandleIdOutOfRange(NewHandleIdOutOfRange),
560    NewHandleIdReused(NewHandleIdReused),
561    WrongHandleType(WrongHandleType),
562    StreamingReadInProgress(StreamingReadInProgress),
563    NoReadInProgress(NoReadInProgress),
564    WroteToSelf(WroteToSelf),
565    ClosedDuringRead(ClosedDuringRead),
566    SignalsUnknown(SignalsUnknown),
567    RightsUnknown(RightsUnknown),
568    SocketDispositionUnknown(SocketDispositionUnknown),
569    SocketTypeUnknown(SocketTypeUnknown),
570    #[doc(hidden)]
571    __SourceBreaking {
572        unknown_ordinal: u64,
573    },
574}
575
576/// Pattern that matches an unknown `Error` member.
577#[macro_export]
578macro_rules! ErrorUnknown {
579    () => {
580        _
581    };
582}
583
584// Custom PartialEq so that unknown variants are not equal to themselves.
585impl PartialEq for Error {
586    fn eq(&self, other: &Self) -> bool {
587        match (self, other) {
588            (Self::TargetError(x), Self::TargetError(y)) => *x == *y,
589            (Self::BadHandleId(x), Self::BadHandleId(y)) => *x == *y,
590            (Self::NewHandleIdOutOfRange(x), Self::NewHandleIdOutOfRange(y)) => *x == *y,
591            (Self::NewHandleIdReused(x), Self::NewHandleIdReused(y)) => *x == *y,
592            (Self::WrongHandleType(x), Self::WrongHandleType(y)) => *x == *y,
593            (Self::StreamingReadInProgress(x), Self::StreamingReadInProgress(y)) => *x == *y,
594            (Self::NoReadInProgress(x), Self::NoReadInProgress(y)) => *x == *y,
595            (Self::WroteToSelf(x), Self::WroteToSelf(y)) => *x == *y,
596            (Self::ClosedDuringRead(x), Self::ClosedDuringRead(y)) => *x == *y,
597            (Self::SignalsUnknown(x), Self::SignalsUnknown(y)) => *x == *y,
598            (Self::RightsUnknown(x), Self::RightsUnknown(y)) => *x == *y,
599            (Self::SocketDispositionUnknown(x), Self::SocketDispositionUnknown(y)) => *x == *y,
600            (Self::SocketTypeUnknown(x), Self::SocketTypeUnknown(y)) => *x == *y,
601            _ => false,
602        }
603    }
604}
605
606impl Error {
607    #[inline]
608    pub fn ordinal(&self) -> u64 {
609        match *self {
610            Self::TargetError(_) => 1,
611            Self::BadHandleId(_) => 2,
612            Self::NewHandleIdOutOfRange(_) => 3,
613            Self::NewHandleIdReused(_) => 4,
614            Self::WrongHandleType(_) => 5,
615            Self::StreamingReadInProgress(_) => 6,
616            Self::NoReadInProgress(_) => 7,
617            Self::WroteToSelf(_) => 8,
618            Self::ClosedDuringRead(_) => 9,
619            Self::SignalsUnknown(_) => 10,
620            Self::RightsUnknown(_) => 11,
621            Self::SocketDispositionUnknown(_) => 12,
622            Self::SocketTypeUnknown(_) => 13,
623            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
624        }
625    }
626
627    #[inline]
628    pub fn unknown_variant_for_testing() -> Self {
629        Self::__SourceBreaking { unknown_ordinal: 0 }
630    }
631
632    #[inline]
633    pub fn is_unknown(&self) -> bool {
634        match self {
635            Self::__SourceBreaking { .. } => true,
636            _ => false,
637        }
638    }
639}
640
641impl fidl::Persistable for Error {}
642
643#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
644pub enum HandleOp {
645    Move_(HandleId),
646    Duplicate(HandleId),
647}
648
649impl HandleOp {
650    #[inline]
651    pub fn ordinal(&self) -> u64 {
652        match *self {
653            Self::Move_(_) => 1,
654            Self::Duplicate(_) => 2,
655        }
656    }
657}
658
659impl fidl::Persistable for HandleOp {}
660
661#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
662pub enum Handles {
663    Handles(Vec<HandleId>),
664    Dispositions(Vec<HandleDisposition>),
665}
666
667impl Handles {
668    #[inline]
669    pub fn ordinal(&self) -> u64 {
670        match *self {
671            Self::Handles(_) => 1,
672            Self::Dispositions(_) => 2,
673        }
674    }
675}
676
677impl fidl::Persistable for Handles {}
678
679#[derive(Clone, Debug)]
680pub enum SocketMessage {
681    Data(SocketData),
682    Stopped(AioStopped),
683    #[doc(hidden)]
684    __SourceBreaking {
685        unknown_ordinal: u64,
686    },
687}
688
689/// Pattern that matches an unknown `SocketMessage` member.
690#[macro_export]
691macro_rules! SocketMessageUnknown {
692    () => {
693        _
694    };
695}
696
697// Custom PartialEq so that unknown variants are not equal to themselves.
698impl PartialEq for SocketMessage {
699    fn eq(&self, other: &Self) -> bool {
700        match (self, other) {
701            (Self::Data(x), Self::Data(y)) => *x == *y,
702            (Self::Stopped(x), Self::Stopped(y)) => *x == *y,
703            _ => false,
704        }
705    }
706}
707
708impl SocketMessage {
709    #[inline]
710    pub fn ordinal(&self) -> u64 {
711        match *self {
712            Self::Data(_) => 1,
713            Self::Stopped(_) => 2,
714            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
715        }
716    }
717
718    #[inline]
719    pub fn unknown_variant_for_testing() -> Self {
720        Self::__SourceBreaking { unknown_ordinal: 0 }
721    }
722
723    #[inline]
724    pub fn is_unknown(&self) -> bool {
725        match self {
726            Self::__SourceBreaking { .. } => true,
727            _ => false,
728        }
729    }
730}
731
732impl fidl::Persistable for SocketMessage {}
733
734#[derive(Clone, Debug, PartialEq)]
735pub enum WriteChannelError {
736    Error(Error),
737    OpErrors(Vec<Option<Box<Error>>>),
738}
739
740impl WriteChannelError {
741    #[inline]
742    pub fn ordinal(&self) -> u64 {
743        match *self {
744            Self::Error(_) => 1,
745            Self::OpErrors(_) => 2,
746        }
747    }
748}
749
750impl fidl::Persistable for WriteChannelError {}
751
752pub mod channel_ordinals {
753    pub const CREATE_CHANNEL: u64 = 0x182d38bfe88673b5;
754    pub const READ_CHANNEL: u64 = 0x6ef47bf27bf7d050;
755    pub const WRITE_CHANNEL: u64 = 0x75a2559b945d5eb5;
756    pub const READ_CHANNEL_STREAMING_START: u64 = 0x3c73e85476a203df;
757    pub const READ_CHANNEL_STREAMING_STOP: u64 = 0x56f21d6ed68186e0;
758    pub const ON_CHANNEL_STREAMING_DATA: u64 = 0x7d4431805202dfe1;
759}
760
761pub mod event_ordinals {
762    pub const CREATE_EVENT: u64 = 0x7b05b3f262635987;
763}
764
765pub mod event_pair_ordinals {
766    pub const CREATE_EVENT_PAIR: u64 = 0x7aef61effa65656d;
767}
768
769pub mod f_domain_ordinals {
770    pub const CREATE_CHANNEL: u64 = 0x182d38bfe88673b5;
771    pub const READ_CHANNEL: u64 = 0x6ef47bf27bf7d050;
772    pub const WRITE_CHANNEL: u64 = 0x75a2559b945d5eb5;
773    pub const READ_CHANNEL_STREAMING_START: u64 = 0x3c73e85476a203df;
774    pub const READ_CHANNEL_STREAMING_STOP: u64 = 0x56f21d6ed68186e0;
775    pub const ON_CHANNEL_STREAMING_DATA: u64 = 0x7d4431805202dfe1;
776    pub const CREATE_EVENT: u64 = 0x7b05b3f262635987;
777    pub const CREATE_EVENT_PAIR: u64 = 0x7aef61effa65656d;
778    pub const CREATE_SOCKET: u64 = 0x200bf0ea21932de0;
779    pub const SET_SOCKET_DISPOSITION: u64 = 0x60d3c7ccb17f9bdf;
780    pub const READ_SOCKET: u64 = 0x1da8aabec249c02e;
781    pub const WRITE_SOCKET: u64 = 0x5b541623cbbbf683;
782    pub const READ_SOCKET_STREAMING_START: u64 = 0x2a592748d5f33445;
783    pub const READ_SOCKET_STREAMING_STOP: u64 = 0x53e5cade5f4d22e7;
784    pub const ON_SOCKET_STREAMING_DATA: u64 = 0x998b5e66b3c80a2;
785    pub const GET_NAMESPACE: u64 = 0x74f2e74d9f53e11e;
786    pub const CLOSE: u64 = 0x5ef8c24362964257;
787    pub const DUPLICATE: u64 = 0x7a85b94bd1777ab9;
788    pub const REPLACE: u64 = 0x32fa64625a5bd3be;
789    pub const SIGNAL: u64 = 0xe8352fb978996d9;
790    pub const SIGNAL_PEER: u64 = 0x7e84ec8ca7eabaf8;
791    pub const WAIT_FOR_SIGNALS: u64 = 0x8f72d9b4b85c1eb;
792    pub const GET_KOID: u64 = 0x437db979a63402c3;
793}
794
795pub mod socket_ordinals {
796    pub const CREATE_SOCKET: u64 = 0x200bf0ea21932de0;
797    pub const SET_SOCKET_DISPOSITION: u64 = 0x60d3c7ccb17f9bdf;
798    pub const READ_SOCKET: u64 = 0x1da8aabec249c02e;
799    pub const WRITE_SOCKET: u64 = 0x5b541623cbbbf683;
800    pub const READ_SOCKET_STREAMING_START: u64 = 0x2a592748d5f33445;
801    pub const READ_SOCKET_STREAMING_STOP: u64 = 0x53e5cade5f4d22e7;
802    pub const ON_SOCKET_STREAMING_DATA: u64 = 0x998b5e66b3c80a2;
803}
804
805mod internal {
806    use super::*;
807    unsafe impl fidl::encoding::TypeMarker for SocketDisposition {
808        type Owned = Self;
809
810        #[inline(always)]
811        fn inline_align(_context: fidl::encoding::Context) -> usize {
812            std::mem::align_of::<u32>()
813        }
814
815        #[inline(always)]
816        fn inline_size(_context: fidl::encoding::Context) -> usize {
817            std::mem::size_of::<u32>()
818        }
819
820        #[inline(always)]
821        fn encode_is_copy() -> bool {
822            false
823        }
824
825        #[inline(always)]
826        fn decode_is_copy() -> bool {
827            false
828        }
829    }
830
831    impl fidl::encoding::ValueTypeMarker for SocketDisposition {
832        type Borrowed<'a> = Self;
833        #[inline(always)]
834        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
835            *value
836        }
837    }
838
839    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
840        for SocketDisposition
841    {
842        #[inline]
843        unsafe fn encode(
844            self,
845            encoder: &mut fidl::encoding::Encoder<'_, D>,
846            offset: usize,
847            _depth: fidl::encoding::Depth,
848        ) -> fidl::Result<()> {
849            encoder.debug_check_bounds::<Self>(offset);
850            encoder.write_num(self.into_primitive(), offset);
851            Ok(())
852        }
853    }
854
855    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SocketDisposition {
856        #[inline(always)]
857        fn new_empty() -> Self {
858            Self::unknown()
859        }
860
861        #[inline]
862        unsafe fn decode(
863            &mut self,
864            decoder: &mut fidl::encoding::Decoder<'_, D>,
865            offset: usize,
866            _depth: fidl::encoding::Depth,
867        ) -> fidl::Result<()> {
868            decoder.debug_check_bounds::<Self>(offset);
869            let prim = decoder.read_num::<u32>(offset);
870
871            *self = Self::from_primitive_allow_unknown(prim);
872            Ok(())
873        }
874    }
875    unsafe impl fidl::encoding::TypeMarker for SocketType {
876        type Owned = Self;
877
878        #[inline(always)]
879        fn inline_align(_context: fidl::encoding::Context) -> usize {
880            std::mem::align_of::<u32>()
881        }
882
883        #[inline(always)]
884        fn inline_size(_context: fidl::encoding::Context) -> usize {
885            std::mem::size_of::<u32>()
886        }
887
888        #[inline(always)]
889        fn encode_is_copy() -> bool {
890            false
891        }
892
893        #[inline(always)]
894        fn decode_is_copy() -> bool {
895            false
896        }
897    }
898
899    impl fidl::encoding::ValueTypeMarker for SocketType {
900        type Borrowed<'a> = Self;
901        #[inline(always)]
902        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
903            *value
904        }
905    }
906
907    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SocketType {
908        #[inline]
909        unsafe fn encode(
910            self,
911            encoder: &mut fidl::encoding::Encoder<'_, D>,
912            offset: usize,
913            _depth: fidl::encoding::Depth,
914        ) -> fidl::Result<()> {
915            encoder.debug_check_bounds::<Self>(offset);
916            encoder.write_num(self.into_primitive(), offset);
917            Ok(())
918        }
919    }
920
921    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SocketType {
922        #[inline(always)]
923        fn new_empty() -> Self {
924            Self::unknown()
925        }
926
927        #[inline]
928        unsafe fn decode(
929            &mut self,
930            decoder: &mut fidl::encoding::Decoder<'_, D>,
931            offset: usize,
932            _depth: fidl::encoding::Depth,
933        ) -> fidl::Result<()> {
934            decoder.debug_check_bounds::<Self>(offset);
935            let prim = decoder.read_num::<u32>(offset);
936
937            *self = Self::from_primitive_allow_unknown(prim);
938            Ok(())
939        }
940    }
941
942    impl fidl::encoding::ValueTypeMarker for AioStopped {
943        type Borrowed<'a> = &'a Self;
944        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
945            value
946        }
947    }
948
949    unsafe impl fidl::encoding::TypeMarker for AioStopped {
950        type Owned = Self;
951
952        #[inline(always)]
953        fn inline_align(_context: fidl::encoding::Context) -> usize {
954            8
955        }
956
957        #[inline(always)]
958        fn inline_size(_context: fidl::encoding::Context) -> usize {
959            16
960        }
961    }
962
963    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AioStopped, D>
964        for &AioStopped
965    {
966        #[inline]
967        unsafe fn encode(
968            self,
969            encoder: &mut fidl::encoding::Encoder<'_, D>,
970            offset: usize,
971            _depth: fidl::encoding::Depth,
972        ) -> fidl::Result<()> {
973            encoder.debug_check_bounds::<AioStopped>(offset);
974            // Delegate to tuple encoding.
975            fidl::encoding::Encode::<AioStopped, D>::encode(
976                (
977                    <fidl::encoding::OptionalUnion<Error> as fidl::encoding::ValueTypeMarker>::borrow(&self.error),
978                ),
979                encoder, offset, _depth
980            )
981        }
982    }
983    unsafe impl<
984        D: fidl::encoding::ResourceDialect,
985        T0: fidl::encoding::Encode<fidl::encoding::OptionalUnion<Error>, D>,
986    > fidl::encoding::Encode<AioStopped, D> for (T0,)
987    {
988        #[inline]
989        unsafe fn encode(
990            self,
991            encoder: &mut fidl::encoding::Encoder<'_, D>,
992            offset: usize,
993            depth: fidl::encoding::Depth,
994        ) -> fidl::Result<()> {
995            encoder.debug_check_bounds::<AioStopped>(offset);
996            // Zero out padding regions. There's no need to apply masks
997            // because the unmasked parts will be overwritten by fields.
998            // Write the fields.
999            self.0.encode(encoder, offset + 0, depth)?;
1000            Ok(())
1001        }
1002    }
1003
1004    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AioStopped {
1005        #[inline(always)]
1006        fn new_empty() -> Self {
1007            Self { error: fidl::new_empty!(fidl::encoding::OptionalUnion<Error>, D) }
1008        }
1009
1010        #[inline]
1011        unsafe fn decode(
1012            &mut self,
1013            decoder: &mut fidl::encoding::Decoder<'_, D>,
1014            offset: usize,
1015            _depth: fidl::encoding::Depth,
1016        ) -> fidl::Result<()> {
1017            decoder.debug_check_bounds::<Self>(offset);
1018            // Verify that padding bytes are zero.
1019            fidl::decode!(
1020                fidl::encoding::OptionalUnion<Error>,
1021                D,
1022                &mut self.error,
1023                decoder,
1024                offset + 0,
1025                _depth
1026            )?;
1027            Ok(())
1028        }
1029    }
1030
1031    impl fidl::encoding::ValueTypeMarker for BadHandleId {
1032        type Borrowed<'a> = &'a Self;
1033        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1034            value
1035        }
1036    }
1037
1038    unsafe impl fidl::encoding::TypeMarker for BadHandleId {
1039        type Owned = Self;
1040
1041        #[inline(always)]
1042        fn inline_align(_context: fidl::encoding::Context) -> usize {
1043            4
1044        }
1045
1046        #[inline(always)]
1047        fn inline_size(_context: fidl::encoding::Context) -> usize {
1048            4
1049        }
1050        #[inline(always)]
1051        fn encode_is_copy() -> bool {
1052            true
1053        }
1054
1055        #[inline(always)]
1056        fn decode_is_copy() -> bool {
1057            true
1058        }
1059    }
1060
1061    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BadHandleId, D>
1062        for &BadHandleId
1063    {
1064        #[inline]
1065        unsafe fn encode(
1066            self,
1067            encoder: &mut fidl::encoding::Encoder<'_, D>,
1068            offset: usize,
1069            _depth: fidl::encoding::Depth,
1070        ) -> fidl::Result<()> {
1071            encoder.debug_check_bounds::<BadHandleId>(offset);
1072            unsafe {
1073                // Copy the object into the buffer.
1074                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1075                (buf_ptr as *mut BadHandleId).write_unaligned((self as *const BadHandleId).read());
1076                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1077                // done second because the memcpy will write garbage to these bytes.
1078            }
1079            Ok(())
1080        }
1081    }
1082    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1083        fidl::encoding::Encode<BadHandleId, D> for (T0,)
1084    {
1085        #[inline]
1086        unsafe fn encode(
1087            self,
1088            encoder: &mut fidl::encoding::Encoder<'_, D>,
1089            offset: usize,
1090            depth: fidl::encoding::Depth,
1091        ) -> fidl::Result<()> {
1092            encoder.debug_check_bounds::<BadHandleId>(offset);
1093            // Zero out padding regions. There's no need to apply masks
1094            // because the unmasked parts will be overwritten by fields.
1095            // Write the fields.
1096            self.0.encode(encoder, offset + 0, depth)?;
1097            Ok(())
1098        }
1099    }
1100
1101    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BadHandleId {
1102        #[inline(always)]
1103        fn new_empty() -> Self {
1104            Self { id: fidl::new_empty!(u32, D) }
1105        }
1106
1107        #[inline]
1108        unsafe fn decode(
1109            &mut self,
1110            decoder: &mut fidl::encoding::Decoder<'_, D>,
1111            offset: usize,
1112            _depth: fidl::encoding::Depth,
1113        ) -> fidl::Result<()> {
1114            decoder.debug_check_bounds::<Self>(offset);
1115            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1116            // Verify that padding bytes are zero.
1117            // Copy from the buffer into the object.
1118            unsafe {
1119                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1120            }
1121            Ok(())
1122        }
1123    }
1124
1125    impl fidl::encoding::ValueTypeMarker for ChannelCreateChannelRequest {
1126        type Borrowed<'a> = &'a Self;
1127        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1128            value
1129        }
1130    }
1131
1132    unsafe impl fidl::encoding::TypeMarker for ChannelCreateChannelRequest {
1133        type Owned = Self;
1134
1135        #[inline(always)]
1136        fn inline_align(_context: fidl::encoding::Context) -> usize {
1137            4
1138        }
1139
1140        #[inline(always)]
1141        fn inline_size(_context: fidl::encoding::Context) -> usize {
1142            8
1143        }
1144        #[inline(always)]
1145        fn encode_is_copy() -> bool {
1146            true
1147        }
1148
1149        #[inline(always)]
1150        fn decode_is_copy() -> bool {
1151            true
1152        }
1153    }
1154
1155    unsafe impl<D: fidl::encoding::ResourceDialect>
1156        fidl::encoding::Encode<ChannelCreateChannelRequest, D> for &ChannelCreateChannelRequest
1157    {
1158        #[inline]
1159        unsafe fn encode(
1160            self,
1161            encoder: &mut fidl::encoding::Encoder<'_, D>,
1162            offset: usize,
1163            _depth: fidl::encoding::Depth,
1164        ) -> fidl::Result<()> {
1165            encoder.debug_check_bounds::<ChannelCreateChannelRequest>(offset);
1166            unsafe {
1167                // Copy the object into the buffer.
1168                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1169                (buf_ptr as *mut ChannelCreateChannelRequest)
1170                    .write_unaligned((self as *const ChannelCreateChannelRequest).read());
1171                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1172                // done second because the memcpy will write garbage to these bytes.
1173            }
1174            Ok(())
1175        }
1176    }
1177    unsafe impl<
1178        D: fidl::encoding::ResourceDialect,
1179        T0: fidl::encoding::Encode<fidl::encoding::Array<NewHandleId, 2>, D>,
1180    > fidl::encoding::Encode<ChannelCreateChannelRequest, D> for (T0,)
1181    {
1182        #[inline]
1183        unsafe fn encode(
1184            self,
1185            encoder: &mut fidl::encoding::Encoder<'_, D>,
1186            offset: usize,
1187            depth: fidl::encoding::Depth,
1188        ) -> fidl::Result<()> {
1189            encoder.debug_check_bounds::<ChannelCreateChannelRequest>(offset);
1190            // Zero out padding regions. There's no need to apply masks
1191            // because the unmasked parts will be overwritten by fields.
1192            // Write the fields.
1193            self.0.encode(encoder, offset + 0, depth)?;
1194            Ok(())
1195        }
1196    }
1197
1198    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1199        for ChannelCreateChannelRequest
1200    {
1201        #[inline(always)]
1202        fn new_empty() -> Self {
1203            Self { handles: fidl::new_empty!(fidl::encoding::Array<NewHandleId, 2>, D) }
1204        }
1205
1206        #[inline]
1207        unsafe fn decode(
1208            &mut self,
1209            decoder: &mut fidl::encoding::Decoder<'_, D>,
1210            offset: usize,
1211            _depth: fidl::encoding::Depth,
1212        ) -> fidl::Result<()> {
1213            decoder.debug_check_bounds::<Self>(offset);
1214            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1215            // Verify that padding bytes are zero.
1216            // Copy from the buffer into the object.
1217            unsafe {
1218                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1219            }
1220            Ok(())
1221        }
1222    }
1223
1224    impl fidl::encoding::ValueTypeMarker for ChannelMessage {
1225        type Borrowed<'a> = &'a Self;
1226        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1227            value
1228        }
1229    }
1230
1231    unsafe impl fidl::encoding::TypeMarker for ChannelMessage {
1232        type Owned = Self;
1233
1234        #[inline(always)]
1235        fn inline_align(_context: fidl::encoding::Context) -> usize {
1236            8
1237        }
1238
1239        #[inline(always)]
1240        fn inline_size(_context: fidl::encoding::Context) -> usize {
1241            32
1242        }
1243    }
1244
1245    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelMessage, D>
1246        for &ChannelMessage
1247    {
1248        #[inline]
1249        unsafe fn encode(
1250            self,
1251            encoder: &mut fidl::encoding::Encoder<'_, D>,
1252            offset: usize,
1253            _depth: fidl::encoding::Depth,
1254        ) -> fidl::Result<()> {
1255            encoder.debug_check_bounds::<ChannelMessage>(offset);
1256            // Delegate to tuple encoding.
1257            fidl::encoding::Encode::<ChannelMessage, D>::encode(
1258                (
1259                    <fidl::encoding::Vector<u8, 65536> as fidl::encoding::ValueTypeMarker>::borrow(&self.data),
1260                    <fidl::encoding::Vector<HandleInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.handles),
1261                ),
1262                encoder, offset, _depth
1263            )
1264        }
1265    }
1266    unsafe impl<
1267        D: fidl::encoding::ResourceDialect,
1268        T0: fidl::encoding::Encode<fidl::encoding::Vector<u8, 65536>, D>,
1269        T1: fidl::encoding::Encode<fidl::encoding::Vector<HandleInfo, 64>, D>,
1270    > fidl::encoding::Encode<ChannelMessage, D> for (T0, T1)
1271    {
1272        #[inline]
1273        unsafe fn encode(
1274            self,
1275            encoder: &mut fidl::encoding::Encoder<'_, D>,
1276            offset: usize,
1277            depth: fidl::encoding::Depth,
1278        ) -> fidl::Result<()> {
1279            encoder.debug_check_bounds::<ChannelMessage>(offset);
1280            // Zero out padding regions. There's no need to apply masks
1281            // because the unmasked parts will be overwritten by fields.
1282            // Write the fields.
1283            self.0.encode(encoder, offset + 0, depth)?;
1284            self.1.encode(encoder, offset + 16, depth)?;
1285            Ok(())
1286        }
1287    }
1288
1289    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelMessage {
1290        #[inline(always)]
1291        fn new_empty() -> Self {
1292            Self {
1293                data: fidl::new_empty!(fidl::encoding::Vector<u8, 65536>, D),
1294                handles: fidl::new_empty!(fidl::encoding::Vector<HandleInfo, 64>, D),
1295            }
1296        }
1297
1298        #[inline]
1299        unsafe fn decode(
1300            &mut self,
1301            decoder: &mut fidl::encoding::Decoder<'_, D>,
1302            offset: usize,
1303            _depth: fidl::encoding::Depth,
1304        ) -> fidl::Result<()> {
1305            decoder.debug_check_bounds::<Self>(offset);
1306            // Verify that padding bytes are zero.
1307            fidl::decode!(fidl::encoding::Vector<u8, 65536>, D, &mut self.data, decoder, offset + 0, _depth)?;
1308            fidl::decode!(fidl::encoding::Vector<HandleInfo, 64>, D, &mut self.handles, decoder, offset + 16, _depth)?;
1309            Ok(())
1310        }
1311    }
1312
1313    impl fidl::encoding::ValueTypeMarker for ChannelOnChannelStreamingDataRequest {
1314        type Borrowed<'a> = &'a Self;
1315        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1316            value
1317        }
1318    }
1319
1320    unsafe impl fidl::encoding::TypeMarker for ChannelOnChannelStreamingDataRequest {
1321        type Owned = Self;
1322
1323        #[inline(always)]
1324        fn inline_align(_context: fidl::encoding::Context) -> usize {
1325            8
1326        }
1327
1328        #[inline(always)]
1329        fn inline_size(_context: fidl::encoding::Context) -> usize {
1330            24
1331        }
1332    }
1333
1334    unsafe impl<D: fidl::encoding::ResourceDialect>
1335        fidl::encoding::Encode<ChannelOnChannelStreamingDataRequest, D>
1336        for &ChannelOnChannelStreamingDataRequest
1337    {
1338        #[inline]
1339        unsafe fn encode(
1340            self,
1341            encoder: &mut fidl::encoding::Encoder<'_, D>,
1342            offset: usize,
1343            _depth: fidl::encoding::Depth,
1344        ) -> fidl::Result<()> {
1345            encoder.debug_check_bounds::<ChannelOnChannelStreamingDataRequest>(offset);
1346            // Delegate to tuple encoding.
1347            fidl::encoding::Encode::<ChannelOnChannelStreamingDataRequest, D>::encode(
1348                (
1349                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.handle),
1350                    <ChannelSent as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_sent),
1351                ),
1352                encoder,
1353                offset,
1354                _depth,
1355            )
1356        }
1357    }
1358    unsafe impl<
1359        D: fidl::encoding::ResourceDialect,
1360        T0: fidl::encoding::Encode<HandleId, D>,
1361        T1: fidl::encoding::Encode<ChannelSent, D>,
1362    > fidl::encoding::Encode<ChannelOnChannelStreamingDataRequest, D> for (T0, T1)
1363    {
1364        #[inline]
1365        unsafe fn encode(
1366            self,
1367            encoder: &mut fidl::encoding::Encoder<'_, D>,
1368            offset: usize,
1369            depth: fidl::encoding::Depth,
1370        ) -> fidl::Result<()> {
1371            encoder.debug_check_bounds::<ChannelOnChannelStreamingDataRequest>(offset);
1372            // Zero out padding regions. There's no need to apply masks
1373            // because the unmasked parts will be overwritten by fields.
1374            unsafe {
1375                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1376                (ptr as *mut u64).write_unaligned(0);
1377            }
1378            // Write the fields.
1379            self.0.encode(encoder, offset + 0, depth)?;
1380            self.1.encode(encoder, offset + 8, depth)?;
1381            Ok(())
1382        }
1383    }
1384
1385    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1386        for ChannelOnChannelStreamingDataRequest
1387    {
1388        #[inline(always)]
1389        fn new_empty() -> Self {
1390            Self {
1391                handle: fidl::new_empty!(HandleId, D),
1392                channel_sent: fidl::new_empty!(ChannelSent, D),
1393            }
1394        }
1395
1396        #[inline]
1397        unsafe fn decode(
1398            &mut self,
1399            decoder: &mut fidl::encoding::Decoder<'_, D>,
1400            offset: usize,
1401            _depth: fidl::encoding::Depth,
1402        ) -> fidl::Result<()> {
1403            decoder.debug_check_bounds::<Self>(offset);
1404            // Verify that padding bytes are zero.
1405            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1406            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1407            let mask = 0xffffffff00000000u64;
1408            let maskedval = padval & mask;
1409            if maskedval != 0 {
1410                return Err(fidl::Error::NonZeroPadding {
1411                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1412                });
1413            }
1414            fidl::decode!(HandleId, D, &mut self.handle, decoder, offset + 0, _depth)?;
1415            fidl::decode!(ChannelSent, D, &mut self.channel_sent, decoder, offset + 8, _depth)?;
1416            Ok(())
1417        }
1418    }
1419
1420    impl fidl::encoding::ValueTypeMarker for ChannelReadChannelRequest {
1421        type Borrowed<'a> = &'a Self;
1422        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1423            value
1424        }
1425    }
1426
1427    unsafe impl fidl::encoding::TypeMarker for ChannelReadChannelRequest {
1428        type Owned = Self;
1429
1430        #[inline(always)]
1431        fn inline_align(_context: fidl::encoding::Context) -> usize {
1432            4
1433        }
1434
1435        #[inline(always)]
1436        fn inline_size(_context: fidl::encoding::Context) -> usize {
1437            4
1438        }
1439        #[inline(always)]
1440        fn encode_is_copy() -> bool {
1441            true
1442        }
1443
1444        #[inline(always)]
1445        fn decode_is_copy() -> bool {
1446            true
1447        }
1448    }
1449
1450    unsafe impl<D: fidl::encoding::ResourceDialect>
1451        fidl::encoding::Encode<ChannelReadChannelRequest, D> for &ChannelReadChannelRequest
1452    {
1453        #[inline]
1454        unsafe fn encode(
1455            self,
1456            encoder: &mut fidl::encoding::Encoder<'_, D>,
1457            offset: usize,
1458            _depth: fidl::encoding::Depth,
1459        ) -> fidl::Result<()> {
1460            encoder.debug_check_bounds::<ChannelReadChannelRequest>(offset);
1461            unsafe {
1462                // Copy the object into the buffer.
1463                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1464                (buf_ptr as *mut ChannelReadChannelRequest)
1465                    .write_unaligned((self as *const ChannelReadChannelRequest).read());
1466                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1467                // done second because the memcpy will write garbage to these bytes.
1468            }
1469            Ok(())
1470        }
1471    }
1472    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HandleId, D>>
1473        fidl::encoding::Encode<ChannelReadChannelRequest, D> for (T0,)
1474    {
1475        #[inline]
1476        unsafe fn encode(
1477            self,
1478            encoder: &mut fidl::encoding::Encoder<'_, D>,
1479            offset: usize,
1480            depth: fidl::encoding::Depth,
1481        ) -> fidl::Result<()> {
1482            encoder.debug_check_bounds::<ChannelReadChannelRequest>(offset);
1483            // Zero out padding regions. There's no need to apply masks
1484            // because the unmasked parts will be overwritten by fields.
1485            // Write the fields.
1486            self.0.encode(encoder, offset + 0, depth)?;
1487            Ok(())
1488        }
1489    }
1490
1491    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1492        for ChannelReadChannelRequest
1493    {
1494        #[inline(always)]
1495        fn new_empty() -> Self {
1496            Self { handle: fidl::new_empty!(HandleId, D) }
1497        }
1498
1499        #[inline]
1500        unsafe fn decode(
1501            &mut self,
1502            decoder: &mut fidl::encoding::Decoder<'_, D>,
1503            offset: usize,
1504            _depth: fidl::encoding::Depth,
1505        ) -> fidl::Result<()> {
1506            decoder.debug_check_bounds::<Self>(offset);
1507            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1508            // Verify that padding bytes are zero.
1509            // Copy from the buffer into the object.
1510            unsafe {
1511                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1512            }
1513            Ok(())
1514        }
1515    }
1516
1517    impl fidl::encoding::ValueTypeMarker for ChannelReadChannelStreamingStartRequest {
1518        type Borrowed<'a> = &'a Self;
1519        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1520            value
1521        }
1522    }
1523
1524    unsafe impl fidl::encoding::TypeMarker for ChannelReadChannelStreamingStartRequest {
1525        type Owned = Self;
1526
1527        #[inline(always)]
1528        fn inline_align(_context: fidl::encoding::Context) -> usize {
1529            4
1530        }
1531
1532        #[inline(always)]
1533        fn inline_size(_context: fidl::encoding::Context) -> usize {
1534            4
1535        }
1536        #[inline(always)]
1537        fn encode_is_copy() -> bool {
1538            true
1539        }
1540
1541        #[inline(always)]
1542        fn decode_is_copy() -> bool {
1543            true
1544        }
1545    }
1546
1547    unsafe impl<D: fidl::encoding::ResourceDialect>
1548        fidl::encoding::Encode<ChannelReadChannelStreamingStartRequest, D>
1549        for &ChannelReadChannelStreamingStartRequest
1550    {
1551        #[inline]
1552        unsafe fn encode(
1553            self,
1554            encoder: &mut fidl::encoding::Encoder<'_, D>,
1555            offset: usize,
1556            _depth: fidl::encoding::Depth,
1557        ) -> fidl::Result<()> {
1558            encoder.debug_check_bounds::<ChannelReadChannelStreamingStartRequest>(offset);
1559            unsafe {
1560                // Copy the object into the buffer.
1561                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1562                (buf_ptr as *mut ChannelReadChannelStreamingStartRequest).write_unaligned(
1563                    (self as *const ChannelReadChannelStreamingStartRequest).read(),
1564                );
1565                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1566                // done second because the memcpy will write garbage to these bytes.
1567            }
1568            Ok(())
1569        }
1570    }
1571    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HandleId, D>>
1572        fidl::encoding::Encode<ChannelReadChannelStreamingStartRequest, D> for (T0,)
1573    {
1574        #[inline]
1575        unsafe fn encode(
1576            self,
1577            encoder: &mut fidl::encoding::Encoder<'_, D>,
1578            offset: usize,
1579            depth: fidl::encoding::Depth,
1580        ) -> fidl::Result<()> {
1581            encoder.debug_check_bounds::<ChannelReadChannelStreamingStartRequest>(offset);
1582            // Zero out padding regions. There's no need to apply masks
1583            // because the unmasked parts will be overwritten by fields.
1584            // Write the fields.
1585            self.0.encode(encoder, offset + 0, depth)?;
1586            Ok(())
1587        }
1588    }
1589
1590    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1591        for ChannelReadChannelStreamingStartRequest
1592    {
1593        #[inline(always)]
1594        fn new_empty() -> Self {
1595            Self { handle: fidl::new_empty!(HandleId, D) }
1596        }
1597
1598        #[inline]
1599        unsafe fn decode(
1600            &mut self,
1601            decoder: &mut fidl::encoding::Decoder<'_, D>,
1602            offset: usize,
1603            _depth: fidl::encoding::Depth,
1604        ) -> fidl::Result<()> {
1605            decoder.debug_check_bounds::<Self>(offset);
1606            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1607            // Verify that padding bytes are zero.
1608            // Copy from the buffer into the object.
1609            unsafe {
1610                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1611            }
1612            Ok(())
1613        }
1614    }
1615
1616    impl fidl::encoding::ValueTypeMarker for ChannelReadChannelStreamingStopRequest {
1617        type Borrowed<'a> = &'a Self;
1618        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1619            value
1620        }
1621    }
1622
1623    unsafe impl fidl::encoding::TypeMarker for ChannelReadChannelStreamingStopRequest {
1624        type Owned = Self;
1625
1626        #[inline(always)]
1627        fn inline_align(_context: fidl::encoding::Context) -> usize {
1628            4
1629        }
1630
1631        #[inline(always)]
1632        fn inline_size(_context: fidl::encoding::Context) -> usize {
1633            4
1634        }
1635        #[inline(always)]
1636        fn encode_is_copy() -> bool {
1637            true
1638        }
1639
1640        #[inline(always)]
1641        fn decode_is_copy() -> bool {
1642            true
1643        }
1644    }
1645
1646    unsafe impl<D: fidl::encoding::ResourceDialect>
1647        fidl::encoding::Encode<ChannelReadChannelStreamingStopRequest, D>
1648        for &ChannelReadChannelStreamingStopRequest
1649    {
1650        #[inline]
1651        unsafe fn encode(
1652            self,
1653            encoder: &mut fidl::encoding::Encoder<'_, D>,
1654            offset: usize,
1655            _depth: fidl::encoding::Depth,
1656        ) -> fidl::Result<()> {
1657            encoder.debug_check_bounds::<ChannelReadChannelStreamingStopRequest>(offset);
1658            unsafe {
1659                // Copy the object into the buffer.
1660                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1661                (buf_ptr as *mut ChannelReadChannelStreamingStopRequest).write_unaligned(
1662                    (self as *const ChannelReadChannelStreamingStopRequest).read(),
1663                );
1664                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1665                // done second because the memcpy will write garbage to these bytes.
1666            }
1667            Ok(())
1668        }
1669    }
1670    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HandleId, D>>
1671        fidl::encoding::Encode<ChannelReadChannelStreamingStopRequest, D> for (T0,)
1672    {
1673        #[inline]
1674        unsafe fn encode(
1675            self,
1676            encoder: &mut fidl::encoding::Encoder<'_, D>,
1677            offset: usize,
1678            depth: fidl::encoding::Depth,
1679        ) -> fidl::Result<()> {
1680            encoder.debug_check_bounds::<ChannelReadChannelStreamingStopRequest>(offset);
1681            // Zero out padding regions. There's no need to apply masks
1682            // because the unmasked parts will be overwritten by fields.
1683            // Write the fields.
1684            self.0.encode(encoder, offset + 0, depth)?;
1685            Ok(())
1686        }
1687    }
1688
1689    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1690        for ChannelReadChannelStreamingStopRequest
1691    {
1692        #[inline(always)]
1693        fn new_empty() -> Self {
1694            Self { handle: fidl::new_empty!(HandleId, D) }
1695        }
1696
1697        #[inline]
1698        unsafe fn decode(
1699            &mut self,
1700            decoder: &mut fidl::encoding::Decoder<'_, D>,
1701            offset: usize,
1702            _depth: fidl::encoding::Depth,
1703        ) -> fidl::Result<()> {
1704            decoder.debug_check_bounds::<Self>(offset);
1705            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1706            // Verify that padding bytes are zero.
1707            // Copy from the buffer into the object.
1708            unsafe {
1709                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1710            }
1711            Ok(())
1712        }
1713    }
1714
1715    impl fidl::encoding::ValueTypeMarker for ChannelWriteChannelRequest {
1716        type Borrowed<'a> = &'a Self;
1717        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1718            value
1719        }
1720    }
1721
1722    unsafe impl fidl::encoding::TypeMarker for ChannelWriteChannelRequest {
1723        type Owned = Self;
1724
1725        #[inline(always)]
1726        fn inline_align(_context: fidl::encoding::Context) -> usize {
1727            8
1728        }
1729
1730        #[inline(always)]
1731        fn inline_size(_context: fidl::encoding::Context) -> usize {
1732            40
1733        }
1734    }
1735
1736    unsafe impl<D: fidl::encoding::ResourceDialect>
1737        fidl::encoding::Encode<ChannelWriteChannelRequest, D> for &ChannelWriteChannelRequest
1738    {
1739        #[inline]
1740        unsafe fn encode(
1741            self,
1742            encoder: &mut fidl::encoding::Encoder<'_, D>,
1743            offset: usize,
1744            _depth: fidl::encoding::Depth,
1745        ) -> fidl::Result<()> {
1746            encoder.debug_check_bounds::<ChannelWriteChannelRequest>(offset);
1747            // Delegate to tuple encoding.
1748            fidl::encoding::Encode::<ChannelWriteChannelRequest, D>::encode(
1749                (
1750                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.handle),
1751                    <fidl::encoding::Vector<u8, 65536> as fidl::encoding::ValueTypeMarker>::borrow(
1752                        &self.data,
1753                    ),
1754                    <Handles as fidl::encoding::ValueTypeMarker>::borrow(&self.handles),
1755                ),
1756                encoder,
1757                offset,
1758                _depth,
1759            )
1760        }
1761    }
1762    unsafe impl<
1763        D: fidl::encoding::ResourceDialect,
1764        T0: fidl::encoding::Encode<HandleId, D>,
1765        T1: fidl::encoding::Encode<fidl::encoding::Vector<u8, 65536>, D>,
1766        T2: fidl::encoding::Encode<Handles, D>,
1767    > fidl::encoding::Encode<ChannelWriteChannelRequest, D> for (T0, T1, T2)
1768    {
1769        #[inline]
1770        unsafe fn encode(
1771            self,
1772            encoder: &mut fidl::encoding::Encoder<'_, D>,
1773            offset: usize,
1774            depth: fidl::encoding::Depth,
1775        ) -> fidl::Result<()> {
1776            encoder.debug_check_bounds::<ChannelWriteChannelRequest>(offset);
1777            // Zero out padding regions. There's no need to apply masks
1778            // because the unmasked parts will be overwritten by fields.
1779            unsafe {
1780                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1781                (ptr as *mut u64).write_unaligned(0);
1782            }
1783            // Write the fields.
1784            self.0.encode(encoder, offset + 0, depth)?;
1785            self.1.encode(encoder, offset + 8, depth)?;
1786            self.2.encode(encoder, offset + 24, depth)?;
1787            Ok(())
1788        }
1789    }
1790
1791    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1792        for ChannelWriteChannelRequest
1793    {
1794        #[inline(always)]
1795        fn new_empty() -> Self {
1796            Self {
1797                handle: fidl::new_empty!(HandleId, D),
1798                data: fidl::new_empty!(fidl::encoding::Vector<u8, 65536>, D),
1799                handles: fidl::new_empty!(Handles, D),
1800            }
1801        }
1802
1803        #[inline]
1804        unsafe fn decode(
1805            &mut self,
1806            decoder: &mut fidl::encoding::Decoder<'_, D>,
1807            offset: usize,
1808            _depth: fidl::encoding::Depth,
1809        ) -> fidl::Result<()> {
1810            decoder.debug_check_bounds::<Self>(offset);
1811            // Verify that padding bytes are zero.
1812            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1813            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1814            let mask = 0xffffffff00000000u64;
1815            let maskedval = padval & mask;
1816            if maskedval != 0 {
1817                return Err(fidl::Error::NonZeroPadding {
1818                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1819                });
1820            }
1821            fidl::decode!(HandleId, D, &mut self.handle, decoder, offset + 0, _depth)?;
1822            fidl::decode!(fidl::encoding::Vector<u8, 65536>, D, &mut self.data, decoder, offset + 8, _depth)?;
1823            fidl::decode!(Handles, D, &mut self.handles, decoder, offset + 24, _depth)?;
1824            Ok(())
1825        }
1826    }
1827
1828    impl fidl::encoding::ValueTypeMarker for ClosedDuringRead {
1829        type Borrowed<'a> = &'a Self;
1830        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1831            value
1832        }
1833    }
1834
1835    unsafe impl fidl::encoding::TypeMarker for ClosedDuringRead {
1836        type Owned = Self;
1837
1838        #[inline(always)]
1839        fn inline_align(_context: fidl::encoding::Context) -> usize {
1840            1
1841        }
1842
1843        #[inline(always)]
1844        fn inline_size(_context: fidl::encoding::Context) -> usize {
1845            1
1846        }
1847    }
1848
1849    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ClosedDuringRead, D>
1850        for &ClosedDuringRead
1851    {
1852        #[inline]
1853        unsafe fn encode(
1854            self,
1855            encoder: &mut fidl::encoding::Encoder<'_, D>,
1856            offset: usize,
1857            _depth: fidl::encoding::Depth,
1858        ) -> fidl::Result<()> {
1859            encoder.debug_check_bounds::<ClosedDuringRead>(offset);
1860            encoder.write_num(0u8, offset);
1861            Ok(())
1862        }
1863    }
1864
1865    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ClosedDuringRead {
1866        #[inline(always)]
1867        fn new_empty() -> Self {
1868            Self
1869        }
1870
1871        #[inline]
1872        unsafe fn decode(
1873            &mut self,
1874            decoder: &mut fidl::encoding::Decoder<'_, D>,
1875            offset: usize,
1876            _depth: fidl::encoding::Depth,
1877        ) -> fidl::Result<()> {
1878            decoder.debug_check_bounds::<Self>(offset);
1879            match decoder.read_num::<u8>(offset) {
1880                0 => Ok(()),
1881                _ => Err(fidl::Error::Invalid),
1882            }
1883        }
1884    }
1885
1886    impl fidl::encoding::ValueTypeMarker for EventCreateEventRequest {
1887        type Borrowed<'a> = &'a Self;
1888        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1889            value
1890        }
1891    }
1892
1893    unsafe impl fidl::encoding::TypeMarker for EventCreateEventRequest {
1894        type Owned = Self;
1895
1896        #[inline(always)]
1897        fn inline_align(_context: fidl::encoding::Context) -> usize {
1898            4
1899        }
1900
1901        #[inline(always)]
1902        fn inline_size(_context: fidl::encoding::Context) -> usize {
1903            4
1904        }
1905        #[inline(always)]
1906        fn encode_is_copy() -> bool {
1907            true
1908        }
1909
1910        #[inline(always)]
1911        fn decode_is_copy() -> bool {
1912            true
1913        }
1914    }
1915
1916    unsafe impl<D: fidl::encoding::ResourceDialect>
1917        fidl::encoding::Encode<EventCreateEventRequest, D> for &EventCreateEventRequest
1918    {
1919        #[inline]
1920        unsafe fn encode(
1921            self,
1922            encoder: &mut fidl::encoding::Encoder<'_, D>,
1923            offset: usize,
1924            _depth: fidl::encoding::Depth,
1925        ) -> fidl::Result<()> {
1926            encoder.debug_check_bounds::<EventCreateEventRequest>(offset);
1927            unsafe {
1928                // Copy the object into the buffer.
1929                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1930                (buf_ptr as *mut EventCreateEventRequest)
1931                    .write_unaligned((self as *const EventCreateEventRequest).read());
1932                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1933                // done second because the memcpy will write garbage to these bytes.
1934            }
1935            Ok(())
1936        }
1937    }
1938    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<NewHandleId, D>>
1939        fidl::encoding::Encode<EventCreateEventRequest, D> for (T0,)
1940    {
1941        #[inline]
1942        unsafe fn encode(
1943            self,
1944            encoder: &mut fidl::encoding::Encoder<'_, D>,
1945            offset: usize,
1946            depth: fidl::encoding::Depth,
1947        ) -> fidl::Result<()> {
1948            encoder.debug_check_bounds::<EventCreateEventRequest>(offset);
1949            // Zero out padding regions. There's no need to apply masks
1950            // because the unmasked parts will be overwritten by fields.
1951            // Write the fields.
1952            self.0.encode(encoder, offset + 0, depth)?;
1953            Ok(())
1954        }
1955    }
1956
1957    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1958        for EventCreateEventRequest
1959    {
1960        #[inline(always)]
1961        fn new_empty() -> Self {
1962            Self { handle: fidl::new_empty!(NewHandleId, D) }
1963        }
1964
1965        #[inline]
1966        unsafe fn decode(
1967            &mut self,
1968            decoder: &mut fidl::encoding::Decoder<'_, D>,
1969            offset: usize,
1970            _depth: fidl::encoding::Depth,
1971        ) -> fidl::Result<()> {
1972            decoder.debug_check_bounds::<Self>(offset);
1973            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1974            // Verify that padding bytes are zero.
1975            // Copy from the buffer into the object.
1976            unsafe {
1977                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1978            }
1979            Ok(())
1980        }
1981    }
1982
1983    impl fidl::encoding::ValueTypeMarker for EventPairCreateEventPairRequest {
1984        type Borrowed<'a> = &'a Self;
1985        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1986            value
1987        }
1988    }
1989
1990    unsafe impl fidl::encoding::TypeMarker for EventPairCreateEventPairRequest {
1991        type Owned = Self;
1992
1993        #[inline(always)]
1994        fn inline_align(_context: fidl::encoding::Context) -> usize {
1995            4
1996        }
1997
1998        #[inline(always)]
1999        fn inline_size(_context: fidl::encoding::Context) -> usize {
2000            8
2001        }
2002        #[inline(always)]
2003        fn encode_is_copy() -> bool {
2004            true
2005        }
2006
2007        #[inline(always)]
2008        fn decode_is_copy() -> bool {
2009            true
2010        }
2011    }
2012
2013    unsafe impl<D: fidl::encoding::ResourceDialect>
2014        fidl::encoding::Encode<EventPairCreateEventPairRequest, D>
2015        for &EventPairCreateEventPairRequest
2016    {
2017        #[inline]
2018        unsafe fn encode(
2019            self,
2020            encoder: &mut fidl::encoding::Encoder<'_, D>,
2021            offset: usize,
2022            _depth: fidl::encoding::Depth,
2023        ) -> fidl::Result<()> {
2024            encoder.debug_check_bounds::<EventPairCreateEventPairRequest>(offset);
2025            unsafe {
2026                // Copy the object into the buffer.
2027                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2028                (buf_ptr as *mut EventPairCreateEventPairRequest)
2029                    .write_unaligned((self as *const EventPairCreateEventPairRequest).read());
2030                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2031                // done second because the memcpy will write garbage to these bytes.
2032            }
2033            Ok(())
2034        }
2035    }
2036    unsafe impl<
2037        D: fidl::encoding::ResourceDialect,
2038        T0: fidl::encoding::Encode<fidl::encoding::Array<NewHandleId, 2>, D>,
2039    > fidl::encoding::Encode<EventPairCreateEventPairRequest, D> for (T0,)
2040    {
2041        #[inline]
2042        unsafe fn encode(
2043            self,
2044            encoder: &mut fidl::encoding::Encoder<'_, D>,
2045            offset: usize,
2046            depth: fidl::encoding::Depth,
2047        ) -> fidl::Result<()> {
2048            encoder.debug_check_bounds::<EventPairCreateEventPairRequest>(offset);
2049            // Zero out padding regions. There's no need to apply masks
2050            // because the unmasked parts will be overwritten by fields.
2051            // Write the fields.
2052            self.0.encode(encoder, offset + 0, depth)?;
2053            Ok(())
2054        }
2055    }
2056
2057    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2058        for EventPairCreateEventPairRequest
2059    {
2060        #[inline(always)]
2061        fn new_empty() -> Self {
2062            Self { handles: fidl::new_empty!(fidl::encoding::Array<NewHandleId, 2>, D) }
2063        }
2064
2065        #[inline]
2066        unsafe fn decode(
2067            &mut self,
2068            decoder: &mut fidl::encoding::Decoder<'_, D>,
2069            offset: usize,
2070            _depth: fidl::encoding::Depth,
2071        ) -> fidl::Result<()> {
2072            decoder.debug_check_bounds::<Self>(offset);
2073            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2074            // Verify that padding bytes are zero.
2075            // Copy from the buffer into the object.
2076            unsafe {
2077                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2078            }
2079            Ok(())
2080        }
2081    }
2082
2083    impl fidl::encoding::ValueTypeMarker for FDomainCloseRequest {
2084        type Borrowed<'a> = &'a Self;
2085        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2086            value
2087        }
2088    }
2089
2090    unsafe impl fidl::encoding::TypeMarker for FDomainCloseRequest {
2091        type Owned = Self;
2092
2093        #[inline(always)]
2094        fn inline_align(_context: fidl::encoding::Context) -> usize {
2095            8
2096        }
2097
2098        #[inline(always)]
2099        fn inline_size(_context: fidl::encoding::Context) -> usize {
2100            16
2101        }
2102    }
2103
2104    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FDomainCloseRequest, D>
2105        for &FDomainCloseRequest
2106    {
2107        #[inline]
2108        unsafe fn encode(
2109            self,
2110            encoder: &mut fidl::encoding::Encoder<'_, D>,
2111            offset: usize,
2112            _depth: fidl::encoding::Depth,
2113        ) -> fidl::Result<()> {
2114            encoder.debug_check_bounds::<FDomainCloseRequest>(offset);
2115            // Delegate to tuple encoding.
2116            fidl::encoding::Encode::<FDomainCloseRequest, D>::encode(
2117                (
2118                    <fidl::encoding::UnboundedVector<HandleId> as fidl::encoding::ValueTypeMarker>::borrow(&self.handles),
2119                ),
2120                encoder, offset, _depth
2121            )
2122        }
2123    }
2124    unsafe impl<
2125        D: fidl::encoding::ResourceDialect,
2126        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<HandleId>, D>,
2127    > fidl::encoding::Encode<FDomainCloseRequest, D> for (T0,)
2128    {
2129        #[inline]
2130        unsafe fn encode(
2131            self,
2132            encoder: &mut fidl::encoding::Encoder<'_, D>,
2133            offset: usize,
2134            depth: fidl::encoding::Depth,
2135        ) -> fidl::Result<()> {
2136            encoder.debug_check_bounds::<FDomainCloseRequest>(offset);
2137            // Zero out padding regions. There's no need to apply masks
2138            // because the unmasked parts will be overwritten by fields.
2139            // Write the fields.
2140            self.0.encode(encoder, offset + 0, depth)?;
2141            Ok(())
2142        }
2143    }
2144
2145    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FDomainCloseRequest {
2146        #[inline(always)]
2147        fn new_empty() -> Self {
2148            Self { handles: fidl::new_empty!(fidl::encoding::UnboundedVector<HandleId>, D) }
2149        }
2150
2151        #[inline]
2152        unsafe fn decode(
2153            &mut self,
2154            decoder: &mut fidl::encoding::Decoder<'_, D>,
2155            offset: usize,
2156            _depth: fidl::encoding::Depth,
2157        ) -> fidl::Result<()> {
2158            decoder.debug_check_bounds::<Self>(offset);
2159            // Verify that padding bytes are zero.
2160            fidl::decode!(
2161                fidl::encoding::UnboundedVector<HandleId>,
2162                D,
2163                &mut self.handles,
2164                decoder,
2165                offset + 0,
2166                _depth
2167            )?;
2168            Ok(())
2169        }
2170    }
2171
2172    impl fidl::encoding::ValueTypeMarker for FDomainDuplicateRequest {
2173        type Borrowed<'a> = &'a Self;
2174        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2175            value
2176        }
2177    }
2178
2179    unsafe impl fidl::encoding::TypeMarker for FDomainDuplicateRequest {
2180        type Owned = Self;
2181
2182        #[inline(always)]
2183        fn inline_align(_context: fidl::encoding::Context) -> usize {
2184            4
2185        }
2186
2187        #[inline(always)]
2188        fn inline_size(_context: fidl::encoding::Context) -> usize {
2189            12
2190        }
2191    }
2192
2193    unsafe impl<D: fidl::encoding::ResourceDialect>
2194        fidl::encoding::Encode<FDomainDuplicateRequest, D> for &FDomainDuplicateRequest
2195    {
2196        #[inline]
2197        unsafe fn encode(
2198            self,
2199            encoder: &mut fidl::encoding::Encoder<'_, D>,
2200            offset: usize,
2201            _depth: fidl::encoding::Depth,
2202        ) -> fidl::Result<()> {
2203            encoder.debug_check_bounds::<FDomainDuplicateRequest>(offset);
2204            // Delegate to tuple encoding.
2205            fidl::encoding::Encode::<FDomainDuplicateRequest, D>::encode(
2206                (
2207                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.handle),
2208                    <NewHandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.new_handle),
2209                    <fidl::Rights as fidl::encoding::ValueTypeMarker>::borrow(&self.rights),
2210                ),
2211                encoder,
2212                offset,
2213                _depth,
2214            )
2215        }
2216    }
2217    unsafe impl<
2218        D: fidl::encoding::ResourceDialect,
2219        T0: fidl::encoding::Encode<HandleId, D>,
2220        T1: fidl::encoding::Encode<NewHandleId, D>,
2221        T2: fidl::encoding::Encode<fidl::Rights, D>,
2222    > fidl::encoding::Encode<FDomainDuplicateRequest, D> for (T0, T1, T2)
2223    {
2224        #[inline]
2225        unsafe fn encode(
2226            self,
2227            encoder: &mut fidl::encoding::Encoder<'_, D>,
2228            offset: usize,
2229            depth: fidl::encoding::Depth,
2230        ) -> fidl::Result<()> {
2231            encoder.debug_check_bounds::<FDomainDuplicateRequest>(offset);
2232            // Zero out padding regions. There's no need to apply masks
2233            // because the unmasked parts will be overwritten by fields.
2234            // Write the fields.
2235            self.0.encode(encoder, offset + 0, depth)?;
2236            self.1.encode(encoder, offset + 4, depth)?;
2237            self.2.encode(encoder, offset + 8, depth)?;
2238            Ok(())
2239        }
2240    }
2241
2242    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2243        for FDomainDuplicateRequest
2244    {
2245        #[inline(always)]
2246        fn new_empty() -> Self {
2247            Self {
2248                handle: fidl::new_empty!(HandleId, D),
2249                new_handle: fidl::new_empty!(NewHandleId, D),
2250                rights: fidl::new_empty!(fidl::Rights, D),
2251            }
2252        }
2253
2254        #[inline]
2255        unsafe fn decode(
2256            &mut self,
2257            decoder: &mut fidl::encoding::Decoder<'_, D>,
2258            offset: usize,
2259            _depth: fidl::encoding::Depth,
2260        ) -> fidl::Result<()> {
2261            decoder.debug_check_bounds::<Self>(offset);
2262            // Verify that padding bytes are zero.
2263            fidl::decode!(HandleId, D, &mut self.handle, decoder, offset + 0, _depth)?;
2264            fidl::decode!(NewHandleId, D, &mut self.new_handle, decoder, offset + 4, _depth)?;
2265            fidl::decode!(fidl::Rights, D, &mut self.rights, decoder, offset + 8, _depth)?;
2266            Ok(())
2267        }
2268    }
2269
2270    impl fidl::encoding::ValueTypeMarker for FDomainGetKoidRequest {
2271        type Borrowed<'a> = &'a Self;
2272        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2273            value
2274        }
2275    }
2276
2277    unsafe impl fidl::encoding::TypeMarker for FDomainGetKoidRequest {
2278        type Owned = Self;
2279
2280        #[inline(always)]
2281        fn inline_align(_context: fidl::encoding::Context) -> usize {
2282            4
2283        }
2284
2285        #[inline(always)]
2286        fn inline_size(_context: fidl::encoding::Context) -> usize {
2287            4
2288        }
2289        #[inline(always)]
2290        fn encode_is_copy() -> bool {
2291            true
2292        }
2293
2294        #[inline(always)]
2295        fn decode_is_copy() -> bool {
2296            true
2297        }
2298    }
2299
2300    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FDomainGetKoidRequest, D>
2301        for &FDomainGetKoidRequest
2302    {
2303        #[inline]
2304        unsafe fn encode(
2305            self,
2306            encoder: &mut fidl::encoding::Encoder<'_, D>,
2307            offset: usize,
2308            _depth: fidl::encoding::Depth,
2309        ) -> fidl::Result<()> {
2310            encoder.debug_check_bounds::<FDomainGetKoidRequest>(offset);
2311            unsafe {
2312                // Copy the object into the buffer.
2313                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2314                (buf_ptr as *mut FDomainGetKoidRequest)
2315                    .write_unaligned((self as *const FDomainGetKoidRequest).read());
2316                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2317                // done second because the memcpy will write garbage to these bytes.
2318            }
2319            Ok(())
2320        }
2321    }
2322    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HandleId, D>>
2323        fidl::encoding::Encode<FDomainGetKoidRequest, D> for (T0,)
2324    {
2325        #[inline]
2326        unsafe fn encode(
2327            self,
2328            encoder: &mut fidl::encoding::Encoder<'_, D>,
2329            offset: usize,
2330            depth: fidl::encoding::Depth,
2331        ) -> fidl::Result<()> {
2332            encoder.debug_check_bounds::<FDomainGetKoidRequest>(offset);
2333            // Zero out padding regions. There's no need to apply masks
2334            // because the unmasked parts will be overwritten by fields.
2335            // Write the fields.
2336            self.0.encode(encoder, offset + 0, depth)?;
2337            Ok(())
2338        }
2339    }
2340
2341    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FDomainGetKoidRequest {
2342        #[inline(always)]
2343        fn new_empty() -> Self {
2344            Self { handle: fidl::new_empty!(HandleId, D) }
2345        }
2346
2347        #[inline]
2348        unsafe fn decode(
2349            &mut self,
2350            decoder: &mut fidl::encoding::Decoder<'_, D>,
2351            offset: usize,
2352            _depth: fidl::encoding::Depth,
2353        ) -> fidl::Result<()> {
2354            decoder.debug_check_bounds::<Self>(offset);
2355            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2356            // Verify that padding bytes are zero.
2357            // Copy from the buffer into the object.
2358            unsafe {
2359                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
2360            }
2361            Ok(())
2362        }
2363    }
2364
2365    impl fidl::encoding::ValueTypeMarker for FDomainGetNamespaceRequest {
2366        type Borrowed<'a> = &'a Self;
2367        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2368            value
2369        }
2370    }
2371
2372    unsafe impl fidl::encoding::TypeMarker for FDomainGetNamespaceRequest {
2373        type Owned = Self;
2374
2375        #[inline(always)]
2376        fn inline_align(_context: fidl::encoding::Context) -> usize {
2377            4
2378        }
2379
2380        #[inline(always)]
2381        fn inline_size(_context: fidl::encoding::Context) -> usize {
2382            4
2383        }
2384        #[inline(always)]
2385        fn encode_is_copy() -> bool {
2386            true
2387        }
2388
2389        #[inline(always)]
2390        fn decode_is_copy() -> bool {
2391            true
2392        }
2393    }
2394
2395    unsafe impl<D: fidl::encoding::ResourceDialect>
2396        fidl::encoding::Encode<FDomainGetNamespaceRequest, D> for &FDomainGetNamespaceRequest
2397    {
2398        #[inline]
2399        unsafe fn encode(
2400            self,
2401            encoder: &mut fidl::encoding::Encoder<'_, D>,
2402            offset: usize,
2403            _depth: fidl::encoding::Depth,
2404        ) -> fidl::Result<()> {
2405            encoder.debug_check_bounds::<FDomainGetNamespaceRequest>(offset);
2406            unsafe {
2407                // Copy the object into the buffer.
2408                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2409                (buf_ptr as *mut FDomainGetNamespaceRequest)
2410                    .write_unaligned((self as *const FDomainGetNamespaceRequest).read());
2411                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2412                // done second because the memcpy will write garbage to these bytes.
2413            }
2414            Ok(())
2415        }
2416    }
2417    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<NewHandleId, D>>
2418        fidl::encoding::Encode<FDomainGetNamespaceRequest, D> for (T0,)
2419    {
2420        #[inline]
2421        unsafe fn encode(
2422            self,
2423            encoder: &mut fidl::encoding::Encoder<'_, D>,
2424            offset: usize,
2425            depth: fidl::encoding::Depth,
2426        ) -> fidl::Result<()> {
2427            encoder.debug_check_bounds::<FDomainGetNamespaceRequest>(offset);
2428            // Zero out padding regions. There's no need to apply masks
2429            // because the unmasked parts will be overwritten by fields.
2430            // Write the fields.
2431            self.0.encode(encoder, offset + 0, depth)?;
2432            Ok(())
2433        }
2434    }
2435
2436    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2437        for FDomainGetNamespaceRequest
2438    {
2439        #[inline(always)]
2440        fn new_empty() -> Self {
2441            Self { new_handle: fidl::new_empty!(NewHandleId, D) }
2442        }
2443
2444        #[inline]
2445        unsafe fn decode(
2446            &mut self,
2447            decoder: &mut fidl::encoding::Decoder<'_, D>,
2448            offset: usize,
2449            _depth: fidl::encoding::Depth,
2450        ) -> fidl::Result<()> {
2451            decoder.debug_check_bounds::<Self>(offset);
2452            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2453            // Verify that padding bytes are zero.
2454            // Copy from the buffer into the object.
2455            unsafe {
2456                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
2457            }
2458            Ok(())
2459        }
2460    }
2461
2462    impl fidl::encoding::ValueTypeMarker for FDomainReplaceRequest {
2463        type Borrowed<'a> = &'a Self;
2464        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2465            value
2466        }
2467    }
2468
2469    unsafe impl fidl::encoding::TypeMarker for FDomainReplaceRequest {
2470        type Owned = Self;
2471
2472        #[inline(always)]
2473        fn inline_align(_context: fidl::encoding::Context) -> usize {
2474            4
2475        }
2476
2477        #[inline(always)]
2478        fn inline_size(_context: fidl::encoding::Context) -> usize {
2479            12
2480        }
2481    }
2482
2483    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FDomainReplaceRequest, D>
2484        for &FDomainReplaceRequest
2485    {
2486        #[inline]
2487        unsafe fn encode(
2488            self,
2489            encoder: &mut fidl::encoding::Encoder<'_, D>,
2490            offset: usize,
2491            _depth: fidl::encoding::Depth,
2492        ) -> fidl::Result<()> {
2493            encoder.debug_check_bounds::<FDomainReplaceRequest>(offset);
2494            // Delegate to tuple encoding.
2495            fidl::encoding::Encode::<FDomainReplaceRequest, D>::encode(
2496                (
2497                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.handle),
2498                    <NewHandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.new_handle),
2499                    <fidl::Rights as fidl::encoding::ValueTypeMarker>::borrow(&self.rights),
2500                ),
2501                encoder,
2502                offset,
2503                _depth,
2504            )
2505        }
2506    }
2507    unsafe impl<
2508        D: fidl::encoding::ResourceDialect,
2509        T0: fidl::encoding::Encode<HandleId, D>,
2510        T1: fidl::encoding::Encode<NewHandleId, D>,
2511        T2: fidl::encoding::Encode<fidl::Rights, D>,
2512    > fidl::encoding::Encode<FDomainReplaceRequest, D> for (T0, T1, T2)
2513    {
2514        #[inline]
2515        unsafe fn encode(
2516            self,
2517            encoder: &mut fidl::encoding::Encoder<'_, D>,
2518            offset: usize,
2519            depth: fidl::encoding::Depth,
2520        ) -> fidl::Result<()> {
2521            encoder.debug_check_bounds::<FDomainReplaceRequest>(offset);
2522            // Zero out padding regions. There's no need to apply masks
2523            // because the unmasked parts will be overwritten by fields.
2524            // Write the fields.
2525            self.0.encode(encoder, offset + 0, depth)?;
2526            self.1.encode(encoder, offset + 4, depth)?;
2527            self.2.encode(encoder, offset + 8, depth)?;
2528            Ok(())
2529        }
2530    }
2531
2532    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FDomainReplaceRequest {
2533        #[inline(always)]
2534        fn new_empty() -> Self {
2535            Self {
2536                handle: fidl::new_empty!(HandleId, D),
2537                new_handle: fidl::new_empty!(NewHandleId, D),
2538                rights: fidl::new_empty!(fidl::Rights, D),
2539            }
2540        }
2541
2542        #[inline]
2543        unsafe fn decode(
2544            &mut self,
2545            decoder: &mut fidl::encoding::Decoder<'_, D>,
2546            offset: usize,
2547            _depth: fidl::encoding::Depth,
2548        ) -> fidl::Result<()> {
2549            decoder.debug_check_bounds::<Self>(offset);
2550            // Verify that padding bytes are zero.
2551            fidl::decode!(HandleId, D, &mut self.handle, decoder, offset + 0, _depth)?;
2552            fidl::decode!(NewHandleId, D, &mut self.new_handle, decoder, offset + 4, _depth)?;
2553            fidl::decode!(fidl::Rights, D, &mut self.rights, decoder, offset + 8, _depth)?;
2554            Ok(())
2555        }
2556    }
2557
2558    impl fidl::encoding::ValueTypeMarker for FDomainSignalPeerRequest {
2559        type Borrowed<'a> = &'a Self;
2560        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2561            value
2562        }
2563    }
2564
2565    unsafe impl fidl::encoding::TypeMarker for FDomainSignalPeerRequest {
2566        type Owned = Self;
2567
2568        #[inline(always)]
2569        fn inline_align(_context: fidl::encoding::Context) -> usize {
2570            4
2571        }
2572
2573        #[inline(always)]
2574        fn inline_size(_context: fidl::encoding::Context) -> usize {
2575            12
2576        }
2577        #[inline(always)]
2578        fn encode_is_copy() -> bool {
2579            true
2580        }
2581
2582        #[inline(always)]
2583        fn decode_is_copy() -> bool {
2584            true
2585        }
2586    }
2587
2588    unsafe impl<D: fidl::encoding::ResourceDialect>
2589        fidl::encoding::Encode<FDomainSignalPeerRequest, D> for &FDomainSignalPeerRequest
2590    {
2591        #[inline]
2592        unsafe fn encode(
2593            self,
2594            encoder: &mut fidl::encoding::Encoder<'_, D>,
2595            offset: usize,
2596            _depth: fidl::encoding::Depth,
2597        ) -> fidl::Result<()> {
2598            encoder.debug_check_bounds::<FDomainSignalPeerRequest>(offset);
2599            unsafe {
2600                // Copy the object into the buffer.
2601                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2602                (buf_ptr as *mut FDomainSignalPeerRequest)
2603                    .write_unaligned((self as *const FDomainSignalPeerRequest).read());
2604                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2605                // done second because the memcpy will write garbage to these bytes.
2606            }
2607            Ok(())
2608        }
2609    }
2610    unsafe impl<
2611        D: fidl::encoding::ResourceDialect,
2612        T0: fidl::encoding::Encode<HandleId, D>,
2613        T1: fidl::encoding::Encode<u32, D>,
2614        T2: fidl::encoding::Encode<u32, D>,
2615    > fidl::encoding::Encode<FDomainSignalPeerRequest, D> for (T0, T1, T2)
2616    {
2617        #[inline]
2618        unsafe fn encode(
2619            self,
2620            encoder: &mut fidl::encoding::Encoder<'_, D>,
2621            offset: usize,
2622            depth: fidl::encoding::Depth,
2623        ) -> fidl::Result<()> {
2624            encoder.debug_check_bounds::<FDomainSignalPeerRequest>(offset);
2625            // Zero out padding regions. There's no need to apply masks
2626            // because the unmasked parts will be overwritten by fields.
2627            // Write the fields.
2628            self.0.encode(encoder, offset + 0, depth)?;
2629            self.1.encode(encoder, offset + 4, depth)?;
2630            self.2.encode(encoder, offset + 8, depth)?;
2631            Ok(())
2632        }
2633    }
2634
2635    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2636        for FDomainSignalPeerRequest
2637    {
2638        #[inline(always)]
2639        fn new_empty() -> Self {
2640            Self {
2641                handle: fidl::new_empty!(HandleId, D),
2642                set: fidl::new_empty!(u32, D),
2643                clear: fidl::new_empty!(u32, D),
2644            }
2645        }
2646
2647        #[inline]
2648        unsafe fn decode(
2649            &mut self,
2650            decoder: &mut fidl::encoding::Decoder<'_, D>,
2651            offset: usize,
2652            _depth: fidl::encoding::Depth,
2653        ) -> fidl::Result<()> {
2654            decoder.debug_check_bounds::<Self>(offset);
2655            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2656            // Verify that padding bytes are zero.
2657            // Copy from the buffer into the object.
2658            unsafe {
2659                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
2660            }
2661            Ok(())
2662        }
2663    }
2664
2665    impl fidl::encoding::ValueTypeMarker for FDomainSignalRequest {
2666        type Borrowed<'a> = &'a Self;
2667        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2668            value
2669        }
2670    }
2671
2672    unsafe impl fidl::encoding::TypeMarker for FDomainSignalRequest {
2673        type Owned = Self;
2674
2675        #[inline(always)]
2676        fn inline_align(_context: fidl::encoding::Context) -> usize {
2677            4
2678        }
2679
2680        #[inline(always)]
2681        fn inline_size(_context: fidl::encoding::Context) -> usize {
2682            12
2683        }
2684        #[inline(always)]
2685        fn encode_is_copy() -> bool {
2686            true
2687        }
2688
2689        #[inline(always)]
2690        fn decode_is_copy() -> bool {
2691            true
2692        }
2693    }
2694
2695    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FDomainSignalRequest, D>
2696        for &FDomainSignalRequest
2697    {
2698        #[inline]
2699        unsafe fn encode(
2700            self,
2701            encoder: &mut fidl::encoding::Encoder<'_, D>,
2702            offset: usize,
2703            _depth: fidl::encoding::Depth,
2704        ) -> fidl::Result<()> {
2705            encoder.debug_check_bounds::<FDomainSignalRequest>(offset);
2706            unsafe {
2707                // Copy the object into the buffer.
2708                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2709                (buf_ptr as *mut FDomainSignalRequest)
2710                    .write_unaligned((self as *const FDomainSignalRequest).read());
2711                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2712                // done second because the memcpy will write garbage to these bytes.
2713            }
2714            Ok(())
2715        }
2716    }
2717    unsafe impl<
2718        D: fidl::encoding::ResourceDialect,
2719        T0: fidl::encoding::Encode<HandleId, D>,
2720        T1: fidl::encoding::Encode<u32, D>,
2721        T2: fidl::encoding::Encode<u32, D>,
2722    > fidl::encoding::Encode<FDomainSignalRequest, D> for (T0, T1, T2)
2723    {
2724        #[inline]
2725        unsafe fn encode(
2726            self,
2727            encoder: &mut fidl::encoding::Encoder<'_, D>,
2728            offset: usize,
2729            depth: fidl::encoding::Depth,
2730        ) -> fidl::Result<()> {
2731            encoder.debug_check_bounds::<FDomainSignalRequest>(offset);
2732            // Zero out padding regions. There's no need to apply masks
2733            // because the unmasked parts will be overwritten by fields.
2734            // Write the fields.
2735            self.0.encode(encoder, offset + 0, depth)?;
2736            self.1.encode(encoder, offset + 4, depth)?;
2737            self.2.encode(encoder, offset + 8, depth)?;
2738            Ok(())
2739        }
2740    }
2741
2742    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FDomainSignalRequest {
2743        #[inline(always)]
2744        fn new_empty() -> Self {
2745            Self {
2746                handle: fidl::new_empty!(HandleId, D),
2747                set: fidl::new_empty!(u32, D),
2748                clear: fidl::new_empty!(u32, D),
2749            }
2750        }
2751
2752        #[inline]
2753        unsafe fn decode(
2754            &mut self,
2755            decoder: &mut fidl::encoding::Decoder<'_, D>,
2756            offset: usize,
2757            _depth: fidl::encoding::Depth,
2758        ) -> fidl::Result<()> {
2759            decoder.debug_check_bounds::<Self>(offset);
2760            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2761            // Verify that padding bytes are zero.
2762            // Copy from the buffer into the object.
2763            unsafe {
2764                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
2765            }
2766            Ok(())
2767        }
2768    }
2769
2770    impl fidl::encoding::ValueTypeMarker for FDomainWaitForSignalsRequest {
2771        type Borrowed<'a> = &'a Self;
2772        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2773            value
2774        }
2775    }
2776
2777    unsafe impl fidl::encoding::TypeMarker for FDomainWaitForSignalsRequest {
2778        type Owned = Self;
2779
2780        #[inline(always)]
2781        fn inline_align(_context: fidl::encoding::Context) -> usize {
2782            4
2783        }
2784
2785        #[inline(always)]
2786        fn inline_size(_context: fidl::encoding::Context) -> usize {
2787            8
2788        }
2789        #[inline(always)]
2790        fn encode_is_copy() -> bool {
2791            true
2792        }
2793
2794        #[inline(always)]
2795        fn decode_is_copy() -> bool {
2796            true
2797        }
2798    }
2799
2800    unsafe impl<D: fidl::encoding::ResourceDialect>
2801        fidl::encoding::Encode<FDomainWaitForSignalsRequest, D> for &FDomainWaitForSignalsRequest
2802    {
2803        #[inline]
2804        unsafe fn encode(
2805            self,
2806            encoder: &mut fidl::encoding::Encoder<'_, D>,
2807            offset: usize,
2808            _depth: fidl::encoding::Depth,
2809        ) -> fidl::Result<()> {
2810            encoder.debug_check_bounds::<FDomainWaitForSignalsRequest>(offset);
2811            unsafe {
2812                // Copy the object into the buffer.
2813                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2814                (buf_ptr as *mut FDomainWaitForSignalsRequest)
2815                    .write_unaligned((self as *const FDomainWaitForSignalsRequest).read());
2816                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2817                // done second because the memcpy will write garbage to these bytes.
2818            }
2819            Ok(())
2820        }
2821    }
2822    unsafe impl<
2823        D: fidl::encoding::ResourceDialect,
2824        T0: fidl::encoding::Encode<HandleId, D>,
2825        T1: fidl::encoding::Encode<u32, D>,
2826    > fidl::encoding::Encode<FDomainWaitForSignalsRequest, D> for (T0, T1)
2827    {
2828        #[inline]
2829        unsafe fn encode(
2830            self,
2831            encoder: &mut fidl::encoding::Encoder<'_, D>,
2832            offset: usize,
2833            depth: fidl::encoding::Depth,
2834        ) -> fidl::Result<()> {
2835            encoder.debug_check_bounds::<FDomainWaitForSignalsRequest>(offset);
2836            // Zero out padding regions. There's no need to apply masks
2837            // because the unmasked parts will be overwritten by fields.
2838            // Write the fields.
2839            self.0.encode(encoder, offset + 0, depth)?;
2840            self.1.encode(encoder, offset + 4, depth)?;
2841            Ok(())
2842        }
2843    }
2844
2845    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2846        for FDomainWaitForSignalsRequest
2847    {
2848        #[inline(always)]
2849        fn new_empty() -> Self {
2850            Self { handle: fidl::new_empty!(HandleId, D), signals: fidl::new_empty!(u32, D) }
2851        }
2852
2853        #[inline]
2854        unsafe fn decode(
2855            &mut self,
2856            decoder: &mut fidl::encoding::Decoder<'_, D>,
2857            offset: usize,
2858            _depth: fidl::encoding::Depth,
2859        ) -> fidl::Result<()> {
2860            decoder.debug_check_bounds::<Self>(offset);
2861            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2862            // Verify that padding bytes are zero.
2863            // Copy from the buffer into the object.
2864            unsafe {
2865                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2866            }
2867            Ok(())
2868        }
2869    }
2870
2871    impl fidl::encoding::ValueTypeMarker for FDomainGetKoidResponse {
2872        type Borrowed<'a> = &'a Self;
2873        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2874            value
2875        }
2876    }
2877
2878    unsafe impl fidl::encoding::TypeMarker for FDomainGetKoidResponse {
2879        type Owned = Self;
2880
2881        #[inline(always)]
2882        fn inline_align(_context: fidl::encoding::Context) -> usize {
2883            8
2884        }
2885
2886        #[inline(always)]
2887        fn inline_size(_context: fidl::encoding::Context) -> usize {
2888            8
2889        }
2890        #[inline(always)]
2891        fn encode_is_copy() -> bool {
2892            true
2893        }
2894
2895        #[inline(always)]
2896        fn decode_is_copy() -> bool {
2897            true
2898        }
2899    }
2900
2901    unsafe impl<D: fidl::encoding::ResourceDialect>
2902        fidl::encoding::Encode<FDomainGetKoidResponse, D> for &FDomainGetKoidResponse
2903    {
2904        #[inline]
2905        unsafe fn encode(
2906            self,
2907            encoder: &mut fidl::encoding::Encoder<'_, D>,
2908            offset: usize,
2909            _depth: fidl::encoding::Depth,
2910        ) -> fidl::Result<()> {
2911            encoder.debug_check_bounds::<FDomainGetKoidResponse>(offset);
2912            unsafe {
2913                // Copy the object into the buffer.
2914                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2915                (buf_ptr as *mut FDomainGetKoidResponse)
2916                    .write_unaligned((self as *const FDomainGetKoidResponse).read());
2917                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2918                // done second because the memcpy will write garbage to these bytes.
2919            }
2920            Ok(())
2921        }
2922    }
2923    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
2924        fidl::encoding::Encode<FDomainGetKoidResponse, D> for (T0,)
2925    {
2926        #[inline]
2927        unsafe fn encode(
2928            self,
2929            encoder: &mut fidl::encoding::Encoder<'_, D>,
2930            offset: usize,
2931            depth: fidl::encoding::Depth,
2932        ) -> fidl::Result<()> {
2933            encoder.debug_check_bounds::<FDomainGetKoidResponse>(offset);
2934            // Zero out padding regions. There's no need to apply masks
2935            // because the unmasked parts will be overwritten by fields.
2936            // Write the fields.
2937            self.0.encode(encoder, offset + 0, depth)?;
2938            Ok(())
2939        }
2940    }
2941
2942    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2943        for FDomainGetKoidResponse
2944    {
2945        #[inline(always)]
2946        fn new_empty() -> Self {
2947            Self { koid: fidl::new_empty!(u64, D) }
2948        }
2949
2950        #[inline]
2951        unsafe fn decode(
2952            &mut self,
2953            decoder: &mut fidl::encoding::Decoder<'_, D>,
2954            offset: usize,
2955            _depth: fidl::encoding::Depth,
2956        ) -> fidl::Result<()> {
2957            decoder.debug_check_bounds::<Self>(offset);
2958            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2959            // Verify that padding bytes are zero.
2960            // Copy from the buffer into the object.
2961            unsafe {
2962                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2963            }
2964            Ok(())
2965        }
2966    }
2967
2968    impl fidl::encoding::ValueTypeMarker for FDomainWaitForSignalsResponse {
2969        type Borrowed<'a> = &'a Self;
2970        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2971            value
2972        }
2973    }
2974
2975    unsafe impl fidl::encoding::TypeMarker for FDomainWaitForSignalsResponse {
2976        type Owned = Self;
2977
2978        #[inline(always)]
2979        fn inline_align(_context: fidl::encoding::Context) -> usize {
2980            4
2981        }
2982
2983        #[inline(always)]
2984        fn inline_size(_context: fidl::encoding::Context) -> usize {
2985            4
2986        }
2987        #[inline(always)]
2988        fn encode_is_copy() -> bool {
2989            true
2990        }
2991
2992        #[inline(always)]
2993        fn decode_is_copy() -> bool {
2994            true
2995        }
2996    }
2997
2998    unsafe impl<D: fidl::encoding::ResourceDialect>
2999        fidl::encoding::Encode<FDomainWaitForSignalsResponse, D>
3000        for &FDomainWaitForSignalsResponse
3001    {
3002        #[inline]
3003        unsafe fn encode(
3004            self,
3005            encoder: &mut fidl::encoding::Encoder<'_, D>,
3006            offset: usize,
3007            _depth: fidl::encoding::Depth,
3008        ) -> fidl::Result<()> {
3009            encoder.debug_check_bounds::<FDomainWaitForSignalsResponse>(offset);
3010            unsafe {
3011                // Copy the object into the buffer.
3012                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3013                (buf_ptr as *mut FDomainWaitForSignalsResponse)
3014                    .write_unaligned((self as *const FDomainWaitForSignalsResponse).read());
3015                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3016                // done second because the memcpy will write garbage to these bytes.
3017            }
3018            Ok(())
3019        }
3020    }
3021    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
3022        fidl::encoding::Encode<FDomainWaitForSignalsResponse, D> for (T0,)
3023    {
3024        #[inline]
3025        unsafe fn encode(
3026            self,
3027            encoder: &mut fidl::encoding::Encoder<'_, D>,
3028            offset: usize,
3029            depth: fidl::encoding::Depth,
3030        ) -> fidl::Result<()> {
3031            encoder.debug_check_bounds::<FDomainWaitForSignalsResponse>(offset);
3032            // Zero out padding regions. There's no need to apply masks
3033            // because the unmasked parts will be overwritten by fields.
3034            // Write the fields.
3035            self.0.encode(encoder, offset + 0, depth)?;
3036            Ok(())
3037        }
3038    }
3039
3040    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3041        for FDomainWaitForSignalsResponse
3042    {
3043        #[inline(always)]
3044        fn new_empty() -> Self {
3045            Self { signals: fidl::new_empty!(u32, D) }
3046        }
3047
3048        #[inline]
3049        unsafe fn decode(
3050            &mut self,
3051            decoder: &mut fidl::encoding::Decoder<'_, D>,
3052            offset: usize,
3053            _depth: fidl::encoding::Depth,
3054        ) -> fidl::Result<()> {
3055            decoder.debug_check_bounds::<Self>(offset);
3056            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3057            // Verify that padding bytes are zero.
3058            // Copy from the buffer into the object.
3059            unsafe {
3060                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
3061            }
3062            Ok(())
3063        }
3064    }
3065
3066    impl fidl::encoding::ValueTypeMarker for HandleDisposition {
3067        type Borrowed<'a> = &'a Self;
3068        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3069            value
3070        }
3071    }
3072
3073    unsafe impl fidl::encoding::TypeMarker for HandleDisposition {
3074        type Owned = Self;
3075
3076        #[inline(always)]
3077        fn inline_align(_context: fidl::encoding::Context) -> usize {
3078            8
3079        }
3080
3081        #[inline(always)]
3082        fn inline_size(_context: fidl::encoding::Context) -> usize {
3083            24
3084        }
3085    }
3086
3087    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HandleDisposition, D>
3088        for &HandleDisposition
3089    {
3090        #[inline]
3091        unsafe fn encode(
3092            self,
3093            encoder: &mut fidl::encoding::Encoder<'_, D>,
3094            offset: usize,
3095            _depth: fidl::encoding::Depth,
3096        ) -> fidl::Result<()> {
3097            encoder.debug_check_bounds::<HandleDisposition>(offset);
3098            // Delegate to tuple encoding.
3099            fidl::encoding::Encode::<HandleDisposition, D>::encode(
3100                (
3101                    <HandleOp as fidl::encoding::ValueTypeMarker>::borrow(&self.handle),
3102                    <fidl::Rights as fidl::encoding::ValueTypeMarker>::borrow(&self.rights),
3103                ),
3104                encoder,
3105                offset,
3106                _depth,
3107            )
3108        }
3109    }
3110    unsafe impl<
3111        D: fidl::encoding::ResourceDialect,
3112        T0: fidl::encoding::Encode<HandleOp, D>,
3113        T1: fidl::encoding::Encode<fidl::Rights, D>,
3114    > fidl::encoding::Encode<HandleDisposition, D> for (T0, T1)
3115    {
3116        #[inline]
3117        unsafe fn encode(
3118            self,
3119            encoder: &mut fidl::encoding::Encoder<'_, D>,
3120            offset: usize,
3121            depth: fidl::encoding::Depth,
3122        ) -> fidl::Result<()> {
3123            encoder.debug_check_bounds::<HandleDisposition>(offset);
3124            // Zero out padding regions. There's no need to apply masks
3125            // because the unmasked parts will be overwritten by fields.
3126            unsafe {
3127                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3128                (ptr as *mut u64).write_unaligned(0);
3129            }
3130            // Write the fields.
3131            self.0.encode(encoder, offset + 0, depth)?;
3132            self.1.encode(encoder, offset + 16, depth)?;
3133            Ok(())
3134        }
3135    }
3136
3137    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HandleDisposition {
3138        #[inline(always)]
3139        fn new_empty() -> Self {
3140            Self {
3141                handle: fidl::new_empty!(HandleOp, D),
3142                rights: fidl::new_empty!(fidl::Rights, D),
3143            }
3144        }
3145
3146        #[inline]
3147        unsafe fn decode(
3148            &mut self,
3149            decoder: &mut fidl::encoding::Decoder<'_, D>,
3150            offset: usize,
3151            _depth: fidl::encoding::Depth,
3152        ) -> fidl::Result<()> {
3153            decoder.debug_check_bounds::<Self>(offset);
3154            // Verify that padding bytes are zero.
3155            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
3156            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3157            let mask = 0xffffffff00000000u64;
3158            let maskedval = padval & mask;
3159            if maskedval != 0 {
3160                return Err(fidl::Error::NonZeroPadding {
3161                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
3162                });
3163            }
3164            fidl::decode!(HandleOp, D, &mut self.handle, decoder, offset + 0, _depth)?;
3165            fidl::decode!(fidl::Rights, D, &mut self.rights, decoder, offset + 16, _depth)?;
3166            Ok(())
3167        }
3168    }
3169
3170    impl fidl::encoding::ValueTypeMarker for HandleId {
3171        type Borrowed<'a> = &'a Self;
3172        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3173            value
3174        }
3175    }
3176
3177    unsafe impl fidl::encoding::TypeMarker for HandleId {
3178        type Owned = Self;
3179
3180        #[inline(always)]
3181        fn inline_align(_context: fidl::encoding::Context) -> usize {
3182            4
3183        }
3184
3185        #[inline(always)]
3186        fn inline_size(_context: fidl::encoding::Context) -> usize {
3187            4
3188        }
3189        #[inline(always)]
3190        fn encode_is_copy() -> bool {
3191            true
3192        }
3193
3194        #[inline(always)]
3195        fn decode_is_copy() -> bool {
3196            true
3197        }
3198    }
3199
3200    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HandleId, D> for &HandleId {
3201        #[inline]
3202        unsafe fn encode(
3203            self,
3204            encoder: &mut fidl::encoding::Encoder<'_, D>,
3205            offset: usize,
3206            _depth: fidl::encoding::Depth,
3207        ) -> fidl::Result<()> {
3208            encoder.debug_check_bounds::<HandleId>(offset);
3209            unsafe {
3210                // Copy the object into the buffer.
3211                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3212                (buf_ptr as *mut HandleId).write_unaligned((self as *const HandleId).read());
3213                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3214                // done second because the memcpy will write garbage to these bytes.
3215            }
3216            Ok(())
3217        }
3218    }
3219    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
3220        fidl::encoding::Encode<HandleId, D> for (T0,)
3221    {
3222        #[inline]
3223        unsafe fn encode(
3224            self,
3225            encoder: &mut fidl::encoding::Encoder<'_, D>,
3226            offset: usize,
3227            depth: fidl::encoding::Depth,
3228        ) -> fidl::Result<()> {
3229            encoder.debug_check_bounds::<HandleId>(offset);
3230            // Zero out padding regions. There's no need to apply masks
3231            // because the unmasked parts will be overwritten by fields.
3232            // Write the fields.
3233            self.0.encode(encoder, offset + 0, depth)?;
3234            Ok(())
3235        }
3236    }
3237
3238    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HandleId {
3239        #[inline(always)]
3240        fn new_empty() -> Self {
3241            Self { id: fidl::new_empty!(u32, D) }
3242        }
3243
3244        #[inline]
3245        unsafe fn decode(
3246            &mut self,
3247            decoder: &mut fidl::encoding::Decoder<'_, D>,
3248            offset: usize,
3249            _depth: fidl::encoding::Depth,
3250        ) -> fidl::Result<()> {
3251            decoder.debug_check_bounds::<Self>(offset);
3252            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3253            // Verify that padding bytes are zero.
3254            // Copy from the buffer into the object.
3255            unsafe {
3256                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
3257            }
3258            Ok(())
3259        }
3260    }
3261
3262    impl fidl::encoding::ValueTypeMarker for HandleInfo {
3263        type Borrowed<'a> = &'a Self;
3264        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3265            value
3266        }
3267    }
3268
3269    unsafe impl fidl::encoding::TypeMarker for HandleInfo {
3270        type Owned = Self;
3271
3272        #[inline(always)]
3273        fn inline_align(_context: fidl::encoding::Context) -> usize {
3274            4
3275        }
3276
3277        #[inline(always)]
3278        fn inline_size(_context: fidl::encoding::Context) -> usize {
3279            12
3280        }
3281    }
3282
3283    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HandleInfo, D>
3284        for &HandleInfo
3285    {
3286        #[inline]
3287        unsafe fn encode(
3288            self,
3289            encoder: &mut fidl::encoding::Encoder<'_, D>,
3290            offset: usize,
3291            _depth: fidl::encoding::Depth,
3292        ) -> fidl::Result<()> {
3293            encoder.debug_check_bounds::<HandleInfo>(offset);
3294            // Delegate to tuple encoding.
3295            fidl::encoding::Encode::<HandleInfo, D>::encode(
3296                (
3297                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.handle),
3298                    <fidl::ObjectType as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),
3299                    <fidl::Rights as fidl::encoding::ValueTypeMarker>::borrow(&self.rights),
3300                ),
3301                encoder,
3302                offset,
3303                _depth,
3304            )
3305        }
3306    }
3307    unsafe impl<
3308        D: fidl::encoding::ResourceDialect,
3309        T0: fidl::encoding::Encode<HandleId, D>,
3310        T1: fidl::encoding::Encode<fidl::ObjectType, D>,
3311        T2: fidl::encoding::Encode<fidl::Rights, D>,
3312    > fidl::encoding::Encode<HandleInfo, D> for (T0, T1, T2)
3313    {
3314        #[inline]
3315        unsafe fn encode(
3316            self,
3317            encoder: &mut fidl::encoding::Encoder<'_, D>,
3318            offset: usize,
3319            depth: fidl::encoding::Depth,
3320        ) -> fidl::Result<()> {
3321            encoder.debug_check_bounds::<HandleInfo>(offset);
3322            // Zero out padding regions. There's no need to apply masks
3323            // because the unmasked parts will be overwritten by fields.
3324            // Write the fields.
3325            self.0.encode(encoder, offset + 0, depth)?;
3326            self.1.encode(encoder, offset + 4, depth)?;
3327            self.2.encode(encoder, offset + 8, depth)?;
3328            Ok(())
3329        }
3330    }
3331
3332    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HandleInfo {
3333        #[inline(always)]
3334        fn new_empty() -> Self {
3335            Self {
3336                handle: fidl::new_empty!(HandleId, D),
3337                type_: fidl::new_empty!(fidl::ObjectType, D),
3338                rights: fidl::new_empty!(fidl::Rights, D),
3339            }
3340        }
3341
3342        #[inline]
3343        unsafe fn decode(
3344            &mut self,
3345            decoder: &mut fidl::encoding::Decoder<'_, D>,
3346            offset: usize,
3347            _depth: fidl::encoding::Depth,
3348        ) -> fidl::Result<()> {
3349            decoder.debug_check_bounds::<Self>(offset);
3350            // Verify that padding bytes are zero.
3351            fidl::decode!(HandleId, D, &mut self.handle, decoder, offset + 0, _depth)?;
3352            fidl::decode!(fidl::ObjectType, D, &mut self.type_, decoder, offset + 4, _depth)?;
3353            fidl::decode!(fidl::Rights, D, &mut self.rights, decoder, offset + 8, _depth)?;
3354            Ok(())
3355        }
3356    }
3357
3358    impl fidl::encoding::ValueTypeMarker for NewHandleId {
3359        type Borrowed<'a> = &'a Self;
3360        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3361            value
3362        }
3363    }
3364
3365    unsafe impl fidl::encoding::TypeMarker for NewHandleId {
3366        type Owned = Self;
3367
3368        #[inline(always)]
3369        fn inline_align(_context: fidl::encoding::Context) -> usize {
3370            4
3371        }
3372
3373        #[inline(always)]
3374        fn inline_size(_context: fidl::encoding::Context) -> usize {
3375            4
3376        }
3377        #[inline(always)]
3378        fn encode_is_copy() -> bool {
3379            true
3380        }
3381
3382        #[inline(always)]
3383        fn decode_is_copy() -> bool {
3384            true
3385        }
3386    }
3387
3388    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NewHandleId, D>
3389        for &NewHandleId
3390    {
3391        #[inline]
3392        unsafe fn encode(
3393            self,
3394            encoder: &mut fidl::encoding::Encoder<'_, D>,
3395            offset: usize,
3396            _depth: fidl::encoding::Depth,
3397        ) -> fidl::Result<()> {
3398            encoder.debug_check_bounds::<NewHandleId>(offset);
3399            unsafe {
3400                // Copy the object into the buffer.
3401                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3402                (buf_ptr as *mut NewHandleId).write_unaligned((self as *const NewHandleId).read());
3403                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3404                // done second because the memcpy will write garbage to these bytes.
3405            }
3406            Ok(())
3407        }
3408    }
3409    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
3410        fidl::encoding::Encode<NewHandleId, D> for (T0,)
3411    {
3412        #[inline]
3413        unsafe fn encode(
3414            self,
3415            encoder: &mut fidl::encoding::Encoder<'_, D>,
3416            offset: usize,
3417            depth: fidl::encoding::Depth,
3418        ) -> fidl::Result<()> {
3419            encoder.debug_check_bounds::<NewHandleId>(offset);
3420            // Zero out padding regions. There's no need to apply masks
3421            // because the unmasked parts will be overwritten by fields.
3422            // Write the fields.
3423            self.0.encode(encoder, offset + 0, depth)?;
3424            Ok(())
3425        }
3426    }
3427
3428    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NewHandleId {
3429        #[inline(always)]
3430        fn new_empty() -> Self {
3431            Self { id: fidl::new_empty!(u32, D) }
3432        }
3433
3434        #[inline]
3435        unsafe fn decode(
3436            &mut self,
3437            decoder: &mut fidl::encoding::Decoder<'_, D>,
3438            offset: usize,
3439            _depth: fidl::encoding::Depth,
3440        ) -> fidl::Result<()> {
3441            decoder.debug_check_bounds::<Self>(offset);
3442            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3443            // Verify that padding bytes are zero.
3444            // Copy from the buffer into the object.
3445            unsafe {
3446                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
3447            }
3448            Ok(())
3449        }
3450    }
3451
3452    impl fidl::encoding::ValueTypeMarker for NewHandleIdOutOfRange {
3453        type Borrowed<'a> = &'a Self;
3454        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3455            value
3456        }
3457    }
3458
3459    unsafe impl fidl::encoding::TypeMarker for NewHandleIdOutOfRange {
3460        type Owned = Self;
3461
3462        #[inline(always)]
3463        fn inline_align(_context: fidl::encoding::Context) -> usize {
3464            4
3465        }
3466
3467        #[inline(always)]
3468        fn inline_size(_context: fidl::encoding::Context) -> usize {
3469            4
3470        }
3471        #[inline(always)]
3472        fn encode_is_copy() -> bool {
3473            true
3474        }
3475
3476        #[inline(always)]
3477        fn decode_is_copy() -> bool {
3478            true
3479        }
3480    }
3481
3482    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NewHandleIdOutOfRange, D>
3483        for &NewHandleIdOutOfRange
3484    {
3485        #[inline]
3486        unsafe fn encode(
3487            self,
3488            encoder: &mut fidl::encoding::Encoder<'_, D>,
3489            offset: usize,
3490            _depth: fidl::encoding::Depth,
3491        ) -> fidl::Result<()> {
3492            encoder.debug_check_bounds::<NewHandleIdOutOfRange>(offset);
3493            unsafe {
3494                // Copy the object into the buffer.
3495                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3496                (buf_ptr as *mut NewHandleIdOutOfRange)
3497                    .write_unaligned((self as *const NewHandleIdOutOfRange).read());
3498                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3499                // done second because the memcpy will write garbage to these bytes.
3500            }
3501            Ok(())
3502        }
3503    }
3504    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
3505        fidl::encoding::Encode<NewHandleIdOutOfRange, D> for (T0,)
3506    {
3507        #[inline]
3508        unsafe fn encode(
3509            self,
3510            encoder: &mut fidl::encoding::Encoder<'_, D>,
3511            offset: usize,
3512            depth: fidl::encoding::Depth,
3513        ) -> fidl::Result<()> {
3514            encoder.debug_check_bounds::<NewHandleIdOutOfRange>(offset);
3515            // Zero out padding regions. There's no need to apply masks
3516            // because the unmasked parts will be overwritten by fields.
3517            // Write the fields.
3518            self.0.encode(encoder, offset + 0, depth)?;
3519            Ok(())
3520        }
3521    }
3522
3523    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NewHandleIdOutOfRange {
3524        #[inline(always)]
3525        fn new_empty() -> Self {
3526            Self { id: fidl::new_empty!(u32, D) }
3527        }
3528
3529        #[inline]
3530        unsafe fn decode(
3531            &mut self,
3532            decoder: &mut fidl::encoding::Decoder<'_, D>,
3533            offset: usize,
3534            _depth: fidl::encoding::Depth,
3535        ) -> fidl::Result<()> {
3536            decoder.debug_check_bounds::<Self>(offset);
3537            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3538            // Verify that padding bytes are zero.
3539            // Copy from the buffer into the object.
3540            unsafe {
3541                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
3542            }
3543            Ok(())
3544        }
3545    }
3546
3547    impl fidl::encoding::ValueTypeMarker for NewHandleIdReused {
3548        type Borrowed<'a> = &'a Self;
3549        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3550            value
3551        }
3552    }
3553
3554    unsafe impl fidl::encoding::TypeMarker for NewHandleIdReused {
3555        type Owned = Self;
3556
3557        #[inline(always)]
3558        fn inline_align(_context: fidl::encoding::Context) -> usize {
3559            4
3560        }
3561
3562        #[inline(always)]
3563        fn inline_size(_context: fidl::encoding::Context) -> usize {
3564            8
3565        }
3566    }
3567
3568    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NewHandleIdReused, D>
3569        for &NewHandleIdReused
3570    {
3571        #[inline]
3572        unsafe fn encode(
3573            self,
3574            encoder: &mut fidl::encoding::Encoder<'_, D>,
3575            offset: usize,
3576            _depth: fidl::encoding::Depth,
3577        ) -> fidl::Result<()> {
3578            encoder.debug_check_bounds::<NewHandleIdReused>(offset);
3579            // Delegate to tuple encoding.
3580            fidl::encoding::Encode::<NewHandleIdReused, D>::encode(
3581                (
3582                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.id),
3583                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.same_call),
3584                ),
3585                encoder,
3586                offset,
3587                _depth,
3588            )
3589        }
3590    }
3591    unsafe impl<
3592        D: fidl::encoding::ResourceDialect,
3593        T0: fidl::encoding::Encode<u32, D>,
3594        T1: fidl::encoding::Encode<bool, D>,
3595    > fidl::encoding::Encode<NewHandleIdReused, D> for (T0, T1)
3596    {
3597        #[inline]
3598        unsafe fn encode(
3599            self,
3600            encoder: &mut fidl::encoding::Encoder<'_, D>,
3601            offset: usize,
3602            depth: fidl::encoding::Depth,
3603        ) -> fidl::Result<()> {
3604            encoder.debug_check_bounds::<NewHandleIdReused>(offset);
3605            // Zero out padding regions. There's no need to apply masks
3606            // because the unmasked parts will be overwritten by fields.
3607            unsafe {
3608                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(4);
3609                (ptr as *mut u32).write_unaligned(0);
3610            }
3611            // Write the fields.
3612            self.0.encode(encoder, offset + 0, depth)?;
3613            self.1.encode(encoder, offset + 4, depth)?;
3614            Ok(())
3615        }
3616    }
3617
3618    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NewHandleIdReused {
3619        #[inline(always)]
3620        fn new_empty() -> Self {
3621            Self { id: fidl::new_empty!(u32, D), same_call: fidl::new_empty!(bool, D) }
3622        }
3623
3624        #[inline]
3625        unsafe fn decode(
3626            &mut self,
3627            decoder: &mut fidl::encoding::Decoder<'_, D>,
3628            offset: usize,
3629            _depth: fidl::encoding::Depth,
3630        ) -> fidl::Result<()> {
3631            decoder.debug_check_bounds::<Self>(offset);
3632            // Verify that padding bytes are zero.
3633            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(4) };
3634            let padval = unsafe { (ptr as *const u32).read_unaligned() };
3635            let mask = 0xffffff00u32;
3636            let maskedval = padval & mask;
3637            if maskedval != 0 {
3638                return Err(fidl::Error::NonZeroPadding {
3639                    padding_start: offset + 4 + ((mask as u64).trailing_zeros() / 8) as usize,
3640                });
3641            }
3642            fidl::decode!(u32, D, &mut self.id, decoder, offset + 0, _depth)?;
3643            fidl::decode!(bool, D, &mut self.same_call, decoder, offset + 4, _depth)?;
3644            Ok(())
3645        }
3646    }
3647
3648    impl fidl::encoding::ValueTypeMarker for NoReadInProgress {
3649        type Borrowed<'a> = &'a Self;
3650        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3651            value
3652        }
3653    }
3654
3655    unsafe impl fidl::encoding::TypeMarker for NoReadInProgress {
3656        type Owned = Self;
3657
3658        #[inline(always)]
3659        fn inline_align(_context: fidl::encoding::Context) -> usize {
3660            1
3661        }
3662
3663        #[inline(always)]
3664        fn inline_size(_context: fidl::encoding::Context) -> usize {
3665            1
3666        }
3667    }
3668
3669    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NoReadInProgress, D>
3670        for &NoReadInProgress
3671    {
3672        #[inline]
3673        unsafe fn encode(
3674            self,
3675            encoder: &mut fidl::encoding::Encoder<'_, D>,
3676            offset: usize,
3677            _depth: fidl::encoding::Depth,
3678        ) -> fidl::Result<()> {
3679            encoder.debug_check_bounds::<NoReadInProgress>(offset);
3680            encoder.write_num(0u8, offset);
3681            Ok(())
3682        }
3683    }
3684
3685    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NoReadInProgress {
3686        #[inline(always)]
3687        fn new_empty() -> Self {
3688            Self
3689        }
3690
3691        #[inline]
3692        unsafe fn decode(
3693            &mut self,
3694            decoder: &mut fidl::encoding::Decoder<'_, D>,
3695            offset: usize,
3696            _depth: fidl::encoding::Depth,
3697        ) -> fidl::Result<()> {
3698            decoder.debug_check_bounds::<Self>(offset);
3699            match decoder.read_num::<u8>(offset) {
3700                0 => Ok(()),
3701                _ => Err(fidl::Error::Invalid),
3702            }
3703        }
3704    }
3705
3706    impl fidl::encoding::ValueTypeMarker for RightsUnknown {
3707        type Borrowed<'a> = &'a Self;
3708        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3709            value
3710        }
3711    }
3712
3713    unsafe impl fidl::encoding::TypeMarker for RightsUnknown {
3714        type Owned = Self;
3715
3716        #[inline(always)]
3717        fn inline_align(_context: fidl::encoding::Context) -> usize {
3718            4
3719        }
3720
3721        #[inline(always)]
3722        fn inline_size(_context: fidl::encoding::Context) -> usize {
3723            4
3724        }
3725    }
3726
3727    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RightsUnknown, D>
3728        for &RightsUnknown
3729    {
3730        #[inline]
3731        unsafe fn encode(
3732            self,
3733            encoder: &mut fidl::encoding::Encoder<'_, D>,
3734            offset: usize,
3735            _depth: fidl::encoding::Depth,
3736        ) -> fidl::Result<()> {
3737            encoder.debug_check_bounds::<RightsUnknown>(offset);
3738            // Delegate to tuple encoding.
3739            fidl::encoding::Encode::<RightsUnknown, D>::encode(
3740                (<fidl::Rights as fidl::encoding::ValueTypeMarker>::borrow(&self.rights),),
3741                encoder,
3742                offset,
3743                _depth,
3744            )
3745        }
3746    }
3747    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<fidl::Rights, D>>
3748        fidl::encoding::Encode<RightsUnknown, D> for (T0,)
3749    {
3750        #[inline]
3751        unsafe fn encode(
3752            self,
3753            encoder: &mut fidl::encoding::Encoder<'_, D>,
3754            offset: usize,
3755            depth: fidl::encoding::Depth,
3756        ) -> fidl::Result<()> {
3757            encoder.debug_check_bounds::<RightsUnknown>(offset);
3758            // Zero out padding regions. There's no need to apply masks
3759            // because the unmasked parts will be overwritten by fields.
3760            // Write the fields.
3761            self.0.encode(encoder, offset + 0, depth)?;
3762            Ok(())
3763        }
3764    }
3765
3766    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RightsUnknown {
3767        #[inline(always)]
3768        fn new_empty() -> Self {
3769            Self { rights: fidl::new_empty!(fidl::Rights, D) }
3770        }
3771
3772        #[inline]
3773        unsafe fn decode(
3774            &mut self,
3775            decoder: &mut fidl::encoding::Decoder<'_, D>,
3776            offset: usize,
3777            _depth: fidl::encoding::Depth,
3778        ) -> fidl::Result<()> {
3779            decoder.debug_check_bounds::<Self>(offset);
3780            // Verify that padding bytes are zero.
3781            fidl::decode!(fidl::Rights, D, &mut self.rights, decoder, offset + 0, _depth)?;
3782            Ok(())
3783        }
3784    }
3785
3786    impl fidl::encoding::ValueTypeMarker for SignalsUnknown {
3787        type Borrowed<'a> = &'a Self;
3788        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3789            value
3790        }
3791    }
3792
3793    unsafe impl fidl::encoding::TypeMarker for SignalsUnknown {
3794        type Owned = Self;
3795
3796        #[inline(always)]
3797        fn inline_align(_context: fidl::encoding::Context) -> usize {
3798            4
3799        }
3800
3801        #[inline(always)]
3802        fn inline_size(_context: fidl::encoding::Context) -> usize {
3803            4
3804        }
3805        #[inline(always)]
3806        fn encode_is_copy() -> bool {
3807            true
3808        }
3809
3810        #[inline(always)]
3811        fn decode_is_copy() -> bool {
3812            true
3813        }
3814    }
3815
3816    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SignalsUnknown, D>
3817        for &SignalsUnknown
3818    {
3819        #[inline]
3820        unsafe fn encode(
3821            self,
3822            encoder: &mut fidl::encoding::Encoder<'_, D>,
3823            offset: usize,
3824            _depth: fidl::encoding::Depth,
3825        ) -> fidl::Result<()> {
3826            encoder.debug_check_bounds::<SignalsUnknown>(offset);
3827            unsafe {
3828                // Copy the object into the buffer.
3829                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3830                (buf_ptr as *mut SignalsUnknown)
3831                    .write_unaligned((self as *const SignalsUnknown).read());
3832                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3833                // done second because the memcpy will write garbage to these bytes.
3834            }
3835            Ok(())
3836        }
3837    }
3838    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
3839        fidl::encoding::Encode<SignalsUnknown, D> for (T0,)
3840    {
3841        #[inline]
3842        unsafe fn encode(
3843            self,
3844            encoder: &mut fidl::encoding::Encoder<'_, D>,
3845            offset: usize,
3846            depth: fidl::encoding::Depth,
3847        ) -> fidl::Result<()> {
3848            encoder.debug_check_bounds::<SignalsUnknown>(offset);
3849            // Zero out padding regions. There's no need to apply masks
3850            // because the unmasked parts will be overwritten by fields.
3851            // Write the fields.
3852            self.0.encode(encoder, offset + 0, depth)?;
3853            Ok(())
3854        }
3855    }
3856
3857    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SignalsUnknown {
3858        #[inline(always)]
3859        fn new_empty() -> Self {
3860            Self { signals: fidl::new_empty!(u32, D) }
3861        }
3862
3863        #[inline]
3864        unsafe fn decode(
3865            &mut self,
3866            decoder: &mut fidl::encoding::Decoder<'_, D>,
3867            offset: usize,
3868            _depth: fidl::encoding::Depth,
3869        ) -> fidl::Result<()> {
3870            decoder.debug_check_bounds::<Self>(offset);
3871            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3872            // Verify that padding bytes are zero.
3873            // Copy from the buffer into the object.
3874            unsafe {
3875                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
3876            }
3877            Ok(())
3878        }
3879    }
3880
3881    impl fidl::encoding::ValueTypeMarker for SocketCreateSocketRequest {
3882        type Borrowed<'a> = &'a Self;
3883        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3884            value
3885        }
3886    }
3887
3888    unsafe impl fidl::encoding::TypeMarker for SocketCreateSocketRequest {
3889        type Owned = Self;
3890
3891        #[inline(always)]
3892        fn inline_align(_context: fidl::encoding::Context) -> usize {
3893            4
3894        }
3895
3896        #[inline(always)]
3897        fn inline_size(_context: fidl::encoding::Context) -> usize {
3898            12
3899        }
3900    }
3901
3902    unsafe impl<D: fidl::encoding::ResourceDialect>
3903        fidl::encoding::Encode<SocketCreateSocketRequest, D> for &SocketCreateSocketRequest
3904    {
3905        #[inline]
3906        unsafe fn encode(
3907            self,
3908            encoder: &mut fidl::encoding::Encoder<'_, D>,
3909            offset: usize,
3910            _depth: fidl::encoding::Depth,
3911        ) -> fidl::Result<()> {
3912            encoder.debug_check_bounds::<SocketCreateSocketRequest>(offset);
3913            // Delegate to tuple encoding.
3914            fidl::encoding::Encode::<SocketCreateSocketRequest, D>::encode(
3915                (
3916                    <SocketType as fidl::encoding::ValueTypeMarker>::borrow(&self.options),
3917                    <fidl::encoding::Array<NewHandleId, 2> as fidl::encoding::ValueTypeMarker>::borrow(&self.handles),
3918                ),
3919                encoder, offset, _depth
3920            )
3921        }
3922    }
3923    unsafe impl<
3924        D: fidl::encoding::ResourceDialect,
3925        T0: fidl::encoding::Encode<SocketType, D>,
3926        T1: fidl::encoding::Encode<fidl::encoding::Array<NewHandleId, 2>, D>,
3927    > fidl::encoding::Encode<SocketCreateSocketRequest, D> for (T0, T1)
3928    {
3929        #[inline]
3930        unsafe fn encode(
3931            self,
3932            encoder: &mut fidl::encoding::Encoder<'_, D>,
3933            offset: usize,
3934            depth: fidl::encoding::Depth,
3935        ) -> fidl::Result<()> {
3936            encoder.debug_check_bounds::<SocketCreateSocketRequest>(offset);
3937            // Zero out padding regions. There's no need to apply masks
3938            // because the unmasked parts will be overwritten by fields.
3939            // Write the fields.
3940            self.0.encode(encoder, offset + 0, depth)?;
3941            self.1.encode(encoder, offset + 4, depth)?;
3942            Ok(())
3943        }
3944    }
3945
3946    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3947        for SocketCreateSocketRequest
3948    {
3949        #[inline(always)]
3950        fn new_empty() -> Self {
3951            Self {
3952                options: fidl::new_empty!(SocketType, D),
3953                handles: fidl::new_empty!(fidl::encoding::Array<NewHandleId, 2>, D),
3954            }
3955        }
3956
3957        #[inline]
3958        unsafe fn decode(
3959            &mut self,
3960            decoder: &mut fidl::encoding::Decoder<'_, D>,
3961            offset: usize,
3962            _depth: fidl::encoding::Depth,
3963        ) -> fidl::Result<()> {
3964            decoder.debug_check_bounds::<Self>(offset);
3965            // Verify that padding bytes are zero.
3966            fidl::decode!(SocketType, D, &mut self.options, decoder, offset + 0, _depth)?;
3967            fidl::decode!(fidl::encoding::Array<NewHandleId, 2>, D, &mut self.handles, decoder, offset + 4, _depth)?;
3968            Ok(())
3969        }
3970    }
3971
3972    impl fidl::encoding::ValueTypeMarker for SocketData {
3973        type Borrowed<'a> = &'a Self;
3974        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3975            value
3976        }
3977    }
3978
3979    unsafe impl fidl::encoding::TypeMarker for SocketData {
3980        type Owned = Self;
3981
3982        #[inline(always)]
3983        fn inline_align(_context: fidl::encoding::Context) -> usize {
3984            8
3985        }
3986
3987        #[inline(always)]
3988        fn inline_size(_context: fidl::encoding::Context) -> usize {
3989            24
3990        }
3991    }
3992
3993    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SocketData, D>
3994        for &SocketData
3995    {
3996        #[inline]
3997        unsafe fn encode(
3998            self,
3999            encoder: &mut fidl::encoding::Encoder<'_, D>,
4000            offset: usize,
4001            _depth: fidl::encoding::Depth,
4002        ) -> fidl::Result<()> {
4003            encoder.debug_check_bounds::<SocketData>(offset);
4004            // Delegate to tuple encoding.
4005            fidl::encoding::Encode::<SocketData, D>::encode(
4006                (
4007                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.data),
4008                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.is_datagram),
4009                ),
4010                encoder, offset, _depth
4011            )
4012        }
4013    }
4014    unsafe impl<
4015        D: fidl::encoding::ResourceDialect,
4016        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u8>, D>,
4017        T1: fidl::encoding::Encode<bool, D>,
4018    > fidl::encoding::Encode<SocketData, D> for (T0, T1)
4019    {
4020        #[inline]
4021        unsafe fn encode(
4022            self,
4023            encoder: &mut fidl::encoding::Encoder<'_, D>,
4024            offset: usize,
4025            depth: fidl::encoding::Depth,
4026        ) -> fidl::Result<()> {
4027            encoder.debug_check_bounds::<SocketData>(offset);
4028            // Zero out padding regions. There's no need to apply masks
4029            // because the unmasked parts will be overwritten by fields.
4030            unsafe {
4031                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
4032                (ptr as *mut u64).write_unaligned(0);
4033            }
4034            // Write the fields.
4035            self.0.encode(encoder, offset + 0, depth)?;
4036            self.1.encode(encoder, offset + 16, depth)?;
4037            Ok(())
4038        }
4039    }
4040
4041    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SocketData {
4042        #[inline(always)]
4043        fn new_empty() -> Self {
4044            Self {
4045                data: fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D),
4046                is_datagram: fidl::new_empty!(bool, D),
4047            }
4048        }
4049
4050        #[inline]
4051        unsafe fn decode(
4052            &mut self,
4053            decoder: &mut fidl::encoding::Decoder<'_, D>,
4054            offset: usize,
4055            _depth: fidl::encoding::Depth,
4056        ) -> fidl::Result<()> {
4057            decoder.debug_check_bounds::<Self>(offset);
4058            // Verify that padding bytes are zero.
4059            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
4060            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4061            let mask = 0xffffffffffffff00u64;
4062            let maskedval = padval & mask;
4063            if maskedval != 0 {
4064                return Err(fidl::Error::NonZeroPadding {
4065                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
4066                });
4067            }
4068            fidl::decode!(
4069                fidl::encoding::UnboundedVector<u8>,
4070                D,
4071                &mut self.data,
4072                decoder,
4073                offset + 0,
4074                _depth
4075            )?;
4076            fidl::decode!(bool, D, &mut self.is_datagram, decoder, offset + 16, _depth)?;
4077            Ok(())
4078        }
4079    }
4080
4081    impl fidl::encoding::ValueTypeMarker for SocketDispositionUnknown {
4082        type Borrowed<'a> = &'a Self;
4083        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4084            value
4085        }
4086    }
4087
4088    unsafe impl fidl::encoding::TypeMarker for SocketDispositionUnknown {
4089        type Owned = Self;
4090
4091        #[inline(always)]
4092        fn inline_align(_context: fidl::encoding::Context) -> usize {
4093            4
4094        }
4095
4096        #[inline(always)]
4097        fn inline_size(_context: fidl::encoding::Context) -> usize {
4098            4
4099        }
4100    }
4101
4102    unsafe impl<D: fidl::encoding::ResourceDialect>
4103        fidl::encoding::Encode<SocketDispositionUnknown, D> for &SocketDispositionUnknown
4104    {
4105        #[inline]
4106        unsafe fn encode(
4107            self,
4108            encoder: &mut fidl::encoding::Encoder<'_, D>,
4109            offset: usize,
4110            _depth: fidl::encoding::Depth,
4111        ) -> fidl::Result<()> {
4112            encoder.debug_check_bounds::<SocketDispositionUnknown>(offset);
4113            // Delegate to tuple encoding.
4114            fidl::encoding::Encode::<SocketDispositionUnknown, D>::encode(
4115                (<SocketDisposition as fidl::encoding::ValueTypeMarker>::borrow(&self.disposition),),
4116                encoder,
4117                offset,
4118                _depth,
4119            )
4120        }
4121    }
4122    unsafe impl<
4123        D: fidl::encoding::ResourceDialect,
4124        T0: fidl::encoding::Encode<SocketDisposition, D>,
4125    > fidl::encoding::Encode<SocketDispositionUnknown, D> for (T0,)
4126    {
4127        #[inline]
4128        unsafe fn encode(
4129            self,
4130            encoder: &mut fidl::encoding::Encoder<'_, D>,
4131            offset: usize,
4132            depth: fidl::encoding::Depth,
4133        ) -> fidl::Result<()> {
4134            encoder.debug_check_bounds::<SocketDispositionUnknown>(offset);
4135            // Zero out padding regions. There's no need to apply masks
4136            // because the unmasked parts will be overwritten by fields.
4137            // Write the fields.
4138            self.0.encode(encoder, offset + 0, depth)?;
4139            Ok(())
4140        }
4141    }
4142
4143    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4144        for SocketDispositionUnknown
4145    {
4146        #[inline(always)]
4147        fn new_empty() -> Self {
4148            Self { disposition: fidl::new_empty!(SocketDisposition, D) }
4149        }
4150
4151        #[inline]
4152        unsafe fn decode(
4153            &mut self,
4154            decoder: &mut fidl::encoding::Decoder<'_, D>,
4155            offset: usize,
4156            _depth: fidl::encoding::Depth,
4157        ) -> fidl::Result<()> {
4158            decoder.debug_check_bounds::<Self>(offset);
4159            // Verify that padding bytes are zero.
4160            fidl::decode!(
4161                SocketDisposition,
4162                D,
4163                &mut self.disposition,
4164                decoder,
4165                offset + 0,
4166                _depth
4167            )?;
4168            Ok(())
4169        }
4170    }
4171
4172    impl fidl::encoding::ValueTypeMarker for SocketOnSocketStreamingDataRequest {
4173        type Borrowed<'a> = &'a Self;
4174        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4175            value
4176        }
4177    }
4178
4179    unsafe impl fidl::encoding::TypeMarker for SocketOnSocketStreamingDataRequest {
4180        type Owned = Self;
4181
4182        #[inline(always)]
4183        fn inline_align(_context: fidl::encoding::Context) -> usize {
4184            8
4185        }
4186
4187        #[inline(always)]
4188        fn inline_size(_context: fidl::encoding::Context) -> usize {
4189            24
4190        }
4191    }
4192
4193    unsafe impl<D: fidl::encoding::ResourceDialect>
4194        fidl::encoding::Encode<SocketOnSocketStreamingDataRequest, D>
4195        for &SocketOnSocketStreamingDataRequest
4196    {
4197        #[inline]
4198        unsafe fn encode(
4199            self,
4200            encoder: &mut fidl::encoding::Encoder<'_, D>,
4201            offset: usize,
4202            _depth: fidl::encoding::Depth,
4203        ) -> fidl::Result<()> {
4204            encoder.debug_check_bounds::<SocketOnSocketStreamingDataRequest>(offset);
4205            // Delegate to tuple encoding.
4206            fidl::encoding::Encode::<SocketOnSocketStreamingDataRequest, D>::encode(
4207                (
4208                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.handle),
4209                    <SocketMessage as fidl::encoding::ValueTypeMarker>::borrow(
4210                        &self.socket_message,
4211                    ),
4212                ),
4213                encoder,
4214                offset,
4215                _depth,
4216            )
4217        }
4218    }
4219    unsafe impl<
4220        D: fidl::encoding::ResourceDialect,
4221        T0: fidl::encoding::Encode<HandleId, D>,
4222        T1: fidl::encoding::Encode<SocketMessage, D>,
4223    > fidl::encoding::Encode<SocketOnSocketStreamingDataRequest, D> for (T0, T1)
4224    {
4225        #[inline]
4226        unsafe fn encode(
4227            self,
4228            encoder: &mut fidl::encoding::Encoder<'_, D>,
4229            offset: usize,
4230            depth: fidl::encoding::Depth,
4231        ) -> fidl::Result<()> {
4232            encoder.debug_check_bounds::<SocketOnSocketStreamingDataRequest>(offset);
4233            // Zero out padding regions. There's no need to apply masks
4234            // because the unmasked parts will be overwritten by fields.
4235            unsafe {
4236                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
4237                (ptr as *mut u64).write_unaligned(0);
4238            }
4239            // Write the fields.
4240            self.0.encode(encoder, offset + 0, depth)?;
4241            self.1.encode(encoder, offset + 8, depth)?;
4242            Ok(())
4243        }
4244    }
4245
4246    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4247        for SocketOnSocketStreamingDataRequest
4248    {
4249        #[inline(always)]
4250        fn new_empty() -> Self {
4251            Self {
4252                handle: fidl::new_empty!(HandleId, D),
4253                socket_message: fidl::new_empty!(SocketMessage, D),
4254            }
4255        }
4256
4257        #[inline]
4258        unsafe fn decode(
4259            &mut self,
4260            decoder: &mut fidl::encoding::Decoder<'_, D>,
4261            offset: usize,
4262            _depth: fidl::encoding::Depth,
4263        ) -> fidl::Result<()> {
4264            decoder.debug_check_bounds::<Self>(offset);
4265            // Verify that padding bytes are zero.
4266            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
4267            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4268            let mask = 0xffffffff00000000u64;
4269            let maskedval = padval & mask;
4270            if maskedval != 0 {
4271                return Err(fidl::Error::NonZeroPadding {
4272                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
4273                });
4274            }
4275            fidl::decode!(HandleId, D, &mut self.handle, decoder, offset + 0, _depth)?;
4276            fidl::decode!(SocketMessage, D, &mut self.socket_message, decoder, offset + 8, _depth)?;
4277            Ok(())
4278        }
4279    }
4280
4281    impl fidl::encoding::ValueTypeMarker for SocketReadSocketRequest {
4282        type Borrowed<'a> = &'a Self;
4283        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4284            value
4285        }
4286    }
4287
4288    unsafe impl fidl::encoding::TypeMarker for SocketReadSocketRequest {
4289        type Owned = Self;
4290
4291        #[inline(always)]
4292        fn inline_align(_context: fidl::encoding::Context) -> usize {
4293            8
4294        }
4295
4296        #[inline(always)]
4297        fn inline_size(_context: fidl::encoding::Context) -> usize {
4298            16
4299        }
4300    }
4301
4302    unsafe impl<D: fidl::encoding::ResourceDialect>
4303        fidl::encoding::Encode<SocketReadSocketRequest, D> for &SocketReadSocketRequest
4304    {
4305        #[inline]
4306        unsafe fn encode(
4307            self,
4308            encoder: &mut fidl::encoding::Encoder<'_, D>,
4309            offset: usize,
4310            _depth: fidl::encoding::Depth,
4311        ) -> fidl::Result<()> {
4312            encoder.debug_check_bounds::<SocketReadSocketRequest>(offset);
4313            unsafe {
4314                // Copy the object into the buffer.
4315                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4316                (buf_ptr as *mut SocketReadSocketRequest)
4317                    .write_unaligned((self as *const SocketReadSocketRequest).read());
4318                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4319                // done second because the memcpy will write garbage to these bytes.
4320                let padding_ptr = buf_ptr.offset(0) as *mut u64;
4321                let padding_mask = 0xffffffff00000000u64;
4322                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
4323            }
4324            Ok(())
4325        }
4326    }
4327    unsafe impl<
4328        D: fidl::encoding::ResourceDialect,
4329        T0: fidl::encoding::Encode<HandleId, D>,
4330        T1: fidl::encoding::Encode<u64, D>,
4331    > fidl::encoding::Encode<SocketReadSocketRequest, D> for (T0, T1)
4332    {
4333        #[inline]
4334        unsafe fn encode(
4335            self,
4336            encoder: &mut fidl::encoding::Encoder<'_, D>,
4337            offset: usize,
4338            depth: fidl::encoding::Depth,
4339        ) -> fidl::Result<()> {
4340            encoder.debug_check_bounds::<SocketReadSocketRequest>(offset);
4341            // Zero out padding regions. There's no need to apply masks
4342            // because the unmasked parts will be overwritten by fields.
4343            unsafe {
4344                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
4345                (ptr as *mut u64).write_unaligned(0);
4346            }
4347            // Write the fields.
4348            self.0.encode(encoder, offset + 0, depth)?;
4349            self.1.encode(encoder, offset + 8, depth)?;
4350            Ok(())
4351        }
4352    }
4353
4354    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4355        for SocketReadSocketRequest
4356    {
4357        #[inline(always)]
4358        fn new_empty() -> Self {
4359            Self { handle: fidl::new_empty!(HandleId, D), max_bytes: fidl::new_empty!(u64, D) }
4360        }
4361
4362        #[inline]
4363        unsafe fn decode(
4364            &mut self,
4365            decoder: &mut fidl::encoding::Decoder<'_, D>,
4366            offset: usize,
4367            _depth: fidl::encoding::Depth,
4368        ) -> fidl::Result<()> {
4369            decoder.debug_check_bounds::<Self>(offset);
4370            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4371            // Verify that padding bytes are zero.
4372            let ptr = unsafe { buf_ptr.offset(0) };
4373            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4374            let mask = 0xffffffff00000000u64;
4375            let maskedval = padval & mask;
4376            if maskedval != 0 {
4377                return Err(fidl::Error::NonZeroPadding {
4378                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
4379                });
4380            }
4381            // Copy from the buffer into the object.
4382            unsafe {
4383                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4384            }
4385            Ok(())
4386        }
4387    }
4388
4389    impl fidl::encoding::ValueTypeMarker for SocketReadSocketStreamingStartRequest {
4390        type Borrowed<'a> = &'a Self;
4391        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4392            value
4393        }
4394    }
4395
4396    unsafe impl fidl::encoding::TypeMarker for SocketReadSocketStreamingStartRequest {
4397        type Owned = Self;
4398
4399        #[inline(always)]
4400        fn inline_align(_context: fidl::encoding::Context) -> usize {
4401            4
4402        }
4403
4404        #[inline(always)]
4405        fn inline_size(_context: fidl::encoding::Context) -> usize {
4406            4
4407        }
4408        #[inline(always)]
4409        fn encode_is_copy() -> bool {
4410            true
4411        }
4412
4413        #[inline(always)]
4414        fn decode_is_copy() -> bool {
4415            true
4416        }
4417    }
4418
4419    unsafe impl<D: fidl::encoding::ResourceDialect>
4420        fidl::encoding::Encode<SocketReadSocketStreamingStartRequest, D>
4421        for &SocketReadSocketStreamingStartRequest
4422    {
4423        #[inline]
4424        unsafe fn encode(
4425            self,
4426            encoder: &mut fidl::encoding::Encoder<'_, D>,
4427            offset: usize,
4428            _depth: fidl::encoding::Depth,
4429        ) -> fidl::Result<()> {
4430            encoder.debug_check_bounds::<SocketReadSocketStreamingStartRequest>(offset);
4431            unsafe {
4432                // Copy the object into the buffer.
4433                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4434                (buf_ptr as *mut SocketReadSocketStreamingStartRequest)
4435                    .write_unaligned((self as *const SocketReadSocketStreamingStartRequest).read());
4436                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4437                // done second because the memcpy will write garbage to these bytes.
4438            }
4439            Ok(())
4440        }
4441    }
4442    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HandleId, D>>
4443        fidl::encoding::Encode<SocketReadSocketStreamingStartRequest, D> for (T0,)
4444    {
4445        #[inline]
4446        unsafe fn encode(
4447            self,
4448            encoder: &mut fidl::encoding::Encoder<'_, D>,
4449            offset: usize,
4450            depth: fidl::encoding::Depth,
4451        ) -> fidl::Result<()> {
4452            encoder.debug_check_bounds::<SocketReadSocketStreamingStartRequest>(offset);
4453            // Zero out padding regions. There's no need to apply masks
4454            // because the unmasked parts will be overwritten by fields.
4455            // Write the fields.
4456            self.0.encode(encoder, offset + 0, depth)?;
4457            Ok(())
4458        }
4459    }
4460
4461    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4462        for SocketReadSocketStreamingStartRequest
4463    {
4464        #[inline(always)]
4465        fn new_empty() -> Self {
4466            Self { handle: fidl::new_empty!(HandleId, D) }
4467        }
4468
4469        #[inline]
4470        unsafe fn decode(
4471            &mut self,
4472            decoder: &mut fidl::encoding::Decoder<'_, D>,
4473            offset: usize,
4474            _depth: fidl::encoding::Depth,
4475        ) -> fidl::Result<()> {
4476            decoder.debug_check_bounds::<Self>(offset);
4477            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4478            // Verify that padding bytes are zero.
4479            // Copy from the buffer into the object.
4480            unsafe {
4481                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
4482            }
4483            Ok(())
4484        }
4485    }
4486
4487    impl fidl::encoding::ValueTypeMarker for SocketReadSocketStreamingStopRequest {
4488        type Borrowed<'a> = &'a Self;
4489        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4490            value
4491        }
4492    }
4493
4494    unsafe impl fidl::encoding::TypeMarker for SocketReadSocketStreamingStopRequest {
4495        type Owned = Self;
4496
4497        #[inline(always)]
4498        fn inline_align(_context: fidl::encoding::Context) -> usize {
4499            4
4500        }
4501
4502        #[inline(always)]
4503        fn inline_size(_context: fidl::encoding::Context) -> usize {
4504            4
4505        }
4506        #[inline(always)]
4507        fn encode_is_copy() -> bool {
4508            true
4509        }
4510
4511        #[inline(always)]
4512        fn decode_is_copy() -> bool {
4513            true
4514        }
4515    }
4516
4517    unsafe impl<D: fidl::encoding::ResourceDialect>
4518        fidl::encoding::Encode<SocketReadSocketStreamingStopRequest, D>
4519        for &SocketReadSocketStreamingStopRequest
4520    {
4521        #[inline]
4522        unsafe fn encode(
4523            self,
4524            encoder: &mut fidl::encoding::Encoder<'_, D>,
4525            offset: usize,
4526            _depth: fidl::encoding::Depth,
4527        ) -> fidl::Result<()> {
4528            encoder.debug_check_bounds::<SocketReadSocketStreamingStopRequest>(offset);
4529            unsafe {
4530                // Copy the object into the buffer.
4531                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4532                (buf_ptr as *mut SocketReadSocketStreamingStopRequest)
4533                    .write_unaligned((self as *const SocketReadSocketStreamingStopRequest).read());
4534                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4535                // done second because the memcpy will write garbage to these bytes.
4536            }
4537            Ok(())
4538        }
4539    }
4540    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HandleId, D>>
4541        fidl::encoding::Encode<SocketReadSocketStreamingStopRequest, D> for (T0,)
4542    {
4543        #[inline]
4544        unsafe fn encode(
4545            self,
4546            encoder: &mut fidl::encoding::Encoder<'_, D>,
4547            offset: usize,
4548            depth: fidl::encoding::Depth,
4549        ) -> fidl::Result<()> {
4550            encoder.debug_check_bounds::<SocketReadSocketStreamingStopRequest>(offset);
4551            // Zero out padding regions. There's no need to apply masks
4552            // because the unmasked parts will be overwritten by fields.
4553            // Write the fields.
4554            self.0.encode(encoder, offset + 0, depth)?;
4555            Ok(())
4556        }
4557    }
4558
4559    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4560        for SocketReadSocketStreamingStopRequest
4561    {
4562        #[inline(always)]
4563        fn new_empty() -> Self {
4564            Self { handle: fidl::new_empty!(HandleId, D) }
4565        }
4566
4567        #[inline]
4568        unsafe fn decode(
4569            &mut self,
4570            decoder: &mut fidl::encoding::Decoder<'_, D>,
4571            offset: usize,
4572            _depth: fidl::encoding::Depth,
4573        ) -> fidl::Result<()> {
4574            decoder.debug_check_bounds::<Self>(offset);
4575            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4576            // Verify that padding bytes are zero.
4577            // Copy from the buffer into the object.
4578            unsafe {
4579                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
4580            }
4581            Ok(())
4582        }
4583    }
4584
4585    impl fidl::encoding::ValueTypeMarker for SocketSetSocketDispositionRequest {
4586        type Borrowed<'a> = &'a Self;
4587        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4588            value
4589        }
4590    }
4591
4592    unsafe impl fidl::encoding::TypeMarker for SocketSetSocketDispositionRequest {
4593        type Owned = Self;
4594
4595        #[inline(always)]
4596        fn inline_align(_context: fidl::encoding::Context) -> usize {
4597            4
4598        }
4599
4600        #[inline(always)]
4601        fn inline_size(_context: fidl::encoding::Context) -> usize {
4602            12
4603        }
4604    }
4605
4606    unsafe impl<D: fidl::encoding::ResourceDialect>
4607        fidl::encoding::Encode<SocketSetSocketDispositionRequest, D>
4608        for &SocketSetSocketDispositionRequest
4609    {
4610        #[inline]
4611        unsafe fn encode(
4612            self,
4613            encoder: &mut fidl::encoding::Encoder<'_, D>,
4614            offset: usize,
4615            _depth: fidl::encoding::Depth,
4616        ) -> fidl::Result<()> {
4617            encoder.debug_check_bounds::<SocketSetSocketDispositionRequest>(offset);
4618            // Delegate to tuple encoding.
4619            fidl::encoding::Encode::<SocketSetSocketDispositionRequest, D>::encode(
4620                (
4621                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.handle),
4622                    <SocketDisposition as fidl::encoding::ValueTypeMarker>::borrow(
4623                        &self.disposition,
4624                    ),
4625                    <SocketDisposition as fidl::encoding::ValueTypeMarker>::borrow(
4626                        &self.disposition_peer,
4627                    ),
4628                ),
4629                encoder,
4630                offset,
4631                _depth,
4632            )
4633        }
4634    }
4635    unsafe impl<
4636        D: fidl::encoding::ResourceDialect,
4637        T0: fidl::encoding::Encode<HandleId, D>,
4638        T1: fidl::encoding::Encode<SocketDisposition, D>,
4639        T2: fidl::encoding::Encode<SocketDisposition, D>,
4640    > fidl::encoding::Encode<SocketSetSocketDispositionRequest, D> for (T0, T1, T2)
4641    {
4642        #[inline]
4643        unsafe fn encode(
4644            self,
4645            encoder: &mut fidl::encoding::Encoder<'_, D>,
4646            offset: usize,
4647            depth: fidl::encoding::Depth,
4648        ) -> fidl::Result<()> {
4649            encoder.debug_check_bounds::<SocketSetSocketDispositionRequest>(offset);
4650            // Zero out padding regions. There's no need to apply masks
4651            // because the unmasked parts will be overwritten by fields.
4652            // Write the fields.
4653            self.0.encode(encoder, offset + 0, depth)?;
4654            self.1.encode(encoder, offset + 4, depth)?;
4655            self.2.encode(encoder, offset + 8, depth)?;
4656            Ok(())
4657        }
4658    }
4659
4660    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4661        for SocketSetSocketDispositionRequest
4662    {
4663        #[inline(always)]
4664        fn new_empty() -> Self {
4665            Self {
4666                handle: fidl::new_empty!(HandleId, D),
4667                disposition: fidl::new_empty!(SocketDisposition, D),
4668                disposition_peer: fidl::new_empty!(SocketDisposition, D),
4669            }
4670        }
4671
4672        #[inline]
4673        unsafe fn decode(
4674            &mut self,
4675            decoder: &mut fidl::encoding::Decoder<'_, D>,
4676            offset: usize,
4677            _depth: fidl::encoding::Depth,
4678        ) -> fidl::Result<()> {
4679            decoder.debug_check_bounds::<Self>(offset);
4680            // Verify that padding bytes are zero.
4681            fidl::decode!(HandleId, D, &mut self.handle, decoder, offset + 0, _depth)?;
4682            fidl::decode!(
4683                SocketDisposition,
4684                D,
4685                &mut self.disposition,
4686                decoder,
4687                offset + 4,
4688                _depth
4689            )?;
4690            fidl::decode!(
4691                SocketDisposition,
4692                D,
4693                &mut self.disposition_peer,
4694                decoder,
4695                offset + 8,
4696                _depth
4697            )?;
4698            Ok(())
4699        }
4700    }
4701
4702    impl fidl::encoding::ValueTypeMarker for SocketTypeUnknown {
4703        type Borrowed<'a> = &'a Self;
4704        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4705            value
4706        }
4707    }
4708
4709    unsafe impl fidl::encoding::TypeMarker for SocketTypeUnknown {
4710        type Owned = Self;
4711
4712        #[inline(always)]
4713        fn inline_align(_context: fidl::encoding::Context) -> usize {
4714            4
4715        }
4716
4717        #[inline(always)]
4718        fn inline_size(_context: fidl::encoding::Context) -> usize {
4719            4
4720        }
4721    }
4722
4723    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SocketTypeUnknown, D>
4724        for &SocketTypeUnknown
4725    {
4726        #[inline]
4727        unsafe fn encode(
4728            self,
4729            encoder: &mut fidl::encoding::Encoder<'_, D>,
4730            offset: usize,
4731            _depth: fidl::encoding::Depth,
4732        ) -> fidl::Result<()> {
4733            encoder.debug_check_bounds::<SocketTypeUnknown>(offset);
4734            // Delegate to tuple encoding.
4735            fidl::encoding::Encode::<SocketTypeUnknown, D>::encode(
4736                (<SocketType as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),),
4737                encoder,
4738                offset,
4739                _depth,
4740            )
4741        }
4742    }
4743    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<SocketType, D>>
4744        fidl::encoding::Encode<SocketTypeUnknown, D> for (T0,)
4745    {
4746        #[inline]
4747        unsafe fn encode(
4748            self,
4749            encoder: &mut fidl::encoding::Encoder<'_, D>,
4750            offset: usize,
4751            depth: fidl::encoding::Depth,
4752        ) -> fidl::Result<()> {
4753            encoder.debug_check_bounds::<SocketTypeUnknown>(offset);
4754            // Zero out padding regions. There's no need to apply masks
4755            // because the unmasked parts will be overwritten by fields.
4756            // Write the fields.
4757            self.0.encode(encoder, offset + 0, depth)?;
4758            Ok(())
4759        }
4760    }
4761
4762    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SocketTypeUnknown {
4763        #[inline(always)]
4764        fn new_empty() -> Self {
4765            Self { type_: fidl::new_empty!(SocketType, D) }
4766        }
4767
4768        #[inline]
4769        unsafe fn decode(
4770            &mut self,
4771            decoder: &mut fidl::encoding::Decoder<'_, D>,
4772            offset: usize,
4773            _depth: fidl::encoding::Depth,
4774        ) -> fidl::Result<()> {
4775            decoder.debug_check_bounds::<Self>(offset);
4776            // Verify that padding bytes are zero.
4777            fidl::decode!(SocketType, D, &mut self.type_, decoder, offset + 0, _depth)?;
4778            Ok(())
4779        }
4780    }
4781
4782    impl fidl::encoding::ValueTypeMarker for SocketWriteSocketRequest {
4783        type Borrowed<'a> = &'a Self;
4784        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4785            value
4786        }
4787    }
4788
4789    unsafe impl fidl::encoding::TypeMarker for SocketWriteSocketRequest {
4790        type Owned = Self;
4791
4792        #[inline(always)]
4793        fn inline_align(_context: fidl::encoding::Context) -> usize {
4794            8
4795        }
4796
4797        #[inline(always)]
4798        fn inline_size(_context: fidl::encoding::Context) -> usize {
4799            24
4800        }
4801    }
4802
4803    unsafe impl<D: fidl::encoding::ResourceDialect>
4804        fidl::encoding::Encode<SocketWriteSocketRequest, D> for &SocketWriteSocketRequest
4805    {
4806        #[inline]
4807        unsafe fn encode(
4808            self,
4809            encoder: &mut fidl::encoding::Encoder<'_, D>,
4810            offset: usize,
4811            _depth: fidl::encoding::Depth,
4812        ) -> fidl::Result<()> {
4813            encoder.debug_check_bounds::<SocketWriteSocketRequest>(offset);
4814            // Delegate to tuple encoding.
4815            fidl::encoding::Encode::<SocketWriteSocketRequest, D>::encode(
4816                (
4817                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(&self.handle),
4818                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.data),
4819                ),
4820                encoder, offset, _depth
4821            )
4822        }
4823    }
4824    unsafe impl<
4825        D: fidl::encoding::ResourceDialect,
4826        T0: fidl::encoding::Encode<HandleId, D>,
4827        T1: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u8>, D>,
4828    > fidl::encoding::Encode<SocketWriteSocketRequest, D> for (T0, T1)
4829    {
4830        #[inline]
4831        unsafe fn encode(
4832            self,
4833            encoder: &mut fidl::encoding::Encoder<'_, D>,
4834            offset: usize,
4835            depth: fidl::encoding::Depth,
4836        ) -> fidl::Result<()> {
4837            encoder.debug_check_bounds::<SocketWriteSocketRequest>(offset);
4838            // Zero out padding regions. There's no need to apply masks
4839            // because the unmasked parts will be overwritten by fields.
4840            unsafe {
4841                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
4842                (ptr as *mut u64).write_unaligned(0);
4843            }
4844            // Write the fields.
4845            self.0.encode(encoder, offset + 0, depth)?;
4846            self.1.encode(encoder, offset + 8, depth)?;
4847            Ok(())
4848        }
4849    }
4850
4851    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4852        for SocketWriteSocketRequest
4853    {
4854        #[inline(always)]
4855        fn new_empty() -> Self {
4856            Self {
4857                handle: fidl::new_empty!(HandleId, D),
4858                data: fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D),
4859            }
4860        }
4861
4862        #[inline]
4863        unsafe fn decode(
4864            &mut self,
4865            decoder: &mut fidl::encoding::Decoder<'_, D>,
4866            offset: usize,
4867            _depth: fidl::encoding::Depth,
4868        ) -> fidl::Result<()> {
4869            decoder.debug_check_bounds::<Self>(offset);
4870            // Verify that padding bytes are zero.
4871            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
4872            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4873            let mask = 0xffffffff00000000u64;
4874            let maskedval = padval & mask;
4875            if maskedval != 0 {
4876                return Err(fidl::Error::NonZeroPadding {
4877                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
4878                });
4879            }
4880            fidl::decode!(HandleId, D, &mut self.handle, decoder, offset + 0, _depth)?;
4881            fidl::decode!(
4882                fidl::encoding::UnboundedVector<u8>,
4883                D,
4884                &mut self.data,
4885                decoder,
4886                offset + 8,
4887                _depth
4888            )?;
4889            Ok(())
4890        }
4891    }
4892
4893    impl fidl::encoding::ValueTypeMarker for SocketWriteSocketResponse {
4894        type Borrowed<'a> = &'a Self;
4895        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4896            value
4897        }
4898    }
4899
4900    unsafe impl fidl::encoding::TypeMarker for SocketWriteSocketResponse {
4901        type Owned = Self;
4902
4903        #[inline(always)]
4904        fn inline_align(_context: fidl::encoding::Context) -> usize {
4905            8
4906        }
4907
4908        #[inline(always)]
4909        fn inline_size(_context: fidl::encoding::Context) -> usize {
4910            8
4911        }
4912        #[inline(always)]
4913        fn encode_is_copy() -> bool {
4914            true
4915        }
4916
4917        #[inline(always)]
4918        fn decode_is_copy() -> bool {
4919            true
4920        }
4921    }
4922
4923    unsafe impl<D: fidl::encoding::ResourceDialect>
4924        fidl::encoding::Encode<SocketWriteSocketResponse, D> for &SocketWriteSocketResponse
4925    {
4926        #[inline]
4927        unsafe fn encode(
4928            self,
4929            encoder: &mut fidl::encoding::Encoder<'_, D>,
4930            offset: usize,
4931            _depth: fidl::encoding::Depth,
4932        ) -> fidl::Result<()> {
4933            encoder.debug_check_bounds::<SocketWriteSocketResponse>(offset);
4934            unsafe {
4935                // Copy the object into the buffer.
4936                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4937                (buf_ptr as *mut SocketWriteSocketResponse)
4938                    .write_unaligned((self as *const SocketWriteSocketResponse).read());
4939                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4940                // done second because the memcpy will write garbage to these bytes.
4941            }
4942            Ok(())
4943        }
4944    }
4945    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
4946        fidl::encoding::Encode<SocketWriteSocketResponse, D> for (T0,)
4947    {
4948        #[inline]
4949        unsafe fn encode(
4950            self,
4951            encoder: &mut fidl::encoding::Encoder<'_, D>,
4952            offset: usize,
4953            depth: fidl::encoding::Depth,
4954        ) -> fidl::Result<()> {
4955            encoder.debug_check_bounds::<SocketWriteSocketResponse>(offset);
4956            // Zero out padding regions. There's no need to apply masks
4957            // because the unmasked parts will be overwritten by fields.
4958            // Write the fields.
4959            self.0.encode(encoder, offset + 0, depth)?;
4960            Ok(())
4961        }
4962    }
4963
4964    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4965        for SocketWriteSocketResponse
4966    {
4967        #[inline(always)]
4968        fn new_empty() -> Self {
4969            Self { wrote: fidl::new_empty!(u64, D) }
4970        }
4971
4972        #[inline]
4973        unsafe fn decode(
4974            &mut self,
4975            decoder: &mut fidl::encoding::Decoder<'_, D>,
4976            offset: usize,
4977            _depth: fidl::encoding::Depth,
4978        ) -> fidl::Result<()> {
4979            decoder.debug_check_bounds::<Self>(offset);
4980            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4981            // Verify that padding bytes are zero.
4982            // Copy from the buffer into the object.
4983            unsafe {
4984                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4985            }
4986            Ok(())
4987        }
4988    }
4989
4990    impl fidl::encoding::ValueTypeMarker for StreamingReadInProgress {
4991        type Borrowed<'a> = &'a Self;
4992        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4993            value
4994        }
4995    }
4996
4997    unsafe impl fidl::encoding::TypeMarker for StreamingReadInProgress {
4998        type Owned = Self;
4999
5000        #[inline(always)]
5001        fn inline_align(_context: fidl::encoding::Context) -> usize {
5002            1
5003        }
5004
5005        #[inline(always)]
5006        fn inline_size(_context: fidl::encoding::Context) -> usize {
5007            1
5008        }
5009    }
5010
5011    unsafe impl<D: fidl::encoding::ResourceDialect>
5012        fidl::encoding::Encode<StreamingReadInProgress, D> for &StreamingReadInProgress
5013    {
5014        #[inline]
5015        unsafe fn encode(
5016            self,
5017            encoder: &mut fidl::encoding::Encoder<'_, D>,
5018            offset: usize,
5019            _depth: fidl::encoding::Depth,
5020        ) -> fidl::Result<()> {
5021            encoder.debug_check_bounds::<StreamingReadInProgress>(offset);
5022            encoder.write_num(0u8, offset);
5023            Ok(())
5024        }
5025    }
5026
5027    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5028        for StreamingReadInProgress
5029    {
5030        #[inline(always)]
5031        fn new_empty() -> Self {
5032            Self
5033        }
5034
5035        #[inline]
5036        unsafe fn decode(
5037            &mut self,
5038            decoder: &mut fidl::encoding::Decoder<'_, D>,
5039            offset: usize,
5040            _depth: fidl::encoding::Depth,
5041        ) -> fidl::Result<()> {
5042            decoder.debug_check_bounds::<Self>(offset);
5043            match decoder.read_num::<u8>(offset) {
5044                0 => Ok(()),
5045                _ => Err(fidl::Error::Invalid),
5046            }
5047        }
5048    }
5049
5050    impl fidl::encoding::ValueTypeMarker for WriteSocketError {
5051        type Borrowed<'a> = &'a Self;
5052        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5053            value
5054        }
5055    }
5056
5057    unsafe impl fidl::encoding::TypeMarker for WriteSocketError {
5058        type Owned = Self;
5059
5060        #[inline(always)]
5061        fn inline_align(_context: fidl::encoding::Context) -> usize {
5062            8
5063        }
5064
5065        #[inline(always)]
5066        fn inline_size(_context: fidl::encoding::Context) -> usize {
5067            24
5068        }
5069    }
5070
5071    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WriteSocketError, D>
5072        for &WriteSocketError
5073    {
5074        #[inline]
5075        unsafe fn encode(
5076            self,
5077            encoder: &mut fidl::encoding::Encoder<'_, D>,
5078            offset: usize,
5079            _depth: fidl::encoding::Depth,
5080        ) -> fidl::Result<()> {
5081            encoder.debug_check_bounds::<WriteSocketError>(offset);
5082            // Delegate to tuple encoding.
5083            fidl::encoding::Encode::<WriteSocketError, D>::encode(
5084                (
5085                    <Error as fidl::encoding::ValueTypeMarker>::borrow(&self.error),
5086                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.wrote),
5087                ),
5088                encoder,
5089                offset,
5090                _depth,
5091            )
5092        }
5093    }
5094    unsafe impl<
5095        D: fidl::encoding::ResourceDialect,
5096        T0: fidl::encoding::Encode<Error, D>,
5097        T1: fidl::encoding::Encode<u64, D>,
5098    > fidl::encoding::Encode<WriteSocketError, D> for (T0, T1)
5099    {
5100        #[inline]
5101        unsafe fn encode(
5102            self,
5103            encoder: &mut fidl::encoding::Encoder<'_, D>,
5104            offset: usize,
5105            depth: fidl::encoding::Depth,
5106        ) -> fidl::Result<()> {
5107            encoder.debug_check_bounds::<WriteSocketError>(offset);
5108            // Zero out padding regions. There's no need to apply masks
5109            // because the unmasked parts will be overwritten by fields.
5110            // Write the fields.
5111            self.0.encode(encoder, offset + 0, depth)?;
5112            self.1.encode(encoder, offset + 16, depth)?;
5113            Ok(())
5114        }
5115    }
5116
5117    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WriteSocketError {
5118        #[inline(always)]
5119        fn new_empty() -> Self {
5120            Self { error: fidl::new_empty!(Error, D), wrote: fidl::new_empty!(u64, D) }
5121        }
5122
5123        #[inline]
5124        unsafe fn decode(
5125            &mut self,
5126            decoder: &mut fidl::encoding::Decoder<'_, D>,
5127            offset: usize,
5128            _depth: fidl::encoding::Depth,
5129        ) -> fidl::Result<()> {
5130            decoder.debug_check_bounds::<Self>(offset);
5131            // Verify that padding bytes are zero.
5132            fidl::decode!(Error, D, &mut self.error, decoder, offset + 0, _depth)?;
5133            fidl::decode!(u64, D, &mut self.wrote, decoder, offset + 16, _depth)?;
5134            Ok(())
5135        }
5136    }
5137
5138    impl fidl::encoding::ValueTypeMarker for WrongHandleType {
5139        type Borrowed<'a> = &'a Self;
5140        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5141            value
5142        }
5143    }
5144
5145    unsafe impl fidl::encoding::TypeMarker for WrongHandleType {
5146        type Owned = Self;
5147
5148        #[inline(always)]
5149        fn inline_align(_context: fidl::encoding::Context) -> usize {
5150            4
5151        }
5152
5153        #[inline(always)]
5154        fn inline_size(_context: fidl::encoding::Context) -> usize {
5155            8
5156        }
5157    }
5158
5159    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WrongHandleType, D>
5160        for &WrongHandleType
5161    {
5162        #[inline]
5163        unsafe fn encode(
5164            self,
5165            encoder: &mut fidl::encoding::Encoder<'_, D>,
5166            offset: usize,
5167            _depth: fidl::encoding::Depth,
5168        ) -> fidl::Result<()> {
5169            encoder.debug_check_bounds::<WrongHandleType>(offset);
5170            // Delegate to tuple encoding.
5171            fidl::encoding::Encode::<WrongHandleType, D>::encode(
5172                (
5173                    <fidl::ObjectType as fidl::encoding::ValueTypeMarker>::borrow(&self.expected),
5174                    <fidl::ObjectType as fidl::encoding::ValueTypeMarker>::borrow(&self.got),
5175                ),
5176                encoder,
5177                offset,
5178                _depth,
5179            )
5180        }
5181    }
5182    unsafe impl<
5183        D: fidl::encoding::ResourceDialect,
5184        T0: fidl::encoding::Encode<fidl::ObjectType, D>,
5185        T1: fidl::encoding::Encode<fidl::ObjectType, D>,
5186    > fidl::encoding::Encode<WrongHandleType, D> for (T0, T1)
5187    {
5188        #[inline]
5189        unsafe fn encode(
5190            self,
5191            encoder: &mut fidl::encoding::Encoder<'_, D>,
5192            offset: usize,
5193            depth: fidl::encoding::Depth,
5194        ) -> fidl::Result<()> {
5195            encoder.debug_check_bounds::<WrongHandleType>(offset);
5196            // Zero out padding regions. There's no need to apply masks
5197            // because the unmasked parts will be overwritten by fields.
5198            // Write the fields.
5199            self.0.encode(encoder, offset + 0, depth)?;
5200            self.1.encode(encoder, offset + 4, depth)?;
5201            Ok(())
5202        }
5203    }
5204
5205    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WrongHandleType {
5206        #[inline(always)]
5207        fn new_empty() -> Self {
5208            Self {
5209                expected: fidl::new_empty!(fidl::ObjectType, D),
5210                got: fidl::new_empty!(fidl::ObjectType, D),
5211            }
5212        }
5213
5214        #[inline]
5215        unsafe fn decode(
5216            &mut self,
5217            decoder: &mut fidl::encoding::Decoder<'_, D>,
5218            offset: usize,
5219            _depth: fidl::encoding::Depth,
5220        ) -> fidl::Result<()> {
5221            decoder.debug_check_bounds::<Self>(offset);
5222            // Verify that padding bytes are zero.
5223            fidl::decode!(fidl::ObjectType, D, &mut self.expected, decoder, offset + 0, _depth)?;
5224            fidl::decode!(fidl::ObjectType, D, &mut self.got, decoder, offset + 4, _depth)?;
5225            Ok(())
5226        }
5227    }
5228
5229    impl fidl::encoding::ValueTypeMarker for WroteToSelf {
5230        type Borrowed<'a> = &'a Self;
5231        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5232            value
5233        }
5234    }
5235
5236    unsafe impl fidl::encoding::TypeMarker for WroteToSelf {
5237        type Owned = Self;
5238
5239        #[inline(always)]
5240        fn inline_align(_context: fidl::encoding::Context) -> usize {
5241            1
5242        }
5243
5244        #[inline(always)]
5245        fn inline_size(_context: fidl::encoding::Context) -> usize {
5246            1
5247        }
5248    }
5249
5250    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WroteToSelf, D>
5251        for &WroteToSelf
5252    {
5253        #[inline]
5254        unsafe fn encode(
5255            self,
5256            encoder: &mut fidl::encoding::Encoder<'_, D>,
5257            offset: usize,
5258            _depth: fidl::encoding::Depth,
5259        ) -> fidl::Result<()> {
5260            encoder.debug_check_bounds::<WroteToSelf>(offset);
5261            encoder.write_num(0u8, offset);
5262            Ok(())
5263        }
5264    }
5265
5266    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WroteToSelf {
5267        #[inline(always)]
5268        fn new_empty() -> Self {
5269            Self
5270        }
5271
5272        #[inline]
5273        unsafe fn decode(
5274            &mut self,
5275            decoder: &mut fidl::encoding::Decoder<'_, D>,
5276            offset: usize,
5277            _depth: fidl::encoding::Depth,
5278        ) -> fidl::Result<()> {
5279            decoder.debug_check_bounds::<Self>(offset);
5280            match decoder.read_num::<u8>(offset) {
5281                0 => Ok(()),
5282                _ => Err(fidl::Error::Invalid),
5283            }
5284        }
5285    }
5286
5287    impl fidl::encoding::ValueTypeMarker for ChannelSent {
5288        type Borrowed<'a> = &'a Self;
5289        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5290            value
5291        }
5292    }
5293
5294    unsafe impl fidl::encoding::TypeMarker for ChannelSent {
5295        type Owned = Self;
5296
5297        #[inline(always)]
5298        fn inline_align(_context: fidl::encoding::Context) -> usize {
5299            8
5300        }
5301
5302        #[inline(always)]
5303        fn inline_size(_context: fidl::encoding::Context) -> usize {
5304            16
5305        }
5306    }
5307
5308    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelSent, D>
5309        for &ChannelSent
5310    {
5311        #[inline]
5312        unsafe fn encode(
5313            self,
5314            encoder: &mut fidl::encoding::Encoder<'_, D>,
5315            offset: usize,
5316            _depth: fidl::encoding::Depth,
5317        ) -> fidl::Result<()> {
5318            encoder.debug_check_bounds::<ChannelSent>(offset);
5319            encoder.write_num::<u64>(self.ordinal(), offset);
5320            match self {
5321                ChannelSent::Message(ref val) => {
5322                    fidl::encoding::encode_in_envelope::<ChannelMessage, D>(
5323                        <ChannelMessage as fidl::encoding::ValueTypeMarker>::borrow(val),
5324                        encoder,
5325                        offset + 8,
5326                        _depth,
5327                    )
5328                }
5329                ChannelSent::Stopped(ref val) => {
5330                    fidl::encoding::encode_in_envelope::<AioStopped, D>(
5331                        <AioStopped as fidl::encoding::ValueTypeMarker>::borrow(val),
5332                        encoder,
5333                        offset + 8,
5334                        _depth,
5335                    )
5336                }
5337                ChannelSent::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
5338            }
5339        }
5340    }
5341
5342    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelSent {
5343        #[inline(always)]
5344        fn new_empty() -> Self {
5345            Self::__SourceBreaking { unknown_ordinal: 0 }
5346        }
5347
5348        #[inline]
5349        unsafe fn decode(
5350            &mut self,
5351            decoder: &mut fidl::encoding::Decoder<'_, D>,
5352            offset: usize,
5353            mut depth: fidl::encoding::Depth,
5354        ) -> fidl::Result<()> {
5355            decoder.debug_check_bounds::<Self>(offset);
5356            #[allow(unused_variables)]
5357            let next_out_of_line = decoder.next_out_of_line();
5358            let handles_before = decoder.remaining_handles();
5359            let (ordinal, inlined, num_bytes, num_handles) =
5360                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
5361
5362            let member_inline_size = match ordinal {
5363                1 => <ChannelMessage as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5364                2 => <AioStopped as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5365                0 => return Err(fidl::Error::UnknownUnionTag),
5366                _ => num_bytes as usize,
5367            };
5368
5369            if inlined != (member_inline_size <= 4) {
5370                return Err(fidl::Error::InvalidInlineBitInEnvelope);
5371            }
5372            let _inner_offset;
5373            if inlined {
5374                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
5375                _inner_offset = offset + 8;
5376            } else {
5377                depth.increment()?;
5378                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5379            }
5380            match ordinal {
5381                1 => {
5382                    #[allow(irrefutable_let_patterns)]
5383                    if let ChannelSent::Message(_) = self {
5384                        // Do nothing, read the value into the object
5385                    } else {
5386                        // Initialize `self` to the right variant
5387                        *self = ChannelSent::Message(fidl::new_empty!(ChannelMessage, D));
5388                    }
5389                    #[allow(irrefutable_let_patterns)]
5390                    if let ChannelSent::Message(ref mut val) = self {
5391                        fidl::decode!(ChannelMessage, D, val, decoder, _inner_offset, depth)?;
5392                    } else {
5393                        unreachable!()
5394                    }
5395                }
5396                2 => {
5397                    #[allow(irrefutable_let_patterns)]
5398                    if let ChannelSent::Stopped(_) = self {
5399                        // Do nothing, read the value into the object
5400                    } else {
5401                        // Initialize `self` to the right variant
5402                        *self = ChannelSent::Stopped(fidl::new_empty!(AioStopped, D));
5403                    }
5404                    #[allow(irrefutable_let_patterns)]
5405                    if let ChannelSent::Stopped(ref mut val) = self {
5406                        fidl::decode!(AioStopped, D, val, decoder, _inner_offset, depth)?;
5407                    } else {
5408                        unreachable!()
5409                    }
5410                }
5411                #[allow(deprecated)]
5412                ordinal => {
5413                    for _ in 0..num_handles {
5414                        decoder.drop_next_handle()?;
5415                    }
5416                    *self = ChannelSent::__SourceBreaking { unknown_ordinal: ordinal };
5417                }
5418            }
5419            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
5420                return Err(fidl::Error::InvalidNumBytesInEnvelope);
5421            }
5422            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5423                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5424            }
5425            Ok(())
5426        }
5427    }
5428
5429    impl fidl::encoding::ValueTypeMarker for Error {
5430        type Borrowed<'a> = &'a Self;
5431        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5432            value
5433        }
5434    }
5435
5436    unsafe impl fidl::encoding::TypeMarker for Error {
5437        type Owned = Self;
5438
5439        #[inline(always)]
5440        fn inline_align(_context: fidl::encoding::Context) -> usize {
5441            8
5442        }
5443
5444        #[inline(always)]
5445        fn inline_size(_context: fidl::encoding::Context) -> usize {
5446            16
5447        }
5448    }
5449
5450    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Error, D> for &Error {
5451        #[inline]
5452        unsafe fn encode(
5453            self,
5454            encoder: &mut fidl::encoding::Encoder<'_, D>,
5455            offset: usize,
5456            _depth: fidl::encoding::Depth,
5457        ) -> fidl::Result<()> {
5458            encoder.debug_check_bounds::<Error>(offset);
5459            encoder.write_num::<u64>(self.ordinal(), offset);
5460            match self {
5461                Error::TargetError(ref val) => fidl::encoding::encode_in_envelope::<i32, D>(
5462                    <i32 as fidl::encoding::ValueTypeMarker>::borrow(val),
5463                    encoder,
5464                    offset + 8,
5465                    _depth,
5466                ),
5467                Error::BadHandleId(ref val) => {
5468                    fidl::encoding::encode_in_envelope::<BadHandleId, D>(
5469                        <BadHandleId as fidl::encoding::ValueTypeMarker>::borrow(val),
5470                        encoder,
5471                        offset + 8,
5472                        _depth,
5473                    )
5474                }
5475                Error::NewHandleIdOutOfRange(ref val) => {
5476                    fidl::encoding::encode_in_envelope::<NewHandleIdOutOfRange, D>(
5477                        <NewHandleIdOutOfRange as fidl::encoding::ValueTypeMarker>::borrow(val),
5478                        encoder,
5479                        offset + 8,
5480                        _depth,
5481                    )
5482                }
5483                Error::NewHandleIdReused(ref val) => {
5484                    fidl::encoding::encode_in_envelope::<NewHandleIdReused, D>(
5485                        <NewHandleIdReused as fidl::encoding::ValueTypeMarker>::borrow(val),
5486                        encoder,
5487                        offset + 8,
5488                        _depth,
5489                    )
5490                }
5491                Error::WrongHandleType(ref val) => {
5492                    fidl::encoding::encode_in_envelope::<WrongHandleType, D>(
5493                        <WrongHandleType as fidl::encoding::ValueTypeMarker>::borrow(val),
5494                        encoder,
5495                        offset + 8,
5496                        _depth,
5497                    )
5498                }
5499                Error::StreamingReadInProgress(ref val) => {
5500                    fidl::encoding::encode_in_envelope::<StreamingReadInProgress, D>(
5501                        <StreamingReadInProgress as fidl::encoding::ValueTypeMarker>::borrow(val),
5502                        encoder,
5503                        offset + 8,
5504                        _depth,
5505                    )
5506                }
5507                Error::NoReadInProgress(ref val) => {
5508                    fidl::encoding::encode_in_envelope::<NoReadInProgress, D>(
5509                        <NoReadInProgress as fidl::encoding::ValueTypeMarker>::borrow(val),
5510                        encoder,
5511                        offset + 8,
5512                        _depth,
5513                    )
5514                }
5515                Error::WroteToSelf(ref val) => {
5516                    fidl::encoding::encode_in_envelope::<WroteToSelf, D>(
5517                        <WroteToSelf as fidl::encoding::ValueTypeMarker>::borrow(val),
5518                        encoder,
5519                        offset + 8,
5520                        _depth,
5521                    )
5522                }
5523                Error::ClosedDuringRead(ref val) => {
5524                    fidl::encoding::encode_in_envelope::<ClosedDuringRead, D>(
5525                        <ClosedDuringRead as fidl::encoding::ValueTypeMarker>::borrow(val),
5526                        encoder,
5527                        offset + 8,
5528                        _depth,
5529                    )
5530                }
5531                Error::SignalsUnknown(ref val) => {
5532                    fidl::encoding::encode_in_envelope::<SignalsUnknown, D>(
5533                        <SignalsUnknown as fidl::encoding::ValueTypeMarker>::borrow(val),
5534                        encoder,
5535                        offset + 8,
5536                        _depth,
5537                    )
5538                }
5539                Error::RightsUnknown(ref val) => {
5540                    fidl::encoding::encode_in_envelope::<RightsUnknown, D>(
5541                        <RightsUnknown as fidl::encoding::ValueTypeMarker>::borrow(val),
5542                        encoder,
5543                        offset + 8,
5544                        _depth,
5545                    )
5546                }
5547                Error::SocketDispositionUnknown(ref val) => {
5548                    fidl::encoding::encode_in_envelope::<SocketDispositionUnknown, D>(
5549                        <SocketDispositionUnknown as fidl::encoding::ValueTypeMarker>::borrow(val),
5550                        encoder,
5551                        offset + 8,
5552                        _depth,
5553                    )
5554                }
5555                Error::SocketTypeUnknown(ref val) => {
5556                    fidl::encoding::encode_in_envelope::<SocketTypeUnknown, D>(
5557                        <SocketTypeUnknown as fidl::encoding::ValueTypeMarker>::borrow(val),
5558                        encoder,
5559                        offset + 8,
5560                        _depth,
5561                    )
5562                }
5563                Error::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
5564            }
5565        }
5566    }
5567
5568    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Error {
5569        #[inline(always)]
5570        fn new_empty() -> Self {
5571            Self::__SourceBreaking { unknown_ordinal: 0 }
5572        }
5573
5574        #[inline]
5575        unsafe fn decode(
5576            &mut self,
5577            decoder: &mut fidl::encoding::Decoder<'_, D>,
5578            offset: usize,
5579            mut depth: fidl::encoding::Depth,
5580        ) -> fidl::Result<()> {
5581            decoder.debug_check_bounds::<Self>(offset);
5582            #[allow(unused_variables)]
5583            let next_out_of_line = decoder.next_out_of_line();
5584            let handles_before = decoder.remaining_handles();
5585            let (ordinal, inlined, num_bytes, num_handles) =
5586                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
5587
5588            let member_inline_size = match ordinal {
5589                1 => <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5590                2 => <BadHandleId as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5591                3 => <NewHandleIdOutOfRange as fidl::encoding::TypeMarker>::inline_size(
5592                    decoder.context,
5593                ),
5594                4 => {
5595                    <NewHandleIdReused as fidl::encoding::TypeMarker>::inline_size(decoder.context)
5596                }
5597                5 => <WrongHandleType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5598                6 => <StreamingReadInProgress as fidl::encoding::TypeMarker>::inline_size(
5599                    decoder.context,
5600                ),
5601                7 => <NoReadInProgress as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5602                8 => <WroteToSelf as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5603                9 => <ClosedDuringRead as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5604                10 => <SignalsUnknown as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5605                11 => <RightsUnknown as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5606                12 => <SocketDispositionUnknown as fidl::encoding::TypeMarker>::inline_size(
5607                    decoder.context,
5608                ),
5609                13 => {
5610                    <SocketTypeUnknown as fidl::encoding::TypeMarker>::inline_size(decoder.context)
5611                }
5612                0 => return Err(fidl::Error::UnknownUnionTag),
5613                _ => num_bytes as usize,
5614            };
5615
5616            if inlined != (member_inline_size <= 4) {
5617                return Err(fidl::Error::InvalidInlineBitInEnvelope);
5618            }
5619            let _inner_offset;
5620            if inlined {
5621                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
5622                _inner_offset = offset + 8;
5623            } else {
5624                depth.increment()?;
5625                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5626            }
5627            match ordinal {
5628                1 => {
5629                    #[allow(irrefutable_let_patterns)]
5630                    if let Error::TargetError(_) = self {
5631                        // Do nothing, read the value into the object
5632                    } else {
5633                        // Initialize `self` to the right variant
5634                        *self = Error::TargetError(fidl::new_empty!(i32, D));
5635                    }
5636                    #[allow(irrefutable_let_patterns)]
5637                    if let Error::TargetError(ref mut val) = self {
5638                        fidl::decode!(i32, D, val, decoder, _inner_offset, depth)?;
5639                    } else {
5640                        unreachable!()
5641                    }
5642                }
5643                2 => {
5644                    #[allow(irrefutable_let_patterns)]
5645                    if let Error::BadHandleId(_) = self {
5646                        // Do nothing, read the value into the object
5647                    } else {
5648                        // Initialize `self` to the right variant
5649                        *self = Error::BadHandleId(fidl::new_empty!(BadHandleId, D));
5650                    }
5651                    #[allow(irrefutable_let_patterns)]
5652                    if let Error::BadHandleId(ref mut val) = self {
5653                        fidl::decode!(BadHandleId, D, val, decoder, _inner_offset, depth)?;
5654                    } else {
5655                        unreachable!()
5656                    }
5657                }
5658                3 => {
5659                    #[allow(irrefutable_let_patterns)]
5660                    if let Error::NewHandleIdOutOfRange(_) = self {
5661                        // Do nothing, read the value into the object
5662                    } else {
5663                        // Initialize `self` to the right variant
5664                        *self = Error::NewHandleIdOutOfRange(fidl::new_empty!(
5665                            NewHandleIdOutOfRange,
5666                            D
5667                        ));
5668                    }
5669                    #[allow(irrefutable_let_patterns)]
5670                    if let Error::NewHandleIdOutOfRange(ref mut val) = self {
5671                        fidl::decode!(
5672                            NewHandleIdOutOfRange,
5673                            D,
5674                            val,
5675                            decoder,
5676                            _inner_offset,
5677                            depth
5678                        )?;
5679                    } else {
5680                        unreachable!()
5681                    }
5682                }
5683                4 => {
5684                    #[allow(irrefutable_let_patterns)]
5685                    if let Error::NewHandleIdReused(_) = self {
5686                        // Do nothing, read the value into the object
5687                    } else {
5688                        // Initialize `self` to the right variant
5689                        *self = Error::NewHandleIdReused(fidl::new_empty!(NewHandleIdReused, D));
5690                    }
5691                    #[allow(irrefutable_let_patterns)]
5692                    if let Error::NewHandleIdReused(ref mut val) = self {
5693                        fidl::decode!(NewHandleIdReused, D, val, decoder, _inner_offset, depth)?;
5694                    } else {
5695                        unreachable!()
5696                    }
5697                }
5698                5 => {
5699                    #[allow(irrefutable_let_patterns)]
5700                    if let Error::WrongHandleType(_) = self {
5701                        // Do nothing, read the value into the object
5702                    } else {
5703                        // Initialize `self` to the right variant
5704                        *self = Error::WrongHandleType(fidl::new_empty!(WrongHandleType, D));
5705                    }
5706                    #[allow(irrefutable_let_patterns)]
5707                    if let Error::WrongHandleType(ref mut val) = self {
5708                        fidl::decode!(WrongHandleType, D, val, decoder, _inner_offset, depth)?;
5709                    } else {
5710                        unreachable!()
5711                    }
5712                }
5713                6 => {
5714                    #[allow(irrefutable_let_patterns)]
5715                    if let Error::StreamingReadInProgress(_) = self {
5716                        // Do nothing, read the value into the object
5717                    } else {
5718                        // Initialize `self` to the right variant
5719                        *self = Error::StreamingReadInProgress(fidl::new_empty!(
5720                            StreamingReadInProgress,
5721                            D
5722                        ));
5723                    }
5724                    #[allow(irrefutable_let_patterns)]
5725                    if let Error::StreamingReadInProgress(ref mut val) = self {
5726                        fidl::decode!(
5727                            StreamingReadInProgress,
5728                            D,
5729                            val,
5730                            decoder,
5731                            _inner_offset,
5732                            depth
5733                        )?;
5734                    } else {
5735                        unreachable!()
5736                    }
5737                }
5738                7 => {
5739                    #[allow(irrefutable_let_patterns)]
5740                    if let Error::NoReadInProgress(_) = self {
5741                        // Do nothing, read the value into the object
5742                    } else {
5743                        // Initialize `self` to the right variant
5744                        *self = Error::NoReadInProgress(fidl::new_empty!(NoReadInProgress, D));
5745                    }
5746                    #[allow(irrefutable_let_patterns)]
5747                    if let Error::NoReadInProgress(ref mut val) = self {
5748                        fidl::decode!(NoReadInProgress, D, val, decoder, _inner_offset, depth)?;
5749                    } else {
5750                        unreachable!()
5751                    }
5752                }
5753                8 => {
5754                    #[allow(irrefutable_let_patterns)]
5755                    if let Error::WroteToSelf(_) = self {
5756                        // Do nothing, read the value into the object
5757                    } else {
5758                        // Initialize `self` to the right variant
5759                        *self = Error::WroteToSelf(fidl::new_empty!(WroteToSelf, D));
5760                    }
5761                    #[allow(irrefutable_let_patterns)]
5762                    if let Error::WroteToSelf(ref mut val) = self {
5763                        fidl::decode!(WroteToSelf, D, val, decoder, _inner_offset, depth)?;
5764                    } else {
5765                        unreachable!()
5766                    }
5767                }
5768                9 => {
5769                    #[allow(irrefutable_let_patterns)]
5770                    if let Error::ClosedDuringRead(_) = self {
5771                        // Do nothing, read the value into the object
5772                    } else {
5773                        // Initialize `self` to the right variant
5774                        *self = Error::ClosedDuringRead(fidl::new_empty!(ClosedDuringRead, D));
5775                    }
5776                    #[allow(irrefutable_let_patterns)]
5777                    if let Error::ClosedDuringRead(ref mut val) = self {
5778                        fidl::decode!(ClosedDuringRead, D, val, decoder, _inner_offset, depth)?;
5779                    } else {
5780                        unreachable!()
5781                    }
5782                }
5783                10 => {
5784                    #[allow(irrefutable_let_patterns)]
5785                    if let Error::SignalsUnknown(_) = self {
5786                        // Do nothing, read the value into the object
5787                    } else {
5788                        // Initialize `self` to the right variant
5789                        *self = Error::SignalsUnknown(fidl::new_empty!(SignalsUnknown, D));
5790                    }
5791                    #[allow(irrefutable_let_patterns)]
5792                    if let Error::SignalsUnknown(ref mut val) = self {
5793                        fidl::decode!(SignalsUnknown, D, val, decoder, _inner_offset, depth)?;
5794                    } else {
5795                        unreachable!()
5796                    }
5797                }
5798                11 => {
5799                    #[allow(irrefutable_let_patterns)]
5800                    if let Error::RightsUnknown(_) = self {
5801                        // Do nothing, read the value into the object
5802                    } else {
5803                        // Initialize `self` to the right variant
5804                        *self = Error::RightsUnknown(fidl::new_empty!(RightsUnknown, D));
5805                    }
5806                    #[allow(irrefutable_let_patterns)]
5807                    if let Error::RightsUnknown(ref mut val) = self {
5808                        fidl::decode!(RightsUnknown, D, val, decoder, _inner_offset, depth)?;
5809                    } else {
5810                        unreachable!()
5811                    }
5812                }
5813                12 => {
5814                    #[allow(irrefutable_let_patterns)]
5815                    if let Error::SocketDispositionUnknown(_) = self {
5816                        // Do nothing, read the value into the object
5817                    } else {
5818                        // Initialize `self` to the right variant
5819                        *self = Error::SocketDispositionUnknown(fidl::new_empty!(
5820                            SocketDispositionUnknown,
5821                            D
5822                        ));
5823                    }
5824                    #[allow(irrefutable_let_patterns)]
5825                    if let Error::SocketDispositionUnknown(ref mut val) = self {
5826                        fidl::decode!(
5827                            SocketDispositionUnknown,
5828                            D,
5829                            val,
5830                            decoder,
5831                            _inner_offset,
5832                            depth
5833                        )?;
5834                    } else {
5835                        unreachable!()
5836                    }
5837                }
5838                13 => {
5839                    #[allow(irrefutable_let_patterns)]
5840                    if let Error::SocketTypeUnknown(_) = self {
5841                        // Do nothing, read the value into the object
5842                    } else {
5843                        // Initialize `self` to the right variant
5844                        *self = Error::SocketTypeUnknown(fidl::new_empty!(SocketTypeUnknown, D));
5845                    }
5846                    #[allow(irrefutable_let_patterns)]
5847                    if let Error::SocketTypeUnknown(ref mut val) = self {
5848                        fidl::decode!(SocketTypeUnknown, D, val, decoder, _inner_offset, depth)?;
5849                    } else {
5850                        unreachable!()
5851                    }
5852                }
5853                #[allow(deprecated)]
5854                ordinal => {
5855                    for _ in 0..num_handles {
5856                        decoder.drop_next_handle()?;
5857                    }
5858                    *self = Error::__SourceBreaking { unknown_ordinal: ordinal };
5859                }
5860            }
5861            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
5862                return Err(fidl::Error::InvalidNumBytesInEnvelope);
5863            }
5864            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5865                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5866            }
5867            Ok(())
5868        }
5869    }
5870
5871    impl fidl::encoding::ValueTypeMarker for HandleOp {
5872        type Borrowed<'a> = &'a Self;
5873        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5874            value
5875        }
5876    }
5877
5878    unsafe impl fidl::encoding::TypeMarker for HandleOp {
5879        type Owned = Self;
5880
5881        #[inline(always)]
5882        fn inline_align(_context: fidl::encoding::Context) -> usize {
5883            8
5884        }
5885
5886        #[inline(always)]
5887        fn inline_size(_context: fidl::encoding::Context) -> usize {
5888            16
5889        }
5890    }
5891
5892    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HandleOp, D> for &HandleOp {
5893        #[inline]
5894        unsafe fn encode(
5895            self,
5896            encoder: &mut fidl::encoding::Encoder<'_, D>,
5897            offset: usize,
5898            _depth: fidl::encoding::Depth,
5899        ) -> fidl::Result<()> {
5900            encoder.debug_check_bounds::<HandleOp>(offset);
5901            encoder.write_num::<u64>(self.ordinal(), offset);
5902            match self {
5903                HandleOp::Move_(ref val) => fidl::encoding::encode_in_envelope::<HandleId, D>(
5904                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(val),
5905                    encoder,
5906                    offset + 8,
5907                    _depth,
5908                ),
5909                HandleOp::Duplicate(ref val) => fidl::encoding::encode_in_envelope::<HandleId, D>(
5910                    <HandleId as fidl::encoding::ValueTypeMarker>::borrow(val),
5911                    encoder,
5912                    offset + 8,
5913                    _depth,
5914                ),
5915            }
5916        }
5917    }
5918
5919    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HandleOp {
5920        #[inline(always)]
5921        fn new_empty() -> Self {
5922            Self::Move_(fidl::new_empty!(HandleId, D))
5923        }
5924
5925        #[inline]
5926        unsafe fn decode(
5927            &mut self,
5928            decoder: &mut fidl::encoding::Decoder<'_, D>,
5929            offset: usize,
5930            mut depth: fidl::encoding::Depth,
5931        ) -> fidl::Result<()> {
5932            decoder.debug_check_bounds::<Self>(offset);
5933            #[allow(unused_variables)]
5934            let next_out_of_line = decoder.next_out_of_line();
5935            let handles_before = decoder.remaining_handles();
5936            let (ordinal, inlined, num_bytes, num_handles) =
5937                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
5938
5939            let member_inline_size = match ordinal {
5940                1 => <HandleId as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5941                2 => <HandleId as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5942                _ => return Err(fidl::Error::UnknownUnionTag),
5943            };
5944
5945            if inlined != (member_inline_size <= 4) {
5946                return Err(fidl::Error::InvalidInlineBitInEnvelope);
5947            }
5948            let _inner_offset;
5949            if inlined {
5950                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
5951                _inner_offset = offset + 8;
5952            } else {
5953                depth.increment()?;
5954                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5955            }
5956            match ordinal {
5957                1 => {
5958                    #[allow(irrefutable_let_patterns)]
5959                    if let HandleOp::Move_(_) = self {
5960                        // Do nothing, read the value into the object
5961                    } else {
5962                        // Initialize `self` to the right variant
5963                        *self = HandleOp::Move_(fidl::new_empty!(HandleId, D));
5964                    }
5965                    #[allow(irrefutable_let_patterns)]
5966                    if let HandleOp::Move_(ref mut val) = self {
5967                        fidl::decode!(HandleId, D, val, decoder, _inner_offset, depth)?;
5968                    } else {
5969                        unreachable!()
5970                    }
5971                }
5972                2 => {
5973                    #[allow(irrefutable_let_patterns)]
5974                    if let HandleOp::Duplicate(_) = self {
5975                        // Do nothing, read the value into the object
5976                    } else {
5977                        // Initialize `self` to the right variant
5978                        *self = HandleOp::Duplicate(fidl::new_empty!(HandleId, D));
5979                    }
5980                    #[allow(irrefutable_let_patterns)]
5981                    if let HandleOp::Duplicate(ref mut val) = self {
5982                        fidl::decode!(HandleId, D, val, decoder, _inner_offset, depth)?;
5983                    } else {
5984                        unreachable!()
5985                    }
5986                }
5987                ordinal => panic!("unexpected ordinal {:?}", ordinal),
5988            }
5989            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
5990                return Err(fidl::Error::InvalidNumBytesInEnvelope);
5991            }
5992            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5993                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5994            }
5995            Ok(())
5996        }
5997    }
5998
5999    impl fidl::encoding::ValueTypeMarker for Handles {
6000        type Borrowed<'a> = &'a Self;
6001        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6002            value
6003        }
6004    }
6005
6006    unsafe impl fidl::encoding::TypeMarker for Handles {
6007        type Owned = Self;
6008
6009        #[inline(always)]
6010        fn inline_align(_context: fidl::encoding::Context) -> usize {
6011            8
6012        }
6013
6014        #[inline(always)]
6015        fn inline_size(_context: fidl::encoding::Context) -> usize {
6016            16
6017        }
6018    }
6019
6020    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Handles, D> for &Handles {
6021        #[inline]
6022        unsafe fn encode(
6023            self,
6024            encoder: &mut fidl::encoding::Encoder<'_, D>,
6025            offset: usize,
6026            _depth: fidl::encoding::Depth,
6027        ) -> fidl::Result<()> {
6028            encoder.debug_check_bounds::<Handles>(offset);
6029            encoder.write_num::<u64>(self.ordinal(), offset);
6030            match self {
6031            Handles::Handles(ref val) => {
6032                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<HandleId, 64>, D>(
6033                    <fidl::encoding::Vector<HandleId, 64> as fidl::encoding::ValueTypeMarker>::borrow(val),
6034                    encoder, offset + 8, _depth
6035                )
6036            }
6037            Handles::Dispositions(ref val) => {
6038                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<HandleDisposition, 64>, D>(
6039                    <fidl::encoding::Vector<HandleDisposition, 64> as fidl::encoding::ValueTypeMarker>::borrow(val),
6040                    encoder, offset + 8, _depth
6041                )
6042            }
6043        }
6044        }
6045    }
6046
6047    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Handles {
6048        #[inline(always)]
6049        fn new_empty() -> Self {
6050            Self::Handles(fidl::new_empty!(fidl::encoding::Vector<HandleId, 64>, D))
6051        }
6052
6053        #[inline]
6054        unsafe fn decode(
6055            &mut self,
6056            decoder: &mut fidl::encoding::Decoder<'_, D>,
6057            offset: usize,
6058            mut depth: fidl::encoding::Depth,
6059        ) -> fidl::Result<()> {
6060            decoder.debug_check_bounds::<Self>(offset);
6061            #[allow(unused_variables)]
6062            let next_out_of_line = decoder.next_out_of_line();
6063            let handles_before = decoder.remaining_handles();
6064            let (ordinal, inlined, num_bytes, num_handles) =
6065                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
6066
6067            let member_inline_size = match ordinal {
6068            1 => <fidl::encoding::Vector<HandleId, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6069            2 => <fidl::encoding::Vector<HandleDisposition, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6070            _ => return Err(fidl::Error::UnknownUnionTag),
6071        };
6072
6073            if inlined != (member_inline_size <= 4) {
6074                return Err(fidl::Error::InvalidInlineBitInEnvelope);
6075            }
6076            let _inner_offset;
6077            if inlined {
6078                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
6079                _inner_offset = offset + 8;
6080            } else {
6081                depth.increment()?;
6082                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6083            }
6084            match ordinal {
6085                1 => {
6086                    #[allow(irrefutable_let_patterns)]
6087                    if let Handles::Handles(_) = self {
6088                        // Do nothing, read the value into the object
6089                    } else {
6090                        // Initialize `self` to the right variant
6091                        *self = Handles::Handles(
6092                            fidl::new_empty!(fidl::encoding::Vector<HandleId, 64>, D),
6093                        );
6094                    }
6095                    #[allow(irrefutable_let_patterns)]
6096                    if let Handles::Handles(ref mut val) = self {
6097                        fidl::decode!(fidl::encoding::Vector<HandleId, 64>, D, val, decoder, _inner_offset, depth)?;
6098                    } else {
6099                        unreachable!()
6100                    }
6101                }
6102                2 => {
6103                    #[allow(irrefutable_let_patterns)]
6104                    if let Handles::Dispositions(_) = self {
6105                        // Do nothing, read the value into the object
6106                    } else {
6107                        // Initialize `self` to the right variant
6108                        *self = Handles::Dispositions(
6109                            fidl::new_empty!(fidl::encoding::Vector<HandleDisposition, 64>, D),
6110                        );
6111                    }
6112                    #[allow(irrefutable_let_patterns)]
6113                    if let Handles::Dispositions(ref mut val) = self {
6114                        fidl::decode!(fidl::encoding::Vector<HandleDisposition, 64>, D, val, decoder, _inner_offset, depth)?;
6115                    } else {
6116                        unreachable!()
6117                    }
6118                }
6119                ordinal => panic!("unexpected ordinal {:?}", ordinal),
6120            }
6121            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
6122                return Err(fidl::Error::InvalidNumBytesInEnvelope);
6123            }
6124            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6125                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6126            }
6127            Ok(())
6128        }
6129    }
6130
6131    impl fidl::encoding::ValueTypeMarker for SocketMessage {
6132        type Borrowed<'a> = &'a Self;
6133        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6134            value
6135        }
6136    }
6137
6138    unsafe impl fidl::encoding::TypeMarker for SocketMessage {
6139        type Owned = Self;
6140
6141        #[inline(always)]
6142        fn inline_align(_context: fidl::encoding::Context) -> usize {
6143            8
6144        }
6145
6146        #[inline(always)]
6147        fn inline_size(_context: fidl::encoding::Context) -> usize {
6148            16
6149        }
6150    }
6151
6152    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SocketMessage, D>
6153        for &SocketMessage
6154    {
6155        #[inline]
6156        unsafe fn encode(
6157            self,
6158            encoder: &mut fidl::encoding::Encoder<'_, D>,
6159            offset: usize,
6160            _depth: fidl::encoding::Depth,
6161        ) -> fidl::Result<()> {
6162            encoder.debug_check_bounds::<SocketMessage>(offset);
6163            encoder.write_num::<u64>(self.ordinal(), offset);
6164            match self {
6165                SocketMessage::Data(ref val) => {
6166                    fidl::encoding::encode_in_envelope::<SocketData, D>(
6167                        <SocketData as fidl::encoding::ValueTypeMarker>::borrow(val),
6168                        encoder,
6169                        offset + 8,
6170                        _depth,
6171                    )
6172                }
6173                SocketMessage::Stopped(ref val) => {
6174                    fidl::encoding::encode_in_envelope::<AioStopped, D>(
6175                        <AioStopped as fidl::encoding::ValueTypeMarker>::borrow(val),
6176                        encoder,
6177                        offset + 8,
6178                        _depth,
6179                    )
6180                }
6181                SocketMessage::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
6182            }
6183        }
6184    }
6185
6186    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SocketMessage {
6187        #[inline(always)]
6188        fn new_empty() -> Self {
6189            Self::__SourceBreaking { unknown_ordinal: 0 }
6190        }
6191
6192        #[inline]
6193        unsafe fn decode(
6194            &mut self,
6195            decoder: &mut fidl::encoding::Decoder<'_, D>,
6196            offset: usize,
6197            mut depth: fidl::encoding::Depth,
6198        ) -> fidl::Result<()> {
6199            decoder.debug_check_bounds::<Self>(offset);
6200            #[allow(unused_variables)]
6201            let next_out_of_line = decoder.next_out_of_line();
6202            let handles_before = decoder.remaining_handles();
6203            let (ordinal, inlined, num_bytes, num_handles) =
6204                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
6205
6206            let member_inline_size = match ordinal {
6207                1 => <SocketData as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6208                2 => <AioStopped as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6209                0 => return Err(fidl::Error::UnknownUnionTag),
6210                _ => num_bytes as usize,
6211            };
6212
6213            if inlined != (member_inline_size <= 4) {
6214                return Err(fidl::Error::InvalidInlineBitInEnvelope);
6215            }
6216            let _inner_offset;
6217            if inlined {
6218                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
6219                _inner_offset = offset + 8;
6220            } else {
6221                depth.increment()?;
6222                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6223            }
6224            match ordinal {
6225                1 => {
6226                    #[allow(irrefutable_let_patterns)]
6227                    if let SocketMessage::Data(_) = self {
6228                        // Do nothing, read the value into the object
6229                    } else {
6230                        // Initialize `self` to the right variant
6231                        *self = SocketMessage::Data(fidl::new_empty!(SocketData, D));
6232                    }
6233                    #[allow(irrefutable_let_patterns)]
6234                    if let SocketMessage::Data(ref mut val) = self {
6235                        fidl::decode!(SocketData, D, val, decoder, _inner_offset, depth)?;
6236                    } else {
6237                        unreachable!()
6238                    }
6239                }
6240                2 => {
6241                    #[allow(irrefutable_let_patterns)]
6242                    if let SocketMessage::Stopped(_) = self {
6243                        // Do nothing, read the value into the object
6244                    } else {
6245                        // Initialize `self` to the right variant
6246                        *self = SocketMessage::Stopped(fidl::new_empty!(AioStopped, D));
6247                    }
6248                    #[allow(irrefutable_let_patterns)]
6249                    if let SocketMessage::Stopped(ref mut val) = self {
6250                        fidl::decode!(AioStopped, D, val, decoder, _inner_offset, depth)?;
6251                    } else {
6252                        unreachable!()
6253                    }
6254                }
6255                #[allow(deprecated)]
6256                ordinal => {
6257                    for _ in 0..num_handles {
6258                        decoder.drop_next_handle()?;
6259                    }
6260                    *self = SocketMessage::__SourceBreaking { unknown_ordinal: ordinal };
6261                }
6262            }
6263            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
6264                return Err(fidl::Error::InvalidNumBytesInEnvelope);
6265            }
6266            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6267                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6268            }
6269            Ok(())
6270        }
6271    }
6272
6273    impl fidl::encoding::ValueTypeMarker for WriteChannelError {
6274        type Borrowed<'a> = &'a Self;
6275        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6276            value
6277        }
6278    }
6279
6280    unsafe impl fidl::encoding::TypeMarker for WriteChannelError {
6281        type Owned = Self;
6282
6283        #[inline(always)]
6284        fn inline_align(_context: fidl::encoding::Context) -> usize {
6285            8
6286        }
6287
6288        #[inline(always)]
6289        fn inline_size(_context: fidl::encoding::Context) -> usize {
6290            16
6291        }
6292    }
6293
6294    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WriteChannelError, D>
6295        for &WriteChannelError
6296    {
6297        #[inline]
6298        unsafe fn encode(
6299            self,
6300            encoder: &mut fidl::encoding::Encoder<'_, D>,
6301            offset: usize,
6302            _depth: fidl::encoding::Depth,
6303        ) -> fidl::Result<()> {
6304            encoder.debug_check_bounds::<WriteChannelError>(offset);
6305            encoder.write_num::<u64>(self.ordinal(), offset);
6306            match self {
6307            WriteChannelError::Error(ref val) => {
6308                fidl::encoding::encode_in_envelope::<Error, D>(
6309                    <Error as fidl::encoding::ValueTypeMarker>::borrow(val),
6310                    encoder, offset + 8, _depth
6311                )
6312            }
6313            WriteChannelError::OpErrors(ref val) => {
6314                fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedVector<fidl::encoding::OptionalUnion<Error>>, D>(
6315                    <fidl::encoding::UnboundedVector<fidl::encoding::OptionalUnion<Error>> as fidl::encoding::ValueTypeMarker>::borrow(val),
6316                    encoder, offset + 8, _depth
6317                )
6318            }
6319        }
6320        }
6321    }
6322
6323    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WriteChannelError {
6324        #[inline(always)]
6325        fn new_empty() -> Self {
6326            Self::Error(fidl::new_empty!(Error, D))
6327        }
6328
6329        #[inline]
6330        unsafe fn decode(
6331            &mut self,
6332            decoder: &mut fidl::encoding::Decoder<'_, D>,
6333            offset: usize,
6334            mut depth: fidl::encoding::Depth,
6335        ) -> fidl::Result<()> {
6336            decoder.debug_check_bounds::<Self>(offset);
6337            #[allow(unused_variables)]
6338            let next_out_of_line = decoder.next_out_of_line();
6339            let handles_before = decoder.remaining_handles();
6340            let (ordinal, inlined, num_bytes, num_handles) =
6341                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
6342
6343            let member_inline_size = match ordinal {
6344            1 => <Error as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6345            2 => <fidl::encoding::UnboundedVector<fidl::encoding::OptionalUnion<Error>> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6346            _ => return Err(fidl::Error::UnknownUnionTag),
6347        };
6348
6349            if inlined != (member_inline_size <= 4) {
6350                return Err(fidl::Error::InvalidInlineBitInEnvelope);
6351            }
6352            let _inner_offset;
6353            if inlined {
6354                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
6355                _inner_offset = offset + 8;
6356            } else {
6357                depth.increment()?;
6358                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6359            }
6360            match ordinal {
6361                1 => {
6362                    #[allow(irrefutable_let_patterns)]
6363                    if let WriteChannelError::Error(_) = self {
6364                        // Do nothing, read the value into the object
6365                    } else {
6366                        // Initialize `self` to the right variant
6367                        *self = WriteChannelError::Error(fidl::new_empty!(Error, D));
6368                    }
6369                    #[allow(irrefutable_let_patterns)]
6370                    if let WriteChannelError::Error(ref mut val) = self {
6371                        fidl::decode!(Error, D, val, decoder, _inner_offset, depth)?;
6372                    } else {
6373                        unreachable!()
6374                    }
6375                }
6376                2 => {
6377                    #[allow(irrefutable_let_patterns)]
6378                    if let WriteChannelError::OpErrors(_) = self {
6379                        // Do nothing, read the value into the object
6380                    } else {
6381                        // Initialize `self` to the right variant
6382                        *self = WriteChannelError::OpErrors(fidl::new_empty!(
6383                            fidl::encoding::UnboundedVector<fidl::encoding::OptionalUnion<Error>>,
6384                            D
6385                        ));
6386                    }
6387                    #[allow(irrefutable_let_patterns)]
6388                    if let WriteChannelError::OpErrors(ref mut val) = self {
6389                        fidl::decode!(
6390                            fidl::encoding::UnboundedVector<fidl::encoding::OptionalUnion<Error>>,
6391                            D,
6392                            val,
6393                            decoder,
6394                            _inner_offset,
6395                            depth
6396                        )?;
6397                    } else {
6398                        unreachable!()
6399                    }
6400                }
6401                ordinal => panic!("unexpected ordinal {:?}", ordinal),
6402            }
6403            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
6404                return Err(fidl::Error::InvalidNumBytesInEnvelope);
6405            }
6406            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6407                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6408            }
6409            Ok(())
6410        }
6411    }
6412}