fidl_fuchsia_media_common/
fidl_fuchsia_media_common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// An identifier for compression types.
12pub type CompressionType = String;
13
14pub type EncryptionScheme = String;
15
16pub type InitVector = Vec<u8>;
17
18pub type KeyId = Vec<u8>;
19
20/// Audio encodings.
21pub const AUDIO_ENCODING_AAC: &str = "fuchsia.media.aac";
22
23pub const AUDIO_ENCODING_AACLATM: &str = "fuchsia.media.aaclatm";
24
25pub const AUDIO_ENCODING_AMRNB: &str = "fuchsia.media.amrnb";
26
27pub const AUDIO_ENCODING_AMRWB: &str = "fuchsia.media.amrwb";
28
29pub const AUDIO_ENCODING_APTX: &str = "fuchsia.media.aptx";
30
31pub const AUDIO_ENCODING_FLAC: &str = "fuchsia.media.flac";
32
33pub const AUDIO_ENCODING_GSMMS: &str = "fuchsia.media.gsmms";
34
35pub const AUDIO_ENCODING_LPCM: &str = "fuchsia.media.lpcm";
36
37pub const AUDIO_ENCODING_MP3: &str = "fuchsia.media.mp3";
38
39pub const AUDIO_ENCODING_OPUS: &str = "fuchsia.media.opus";
40
41pub const AUDIO_ENCODING_PCMALAW: &str = "fuchsia.media.pcmalaw";
42
43pub const AUDIO_ENCODING_PCMMULAW: &str = "fuchsia.media.pcmmulaw";
44
45pub const AUDIO_ENCODING_SBC: &str = "fuchsia.media.sbc";
46
47pub const AUDIO_ENCODING_VORBIS: &str = "fuchsia.media.vorbis";
48
49pub const CAPTURE_USAGE2_COUNT: u8 = 4;
50
51pub const CAPTURE_USAGE_COUNT: u8 = 4;
52
53pub const ENCRYPTION_SCHEME_CBC1: &str = "cbc1";
54
55pub const ENCRYPTION_SCHEME_CBCS: &str = "cbcs";
56
57pub const ENCRYPTION_SCHEME_CENC: &str = "cenc";
58
59pub const ENCRYPTION_SCHEME_CENS: &str = "cens";
60
61pub const ENCRYPTION_SCHEME_UNENCRYPTED: &str = "unencrypted";
62
63pub const MAX_ENCRYPTION_SCHEME_SIZE: u32 = 100;
64
65/// The maximum number of frames that may be contained within a single StreamPacket.
66pub const MAX_FRAMES_PER_RENDERER_PACKET: i64 = 262143;
67
68pub const MAX_INIT_VECTOR_SIZE: u32 = 16;
69
70pub const MAX_KEY_ID_SIZE: u32 = 16;
71
72pub const MAX_PCM_CHANNEL_COUNT: u32 = 8;
73
74pub const MAX_PCM_FRAMES_PER_SECOND: u32 = 192000;
75
76/// A reasonable upper-bound for the maximum number of render or capture usages. Use this value in
77/// FIDL APIs (e.g. for max vector size), instead of RENDER_USAGE2_COUNT or CAPTURE_USAGE2_COUNT
78/// directly. This way, an increase in these consts will not cause an ABI-breaking change.
79pub const MAX_USAGE_COUNT: u8 = 8;
80
81pub const METADATA_LABEL_ALBUM: &str = "fuchsia.media.album";
82
83pub const METADATA_LABEL_ARTIST: &str = "fuchsia.media.artist";
84
85pub const METADATA_LABEL_COMPOSER: &str = "fuchsia.media.composer";
86
87pub const METADATA_LABEL_EPISODE: &str = "fuchsia.media.episode";
88
89pub const METADATA_LABEL_GENRE: &str = "fuchsia.media.genre";
90
91pub const METADATA_LABEL_PUBLISHER: &str = "fuchsia.media.publisher";
92
93pub const METADATA_LABEL_RELEASE_DATE: &str = "fuchsia.media.release_date";
94
95pub const METADATA_LABEL_SEASON: &str = "fuchsia.media.season";
96
97pub const METADATA_LABEL_STUDIO: &str = "fuchsia.media.studio";
98
99pub const METADATA_LABEL_SUBTITLE: &str = "fuchsia.media.subtitle";
100
101pub const METADATA_LABEL_TITLE: &str = "fuchsia.media.title";
102
103pub const METADATA_LABEL_TRACK_NUMBER: &str = "fuchsia.media.track_number";
104
105/// The title of the source of the media, e.g. a player, streaming service, or
106/// website.
107pub const METADATA_SOURCE_TITLE: &str = "fuchsia.media.source_title";
108
109/// Permitted ranges for AudioRenderer and AudioCapturer
110pub const MIN_PCM_CHANNEL_COUNT: u32 = 1;
111
112pub const MIN_PCM_FRAMES_PER_SECOND: u32 = 1000;
113
114/// When used as a `StreamPacket.pts` value, indicates that the packet has no
115/// specific presentation timestamp. The effective presentation time of such a
116/// packet depends on the context in which the `StreamPacket` is used.
117pub const NO_TIMESTAMP: i64 = 9223372036854775807;
118
119pub const RENDER_USAGE2_COUNT: u8 = 6;
120
121pub const RENDER_USAGE_COUNT: u8 = 5;
122
123/// Indicates a discontinuity in an otherwise continuous-in-time sequence of
124/// packets. The precise semantics of this flag depend on the context in which
125/// the `StreamPacket` is used.
126pub const STREAM_PACKET_FLAG_DISCONTINUITY: u32 = 4;
127
128/// Indicates that all other packets in the stream can be understood without
129/// reference to this packet. This is typically used in compressed streams to
130/// identify packets containing frames that may be discarded without affecting
131/// other frames.
132pub const STREAM_PACKET_FLAG_DROPPABLE: u32 = 2;
133
134/// Indicates that the packet can be understood without reference to other
135/// packets in the stream. This is typically used in compressed streams to
136/// identify packets that contain key frames.
137pub const STREAM_PACKET_FLAG_KEY_FRAME: u32 = 1;
138
139/// Video encodings.
140pub const VIDEO_ENCODING_H263: &str = "fuchsia.media.h263";
141
142pub const VIDEO_ENCODING_H264: &str = "fuchsia.media.h264";
143
144pub const VIDEO_ENCODING_MPEG4: &str = "fuchsia.media.mpeg4";
145
146pub const VIDEO_ENCODING_THEORA: &str = "fuchsia.media.theora";
147
148pub const VIDEO_ENCODING_UNCOMPRESSED: &str = "fuchsia.media.uncompressed_video";
149
150pub const VIDEO_ENCODING_VP3: &str = "fuchsia.media.vp3";
151
152pub const VIDEO_ENCODING_VP8: &str = "fuchsia.media.vp8";
153
154pub const VIDEO_ENCODING_VP9: &str = "fuchsia.media.vp9";
155
156pub const MAX_OOB_BYTES_SIZE: u64 = 8192;
157
158bitflags! {
159    /// Flags passed to `AudioConsumer.Start`.
160    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
161    pub struct AudioConsumerStartFlags: u32 {
162        /// Indicates that latency should be kept as low as possible.
163        const LOW_LATENCY = 1;
164        /// Indicates that the timing of packet delivery is determined by an external process rather
165        /// than being demand-based. When this flag is set, the service should expect underflow or
166        /// overflow due to a mismatch between packet arrival rate and presentation rate. When this
167        /// flag is not set, packets arrive on demand.
168        const SUPPLY_DRIVEN = 2;
169    }
170}
171
172impl AudioConsumerStartFlags {}
173
174bitflags! {
175    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
176    pub struct AudioGainInfoFlags: u32 {
177        const MUTE = 1;
178        const AGC_SUPPORTED = 2;
179        const AGC_ENABLED = 4;
180    }
181}
182
183impl AudioGainInfoFlags {}
184
185bitflags! {
186    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
187    pub struct AudioGainValidFlags: u32 {
188        const GAIN_VALID = 1;
189        const MUTE_VALID = 2;
190        const AGC_VALID = 4;
191    }
192}
193
194impl AudioGainValidFlags {}
195
196#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
197#[repr(u32)]
198pub enum AacAudioObjectType {
199    /// MPEG-2 Low Complexity
200    Mpeg2AacLc = 0,
201    /// MPEG-4 Low Complexity
202    Mpeg4AacLc = 1,
203}
204
205impl AacAudioObjectType {
206    #[inline]
207    pub fn from_primitive(prim: u32) -> Option<Self> {
208        match prim {
209            0 => Some(Self::Mpeg2AacLc),
210            1 => Some(Self::Mpeg4AacLc),
211            _ => None,
212        }
213    }
214
215    #[inline]
216    pub const fn into_primitive(self) -> u32 {
217        self as u32
218    }
219}
220
221#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
222#[repr(u32)]
223pub enum AacChannelMode {
224    Mono = 0,
225    Stereo = 2,
226}
227
228impl AacChannelMode {
229    #[inline]
230    pub fn from_primitive(prim: u32) -> Option<Self> {
231        match prim {
232            0 => Some(Self::Mono),
233            2 => Some(Self::Stereo),
234            _ => None,
235        }
236    }
237
238    #[inline]
239    pub const fn into_primitive(self) -> u32 {
240        self as u32
241    }
242}
243
244/// Variable bit rate modes. The actual resulting bitrate
245/// varies based on input signal and other encoding settings.
246///
247/// See https://wiki.hydrogenaud.io/index.php?title=Fraunhofer_FDK_AAC#Bitrate_Modes
248#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
249#[repr(u32)]
250pub enum AacVariableBitRate {
251    V1 = 1,
252    V2 = 2,
253    V3 = 3,
254    V4 = 4,
255    V5 = 5,
256}
257
258impl AacVariableBitRate {
259    #[inline]
260    pub fn from_primitive(prim: u32) -> Option<Self> {
261        match prim {
262            1 => Some(Self::V1),
263            2 => Some(Self::V2),
264            3 => Some(Self::V3),
265            4 => Some(Self::V4),
266            5 => Some(Self::V5),
267            _ => None,
268        }
269    }
270
271    #[inline]
272    pub const fn into_primitive(self) -> u32 {
273        self as u32
274    }
275}
276
277#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
278#[repr(u32)]
279pub enum AudioBitrateMode {
280    Unspecified = 0,
281    Cbr = 1,
282    Vbr = 2,
283}
284
285impl AudioBitrateMode {
286    #[inline]
287    pub fn from_primitive(prim: u32) -> Option<Self> {
288        match prim {
289            0 => Some(Self::Unspecified),
290            1 => Some(Self::Cbr),
291            2 => Some(Self::Vbr),
292            _ => None,
293        }
294    }
295
296    #[inline]
297    pub const fn into_primitive(self) -> u32 {
298        self as u32
299    }
300}
301
302/// Usages annotating the purpose of the stream being used to capture audio. The
303/// AudioCaptureUsage is used by audio policy to dictate how audio streams
304/// interact with each other.
305#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
306#[repr(u32)]
307pub enum AudioCaptureUsage {
308    /// Stream is used to capture audio while in the background. These streams
309    /// may be active at any the time and are considered privileged.
310    /// Example: Listening for Hotwords
311    Background = 0,
312    /// Stream is intended to be used for normal capture functionality. Streams
313    /// that are used for audio capture while the stream creator is in the
314    /// foreground should use this.
315    /// Example: Voice Recorder
316    Foreground = 1,
317    /// Stream is for interaction with a system agent. This should only be used
318    /// once a user has signalled their intent to have the interaction with an
319    /// interested party.
320    /// Examples: Assistant, Siri, Alexa
321    SystemAgent = 2,
322    /// Stream is intended to be used for some form of real time user to user
323    /// communication. Voice/Video chat should use this.
324    Communication = 3,
325}
326
327impl AudioCaptureUsage {
328    #[inline]
329    pub fn from_primitive(prim: u32) -> Option<Self> {
330        match prim {
331            0 => Some(Self::Background),
332            1 => Some(Self::Foreground),
333            2 => Some(Self::SystemAgent),
334            3 => Some(Self::Communication),
335            _ => None,
336        }
337    }
338
339    #[inline]
340    pub const fn into_primitive(self) -> u32 {
341        self as u32
342    }
343}
344
345/// Usages annotating the purpose of the stream being used to capture audio. The
346/// AudioCaptureUsage is used by audio policy to dictate how audio streams
347/// interact with each other.
348#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
349pub enum AudioCaptureUsage2 {
350    /// Stream is used to capture audio while in the background. These streams may be active at
351    /// any the time and are considered privileged.
352    /// Example: Listening for Hotwords
353    Background,
354    /// Stream is intended to be used for normal capture functionality. Streams that are used for
355    /// audio capture while the stream creator is in the foreground should use this.
356    /// Example: Voice Recorder
357    Foreground,
358    /// Stream is for interaction with a system agent. This should only be used once a user has
359    /// signalled their intent to have the interaction with an interested party.
360    /// Examples: Assistant, Siri, Alexa
361    SystemAgent,
362    /// Stream is intended to be used for some form of real time user to user communication.
363    /// Voice/Video chat should use this.
364    Communication,
365    #[doc(hidden)]
366    __SourceBreaking { unknown_ordinal: u32 },
367}
368
369/// Pattern that matches an unknown `AudioCaptureUsage2` member.
370#[macro_export]
371macro_rules! AudioCaptureUsage2Unknown {
372    () => {
373        _
374    };
375}
376
377impl AudioCaptureUsage2 {
378    #[inline]
379    pub fn from_primitive(prim: u32) -> Option<Self> {
380        match prim {
381            0 => Some(Self::Background),
382            1 => Some(Self::Foreground),
383            2 => Some(Self::SystemAgent),
384            3 => Some(Self::Communication),
385            _ => None,
386        }
387    }
388
389    #[inline]
390    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
391        match prim {
392            0 => Self::Background,
393            1 => Self::Foreground,
394            2 => Self::SystemAgent,
395            3 => Self::Communication,
396            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
397        }
398    }
399
400    #[inline]
401    pub fn unknown() -> Self {
402        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
403    }
404
405    #[inline]
406    pub const fn into_primitive(self) -> u32 {
407        match self {
408            Self::Background => 0,
409            Self::Foreground => 1,
410            Self::SystemAgent => 2,
411            Self::Communication => 3,
412            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
413        }
414    }
415
416    #[inline]
417    pub fn is_unknown(&self) -> bool {
418        match self {
419            Self::__SourceBreaking { unknown_ordinal: _ } => true,
420            _ => false,
421        }
422    }
423}
424
425/// AudioChannelId
426///
427/// Used in specifying which audio channel is for which speaker location / type.
428///
429/// TODO(dustingreen): Do we need more channel IDs than this?
430#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
431#[repr(u32)]
432pub enum AudioChannelId {
433    Skip = 0,
434    Lf = 1,
435    Rf = 2,
436    Cf = 3,
437    Ls = 4,
438    Rs = 5,
439    Lfe = 6,
440    Cs = 7,
441    Lr = 8,
442    Rr = 9,
443    EndDefined = 10,
444    ExtendedChannelIdBase = 1862270976,
445    Max = 2147483647,
446}
447
448impl AudioChannelId {
449    #[inline]
450    pub fn from_primitive(prim: u32) -> Option<Self> {
451        match prim {
452            0 => Some(Self::Skip),
453            1 => Some(Self::Lf),
454            2 => Some(Self::Rf),
455            3 => Some(Self::Cf),
456            4 => Some(Self::Ls),
457            5 => Some(Self::Rs),
458            6 => Some(Self::Lfe),
459            7 => Some(Self::Cs),
460            8 => Some(Self::Lr),
461            9 => Some(Self::Rr),
462            10 => Some(Self::EndDefined),
463            1862270976 => Some(Self::ExtendedChannelIdBase),
464            2147483647 => Some(Self::Max),
465            _ => None,
466        }
467    }
468
469    #[inline]
470    pub const fn into_primitive(self) -> u32 {
471        self as u32
472    }
473}
474
475#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
476#[repr(u32)]
477pub enum AudioOutputRoutingPolicy {
478    AllPluggedOutputs = 0,
479    LastPluggedOutput = 1,
480}
481
482impl AudioOutputRoutingPolicy {
483    #[inline]
484    pub fn from_primitive(prim: u32) -> Option<Self> {
485        match prim {
486            0 => Some(Self::AllPluggedOutputs),
487            1 => Some(Self::LastPluggedOutput),
488            _ => None,
489        }
490    }
491
492    #[inline]
493    pub const fn into_primitive(self) -> u32 {
494        self as u32
495    }
496}
497
498/// AudioPcmMode
499#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
500#[repr(u32)]
501pub enum AudioPcmMode {
502    Linear = 0,
503    Alaw = 1,
504    Mulaw = 2,
505}
506
507impl AudioPcmMode {
508    #[inline]
509    pub fn from_primitive(prim: u32) -> Option<Self> {
510        match prim {
511            0 => Some(Self::Linear),
512            1 => Some(Self::Alaw),
513            2 => Some(Self::Mulaw),
514            _ => None,
515        }
516    }
517
518    #[inline]
519    pub const fn into_primitive(self) -> u32 {
520        self as u32
521    }
522}
523
524/// Usage annotating the purpose of the stream being used to render audio.
525/// An AudioRenderer's usage cannot be changed after creation. The
526/// AudioRenderUsage is used by audio policy to dictate how audio streams
527/// interact with each other.
528#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
529#[repr(u32)]
530pub enum AudioRenderUsage {
531    /// Stream is intended to be used for ambient or background sound. Streams
532    /// that can be interrupted without consequence should use this.
533    Background = 0,
534    /// Stream is intended to be used for normal functionality. Streams that
535    /// are part of normal functionality should use this.
536    Media = 1,
537    /// Stream is intended to interrupt any ongoing function of the device.
538    /// Streams that are used for interruptions like notifications should use
539    /// this.
540    Interruption = 2,
541    /// Stream is for interaction with a system agent. This should be used
542    /// in response to a user initiated trigger.
543    SystemAgent = 3,
544    /// Stream is intended to be used for some form of real time user to user
545    /// communication. Voice/Video chat should use this.
546    Communication = 4,
547}
548
549impl AudioRenderUsage {
550    #[inline]
551    pub fn from_primitive(prim: u32) -> Option<Self> {
552        match prim {
553            0 => Some(Self::Background),
554            1 => Some(Self::Media),
555            2 => Some(Self::Interruption),
556            3 => Some(Self::SystemAgent),
557            4 => Some(Self::Communication),
558            _ => None,
559        }
560    }
561
562    #[inline]
563    pub const fn into_primitive(self) -> u32 {
564        self as u32
565    }
566}
567
568/// Usage annotating the purpose of the stream being used to render audio. An AudioRenderer's
569/// usage cannot be changed after creation. The AudioRenderUsage2 value is used by audio policy
570/// to dictate how audio streams interact with each other. This enum expands the original (strict)
571/// enum |AudioRenderUsage| with additional stream types.
572#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
573pub enum AudioRenderUsage2 {
574    /// Stream is intended to be used for ambient or background sound. Streams
575    /// that can be interrupted without consequence should use this.
576    Background,
577    /// Stream is intended to be used for normal functionality. Streams that
578    /// are part of normal functionality should use this.
579    Media,
580    /// Stream is intended to interrupt any ongoing function of the device.
581    /// Streams that are used for interruptions like notifications should use
582    /// this.
583    Interruption,
584    /// Stream is for interaction with a system agent. This should be used
585    /// in response to a user initiated trigger.
586    SystemAgent,
587    /// Stream is intended to be used for some form of real time user to user
588    /// communication. Voice/Video chat should use this.
589    Communication,
590    /// Stream is intended to be used for accessibility or other non-system-
591    /// agent speech output, such as screen reader TTS.
592    Accessibility,
593    #[doc(hidden)]
594    __SourceBreaking { unknown_ordinal: u32 },
595}
596
597/// Pattern that matches an unknown `AudioRenderUsage2` member.
598#[macro_export]
599macro_rules! AudioRenderUsage2Unknown {
600    () => {
601        _
602    };
603}
604
605impl AudioRenderUsage2 {
606    #[inline]
607    pub fn from_primitive(prim: u32) -> Option<Self> {
608        match prim {
609            0 => Some(Self::Background),
610            1 => Some(Self::Media),
611            2 => Some(Self::Interruption),
612            3 => Some(Self::SystemAgent),
613            4 => Some(Self::Communication),
614            5 => Some(Self::Accessibility),
615            _ => None,
616        }
617    }
618
619    #[inline]
620    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
621        match prim {
622            0 => Self::Background,
623            1 => Self::Media,
624            2 => Self::Interruption,
625            3 => Self::SystemAgent,
626            4 => Self::Communication,
627            5 => Self::Accessibility,
628            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
629        }
630    }
631
632    #[inline]
633    pub fn unknown() -> Self {
634        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
635    }
636
637    #[inline]
638    pub const fn into_primitive(self) -> u32 {
639        match self {
640            Self::Background => 0,
641            Self::Media => 1,
642            Self::Interruption => 2,
643            Self::SystemAgent => 3,
644            Self::Communication => 4,
645            Self::Accessibility => 5,
646            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
647        }
648    }
649
650    #[inline]
651    pub fn is_unknown(&self) -> bool {
652        match self {
653            Self::__SourceBreaking { unknown_ordinal: _ } => true,
654            _ => false,
655        }
656    }
657}
658
659/// Enumerates the supported audio sample formats.
660#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
661#[repr(u32)]
662pub enum AudioSampleFormat {
663    /// 8-bit unsigned samples, sample size 1 byte.
664    Unsigned8 = 1,
665    /// 16-bit signed samples, host-endian, sample size 2 bytes.
666    Signed16 = 2,
667    /// 24-bit signed samples in 32 bits, host-endian, sample size 4 bytes.
668    Signed24In32 = 3,
669    /// 32-bit floating-point samples, sample size 4 bytes.
670    Float = 4,
671}
672
673impl AudioSampleFormat {
674    #[inline]
675    pub fn from_primitive(prim: u32) -> Option<Self> {
676        match prim {
677            1 => Some(Self::Unsigned8),
678            2 => Some(Self::Signed16),
679            3 => Some(Self::Signed24In32),
680            4 => Some(Self::Float),
681            _ => None,
682        }
683    }
684
685    #[inline]
686    pub const fn into_primitive(self) -> u32 {
687        self as u32
688    }
689}
690
691#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
692pub enum Behavior {
693    /// Mix the streams.
694    None,
695    /// Apply a gain to duck the volume of one of the streams. (-14.0db)
696    Duck,
697    /// Apply a gain to mute one of the streams. (-160.0db)
698    Mute,
699    #[doc(hidden)]
700    __SourceBreaking { unknown_ordinal: u32 },
701}
702
703/// Pattern that matches an unknown `Behavior` member.
704#[macro_export]
705macro_rules! BehaviorUnknown {
706    () => {
707        _
708    };
709}
710
711impl Behavior {
712    #[inline]
713    pub fn from_primitive(prim: u32) -> Option<Self> {
714        match prim {
715            0 => Some(Self::None),
716            1 => Some(Self::Duck),
717            2 => Some(Self::Mute),
718            _ => None,
719        }
720    }
721
722    #[inline]
723    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
724        match prim {
725            0 => Self::None,
726            1 => Self::Duck,
727            2 => Self::Mute,
728            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
729        }
730    }
731
732    #[inline]
733    pub fn unknown() -> Self {
734        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
735    }
736
737    #[inline]
738    pub const fn into_primitive(self) -> u32 {
739        match self {
740            Self::None => 0,
741            Self::Duck => 1,
742            Self::Mute => 2,
743            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
744        }
745    }
746
747    #[inline]
748    pub fn is_unknown(&self) -> bool {
749        match self {
750            Self::__SourceBreaking { unknown_ordinal: _ } => true,
751            _ => false,
752        }
753    }
754}
755
756/// A list of permitted codec profiles. This list should be flexible since codecs can and will be added
757/// in the future. This can contain both video and audio profiles if needed.
758#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
759pub enum CodecProfile {
760    H264ProfileBaseline,
761    H264ProfileMain,
762    H264ProfileExtended,
763    H264ProfileHigh,
764    H264ProfileHigh10Profile,
765    H264ProfileHigh422Profile,
766    H264ProfileHigh444Predictiveprofile,
767    H264ProfileScalablebaseline,
768    H264ProfileScalablehigh,
769    H264ProfileStereohigh,
770    H264ProfileMultiviewhigh,
771    Vp8ProfileAny,
772    Vp9ProfileProfile0,
773    Vp9ProfileProfile1,
774    Vp9ProfileProfile2,
775    Vp9ProfileProfile3,
776    HevcprofileMain,
777    HevcprofileMain10,
778    HevcprofileMainStillPicture,
779    MjpegBaseline,
780    #[doc(hidden)]
781    __SourceBreaking {
782        unknown_ordinal: u32,
783    },
784}
785
786/// Pattern that matches an unknown `CodecProfile` member.
787#[macro_export]
788macro_rules! CodecProfileUnknown {
789    () => {
790        _
791    };
792}
793
794impl CodecProfile {
795    #[inline]
796    pub fn from_primitive(prim: u32) -> Option<Self> {
797        match prim {
798            0 => Some(Self::H264ProfileBaseline),
799            1 => Some(Self::H264ProfileMain),
800            2 => Some(Self::H264ProfileExtended),
801            3 => Some(Self::H264ProfileHigh),
802            4 => Some(Self::H264ProfileHigh10Profile),
803            5 => Some(Self::H264ProfileHigh422Profile),
804            6 => Some(Self::H264ProfileHigh444Predictiveprofile),
805            7 => Some(Self::H264ProfileScalablebaseline),
806            8 => Some(Self::H264ProfileScalablehigh),
807            9 => Some(Self::H264ProfileStereohigh),
808            10 => Some(Self::H264ProfileMultiviewhigh),
809            11 => Some(Self::Vp8ProfileAny),
810            12 => Some(Self::Vp9ProfileProfile0),
811            13 => Some(Self::Vp9ProfileProfile1),
812            14 => Some(Self::Vp9ProfileProfile2),
813            15 => Some(Self::Vp9ProfileProfile3),
814            16 => Some(Self::HevcprofileMain),
815            17 => Some(Self::HevcprofileMain10),
816            18 => Some(Self::HevcprofileMainStillPicture),
817            19 => Some(Self::MjpegBaseline),
818            _ => None,
819        }
820    }
821
822    #[inline]
823    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
824        match prim {
825            0 => Self::H264ProfileBaseline,
826            1 => Self::H264ProfileMain,
827            2 => Self::H264ProfileExtended,
828            3 => Self::H264ProfileHigh,
829            4 => Self::H264ProfileHigh10Profile,
830            5 => Self::H264ProfileHigh422Profile,
831            6 => Self::H264ProfileHigh444Predictiveprofile,
832            7 => Self::H264ProfileScalablebaseline,
833            8 => Self::H264ProfileScalablehigh,
834            9 => Self::H264ProfileStereohigh,
835            10 => Self::H264ProfileMultiviewhigh,
836            11 => Self::Vp8ProfileAny,
837            12 => Self::Vp9ProfileProfile0,
838            13 => Self::Vp9ProfileProfile1,
839            14 => Self::Vp9ProfileProfile2,
840            15 => Self::Vp9ProfileProfile3,
841            16 => Self::HevcprofileMain,
842            17 => Self::HevcprofileMain10,
843            18 => Self::HevcprofileMainStillPicture,
844            19 => Self::MjpegBaseline,
845            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
846        }
847    }
848
849    #[inline]
850    pub fn unknown() -> Self {
851        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
852    }
853
854    #[inline]
855    pub const fn into_primitive(self) -> u32 {
856        match self {
857            Self::H264ProfileBaseline => 0,
858            Self::H264ProfileMain => 1,
859            Self::H264ProfileExtended => 2,
860            Self::H264ProfileHigh => 3,
861            Self::H264ProfileHigh10Profile => 4,
862            Self::H264ProfileHigh422Profile => 5,
863            Self::H264ProfileHigh444Predictiveprofile => 6,
864            Self::H264ProfileScalablebaseline => 7,
865            Self::H264ProfileScalablehigh => 8,
866            Self::H264ProfileStereohigh => 9,
867            Self::H264ProfileMultiviewhigh => 10,
868            Self::Vp8ProfileAny => 11,
869            Self::Vp9ProfileProfile0 => 12,
870            Self::Vp9ProfileProfile1 => 13,
871            Self::Vp9ProfileProfile2 => 14,
872            Self::Vp9ProfileProfile3 => 15,
873            Self::HevcprofileMain => 16,
874            Self::HevcprofileMain10 => 17,
875            Self::HevcprofileMainStillPicture => 18,
876            Self::MjpegBaseline => 19,
877            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
878        }
879    }
880
881    #[inline]
882    pub fn is_unknown(&self) -> bool {
883        match self {
884            Self::__SourceBreaking { unknown_ordinal: _ } => true,
885            _ => false,
886        }
887    }
888}
889
890#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
891#[repr(u32)]
892pub enum ColorSpace {
893    Unknown = 0,
894    NotApplicable = 1,
895    Jpeg = 2,
896    HdRec709 = 3,
897    SdRec601 = 4,
898}
899
900impl ColorSpace {
901    #[inline]
902    pub fn from_primitive(prim: u32) -> Option<Self> {
903        match prim {
904            0 => Some(Self::Unknown),
905            1 => Some(Self::NotApplicable),
906            2 => Some(Self::Jpeg),
907            3 => Some(Self::HdRec709),
908            4 => Some(Self::SdRec601),
909            _ => None,
910        }
911    }
912
913    #[inline]
914    pub const fn into_primitive(self) -> u32 {
915        self as u32
916    }
917}
918
919#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
920pub enum Lc3FrameDuration {
921    D10Ms,
922    D7P5Ms,
923    #[doc(hidden)]
924    __SourceBreaking {
925        unknown_ordinal: u32,
926    },
927}
928
929/// Pattern that matches an unknown `Lc3FrameDuration` member.
930#[macro_export]
931macro_rules! Lc3FrameDurationUnknown {
932    () => {
933        _
934    };
935}
936
937impl Lc3FrameDuration {
938    #[inline]
939    pub fn from_primitive(prim: u32) -> Option<Self> {
940        match prim {
941            1 => Some(Self::D10Ms),
942            2 => Some(Self::D7P5Ms),
943            _ => None,
944        }
945    }
946
947    #[inline]
948    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
949        match prim {
950            1 => Self::D10Ms,
951            2 => Self::D7P5Ms,
952            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
953        }
954    }
955
956    #[inline]
957    pub fn unknown() -> Self {
958        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
959    }
960
961    #[inline]
962    pub const fn into_primitive(self) -> u32 {
963        match self {
964            Self::D10Ms => 1,
965            Self::D7P5Ms => 2,
966            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
967        }
968    }
969
970    #[inline]
971    pub fn is_unknown(&self) -> bool {
972        match self {
973            Self::__SourceBreaking { unknown_ordinal: _ } => true,
974            _ => false,
975        }
976    }
977}
978
979#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
980#[repr(u32)]
981pub enum SbcAllocation {
982    AllocLoudness = 0,
983    AllocSnr = 1,
984}
985
986impl SbcAllocation {
987    #[inline]
988    pub fn from_primitive(prim: u32) -> Option<Self> {
989        match prim {
990            0 => Some(Self::AllocLoudness),
991            1 => Some(Self::AllocSnr),
992            _ => None,
993        }
994    }
995
996    #[inline]
997    pub const fn into_primitive(self) -> u32 {
998        self as u32
999    }
1000}
1001
1002#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1003#[repr(u32)]
1004pub enum SbcBlockCount {
1005    BlockCount4 = 4,
1006    BlockCount8 = 8,
1007    BlockCount12 = 12,
1008    BlockCount16 = 16,
1009}
1010
1011impl SbcBlockCount {
1012    #[inline]
1013    pub fn from_primitive(prim: u32) -> Option<Self> {
1014        match prim {
1015            4 => Some(Self::BlockCount4),
1016            8 => Some(Self::BlockCount8),
1017            12 => Some(Self::BlockCount12),
1018            16 => Some(Self::BlockCount16),
1019            _ => None,
1020        }
1021    }
1022
1023    #[inline]
1024    pub const fn into_primitive(self) -> u32 {
1025        self as u32
1026    }
1027}
1028
1029#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1030#[repr(u32)]
1031pub enum SbcChannelMode {
1032    Mono = 0,
1033    Dual = 1,
1034    Stereo = 2,
1035    JointStereo = 3,
1036}
1037
1038impl SbcChannelMode {
1039    #[inline]
1040    pub fn from_primitive(prim: u32) -> Option<Self> {
1041        match prim {
1042            0 => Some(Self::Mono),
1043            1 => Some(Self::Dual),
1044            2 => Some(Self::Stereo),
1045            3 => Some(Self::JointStereo),
1046            _ => None,
1047        }
1048    }
1049
1050    #[inline]
1051    pub const fn into_primitive(self) -> u32 {
1052        self as u32
1053    }
1054}
1055
1056#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1057#[repr(u32)]
1058pub enum SbcSubBands {
1059    SubBands4 = 4,
1060    SubBands8 = 8,
1061}
1062
1063impl SbcSubBands {
1064    #[inline]
1065    pub fn from_primitive(prim: u32) -> Option<Self> {
1066        match prim {
1067            4 => Some(Self::SubBands4),
1068            8 => Some(Self::SubBands8),
1069            _ => None,
1070        }
1071    }
1072
1073    #[inline]
1074    pub const fn into_primitive(self) -> u32 {
1075        self as u32
1076    }
1077}
1078
1079/// StreamError
1080///
1081/// This error code encapsulates various errors that might emanate from a
1082/// StreamProcessor server. It can be sent either as an OnStreamFailed event or
1083/// as an epitaph for the channel.
1084#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1085#[repr(u32)]
1086pub enum StreamError {
1087    /// An internal error with an unspecified reason.
1088    Unknown = 1,
1089    /// The client provided invalid input format details.
1090    InvalidInputFormatDetails = 2,
1091    /// The server received buffers that are not suitable for the operation to
1092    /// be performed. An example of this would be if a Decoder received output
1093    /// buffers that are too small to decode a frame into.
1094    IncompatibleBuffersProvided = 3,
1095    /// Processing of input EOS (end of stream) failed, so the stream failed.
1096    /// Currently this can occur if a core codec watchdog fires while processing
1097    /// EOS.
1098    EosProcessing = 4,
1099    /// An internal decoder error with an unspecified reason.
1100    DecoderUnknown = 16777217,
1101    /// Input data that can't be parsed.  Only some parsing problems/errors are
1102    /// reported this way.  Corrupt input data may be reported as other
1103    /// StreamError, or may not cause a StreamError.
1104    DecoderDataParsing = 16777218,
1105    /// An internal encoder error with an unspecified reason.
1106    EncoderUnknown = 33554433,
1107    /// An internal decryptor error with an unspecified reason.
1108    DecryptorUnknown = 50331649,
1109    /// The requested KeyId is not available for use by the Decryptor. The
1110    /// client may try again later if that key becomes available.
1111    DecryptorNoKey = 50331650,
1112}
1113
1114impl StreamError {
1115    #[inline]
1116    pub fn from_primitive(prim: u32) -> Option<Self> {
1117        match prim {
1118            1 => Some(Self::Unknown),
1119            2 => Some(Self::InvalidInputFormatDetails),
1120            3 => Some(Self::IncompatibleBuffersProvided),
1121            4 => Some(Self::EosProcessing),
1122            16777217 => Some(Self::DecoderUnknown),
1123            16777218 => Some(Self::DecoderDataParsing),
1124            33554433 => Some(Self::EncoderUnknown),
1125            50331649 => Some(Self::DecryptorUnknown),
1126            50331650 => Some(Self::DecryptorNoKey),
1127            _ => None,
1128        }
1129    }
1130
1131    #[inline]
1132    pub const fn into_primitive(self) -> u32 {
1133        self as u32
1134    }
1135}
1136
1137#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1138#[repr(u32)]
1139pub enum VideoColorSpace {
1140    Invalid = 0,
1141}
1142
1143impl VideoColorSpace {
1144    #[inline]
1145    pub fn from_primitive(prim: u32) -> Option<Self> {
1146        match prim {
1147            0 => Some(Self::Invalid),
1148            _ => None,
1149        }
1150    }
1151
1152    #[inline]
1153    pub const fn into_primitive(self) -> u32 {
1154        self as u32
1155    }
1156}
1157
1158#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1159#[repr(C)]
1160pub struct AacConstantBitRate {
1161    /// Bits per second
1162    pub bit_rate: u32,
1163}
1164
1165impl fidl::Persistable for AacConstantBitRate {}
1166
1167#[derive(Clone, Debug, PartialEq)]
1168pub struct AacEncoderSettings {
1169    pub transport: AacTransport,
1170    pub channel_mode: AacChannelMode,
1171    pub bit_rate: AacBitRate,
1172    pub aot: AacAudioObjectType,
1173}
1174
1175impl fidl::Persistable for AacEncoderSettings {}
1176
1177/// AAC inside ADTS
1178#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1179pub struct AacTransportAdts;
1180
1181impl fidl::Persistable for AacTransportAdts {}
1182
1183/// AAC inside LATM
1184#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1185pub struct AacTransportLatm {
1186    /// Whether MuxConfiguration stream element is present
1187    pub mux_config_present: bool,
1188}
1189
1190impl fidl::Persistable for AacTransportLatm {}
1191
1192/// Raw AAC access units.
1193#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1194pub struct AacTransportRaw;
1195
1196impl fidl::Persistable for AacTransportRaw {}
1197
1198#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1199pub struct ActivityReporterWatchCaptureActivityResponse {
1200    pub active_usages: Vec<AudioCaptureUsage>,
1201}
1202
1203impl fidl::Persistable for ActivityReporterWatchCaptureActivityResponse {}
1204
1205#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1206pub struct ActivityReporterWatchRenderActivityResponse {
1207    pub active_usages: Vec<AudioRenderUsage>,
1208}
1209
1210impl fidl::Persistable for ActivityReporterWatchRenderActivityResponse {}
1211
1212#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1213pub struct ActivityReporterWatchCaptureActivity2Response {
1214    pub active_usages: Vec<AudioCaptureUsage2>,
1215}
1216
1217impl fidl::Persistable for ActivityReporterWatchCaptureActivity2Response {}
1218
1219#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1220pub struct ActivityReporterWatchRenderActivity2Response {
1221    pub active_usages: Vec<AudioRenderUsage2>,
1222}
1223
1224impl fidl::Persistable for ActivityReporterWatchRenderActivity2Response {}
1225
1226#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1227#[repr(C)]
1228pub struct AudioCapturerCaptureAtRequest {
1229    pub payload_buffer_id: u32,
1230    pub payload_offset: u32,
1231    pub frames: u32,
1232}
1233
1234impl fidl::Persistable for AudioCapturerCaptureAtRequest {}
1235
1236#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1237#[repr(C)]
1238pub struct AudioCapturerCaptureAtResponse {
1239    pub captured_packet: StreamPacket,
1240}
1241
1242impl fidl::Persistable for AudioCapturerCaptureAtResponse {}
1243
1244#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1245pub struct AudioCapturerGetStreamTypeResponse {
1246    pub stream_type: StreamType,
1247}
1248
1249impl fidl::Persistable for AudioCapturerGetStreamTypeResponse {}
1250
1251#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1252pub struct AudioCapturerSetPcmStreamTypeRequest {
1253    pub stream_type: AudioStreamType,
1254}
1255
1256impl fidl::Persistable for AudioCapturerSetPcmStreamTypeRequest {}
1257
1258#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1259pub struct AudioCapturerSetUsage2Request {
1260    pub usage: AudioCaptureUsage2,
1261}
1262
1263impl fidl::Persistable for AudioCapturerSetUsage2Request {}
1264
1265#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1266pub struct AudioCapturerSetUsageRequest {
1267    pub usage: AudioCaptureUsage,
1268}
1269
1270impl fidl::Persistable for AudioCapturerSetUsageRequest {}
1271
1272#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1273#[repr(C)]
1274pub struct AudioCapturerStartAsyncCaptureRequest {
1275    pub frames_per_packet: u32,
1276}
1277
1278impl fidl::Persistable for AudioCapturerStartAsyncCaptureRequest {}
1279
1280#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1281pub struct AudioCompressedFormatAac;
1282
1283impl fidl::Persistable for AudioCompressedFormatAac {}
1284
1285#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1286pub struct AudioCompressedFormatSbc;
1287
1288impl fidl::Persistable for AudioCompressedFormatSbc {}
1289
1290#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1291pub struct AudioConsumerSetRateRequest {
1292    pub rate: f32,
1293}
1294
1295impl fidl::Persistable for AudioConsumerSetRateRequest {}
1296
1297#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1298pub struct AudioConsumerStartRequest {
1299    pub flags: AudioConsumerStartFlags,
1300    pub reference_time: i64,
1301    pub media_time: i64,
1302}
1303
1304impl fidl::Persistable for AudioConsumerStartRequest {}
1305
1306#[derive(Clone, Debug, PartialEq)]
1307pub struct AudioConsumerWatchStatusResponse {
1308    pub status: AudioConsumerStatus,
1309}
1310
1311impl fidl::Persistable for AudioConsumerWatchStatusResponse {}
1312
1313#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1314pub struct AudioCoreEnableDeviceSettingsRequest {
1315    pub enabled: bool,
1316}
1317
1318impl fidl::Persistable for AudioCoreEnableDeviceSettingsRequest {}
1319
1320#[derive(Clone, Debug, PartialEq)]
1321pub struct AudioCoreGetDbFromVolume2Request {
1322    pub usage: Usage2,
1323    pub volume: f32,
1324}
1325
1326impl fidl::Persistable for AudioCoreGetDbFromVolume2Request {}
1327
1328#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1329pub struct AudioCoreGetDbFromVolumeRequest {
1330    pub usage: Usage,
1331    pub volume: f32,
1332}
1333
1334impl fidl::Persistable for AudioCoreGetDbFromVolumeRequest {}
1335
1336#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1337pub struct AudioCoreGetDbFromVolumeResponse {
1338    pub gain_db: f32,
1339}
1340
1341impl fidl::Persistable for AudioCoreGetDbFromVolumeResponse {}
1342
1343#[derive(Clone, Debug, PartialEq)]
1344pub struct AudioCoreGetVolumeFromDb2Request {
1345    pub usage: Usage2,
1346    pub gain_db: f32,
1347}
1348
1349impl fidl::Persistable for AudioCoreGetVolumeFromDb2Request {}
1350
1351#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1352pub struct AudioCoreGetVolumeFromDbRequest {
1353    pub usage: Usage,
1354    pub gain_db: f32,
1355}
1356
1357impl fidl::Persistable for AudioCoreGetVolumeFromDbRequest {}
1358
1359#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1360pub struct AudioCoreGetVolumeFromDbResponse {
1361    pub volume: f32,
1362}
1363
1364impl fidl::Persistable for AudioCoreGetVolumeFromDbResponse {}
1365
1366#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1367pub struct AudioCoreSetCaptureUsageGain2Request {
1368    pub usage: AudioCaptureUsage2,
1369    pub gain_db: f32,
1370}
1371
1372impl fidl::Persistable for AudioCoreSetCaptureUsageGain2Request {}
1373
1374#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1375pub struct AudioCoreSetCaptureUsageGainRequest {
1376    pub usage: AudioCaptureUsage,
1377    pub gain_db: f32,
1378}
1379
1380impl fidl::Persistable for AudioCoreSetCaptureUsageGainRequest {}
1381
1382#[derive(Clone, Debug, PartialEq)]
1383pub struct AudioCoreSetInteraction2Request {
1384    pub active: Usage2,
1385    pub affected: Usage2,
1386    pub behavior: Behavior,
1387}
1388
1389impl fidl::Persistable for AudioCoreSetInteraction2Request {}
1390
1391#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1392pub struct AudioCoreSetInteractionRequest {
1393    pub active: Usage,
1394    pub affected: Usage,
1395    pub behavior: Behavior,
1396}
1397
1398impl fidl::Persistable for AudioCoreSetInteractionRequest {}
1399
1400#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1401pub struct AudioCoreSetRenderUsageGain2Request {
1402    pub usage: AudioRenderUsage2,
1403    pub gain_db: f32,
1404}
1405
1406impl fidl::Persistable for AudioCoreSetRenderUsageGain2Request {}
1407
1408#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1409pub struct AudioCoreSetRenderUsageGainRequest {
1410    pub usage: AudioRenderUsage,
1411    pub gain_db: f32,
1412}
1413
1414impl fidl::Persistable for AudioCoreSetRenderUsageGainRequest {}
1415
1416#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1417pub struct AudioCoreGetDbFromVolume2Response {
1418    pub gain_db: f32,
1419}
1420
1421impl fidl::Persistable for AudioCoreGetDbFromVolume2Response {}
1422
1423#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1424pub struct AudioCoreGetVolumeFromDb2Response {
1425    pub volume: f32,
1426}
1427
1428impl fidl::Persistable for AudioCoreGetVolumeFromDb2Response {}
1429
1430#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1431#[repr(C)]
1432pub struct AudioDeviceEnumeratorGetDeviceGainRequest {
1433    pub device_token: u64,
1434}
1435
1436impl fidl::Persistable for AudioDeviceEnumeratorGetDeviceGainRequest {}
1437
1438#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1439pub struct AudioDeviceEnumeratorGetDeviceGainResponse {
1440    pub device_token: u64,
1441    pub gain_info: AudioGainInfo,
1442}
1443
1444impl fidl::Persistable for AudioDeviceEnumeratorGetDeviceGainResponse {}
1445
1446#[derive(Clone, Debug, PartialEq, PartialOrd)]
1447pub struct AudioDeviceEnumeratorGetDevicesResponse {
1448    pub devices: Vec<AudioDeviceInfo>,
1449}
1450
1451impl fidl::Persistable for AudioDeviceEnumeratorGetDevicesResponse {}
1452
1453#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1454#[repr(C)]
1455pub struct AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {
1456    pub old_default_token: u64,
1457    pub new_default_token: u64,
1458}
1459
1460impl fidl::Persistable for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {}
1461
1462#[derive(Clone, Debug, PartialEq, PartialOrd)]
1463pub struct AudioDeviceEnumeratorOnDeviceAddedRequest {
1464    pub device: AudioDeviceInfo,
1465}
1466
1467impl fidl::Persistable for AudioDeviceEnumeratorOnDeviceAddedRequest {}
1468
1469#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1470pub struct AudioDeviceEnumeratorOnDeviceGainChangedRequest {
1471    pub device_token: u64,
1472    pub gain_info: AudioGainInfo,
1473}
1474
1475impl fidl::Persistable for AudioDeviceEnumeratorOnDeviceGainChangedRequest {}
1476
1477#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1478#[repr(C)]
1479pub struct AudioDeviceEnumeratorOnDeviceRemovedRequest {
1480    pub device_token: u64,
1481}
1482
1483impl fidl::Persistable for AudioDeviceEnumeratorOnDeviceRemovedRequest {}
1484
1485#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1486pub struct AudioDeviceEnumeratorSetDeviceGainRequest {
1487    pub device_token: u64,
1488    pub gain_info: AudioGainInfo,
1489    pub valid_flags: AudioGainValidFlags,
1490}
1491
1492impl fidl::Persistable for AudioDeviceEnumeratorSetDeviceGainRequest {}
1493
1494#[derive(Clone, Debug, PartialEq, PartialOrd)]
1495pub struct AudioDeviceInfo {
1496    pub name: String,
1497    pub unique_id: String,
1498    pub token_id: u64,
1499    pub is_input: bool,
1500    pub gain_info: AudioGainInfo,
1501    pub is_default: bool,
1502}
1503
1504impl fidl::Persistable for AudioDeviceInfo {}
1505
1506#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1507pub struct AudioGainInfo {
1508    pub gain_db: f32,
1509    pub flags: AudioGainInfoFlags,
1510}
1511
1512impl fidl::Persistable for AudioGainInfo {}
1513
1514#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1515pub struct AudioRendererEnableMinLeadTimeEventsRequest {
1516    pub enabled: bool,
1517}
1518
1519impl fidl::Persistable for AudioRendererEnableMinLeadTimeEventsRequest {}
1520
1521#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1522#[repr(C)]
1523pub struct AudioRendererGetMinLeadTimeResponse {
1524    pub min_lead_time_nsec: i64,
1525}
1526
1527impl fidl::Persistable for AudioRendererGetMinLeadTimeResponse {}
1528
1529#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1530#[repr(C)]
1531pub struct AudioRendererOnMinLeadTimeChangedRequest {
1532    pub min_lead_time_nsec: i64,
1533}
1534
1535impl fidl::Persistable for AudioRendererOnMinLeadTimeChangedRequest {}
1536
1537#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1538#[repr(C)]
1539pub struct AudioRendererPauseResponse {
1540    pub reference_time: i64,
1541    pub media_time: i64,
1542}
1543
1544impl fidl::Persistable for AudioRendererPauseResponse {}
1545
1546#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1547#[repr(C)]
1548pub struct AudioRendererPlayNoReplyRequest {
1549    pub reference_time: i64,
1550    pub media_time: i64,
1551}
1552
1553impl fidl::Persistable for AudioRendererPlayNoReplyRequest {}
1554
1555#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1556#[repr(C)]
1557pub struct AudioRendererPlayRequest {
1558    pub reference_time: i64,
1559    pub media_time: i64,
1560}
1561
1562impl fidl::Persistable for AudioRendererPlayRequest {}
1563
1564#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1565#[repr(C)]
1566pub struct AudioRendererPlayResponse {
1567    pub reference_time: i64,
1568    pub media_time: i64,
1569}
1570
1571impl fidl::Persistable for AudioRendererPlayResponse {}
1572
1573#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1574pub struct AudioRendererSetPcmStreamTypeRequest {
1575    pub type_: AudioStreamType,
1576}
1577
1578impl fidl::Persistable for AudioRendererSetPcmStreamTypeRequest {}
1579
1580#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1581pub struct AudioRendererSetPtsContinuityThresholdRequest {
1582    pub threshold_seconds: f32,
1583}
1584
1585impl fidl::Persistable for AudioRendererSetPtsContinuityThresholdRequest {}
1586
1587#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1588#[repr(C)]
1589pub struct AudioRendererSetPtsUnitsRequest {
1590    pub tick_per_second_numerator: u32,
1591    pub tick_per_second_denominator: u32,
1592}
1593
1594impl fidl::Persistable for AudioRendererSetPtsUnitsRequest {}
1595
1596#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1597pub struct AudioRendererSetUsage2Request {
1598    pub usage2: AudioRenderUsage2,
1599}
1600
1601impl fidl::Persistable for AudioRendererSetUsage2Request {}
1602
1603#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1604pub struct AudioRendererSetUsageRequest {
1605    pub usage: AudioRenderUsage,
1606}
1607
1608impl fidl::Persistable for AudioRendererSetUsageRequest {}
1609
1610/// Describes the type of an audio elementary stream.
1611#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1612pub struct AudioStreamType {
1613    pub sample_format: AudioSampleFormat,
1614    pub channels: u32,
1615    pub frames_per_second: u32,
1616}
1617
1618impl fidl::Persistable for AudioStreamType {}
1619
1620/// Describes the compression applied to a stream. This type can be used in conjunction with
1621/// `AudioStreamType` or `VideoStreamType` to represent a medium-specific compressed type.
1622#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1623pub struct Compression {
1624    /// The type of compression applied to the stream. This is generally one of the *_ENCODING_*
1625    /// values, though `AUDIO_ENCODING_LPCM` and `VIDEO_ENCODING_UNCOMPRESSED` must not be used,
1626    /// because those encodings are regarded as uncompressed.
1627    pub type_: String,
1628    /// Type-specific, opaque 'out-of-band' parameters describing the compression of the stream.
1629    pub parameters: Option<Vec<u8>>,
1630}
1631
1632impl fidl::Persistable for Compression {}
1633
1634/// EncryptionPattern
1635///
1636/// Pattern encryption utilizes a pattern of encrypted and clear 16 byte blocks
1637/// over the protected range of a subsample (the encrypted_bytes of a
1638/// `SubsampleEntry`). This structure specifies the number of encrypted data
1639/// blocks followed by the number of clear data blocks.
1640#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1641#[repr(C)]
1642pub struct EncryptionPattern {
1643    pub clear_blocks: u32,
1644    pub encrypted_blocks: u32,
1645}
1646
1647impl fidl::Persistable for EncryptionPattern {}
1648
1649#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1650pub struct Metadata {
1651    pub properties: Vec<Property>,
1652}
1653
1654impl fidl::Persistable for Metadata {}
1655
1656/// Parameter
1657///
1658/// Generic parameter.
1659///
1660/// We want to minimize use of this generic "Parameter" structure by natively
1661/// defining as many stream-specific parameter semantics as we can.
1662#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1663pub struct Parameter {
1664    pub scope: String,
1665    pub name: String,
1666    pub value: Value,
1667}
1668
1669impl fidl::Persistable for Parameter {}
1670
1671/// PcmFormat
1672///
1673/// PCM audio format details.
1674#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1675pub struct PcmFormat {
1676    pub pcm_mode: AudioPcmMode,
1677    pub bits_per_sample: u32,
1678    pub frames_per_second: u32,
1679    pub channel_map: Vec<AudioChannelId>,
1680}
1681
1682impl fidl::Persistable for PcmFormat {}
1683
1684#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1685#[repr(C)]
1686pub struct ProfileProviderRegisterHandlerWithCapacityResponse {
1687    pub period: i64,
1688    pub capacity: i64,
1689}
1690
1691impl fidl::Persistable for ProfileProviderRegisterHandlerWithCapacityResponse {}
1692
1693#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1694pub struct Property {
1695    pub label: String,
1696    pub value: String,
1697}
1698
1699impl fidl::Persistable for Property {}
1700
1701/// Settings for an SBC Encoder.
1702///
1703/// SBC Encoders take signed little endian 16 bit linear PCM samples and
1704/// return encoded SBC frames. SBC encoder PCM data in batches of
1705/// `sub_bands * block_count` PCM frames. This encoder will accept PCM data on
1706/// arbitrary frame boundaries, but the output flushed when EOS is queued may be
1707/// zero-padded to make a full batch for encoding.
1708#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1709pub struct SbcEncoderSettings {
1710    pub sub_bands: SbcSubBands,
1711    pub allocation: SbcAllocation,
1712    pub block_count: SbcBlockCount,
1713    pub channel_mode: SbcChannelMode,
1714    /// SBC bit pool value.
1715    pub bit_pool: u64,
1716}
1717
1718impl fidl::Persistable for SbcEncoderSettings {}
1719
1720#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1721#[repr(C)]
1722pub struct StreamBufferSetRemovePayloadBufferRequest {
1723    pub id: u32,
1724}
1725
1726impl fidl::Persistable for StreamBufferSetRemovePayloadBufferRequest {}
1727
1728/// Describes a packet consumed by `StreamSink` or produced by `StreamSource`.
1729#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1730#[repr(C)]
1731pub struct StreamPacket {
1732    /// Time at which the packet is to be presented, according to the
1733    /// presentation clock.
1734    pub pts: i64,
1735    /// ID of the payload buffer used for this packet.
1736    ///
1737    /// When this struct is used with `StreamBufferSet`, this field is the ID of
1738    /// a payload buffer provided via `StreamBufferSet.AddPayloadBuffer`. In
1739    /// that case, this value must identify a payload buffer in the current set.
1740    /// Other interfaces may define different semantics for this field.
1741    pub payload_buffer_id: u32,
1742    /// Offset of the packet payload in the payload buffer.
1743    ///
1744    /// This value plus the `payload_size` value must be less than or equal to
1745    /// the size of the referenced payload buffer.
1746    pub payload_offset: u64,
1747    /// Size in bytes of the payload.
1748    ///
1749    /// This value plus the `payload_offest` value must be less than or equal to
1750    /// the size of the referenced payload buffer.
1751    pub payload_size: u64,
1752    /// An bitwise-or'ed set of flags (see constants below) describing
1753    /// properties of this packet.
1754    pub flags: u32,
1755    /// The buffer configuration associated with this packet. The semantics of
1756    /// this field depend on the interface with which this struct is used.
1757    /// In many contexts, this field is not used. This field is intended for
1758    /// situations in which buffer configurations (i.e. sets of payload buffers)
1759    /// are explicitly identified. In such cases, the `payload_buffer_id` refers
1760    /// to a payload buffer in the buffer configuration identified by this
1761    /// field.
1762    pub buffer_config: u64,
1763    /// The stream segment associated with this packet. The semantics of this
1764    /// field depend on the interface with which this struct is used. In many
1765    /// contexts, this field is not used. This field is intended to distinguish
1766    /// contiguous segments of the stream where stream properties (e.g.
1767    /// encoding) may differ from segment to segment.
1768    pub stream_segment_id: u64,
1769}
1770
1771impl fidl::Persistable for StreamPacket {}
1772
1773#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1774pub struct StreamProcessorCloseCurrentStreamRequest {
1775    pub stream_lifetime_ordinal: u64,
1776    pub release_input_buffers: bool,
1777    pub release_output_buffers: bool,
1778}
1779
1780impl fidl::Persistable for StreamProcessorCloseCurrentStreamRequest {}
1781
1782#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1783#[repr(C)]
1784pub struct StreamProcessorCompleteOutputBufferPartialSettingsRequest {
1785    pub buffer_lifetime_ordinal: u64,
1786}
1787
1788impl fidl::Persistable for StreamProcessorCompleteOutputBufferPartialSettingsRequest {}
1789
1790#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1791#[repr(C)]
1792pub struct StreamProcessorFlushEndOfStreamAndCloseStreamRequest {
1793    pub stream_lifetime_ordinal: u64,
1794}
1795
1796impl fidl::Persistable for StreamProcessorFlushEndOfStreamAndCloseStreamRequest {}
1797
1798#[derive(Clone, Debug, PartialEq)]
1799pub struct StreamProcessorOnFreeInputPacketRequest {
1800    pub free_input_packet: PacketHeader,
1801}
1802
1803impl fidl::Persistable for StreamProcessorOnFreeInputPacketRequest {}
1804
1805#[derive(Clone, Debug, PartialEq)]
1806pub struct StreamProcessorOnInputConstraintsRequest {
1807    pub input_constraints: StreamBufferConstraints,
1808}
1809
1810impl fidl::Persistable for StreamProcessorOnInputConstraintsRequest {}
1811
1812#[derive(Clone, Debug, PartialEq)]
1813pub struct StreamProcessorOnOutputConstraintsRequest {
1814    pub output_config: StreamOutputConstraints,
1815}
1816
1817impl fidl::Persistable for StreamProcessorOnOutputConstraintsRequest {}
1818
1819#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1820pub struct StreamProcessorOnOutputEndOfStreamRequest {
1821    pub stream_lifetime_ordinal: u64,
1822    pub error_detected_before: bool,
1823}
1824
1825impl fidl::Persistable for StreamProcessorOnOutputEndOfStreamRequest {}
1826
1827#[derive(Clone, Debug, PartialEq)]
1828pub struct StreamProcessorOnOutputFormatRequest {
1829    pub output_format: StreamOutputFormat,
1830}
1831
1832impl fidl::Persistable for StreamProcessorOnOutputFormatRequest {}
1833
1834#[derive(Clone, Debug, PartialEq)]
1835pub struct StreamProcessorOnOutputPacketRequest {
1836    pub output_packet: Packet,
1837    pub error_detected_before: bool,
1838    pub error_detected_during: bool,
1839}
1840
1841impl fidl::Persistable for StreamProcessorOnOutputPacketRequest {}
1842
1843#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1844pub struct StreamProcessorOnStreamFailedRequest {
1845    pub stream_lifetime_ordinal: u64,
1846    pub error: StreamError,
1847}
1848
1849impl fidl::Persistable for StreamProcessorOnStreamFailedRequest {}
1850
1851#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1852#[repr(C)]
1853pub struct StreamProcessorQueueInputEndOfStreamRequest {
1854    pub stream_lifetime_ordinal: u64,
1855}
1856
1857impl fidl::Persistable for StreamProcessorQueueInputEndOfStreamRequest {}
1858
1859#[derive(Clone, Debug, PartialEq)]
1860pub struct StreamProcessorQueueInputFormatDetailsRequest {
1861    pub stream_lifetime_ordinal: u64,
1862    pub format_details: FormatDetails,
1863}
1864
1865impl fidl::Persistable for StreamProcessorQueueInputFormatDetailsRequest {}
1866
1867#[derive(Clone, Debug, PartialEq)]
1868pub struct StreamProcessorQueueInputPacketRequest {
1869    pub packet: Packet,
1870}
1871
1872impl fidl::Persistable for StreamProcessorQueueInputPacketRequest {}
1873
1874#[derive(Clone, Debug, PartialEq)]
1875pub struct StreamProcessorRecycleOutputPacketRequest {
1876    pub available_output_packet: PacketHeader,
1877}
1878
1879impl fidl::Persistable for StreamProcessorRecycleOutputPacketRequest {}
1880
1881#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1882#[repr(C)]
1883pub struct StreamSinkSendPacketNoReplyRequest {
1884    pub packet: StreamPacket,
1885}
1886
1887impl fidl::Persistable for StreamSinkSendPacketNoReplyRequest {}
1888
1889#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1890#[repr(C)]
1891pub struct StreamSinkSendPacketRequest {
1892    pub packet: StreamPacket,
1893}
1894
1895impl fidl::Persistable for StreamSinkSendPacketRequest {}
1896
1897#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1898#[repr(C)]
1899pub struct StreamSourceOnPacketProducedRequest {
1900    pub packet: StreamPacket,
1901}
1902
1903impl fidl::Persistable for StreamSourceOnPacketProducedRequest {}
1904
1905#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1906#[repr(C)]
1907pub struct StreamSourceReleasePacketRequest {
1908    pub packet: StreamPacket,
1909}
1910
1911impl fidl::Persistable for StreamSourceReleasePacketRequest {}
1912
1913/// Describes the type of an elementary stream.
1914#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1915pub struct StreamType {
1916    /// Medium-specific type information.
1917    pub medium_specific: MediumSpecificStreamType,
1918    /// Encoding (see constants below). This value is represented as a string
1919    /// so that new encodings can be introduced without modifying this file.
1920    pub encoding: String,
1921    /// Encoding-specific parameters, sometimes referred to as 'out-of-band
1922    /// data'. Typically, this data is associated with a compressed stream and
1923    /// provides parameters required to decompress the stream. This data is
1924    /// generally opaque to all parties except the producer and consumer of the
1925    /// stream.
1926    pub encoding_parameters: Option<Vec<u8>>,
1927}
1928
1929impl fidl::Persistable for StreamType {}
1930
1931/// Describes the type of a subpicture elementary stream.
1932#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1933pub struct SubpictureStreamType;
1934
1935impl fidl::Persistable for SubpictureStreamType {}
1936
1937/// SubsampleEntry
1938///
1939/// A subsample is a byte range within a sample consisting of a clear byte range
1940/// followed by an encrypted byte range. This structure specifies the size of
1941/// each range in the subsample.
1942#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1943#[repr(C)]
1944pub struct SubsampleEntry {
1945    pub clear_bytes: u32,
1946    pub encrypted_bytes: u32,
1947}
1948
1949impl fidl::Persistable for SubsampleEntry {}
1950
1951/// Describes the type of a text elementary stream.
1952#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1953pub struct TextStreamType;
1954
1955impl fidl::Persistable for TextStreamType {}
1956
1957/// A TimelineFunction represents a relationship between a subject timeline and a
1958/// reference timeline with a linear relation.
1959///
1960/// For example, consider a common use case in which reference time is the
1961/// monotonic clock of a system and subject time is intended presentation time
1962/// for some media such as a video.
1963///
1964/// `reference_time` is the value of the monotonic clock at the beginning of
1965/// playback. `subject_time` is 0 assuming playback starts at the beginning of
1966/// the media. We then choose a `reference_delta` and `subject_delta` so that
1967/// `subject_delta` / `reference_delta` represents the desired playback rate,
1968/// e.g. 0/1 for paused and 1/1 for normal playback.
1969///
1970/// ## Formulas
1971///
1972/// With a function we can determine the subject timeline value `s` in terms of
1973/// reference timeline value `r` with this formula (where `reference_delta` > 0):
1974///
1975///   s = (r - reference_time) * (subject_delta / reference_delta) + subject_time
1976///
1977/// And similarly we can find the reference timeline value `r` in terms of
1978/// subject timeline value `s` with this formula (where `subject_delta` > 0):
1979///
1980///   r = (s - subject_time) * (reference_delta / subject_delta) + referenc_time
1981///
1982/// ## Choosing time values
1983///
1984/// Time values can be arbitrary and our linear relation will of course be the
1985/// same, but we can use them to represent the bounds of pieces in a piecewise
1986/// linear relation.
1987///
1988/// For example, if a user performs skip-chapter, we might want to describe
1989/// this with a TimelineFunction whose `subject_time` is the time to skip to,
1990/// `reference_time` is now plus some epsilon, and delta ratio is 1/1 for normal
1991/// playback rate.
1992#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1993#[repr(C)]
1994pub struct TimelineFunction {
1995    /// A value from the subject timeline that correlates to reference_time.
1996    pub subject_time: i64,
1997    /// A value from the reference timeline that correlates to subject_time.
1998    pub reference_time: i64,
1999    /// The change in the subject timeline corresponding to reference_delta.
2000    pub subject_delta: u32,
2001    /// The change in the reference timeline corresponding to subject_delta.
2002    /// Cannot be zero.
2003    pub reference_delta: u32,
2004}
2005
2006impl fidl::Persistable for TimelineFunction {}
2007
2008#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
2009pub struct UsageGainListenerOnGainMuteChangedRequest {
2010    pub muted: bool,
2011    pub gain_dbfs: f32,
2012}
2013
2014impl fidl::Persistable for UsageGainListenerOnGainMuteChangedRequest {}
2015
2016#[derive(Clone, Debug, PartialEq)]
2017pub struct UsageWatcher2OnStateChangedRequest {
2018    pub usage: Usage2,
2019    pub state: UsageState,
2020}
2021
2022impl fidl::Persistable for UsageWatcher2OnStateChangedRequest {}
2023
2024#[derive(Clone, Debug, PartialEq)]
2025pub struct UsageWatcherOnStateChangedRequest {
2026    pub usage: Usage,
2027    pub state: UsageState,
2028}
2029
2030impl fidl::Persistable for UsageWatcherOnStateChangedRequest {}
2031
2032/// Describes the type of a video elementary stream.
2033#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2034pub struct VideoStreamType {
2035    pub pixel_format: fidl_fuchsia_images::PixelFormat,
2036    pub color_space: ColorSpace,
2037    /// Dimensions of the video frames as displayed in pixels.
2038    pub width: u32,
2039    pub height: u32,
2040    /// Dimensions of the video frames as encoded in pixels. These values must
2041    /// be equal to or greater than the respective width/height values.
2042    pub coded_width: u32,
2043    pub coded_height: u32,
2044    /// The aspect ratio of a single pixel as frames are intended to be
2045    /// displayed.
2046    pub pixel_aspect_ratio_width: u32,
2047    pub pixel_aspect_ratio_height: u32,
2048    /// The number of bytes per 'coded' row in the primary video plane.
2049    pub stride: u32,
2050}
2051
2052impl fidl::Persistable for VideoStreamType {}
2053
2054/// VideoUncompressedFormat
2055///
2056/// Uncompressed video format details.
2057#[derive(Clone, Debug, PartialEq)]
2058pub struct VideoUncompressedFormat {
2059    pub image_format: fidl_fuchsia_sysmem::ImageFormat2,
2060    pub fourcc: u32,
2061    pub primary_width_pixels: u32,
2062    pub primary_height_pixels: u32,
2063    pub secondary_width_pixels: u32,
2064    pub secondary_height_pixels: u32,
2065    pub planar: bool,
2066    pub swizzled: bool,
2067    pub primary_line_stride_bytes: u32,
2068    pub secondary_line_stride_bytes: u32,
2069    pub primary_start_offset: u32,
2070    pub secondary_start_offset: u32,
2071    pub tertiary_start_offset: u32,
2072    pub primary_pixel_stride: u32,
2073    pub secondary_pixel_stride: u32,
2074    pub primary_display_width_pixels: u32,
2075    pub primary_display_height_pixels: u32,
2076    pub has_pixel_aspect_ratio: bool,
2077    pub pixel_aspect_ratio_width: u32,
2078    pub pixel_aspect_ratio_height: u32,
2079}
2080
2081impl fidl::Persistable for VideoUncompressedFormat {}
2082
2083#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2084pub struct Void;
2085
2086impl fidl::Persistable for Void {}
2087
2088/// AudioCompressedFormatCvsd contains no fields for now since we will be
2089/// using the parameter values recommended by Bluetooth Core Spec v5.3
2090/// section 9.2.
2091#[derive(Clone, Debug, Default, PartialEq)]
2092pub struct AudioCompressedFormatCvsd {
2093    #[doc(hidden)]
2094    pub __source_breaking: fidl::marker::SourceBreaking,
2095}
2096
2097impl fidl::Persistable for AudioCompressedFormatCvsd {}
2098
2099/// AudioCompressedFormatLc3 contains no fields. The required parameters
2100/// for setting up the decoder would be embedded as Codec_Specific_Configuration
2101/// (Assigned Numbers section 6.12.5) in `FormatDetails.oob_bytes`.
2102#[derive(Clone, Debug, Default, PartialEq)]
2103pub struct AudioCompressedFormatLc3 {
2104    #[doc(hidden)]
2105    pub __source_breaking: fidl::marker::SourceBreaking,
2106}
2107
2108impl fidl::Persistable for AudioCompressedFormatLc3 {}
2109
2110/// Represents the status of the consumer. In the initial status, `error` and
2111/// `presentation_timeline` are absent. The lead time fields are always present.
2112#[derive(Clone, Debug, Default, PartialEq)]
2113pub struct AudioConsumerStatus {
2114    /// If present, indicates an error condition currently in effect. Absent if no error.
2115    pub error: Option<AudioConsumerError>,
2116    /// If present, indicates the current relationship between the presentation timeline
2117    /// and local monotonic clock, both in nanosecond units. If not present,
2118    /// indicates there is no relationship. Absent initially.
2119    ///
2120    /// 'Presentation timeline' refers to the `pts` (presentation timestamp) values on the packets.
2121    /// This timeline function can be used to determine the local monotonic clock time that a
2122    /// packet will be presented based on that packet's `pts` value.
2123    pub presentation_timeline: Option<TimelineFunction>,
2124    /// Indicates the minimum lead time in nanoseconds supported by this
2125    /// `AudioConsumer`.  Or in other words, how small of a gap between the
2126    /// `media_time` provided to `AudioConsumer.Start` and the pts on the first
2127    /// packet can be. Values outside this range will be clipped.
2128    pub min_lead_time: Option<u64>,
2129    /// Indicates the maximum lead time in nanoseconds supported by this
2130    /// `AudioConsumer`.  Or in other words, how large of a gap between the
2131    /// `media_time` provided to `AudioConsumer.Start` and the pts on the first
2132    /// packet can be. Values outside this range will be clipped.
2133    pub max_lead_time: Option<u64>,
2134    #[doc(hidden)]
2135    pub __source_breaking: fidl::marker::SourceBreaking,
2136}
2137
2138impl fidl::Persistable for AudioConsumerStatus {}
2139
2140/// Settings for CVSD Encoders. It contains no fields for now since we will be
2141/// using the parameter values recommended by Bluetooth Core Spec v5.3
2142/// section 9.2.
2143#[derive(Clone, Debug, Default, PartialEq)]
2144pub struct CvsdEncoderSettings {
2145    #[doc(hidden)]
2146    pub __source_breaking: fidl::marker::SourceBreaking,
2147}
2148
2149impl fidl::Persistable for CvsdEncoderSettings {}
2150
2151/// DecryptedFormat
2152///
2153/// This describes the format of the decrypted content. It is required to be
2154/// sent by the StreamProcessor server prior to the delivery of output packets.
2155/// Currently, there is no additional format details for decrypted output.
2156#[derive(Clone, Debug, Default, PartialEq)]
2157pub struct DecryptedFormat {
2158    pub ignore_this_field: Option<bool>,
2159    #[doc(hidden)]
2160    pub __source_breaking: fidl::marker::SourceBreaking,
2161}
2162
2163impl fidl::Persistable for DecryptedFormat {}
2164
2165/// EncryptedFormat
2166///
2167/// The stream format details payload of a decrypting stream processor. This is
2168/// a sparsely populated table to specify parameters necessary for decryption
2169/// other than the data stream. It is only necessary to update fields if they
2170/// changed, but not an error if the same value is repeated.
2171#[derive(Clone, Debug, Default, PartialEq)]
2172pub struct EncryptedFormat {
2173    /// `init_vector` is used in combination with a key and a block of content
2174    /// to create the first cipher block in a chain and derive subsequent cipher
2175    /// blocks in a cipher block chain.
2176    /// Usage:
2177    ///  - It is required to be set prior to the delivery of input packets to a
2178    ///    decryptor.
2179    ///  - This may be changed multiple times during a data stream.
2180    pub init_vector: Option<Vec<u8>>,
2181    /// `subsamples` is used to identify the clear and encrypted portions of a
2182    /// subsample.
2183    /// Usage:
2184    ///  - For whole sample encryption, this parameter should not be sent.
2185    ///  - This may be changed multiple times during a data stream.
2186    pub subsamples: Option<Vec<SubsampleEntry>>,
2187    /// `pattern` is used to identify the clear and encrypted blocks for pattern
2188    /// based encryption.
2189    /// Usage:
2190    /// - This is not allowed for CENC and CBC1 and required for CENS and CBCS.
2191    /// - If required, it must be set prior to the delivery of input packets to
2192    ///   a decryptor.
2193    /// - This may be changed multiple times during a data stream.
2194    pub pattern: Option<EncryptionPattern>,
2195    /// `scheme` specifies which encryption scheme to use, such as
2196    /// `fuchsia.media.ENCRYPTION_SCHEME_CENC`.
2197    /// Usage:
2198    ///  - It is required to be set prior to delivery of input packets.
2199    ///  - Changing the scheme mid-stream is only permitted in some scenarios.
2200    ///    Once an encrypted scheme is selected for a stream, the scheme may
2201    ///    only be set to `fuchsia.media.ENCRYPTION_SCHEME_UNENCRYPTED` or that
2202    ///    same initial encrypted scheme. The scheme may be set to
2203    ///    `fuchsia.media.ENCRYPTION_SCHEME_UNENCRYPTED` at any point.
2204    pub scheme: Option<String>,
2205    /// `key_id` identifies the key that should be used for decrypting
2206    /// subsequent data.
2207    /// Usage:
2208    ///  - It is required to be set prior to delivery of input packets to a
2209    ///    decryptor.
2210    ///  - This may be changed multiple times during a data stream.
2211    pub key_id: Option<Vec<u8>>,
2212    #[doc(hidden)]
2213    pub __source_breaking: fidl::marker::SourceBreaking,
2214}
2215
2216impl fidl::Persistable for EncryptedFormat {}
2217
2218/// FormatDetails
2219///
2220/// This describes/details the format on input or output of a StreamProcessor
2221/// (separate instances for input vs. output).
2222#[derive(Clone, Debug, Default, PartialEq)]
2223pub struct FormatDetails {
2224    pub format_details_version_ordinal: Option<u64>,
2225    pub mime_type: Option<String>,
2226    pub oob_bytes: Option<Vec<u8>>,
2227    pub domain: Option<DomainFormat>,
2228    pub pass_through_parameters: Option<Vec<Parameter>>,
2229    /// Instructs an encoder on how to encode raw data.
2230    ///
2231    /// Decoders may ignore this field but are entitled to rejected requests with
2232    /// this field set because it doesn't make sense.
2233    pub encoder_settings: Option<EncoderSettings>,
2234    /// The number of ticks of the timebase of input packet timestamp_ish values
2235    /// per second.
2236    ///
2237    /// The timebase is only used used for optional extrapolation of timestamp_ish
2238    /// values when an input timestamp which applies to byte 0 of the valid portion
2239    /// of the input packet does not correspond directly to byte 0 of the valid
2240    /// portion of any output packet.
2241    ///
2242    /// Leave unset if timestamp extrapolation is not needed, either due to lack of
2243    /// timestamps on input, or due to input being provided in increments of the
2244    /// encoder's input chunk size (based on the encoder settings and calculated
2245    /// independently by the client).  Set if timestamp extrapolation is known to be
2246    /// needed or known to be acceptable to the client.
2247    pub timebase: Option<u64>,
2248    /// The codec profile for the given encoder or decoder.
2249    ///
2250    /// For encoders: This value is completely optional. A client may want to specify the codec
2251    /// profile used for protocol compatibility reasons (i.e. WebRTC). However if the value is not
2252    /// set then the the encoder is free to choose any supported codec profile.
2253    ///
2254    /// For decoders: This value is optional but providing it is best practice (at least of
2255    /// unencrypted streams). Container formats include the encoded profile and this should be
2256    /// provided to the decoder. Certain formats like VP9 and AV1 include the encoded profile in
2257    /// their elementary bitstream so it is possible for those decoders to figure out the profile
2258    /// the stream is encoded in. Regardless, clients should provide the encoded profile if
2259    /// possible.
2260    pub profile: Option<CodecProfile>,
2261    #[doc(hidden)]
2262    pub __source_breaking: fidl::marker::SourceBreaking,
2263}
2264
2265impl fidl::Persistable for FormatDetails {}
2266
2267/// Settings for H264 Encoders.
2268#[derive(Clone, Debug, Default, PartialEq)]
2269pub struct H264EncoderSettings {
2270    /// Target bits per second for encoded stream.
2271    /// If omitted, interpreted as 200,000.
2272    pub bit_rate: Option<u32>,
2273    /// Target frames per second for encoded stream.
2274    /// If omitted, interpreted as 30.
2275    pub frame_rate: Option<u32>,
2276    /// Number of pictures per keyframe.  Setting to 0 will disable key frame
2277    /// encoding, except for if force_key_frame is set to true.
2278    /// If omitted, interpreted as 8.
2279    pub gop_size: Option<u32>,
2280    /// Whether to enable frame rate adjustments in order to meet target bitrate.
2281    /// If omitted, interpreted as false.
2282    pub variable_frame_rate: Option<bool>,
2283    /// Lowest frame rate allowed if `variable_frame_rate` is enabled. If
2284    /// omitted, interpreted as 10.
2285    pub min_frame_rate: Option<u32>,
2286    /// If true, next frame encoded will be a key frame. If omitted, interpreted
2287    /// as false.
2288    pub force_key_frame: Option<bool>,
2289    /// Allow customization of quantization parameters for encoding. Each frame
2290    /// submitted after setting this will use the new values. If omitted, no
2291    /// change from encoder defaults is made.
2292    pub quantization_params: Option<H264QuantizationParameters>,
2293    #[doc(hidden)]
2294    pub __source_breaking: fidl::marker::SourceBreaking,
2295}
2296
2297impl fidl::Persistable for H264EncoderSettings {}
2298
2299/// Customization of h264 encoder parameters for macroblock quantization. The values
2300/// can range from 0 to 51, with lower numbers indicating higher
2301/// quality/bitrate. While encoders should support these fields if feasible,
2302/// some encoders may ignore these fields. It's ok to not set this table, or
2303/// not set some of the fields in this table, as encoders can determine their
2304/// own defaults. If the targeted bitrate can't be achieved with the specified values,
2305/// then the user should expect the resulting encoded stream bitrate to differ from
2306/// the requested bitrate.
2307#[derive(Clone, Debug, Default, PartialEq)]
2308pub struct H264QuantizationParameters {
2309    /// Starting value for quantization of key frames.
2310    pub i_base: Option<u32>,
2311    /// Smallest allowed value for quantization of key frames.
2312    pub i_min: Option<u32>,
2313    /// Largest allowed value for quantization of key frames.
2314    pub i_max: Option<u32>,
2315    /// Starting value for quantization of predicted frames.
2316    pub p_base: Option<u32>,
2317    /// Smallest allowed value for quantization of predicted frames.
2318    pub p_min: Option<u32>,
2319    /// Largest allowed value for quantization of predicted frames.
2320    pub p_max: Option<u32>,
2321    #[doc(hidden)]
2322    pub __source_breaking: fidl::marker::SourceBreaking,
2323}
2324
2325impl fidl::Persistable for H264QuantizationParameters {}
2326
2327/// Settings for HEVC/H265 Encoders.
2328#[derive(Clone, Debug, Default, PartialEq)]
2329pub struct HevcEncoderSettings {
2330    /// Target bits per second for encoded stream. Defaults to 200,000 if
2331    /// omitted.
2332    pub bit_rate: Option<u32>,
2333    /// Target frames per second for encoded stream. Defaults to 30 if omitted.
2334    pub frame_rate: Option<u32>,
2335    /// Number of pictures per keyframe. Defaults to 8 if omitted.
2336    pub gop_size: Option<u32>,
2337    #[doc(hidden)]
2338    pub __source_breaking: fidl::marker::SourceBreaking,
2339}
2340
2341impl fidl::Persistable for HevcEncoderSettings {}
2342
2343/// Configuration for a capturer which will receive a stream from an
2344/// input device.
2345#[derive(Clone, Debug, Default, PartialEq)]
2346pub struct InputAudioCapturerConfiguration {
2347    pub usage: Option<AudioCaptureUsage>,
2348    pub usage2: Option<AudioCaptureUsage2>,
2349    #[doc(hidden)]
2350    pub __source_breaking: fidl::marker::SourceBreaking,
2351}
2352
2353impl fidl::Persistable for InputAudioCapturerConfiguration {}
2354
2355/// Settings for LC3 Encoders. Contains parameters stated in LC3 Specification v1.0.
2356/// Contains fields that are not represented by PcmFormat.
2357#[derive(Clone, Debug, Default, PartialEq)]
2358pub struct Lc3EncoderSettings {
2359    /// External byte count values to be used for the frame encoding of audio.
2360    /// According to the LC3 Specification v1.0, each audio channel could have different
2361    /// output byte size value, but for Fuchsia use case, we use the same `nbytes` value
2362    /// for all channels.
2363    pub nbytes: Option<u16>,
2364    /// Frame duration is used together with sampling frequency to determine the
2365    /// frame size.
2366    pub frame_duration: Option<Lc3FrameDuration>,
2367    #[doc(hidden)]
2368    pub __source_breaking: fidl::marker::SourceBreaking,
2369}
2370
2371impl fidl::Persistable for Lc3EncoderSettings {}
2372
2373/// Configuration for a capturer which will receive a loopback stream
2374/// a system output.
2375#[derive(Clone, Debug, Default, PartialEq)]
2376pub struct LoopbackAudioCapturerConfiguration {
2377    #[doc(hidden)]
2378    pub __source_breaking: fidl::marker::SourceBreaking,
2379}
2380
2381impl fidl::Persistable for LoopbackAudioCapturerConfiguration {}
2382
2383/// Settings for the mSBC encoder. There are no settings as the mSBC encoder uses the values
2384/// required by HFP Spec v1.8.
2385#[derive(Clone, Debug, Default, PartialEq)]
2386pub struct MSbcEncoderSettings {
2387    #[doc(hidden)]
2388    pub __source_breaking: fidl::marker::SourceBreaking,
2389}
2390
2391impl fidl::Persistable for MSbcEncoderSettings {}
2392
2393/// A Packet represents a chunk of input or output data to or from a stream
2394/// processor.
2395///
2396/// stream processor output:
2397///
2398/// While the Packet is outstanding with the client via OnOutputPacket(), the
2399/// stream processor will avoid modifying the referenced output data.  After the
2400/// client calls RecycleOutputPacket(packet_index), the stream processor is
2401/// notified that the client is again ok with the referenced data changing.
2402///
2403/// stream processor input:
2404///
2405/// The client initially has all packet_index(es) available to fill, and later
2406/// gets packet_index(s) that are again ready to fill via OnFreeInputPacket().
2407/// The client must not modify the referenced data in between QueueInputPacket()
2408/// and OnFreeInputPacket().
2409#[derive(Clone, Debug, Default, PartialEq)]
2410pub struct Packet {
2411    pub header: Option<PacketHeader>,
2412    /// Which buffer this packet refers to.  For single-buffer mode this will
2413    /// always be 0, but for multi-buffer mode, a given in-flight interval of a
2414    /// packet can refer to any buffer.  The packet has an associated buffer only
2415    /// while the packet is in-flight, not while the packet is free.
2416    ///
2417    /// The default value makes accidental inappropriate use of index 0 less
2418    /// likely (will tend to complain in an obvious way if not filled out
2419    /// instead of a non-obvious data corruption when decoding buffer 0
2420    /// repeatedly instead of the correct buffers).
2421    ///
2422    /// TODO(dustingreen): Try to make FIDL table defaults have meaning, and not
2423    /// complain about !has when accessing the field.  For now the default
2424    /// specified here does nothing.
2425    pub buffer_index: Option<u32>,
2426    /// The value 1 is the lowest permitted value after stream processor
2427    /// creation.  Values sent by the client must be odd.  Values must only
2428    /// increase.
2429    ///
2430    /// A stream_lifetime_ordinal represents the lifetime of a stream.  All
2431    /// messages that are specific to a stream have the stream_lifetime_ordinal
2432    /// value and the value is the same for all messages relating to a given
2433    /// stream.
2434    pub stream_lifetime_ordinal: Option<u64>,
2435    /// Which part of the relevant buffer is this packet using.  These are valid
2436    /// for input data that's in-flight to the stream processor, and are valid
2437    /// for output data from the stream processor.
2438    ///
2439    /// For compressed formats and uncompressed audio, the data in
2440    /// [start_offset, start_offset + valid_length_bytes) is the contiguously
2441    /// valid data referred to by this packet.
2442    ///
2443    /// For uncompressed video frames, FormatDetails is the primary means of
2444    /// determining which bytes are relevant.  The offsets in FormatDetails
2445    /// are relative to the start_offset here.  The valid_length_bytes must be
2446    /// large enough to include the full last line of pixel data, including the
2447    /// full line stride of the last line (not just the width in pixels of the
2448    /// last line).
2449    ///
2450    /// Despite these being filled out, some uncompressed video buffers are of
2451    /// types that are not readable by the CPU.  These fields being here don't
2452    /// imply there's any way for the CPU to read an uncompressed frame.
2453    pub start_offset: Option<u32>,
2454    /// This must be > 0.
2455    ///
2456    /// The semantics for valid data per packet vary depending on data type as
2457    /// follows.
2458    ///
2459    /// uncompressed video - A video frame can't be split across packets.  Each
2460    /// packet is one video frame.
2461    ///
2462    /// uncompressed audio - Regardless of float or int, linear or uLaw, or
2463    /// number of channels, a packet must contain an non-negative number of
2464    /// complete audio frames, where a single audio frame consists of data for
2465    /// all the channels for the same single point in time.  Any
2466    /// stream-processor-specific internal details re. lower rate sampling for
2467    /// LFE channel or the like should be hidden by the StreamProcessor server
2468    /// implementation.
2469    ///
2470    /// compressed data input - A packet must contain at least one byte of data.
2471    /// See also stream_input_bytes_min.  Splitting AUs at arbitrary byte
2472    /// boundaries is permitted, including at boundaries that are in AU headers.
2473    ///
2474    /// compressed data output - The stream processor is not required to fully
2475    /// fill each output packet's buffer.
2476    pub valid_length_bytes: Option<u32>,
2477    /// This value is not strictly speaking a timestamp.  It is an arbitrary
2478    /// unsigned 64-bit number that, under some circumstances, will be passed by
2479    /// a stream processor unmodified from an input packet to the
2480    /// exactly-corresponding output packet.
2481    ///
2482    /// For timestamp_ish values to be propagated from input to output the
2483    /// following conditions must be true:
2484    ///  * promise_separate_access_units_on_input must be true
2485    ///  * has_timestamp_ish must be true for a given input packet, to have that
2486    ///    timestamp_ish value (potentially) propagate through to an output
2487    ///  * the StreamProcessor instance itself decides (async) that the input
2488    ///    packet generates an output packet - if a given input never generates
2489    ///    an output packet then the timestamp_ish value on the input will never
2490    ///    show up on any output packet - depending on the characteristics of the
2491    ///    input and output formats, and whether a decoder is willing to join
2492    ///    mid-stream, etc this can be more or less likely to occur, but clients
2493    ///    should be written to accommodate timestamp_ish values that are fed on
2494    ///    input but never show up on output, at least to a reasonable degree
2495    ///    (not crashing, not treating as an error).
2496    pub timestamp_ish: Option<u64>,
2497    /// If promise_separate_access_units_on_input (TODO(dustingreen): or any
2498    /// similar mode for output) is true, this bool must be set appropriately
2499    /// depending on whether byte 0 _is_ or _is not_ the start of an access
2500    /// unit. The client is required to know, and required to set this boolean
2501    /// properly. The server is allowed to infer that when this boolean is
2502    /// false, byte 0 is the first byte of a continuation of a
2503    /// previously-started AU.  (The byte at start_offset is "byte 0".)
2504    ///
2505    /// If promise_separate_access_units_on_input is false, this boolean is
2506    /// ignored.
2507    pub start_access_unit: Option<bool>,
2508    /// A client is never required to set this boolean to true.
2509    ///
2510    /// If promise_separate_access_units_on_input is true, for input data, this
2511    /// boolean must be false if the last byte of this packet is not the last
2512    /// byte of an AU, and this boolean _may_ be true if the last byte of this
2513    /// packet is the last byte of an AU.  A client delivering one AU at a time
2514    /// that's interested in the lowest possible latency via the decoder should
2515    /// set this boolean to true when it can be set to true.
2516    ///
2517    /// If promise_separate_access_units_on_input is false, this boolean is
2518    /// ignored.
2519    pub known_end_access_unit: Option<bool>,
2520    /// Used for compressed video packets. If not present should be assumed to
2521    /// be unknown. If false, indicates the packet is not part of a key frame. If
2522    /// true, indicates the packet is part of a key frame.
2523    pub key_frame: Option<bool>,
2524    #[doc(hidden)]
2525    pub __source_breaking: fidl::marker::SourceBreaking,
2526}
2527
2528impl fidl::Persistable for Packet {}
2529
2530/// PacketHeader
2531///
2532/// When referring to a free packet, we use PacketHeader alone instead of
2533/// Packet, since while a packet is free it doesn't really have meaningful
2534/// offset or length etc.
2535///
2536/// A populated Packet also has a PacketHeader.
2537#[derive(Clone, Debug, Default, PartialEq)]
2538pub struct PacketHeader {
2539    /// This is which buffer configuration lifetime this header is referring to.
2540    ///
2541    /// A packet_index is only really meaningful with respect to a particular
2542    /// buffer_lifetime_ordinal.
2543    ///
2544    /// See StreamBufferPartialSettings.buffer_lifetime_ordinal.
2545    ///
2546    /// For QueueInputPacket(), a server receiving a buffer_lifetime_ordinal that
2547    /// isn't the current input buffer_lifetime_ordinal will close the channel.
2548    ///
2549    /// For OnFreeInputPacket() and RecycleOutputPacket(), the receiver (client
2550    /// or server) must ignore a message with stale buffer_lifetime_ordinal.
2551    pub buffer_lifetime_ordinal: Option<u64>,
2552    /// The overall set of packet_index values is densely packed from 0..count-1
2553    /// for input and output separately.  They can be queued in any order.
2554    ///
2555    /// Both the client and server should validate the packet_index against the
2556    /// known bound and disconnect if it's out of bounds.
2557    ///
2558    /// When running in single-buffer mode, the buffer index is always 0.
2559    ///
2560    /// The packet_index values don't imply anything about order of use of
2561    /// packets. The client should not expect the ordering to remain the same
2562    /// over time - the stream processor is free to hold on to an input or
2563    /// output packet for a while during which other packet_index values may be
2564    /// used multiple times.
2565    ///
2566    /// For a given properly-functioning StreamProcessor instance, packet_index
2567    /// values will be unique among concurrently-outstanding packets.  Servers
2568    /// should validate that a client isn't double-using a packet and clients
2569    /// should validate as necessary to avoid undefined or unexpected client
2570    /// behavior.
2571    pub packet_index: Option<u32>,
2572    #[doc(hidden)]
2573    pub __source_breaking: fidl::marker::SourceBreaking,
2574}
2575
2576impl fidl::Persistable for PacketHeader {}
2577
2578/// This struct conveys the buffer_constraints_version_ordinal.
2579///
2580/// Historically this table conveyed more fields than it currently does, but
2581/// those fields are all deprecated in favor of using sysmem instead.
2582///
2583/// There are separate instances of this struct for stream input and stream
2584/// output.
2585///
2586/// Notes about fields:
2587///
2588/// For uncompressed video, separate and complete frames in their
2589/// separate buffers (buffer-per-packet mode) are always a requirement.
2590#[derive(Clone, Debug, Default, PartialEq)]
2591pub struct StreamBufferConstraints {
2592    /// This is a version number the server sets on the constraints to allow the
2593    /// server to determine when the client has caught up with the latest
2594    /// constraints sent by the server.  The server won't emit output data until
2595    /// the client has configured output settings and buffers with a
2596    /// buffer_constraints_version_ordinal >= the latest
2597    /// buffer_constraints_version_ordinal that had
2598    /// buffer_constraints_action_required true.  See
2599    /// buffer_constraints_action_required comments for more.
2600    ///
2601    /// A buffer_constraints_version_ordinal of 0 is not permitted, to simplify
2602    /// initial state handling.  Other than 0, both odd and even version ordinals
2603    /// are allowed (in contrast to the stream_lifetime_ordinal, neither the
2604    /// client nor server ever has a reason to consider the latest version to be
2605    /// stale, so there would be no benefit to disallowing even values).
2606    pub buffer_constraints_version_ordinal: Option<u64>,
2607    pub default_settings: Option<StreamBufferSettings>,
2608    pub per_packet_buffer_bytes_min: Option<u32>,
2609    pub per_packet_buffer_bytes_recommended: Option<u32>,
2610    pub per_packet_buffer_bytes_max: Option<u32>,
2611    pub packet_count_for_server_min: Option<u32>,
2612    pub packet_count_for_server_recommended: Option<u32>,
2613    pub packet_count_for_server_recommended_max: Option<u32>,
2614    pub packet_count_for_server_max: Option<u32>,
2615    pub packet_count_for_client_min: Option<u32>,
2616    pub packet_count_for_client_max: Option<u32>,
2617    pub single_buffer_mode_allowed: Option<bool>,
2618    pub is_physically_contiguous_required: Option<bool>,
2619    #[doc(hidden)]
2620    pub __source_breaking: fidl::marker::SourceBreaking,
2621}
2622
2623impl fidl::Persistable for StreamBufferConstraints {}
2624
2625/// Deprecated.  Use SetStreamBufferPartialSettings() and
2626/// StreamBufferPartialSettings instead.
2627#[derive(Clone, Debug, Default, PartialEq)]
2628pub struct StreamBufferSettings {
2629    pub buffer_lifetime_ordinal: Option<u64>,
2630    pub buffer_constraints_version_ordinal: Option<u64>,
2631    pub packet_count_for_server: Option<u32>,
2632    pub packet_count_for_client: Option<u32>,
2633    pub per_packet_buffer_bytes: Option<u32>,
2634    pub single_buffer_mode: Option<bool>,
2635    #[doc(hidden)]
2636    pub __source_breaking: fidl::marker::SourceBreaking,
2637}
2638
2639impl fidl::Persistable for StreamBufferSettings {}
2640
2641/// The stream-processor-controlled output configuration, including both
2642/// StreamBufferConstraints for the output and FormatDetails for the output.
2643#[derive(Clone, Debug, Default, PartialEq)]
2644pub struct StreamOutputConstraints {
2645    /// A client which always immediately re-configures output buffers on
2646    /// receipt of OnOutputConstraints() with buffer_constraints_action_required
2647    /// true can safely ignore this field.
2648    ///
2649    /// A client is permitted to ignore an OnOutputConstraints() message even with
2650    /// buffer_constraints_action_required true if the client knows the server
2651    /// has already been told to discard the remainder of the stream with the
2652    /// same stream_lifetime_ordinal or if this stream_lifetime_ordinal field is
2653    /// set to 0.  The server is required to re-send needed output config via
2654    /// OnOutputConstraints() with new stream_lifetime_ordinal and
2655    /// buffer_constraints_action_required true, if the most recent completed
2656    /// server-side output config isn't what the server wants/needs yet for the
2657    /// new stream.
2658    pub stream_lifetime_ordinal: Option<u64>,
2659    /// When the buffer constraints are delivered, they indicate whether action
2660    /// is required.  A false value here permits delivery of constraints which
2661    /// are fresher without forcing a buffer reconfiguration.  If this is false,
2662    /// a client cannot assume that it's safe to immediately re-configure output
2663    /// buffers.  If this is true, the client can assume it's safe to
2664    /// immediately configure output buffers once.
2665    ///
2666    /// A client is permitted to ignore buffer constraint versions which have
2667    /// buffer_constraints_action_required false.  The server is not permitted
2668    /// to change buffer_constraints_action_required from false to true for the
2669    /// same buffer_constraints_version_ordinal.
2670    ///
2671    /// For each configuration, a client must use new buffers, never buffers
2672    /// that were previously used for anything else, and never buffers
2673    /// previously used for any other StreamProcessor purposes.  This rule
2674    /// exists for multiple good reasons, relevant to both mid-stream changes,
2675    /// and changes on stream boundaries. A client should just use new buffers
2676    /// each time.
2677    ///
2678    /// When this is true, the server has already de-refed as many low-level
2679    /// output buffers as the server can while still performing efficient
2680    /// transition to the new buffers and will de-ref the rest asap.  A Sync()
2681    /// is not necessary to achieve non-overlap of resource usage to the extent
2682    /// efficiently permitted by the formats involved.
2683    ///
2684    /// If buffer_constraints_action_required is true, the server _must_ not
2685    /// deliver more output data until after output buffers have been configured
2686    /// (or re-configured) by the client.
2687    pub buffer_constraints_action_required: Option<bool>,
2688    pub buffer_constraints: Option<StreamBufferConstraints>,
2689    #[doc(hidden)]
2690    pub __source_breaking: fidl::marker::SourceBreaking,
2691}
2692
2693impl fidl::Persistable for StreamOutputConstraints {}
2694
2695#[derive(Clone, Debug, Default, PartialEq)]
2696pub struct StreamOutputFormat {
2697    /// A client is permitted to ignore an OnOutputFormat() message even with
2698    /// buffer_constraints_action_required true if the client knows the server
2699    /// has already been told to discard the remainder of the stream with the
2700    /// same stream_lifetime_ordinal or if this stream_lifetime_ordinal field is
2701    /// set to 0.  The server is required to re-send needed output config via
2702    /// OnOutputConstraints() with new stream_lifetime_ordinal and
2703    /// buffer_constraints_action_required true, if the most recent completed
2704    /// server-side output config isn't what the server wants/needs yet for the
2705    /// new stream.
2706    ///
2707    /// The server is required to send an OnOutputFormat() before the first
2708    /// output packet of a stream.
2709    pub stream_lifetime_ordinal: Option<u64>,
2710    /// If format_details.format_details_version_ordinal changes, the client
2711    /// should inspect the new format details and determine if it must adjust to
2712    /// the new format. The server guarantees that if the format has changed, then
2713    /// format_details.format_details_version_ordinal will change, but a change
2714    /// to format_details.format_details_version_ordinal does not guarantee that
2715    /// the format details actually changed.  Servers are strongly encouraged to
2716    /// not change format_details.format_details_version_ordinal other than
2717    /// before the first output data of a stream unless there is a real
2718    /// mid-stream format change in the stream.  Unnecessary mid-stream format
2719    /// changes can cause simpler clients that have no need to handle mid-stream
2720    /// format changes to just close the channel.  Format changes before the
2721    /// first output data of a stream are not "mid-stream" in this context -
2722    /// those can be useful for stream format detection / setup reasons.
2723    ///
2724    /// Note that in case output buffers don't really need to be re-configured
2725    /// despite a format change, a server is encouraged, but not required, to
2726    /// set buffer_constraints_action_required false on the message that conveys
2727    /// the new format details.  Simpler servers may just treat the whole output
2728    /// situation as one big thing and demand output buffer reconfiguration on
2729    /// any change in the output situation.
2730    ///
2731    /// A client may or may not actually handle a new buffer_constraints with
2732    /// buffer_constraints_action_required false, but the client should always
2733    /// track the latest format_details.
2734    ///
2735    /// An updated format_details is ordered with respect to emitted output
2736    /// packets, and applies to all subsequent packets until the next
2737    /// format_details with larger version_ordinal.  A simple client that does
2738    /// not intend to handle mid-stream format changes should still keep track
2739    /// of the most recently received format_details until the first output
2740    /// packet arrives, then lock down the format details, handle those format
2741    /// details, and verify that any
2742    /// format_details.format_details_version_ordinal received from the server
2743    /// is the same as the locked-down format_details, until the client is done
2744    /// with the stream.  Even such a simple client must tolerate
2745    /// format_details.format_details_version_ordinal changing multiple times
2746    /// before the start of data output from a stream (any stream - the first
2747    /// stream or a subsequent stream).  This allows a stream processor to
2748    /// request that output buffers and output format be configured
2749    /// speculatively, and for the output config to be optionally adjusted by
2750    /// the server before the first data output from a stream after the server
2751    /// knows everything it needs to know to fully establish the initial output
2752    /// format details.  This simplifies stream processor server implementation,
2753    /// and allows a clever stream processor server to guess it's output config
2754    /// for lower latency before any input data, while still being able to fix
2755    /// the output config (including format details) if the guess turns out to
2756    /// be wrong.
2757    ///
2758    /// Whether the format_details.format_details_version_ordinal will actually
2759    /// change mid-stream is a per-stream-processor and per-stream detail that
2760    /// is not specified in comments here, and in most cases also depends on
2761    /// whether the format changes on the input to the stream processor.
2762    /// Probably it'll be fairly common for a client to use a format which
2763    /// technically supports mid-stream format change, but the client happens to
2764    /// know that none of the streams the client intends to process will ever
2765    /// have a mid-stream format change.
2766    pub format_details: Option<FormatDetails>,
2767    #[doc(hidden)]
2768    pub __source_breaking: fidl::marker::SourceBreaking,
2769}
2770
2771impl fidl::Persistable for StreamOutputFormat {}
2772
2773/// A state of audio usages in which a policy decision has been made to temporarily
2774/// lower the volume of all streams with this usage.
2775#[derive(Clone, Debug, Default, PartialEq)]
2776pub struct UsageStateDucked {
2777    #[doc(hidden)]
2778    pub __source_breaking: fidl::marker::SourceBreaking,
2779}
2780
2781impl fidl::Persistable for UsageStateDucked {}
2782
2783/// A state of audio usages in which a policy decision has been made to temporarily
2784/// mute the volume of all streams with this usage.
2785#[derive(Clone, Debug, Default, PartialEq)]
2786pub struct UsageStateMuted {
2787    #[doc(hidden)]
2788    pub __source_breaking: fidl::marker::SourceBreaking,
2789}
2790
2791impl fidl::Persistable for UsageStateMuted {}
2792
2793/// A state of audio usages in which no policy actions are taken on any streams with the usage.
2794#[derive(Clone, Debug, Default, PartialEq)]
2795pub struct UsageStateUnadjusted {
2796    #[doc(hidden)]
2797    pub __source_breaking: fidl::marker::SourceBreaking,
2798}
2799
2800impl fidl::Persistable for UsageStateUnadjusted {}
2801
2802#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2803pub enum AacBitRate {
2804    Constant(AacConstantBitRate),
2805    Variable(AacVariableBitRate),
2806}
2807
2808impl AacBitRate {
2809    #[inline]
2810    pub fn ordinal(&self) -> u64 {
2811        match *self {
2812            Self::Constant(_) => 1,
2813            Self::Variable(_) => 2,
2814        }
2815    }
2816}
2817
2818impl fidl::Persistable for AacBitRate {}
2819
2820#[derive(Clone, Debug)]
2821pub enum AacTransport {
2822    Raw(AacTransportRaw),
2823    Latm(AacTransportLatm),
2824    Adts(AacTransportAdts),
2825    #[doc(hidden)]
2826    __SourceBreaking {
2827        unknown_ordinal: u64,
2828    },
2829}
2830
2831/// Pattern that matches an unknown `AacTransport` member.
2832#[macro_export]
2833macro_rules! AacTransportUnknown {
2834    () => {
2835        _
2836    };
2837}
2838
2839// Custom PartialEq so that unknown variants are not equal to themselves.
2840impl PartialEq for AacTransport {
2841    fn eq(&self, other: &Self) -> bool {
2842        match (self, other) {
2843            (Self::Raw(x), Self::Raw(y)) => *x == *y,
2844            (Self::Latm(x), Self::Latm(y)) => *x == *y,
2845            (Self::Adts(x), Self::Adts(y)) => *x == *y,
2846            _ => false,
2847        }
2848    }
2849}
2850
2851impl AacTransport {
2852    #[inline]
2853    pub fn ordinal(&self) -> u64 {
2854        match *self {
2855            Self::Raw(_) => 1,
2856            Self::Latm(_) => 2,
2857            Self::Adts(_) => 3,
2858            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2859        }
2860    }
2861
2862    #[inline]
2863    pub fn unknown_variant_for_testing() -> Self {
2864        Self::__SourceBreaking { unknown_ordinal: 0 }
2865    }
2866
2867    #[inline]
2868    pub fn is_unknown(&self) -> bool {
2869        match self {
2870            Self::__SourceBreaking { .. } => true,
2871            _ => false,
2872        }
2873    }
2874}
2875
2876impl fidl::Persistable for AacTransport {}
2877
2878/// Configuration for an audio Capturer.
2879#[derive(Clone, Debug, PartialEq)]
2880pub enum AudioCapturerConfiguration {
2881    Loopback(LoopbackAudioCapturerConfiguration),
2882    Input(InputAudioCapturerConfiguration),
2883}
2884
2885impl AudioCapturerConfiguration {
2886    #[inline]
2887    pub fn ordinal(&self) -> u64 {
2888        match *self {
2889            Self::Loopback(_) => 1,
2890            Self::Input(_) => 2,
2891        }
2892    }
2893}
2894
2895impl fidl::Persistable for AudioCapturerConfiguration {}
2896
2897#[derive(Clone, Debug)]
2898pub enum AudioCompressedFormat {
2899    Aac(AudioCompressedFormatAac),
2900    Sbc(AudioCompressedFormatSbc),
2901    Cvsd(AudioCompressedFormatCvsd),
2902    Lc3(AudioCompressedFormatLc3),
2903    #[doc(hidden)]
2904    __SourceBreaking {
2905        unknown_ordinal: u64,
2906    },
2907}
2908
2909/// Pattern that matches an unknown `AudioCompressedFormat` member.
2910#[macro_export]
2911macro_rules! AudioCompressedFormatUnknown {
2912    () => {
2913        _
2914    };
2915}
2916
2917// Custom PartialEq so that unknown variants are not equal to themselves.
2918impl PartialEq for AudioCompressedFormat {
2919    fn eq(&self, other: &Self) -> bool {
2920        match (self, other) {
2921            (Self::Aac(x), Self::Aac(y)) => *x == *y,
2922            (Self::Sbc(x), Self::Sbc(y)) => *x == *y,
2923            (Self::Cvsd(x), Self::Cvsd(y)) => *x == *y,
2924            (Self::Lc3(x), Self::Lc3(y)) => *x == *y,
2925            _ => false,
2926        }
2927    }
2928}
2929
2930impl AudioCompressedFormat {
2931    #[inline]
2932    pub fn ordinal(&self) -> u64 {
2933        match *self {
2934            Self::Aac(_) => 1,
2935            Self::Sbc(_) => 2,
2936            Self::Cvsd(_) => 3,
2937            Self::Lc3(_) => 4,
2938            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2939        }
2940    }
2941
2942    #[inline]
2943    pub fn unknown_variant_for_testing() -> Self {
2944        Self::__SourceBreaking { unknown_ordinal: 0 }
2945    }
2946
2947    #[inline]
2948    pub fn is_unknown(&self) -> bool {
2949        match self {
2950            Self::__SourceBreaking { .. } => true,
2951            _ => false,
2952        }
2953    }
2954}
2955
2956impl fidl::Persistable for AudioCompressedFormat {}
2957
2958/// Represents a `AudioConsumer` error condition.
2959#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2960pub enum AudioConsumerError {
2961    PlaceHolder(Void),
2962}
2963
2964impl AudioConsumerError {
2965    #[inline]
2966    pub fn ordinal(&self) -> u64 {
2967        match *self {
2968            Self::PlaceHolder(_) => 1,
2969        }
2970    }
2971}
2972
2973impl fidl::Persistable for AudioConsumerError {}
2974
2975/// AudioFormat
2976#[derive(Clone, Debug, PartialEq)]
2977pub enum AudioFormat {
2978    Compressed(AudioCompressedFormat),
2979    Uncompressed(AudioUncompressedFormat),
2980}
2981
2982impl AudioFormat {
2983    #[inline]
2984    pub fn ordinal(&self) -> u64 {
2985        match *self {
2986            Self::Compressed(_) => 1,
2987            Self::Uncompressed(_) => 2,
2988        }
2989    }
2990}
2991
2992impl fidl::Persistable for AudioFormat {}
2993
2994/// AudioUncompressedFormat
2995#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2996pub enum AudioUncompressedFormat {
2997    Pcm(PcmFormat),
2998}
2999
3000impl AudioUncompressedFormat {
3001    #[inline]
3002    pub fn ordinal(&self) -> u64 {
3003        match *self {
3004            Self::Pcm(_) => 1,
3005        }
3006    }
3007}
3008
3009impl fidl::Persistable for AudioUncompressedFormat {}
3010
3011/// CryptoFormat
3012///
3013/// Crypto (encrypted or decrypted) format details.
3014#[derive(Clone, Debug)]
3015pub enum CryptoFormat {
3016    Encrypted(EncryptedFormat),
3017    Decrypted(DecryptedFormat),
3018    #[doc(hidden)]
3019    __SourceBreaking {
3020        unknown_ordinal: u64,
3021    },
3022}
3023
3024/// Pattern that matches an unknown `CryptoFormat` member.
3025#[macro_export]
3026macro_rules! CryptoFormatUnknown {
3027    () => {
3028        _
3029    };
3030}
3031
3032// Custom PartialEq so that unknown variants are not equal to themselves.
3033impl PartialEq for CryptoFormat {
3034    fn eq(&self, other: &Self) -> bool {
3035        match (self, other) {
3036            (Self::Encrypted(x), Self::Encrypted(y)) => *x == *y,
3037            (Self::Decrypted(x), Self::Decrypted(y)) => *x == *y,
3038            _ => false,
3039        }
3040    }
3041}
3042
3043impl CryptoFormat {
3044    #[inline]
3045    pub fn ordinal(&self) -> u64 {
3046        match *self {
3047            Self::Encrypted(_) => 1,
3048            Self::Decrypted(_) => 2,
3049            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3050        }
3051    }
3052
3053    #[inline]
3054    pub fn unknown_variant_for_testing() -> Self {
3055        Self::__SourceBreaking { unknown_ordinal: 0 }
3056    }
3057
3058    #[inline]
3059    pub fn is_unknown(&self) -> bool {
3060        match self {
3061            Self::__SourceBreaking { .. } => true,
3062            _ => false,
3063        }
3064    }
3065}
3066
3067impl fidl::Persistable for CryptoFormat {}
3068
3069/// DomainFormat
3070#[derive(Clone, Debug, PartialEq)]
3071pub enum DomainFormat {
3072    Audio(AudioFormat),
3073    Video(VideoFormat),
3074    Crypto(CryptoFormat),
3075}
3076
3077impl DomainFormat {
3078    #[inline]
3079    pub fn ordinal(&self) -> u64 {
3080        match *self {
3081            Self::Audio(_) => 1,
3082            Self::Video(_) => 2,
3083            Self::Crypto(_) => 3,
3084        }
3085    }
3086}
3087
3088impl fidl::Persistable for DomainFormat {}
3089
3090/// Settings for encoders that tell them how to encode raw
3091/// formats.
3092#[derive(Clone, Debug)]
3093pub enum EncoderSettings {
3094    Sbc(SbcEncoderSettings),
3095    Aac(AacEncoderSettings),
3096    H264(H264EncoderSettings),
3097    Hevc(HevcEncoderSettings),
3098    Cvsd(CvsdEncoderSettings),
3099    Lc3(Lc3EncoderSettings),
3100    Msbc(MSbcEncoderSettings),
3101    #[doc(hidden)]
3102    __SourceBreaking {
3103        unknown_ordinal: u64,
3104    },
3105}
3106
3107/// Pattern that matches an unknown `EncoderSettings` member.
3108#[macro_export]
3109macro_rules! EncoderSettingsUnknown {
3110    () => {
3111        _
3112    };
3113}
3114
3115// Custom PartialEq so that unknown variants are not equal to themselves.
3116impl PartialEq for EncoderSettings {
3117    fn eq(&self, other: &Self) -> bool {
3118        match (self, other) {
3119            (Self::Sbc(x), Self::Sbc(y)) => *x == *y,
3120            (Self::Aac(x), Self::Aac(y)) => *x == *y,
3121            (Self::H264(x), Self::H264(y)) => *x == *y,
3122            (Self::Hevc(x), Self::Hevc(y)) => *x == *y,
3123            (Self::Cvsd(x), Self::Cvsd(y)) => *x == *y,
3124            (Self::Lc3(x), Self::Lc3(y)) => *x == *y,
3125            (Self::Msbc(x), Self::Msbc(y)) => *x == *y,
3126            _ => false,
3127        }
3128    }
3129}
3130
3131impl EncoderSettings {
3132    #[inline]
3133    pub fn ordinal(&self) -> u64 {
3134        match *self {
3135            Self::Sbc(_) => 1,
3136            Self::Aac(_) => 2,
3137            Self::H264(_) => 3,
3138            Self::Hevc(_) => 4,
3139            Self::Cvsd(_) => 5,
3140            Self::Lc3(_) => 6,
3141            Self::Msbc(_) => 7,
3142            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3143        }
3144    }
3145
3146    #[inline]
3147    pub fn unknown_variant_for_testing() -> Self {
3148        Self::__SourceBreaking { unknown_ordinal: 0 }
3149    }
3150
3151    #[inline]
3152    pub fn is_unknown(&self) -> bool {
3153        match self {
3154            Self::__SourceBreaking { .. } => true,
3155            _ => false,
3156        }
3157    }
3158}
3159
3160impl fidl::Persistable for EncoderSettings {}
3161
3162/// A union of all medium-specific stream type structs.
3163#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3164pub enum MediumSpecificStreamType {
3165    Audio(AudioStreamType),
3166    Video(VideoStreamType),
3167    Text(TextStreamType),
3168    Subpicture(SubpictureStreamType),
3169}
3170
3171impl MediumSpecificStreamType {
3172    #[inline]
3173    pub fn ordinal(&self) -> u64 {
3174        match *self {
3175            Self::Audio(_) => 1,
3176            Self::Video(_) => 2,
3177            Self::Text(_) => 3,
3178            Self::Subpicture(_) => 4,
3179        }
3180    }
3181}
3182
3183impl fidl::Persistable for MediumSpecificStreamType {}
3184
3185#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3186pub enum Usage {
3187    RenderUsage(AudioRenderUsage),
3188    CaptureUsage(AudioCaptureUsage),
3189}
3190
3191impl Usage {
3192    #[inline]
3193    pub fn ordinal(&self) -> u64 {
3194        match *self {
3195            Self::RenderUsage(_) => 1,
3196            Self::CaptureUsage(_) => 2,
3197        }
3198    }
3199}
3200
3201impl fidl::Persistable for Usage {}
3202
3203#[derive(Clone, Debug)]
3204pub enum Usage2 {
3205    RenderUsage(AudioRenderUsage2),
3206    CaptureUsage(AudioCaptureUsage2),
3207    #[doc(hidden)]
3208    __SourceBreaking {
3209        unknown_ordinal: u64,
3210    },
3211}
3212
3213/// Pattern that matches an unknown `Usage2` member.
3214#[macro_export]
3215macro_rules! Usage2Unknown {
3216    () => {
3217        _
3218    };
3219}
3220
3221// Custom PartialEq so that unknown variants are not equal to themselves.
3222impl PartialEq for Usage2 {
3223    fn eq(&self, other: &Self) -> bool {
3224        match (self, other) {
3225            (Self::RenderUsage(x), Self::RenderUsage(y)) => *x == *y,
3226            (Self::CaptureUsage(x), Self::CaptureUsage(y)) => *x == *y,
3227            _ => false,
3228        }
3229    }
3230}
3231
3232impl Usage2 {
3233    #[inline]
3234    pub fn ordinal(&self) -> u64 {
3235        match *self {
3236            Self::RenderUsage(_) => 1,
3237            Self::CaptureUsage(_) => 2,
3238            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3239        }
3240    }
3241
3242    #[inline]
3243    pub fn unknown_variant_for_testing() -> Self {
3244        Self::__SourceBreaking { unknown_ordinal: 0 }
3245    }
3246
3247    #[inline]
3248    pub fn is_unknown(&self) -> bool {
3249        match self {
3250            Self::__SourceBreaking { .. } => true,
3251            _ => false,
3252        }
3253    }
3254}
3255
3256impl fidl::Persistable for Usage2 {}
3257
3258/// The state of audio policy enforcement on a stream or set of streams.
3259#[derive(Clone, Debug)]
3260pub enum UsageState {
3261    Unadjusted(UsageStateUnadjusted),
3262    Ducked(UsageStateDucked),
3263    Muted(UsageStateMuted),
3264    #[doc(hidden)]
3265    __SourceBreaking {
3266        unknown_ordinal: u64,
3267    },
3268}
3269
3270/// Pattern that matches an unknown `UsageState` member.
3271#[macro_export]
3272macro_rules! UsageStateUnknown {
3273    () => {
3274        _
3275    };
3276}
3277
3278// Custom PartialEq so that unknown variants are not equal to themselves.
3279impl PartialEq for UsageState {
3280    fn eq(&self, other: &Self) -> bool {
3281        match (self, other) {
3282            (Self::Unadjusted(x), Self::Unadjusted(y)) => *x == *y,
3283            (Self::Ducked(x), Self::Ducked(y)) => *x == *y,
3284            (Self::Muted(x), Self::Muted(y)) => *x == *y,
3285            _ => false,
3286        }
3287    }
3288}
3289
3290impl UsageState {
3291    #[inline]
3292    pub fn ordinal(&self) -> u64 {
3293        match *self {
3294            Self::Unadjusted(_) => 1,
3295            Self::Ducked(_) => 2,
3296            Self::Muted(_) => 3,
3297            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3298        }
3299    }
3300
3301    #[inline]
3302    pub fn unknown_variant_for_testing() -> Self {
3303        Self::__SourceBreaking { unknown_ordinal: 0 }
3304    }
3305
3306    #[inline]
3307    pub fn is_unknown(&self) -> bool {
3308        match self {
3309            Self::__SourceBreaking { .. } => true,
3310            _ => false,
3311        }
3312    }
3313}
3314
3315impl fidl::Persistable for UsageState {}
3316
3317/// Value
3318///
3319/// Generic "value" for use within generic "Parameter" struct.
3320#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3321pub enum Value {
3322    BoolValue(bool),
3323    Uint64Value(u64),
3324    Int64Value(i64),
3325    StringValue(String),
3326    BytesValue(Vec<u8>),
3327}
3328
3329impl Value {
3330    #[inline]
3331    pub fn ordinal(&self) -> u64 {
3332        match *self {
3333            Self::BoolValue(_) => 1,
3334            Self::Uint64Value(_) => 2,
3335            Self::Int64Value(_) => 3,
3336            Self::StringValue(_) => 4,
3337            Self::BytesValue(_) => 5,
3338        }
3339    }
3340}
3341
3342impl fidl::Persistable for Value {}
3343
3344/// VideoCompressedFormat
3345///
3346/// Compressed video format details.
3347#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3348pub enum VideoCompressedFormat {
3349    TempFieldTodoRemove(u32),
3350}
3351
3352impl VideoCompressedFormat {
3353    #[inline]
3354    pub fn ordinal(&self) -> u64 {
3355        match *self {
3356            Self::TempFieldTodoRemove(_) => 1,
3357        }
3358    }
3359}
3360
3361impl fidl::Persistable for VideoCompressedFormat {}
3362
3363/// VideoFormat
3364///
3365/// Video (compress or uncompressed) format details.  In this context,
3366/// "uncompressed" can include block-based image compression formats that still
3367/// permit fairly fast random access to image data.
3368#[derive(Clone, Debug, PartialEq)]
3369pub enum VideoFormat {
3370    Compressed(VideoCompressedFormat),
3371    Uncompressed(VideoUncompressedFormat),
3372}
3373
3374impl VideoFormat {
3375    #[inline]
3376    pub fn ordinal(&self) -> u64 {
3377        match *self {
3378            Self::Compressed(_) => 1,
3379            Self::Uncompressed(_) => 2,
3380        }
3381    }
3382}
3383
3384impl fidl::Persistable for VideoFormat {}
3385
3386mod internal {
3387    use super::*;
3388    unsafe impl fidl::encoding::TypeMarker for AudioConsumerStartFlags {
3389        type Owned = Self;
3390
3391        #[inline(always)]
3392        fn inline_align(_context: fidl::encoding::Context) -> usize {
3393            4
3394        }
3395
3396        #[inline(always)]
3397        fn inline_size(_context: fidl::encoding::Context) -> usize {
3398            4
3399        }
3400    }
3401
3402    impl fidl::encoding::ValueTypeMarker for AudioConsumerStartFlags {
3403        type Borrowed<'a> = Self;
3404        #[inline(always)]
3405        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3406            *value
3407        }
3408    }
3409
3410    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3411        for AudioConsumerStartFlags
3412    {
3413        #[inline]
3414        unsafe fn encode(
3415            self,
3416            encoder: &mut fidl::encoding::Encoder<'_, D>,
3417            offset: usize,
3418            _depth: fidl::encoding::Depth,
3419        ) -> fidl::Result<()> {
3420            encoder.debug_check_bounds::<Self>(offset);
3421            if self.bits() & Self::all().bits() != self.bits() {
3422                return Err(fidl::Error::InvalidBitsValue);
3423            }
3424            encoder.write_num(self.bits(), offset);
3425            Ok(())
3426        }
3427    }
3428
3429    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3430        for AudioConsumerStartFlags
3431    {
3432        #[inline(always)]
3433        fn new_empty() -> Self {
3434            Self::empty()
3435        }
3436
3437        #[inline]
3438        unsafe fn decode(
3439            &mut self,
3440            decoder: &mut fidl::encoding::Decoder<'_, D>,
3441            offset: usize,
3442            _depth: fidl::encoding::Depth,
3443        ) -> fidl::Result<()> {
3444            decoder.debug_check_bounds::<Self>(offset);
3445            let prim = decoder.read_num::<u32>(offset);
3446            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
3447            Ok(())
3448        }
3449    }
3450    unsafe impl fidl::encoding::TypeMarker for AudioGainInfoFlags {
3451        type Owned = Self;
3452
3453        #[inline(always)]
3454        fn inline_align(_context: fidl::encoding::Context) -> usize {
3455            4
3456        }
3457
3458        #[inline(always)]
3459        fn inline_size(_context: fidl::encoding::Context) -> usize {
3460            4
3461        }
3462    }
3463
3464    impl fidl::encoding::ValueTypeMarker for AudioGainInfoFlags {
3465        type Borrowed<'a> = Self;
3466        #[inline(always)]
3467        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3468            *value
3469        }
3470    }
3471
3472    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3473        for AudioGainInfoFlags
3474    {
3475        #[inline]
3476        unsafe fn encode(
3477            self,
3478            encoder: &mut fidl::encoding::Encoder<'_, D>,
3479            offset: usize,
3480            _depth: fidl::encoding::Depth,
3481        ) -> fidl::Result<()> {
3482            encoder.debug_check_bounds::<Self>(offset);
3483            if self.bits() & Self::all().bits() != self.bits() {
3484                return Err(fidl::Error::InvalidBitsValue);
3485            }
3486            encoder.write_num(self.bits(), offset);
3487            Ok(())
3488        }
3489    }
3490
3491    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioGainInfoFlags {
3492        #[inline(always)]
3493        fn new_empty() -> Self {
3494            Self::empty()
3495        }
3496
3497        #[inline]
3498        unsafe fn decode(
3499            &mut self,
3500            decoder: &mut fidl::encoding::Decoder<'_, D>,
3501            offset: usize,
3502            _depth: fidl::encoding::Depth,
3503        ) -> fidl::Result<()> {
3504            decoder.debug_check_bounds::<Self>(offset);
3505            let prim = decoder.read_num::<u32>(offset);
3506            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
3507            Ok(())
3508        }
3509    }
3510    unsafe impl fidl::encoding::TypeMarker for AudioGainValidFlags {
3511        type Owned = Self;
3512
3513        #[inline(always)]
3514        fn inline_align(_context: fidl::encoding::Context) -> usize {
3515            4
3516        }
3517
3518        #[inline(always)]
3519        fn inline_size(_context: fidl::encoding::Context) -> usize {
3520            4
3521        }
3522    }
3523
3524    impl fidl::encoding::ValueTypeMarker for AudioGainValidFlags {
3525        type Borrowed<'a> = Self;
3526        #[inline(always)]
3527        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3528            *value
3529        }
3530    }
3531
3532    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3533        for AudioGainValidFlags
3534    {
3535        #[inline]
3536        unsafe fn encode(
3537            self,
3538            encoder: &mut fidl::encoding::Encoder<'_, D>,
3539            offset: usize,
3540            _depth: fidl::encoding::Depth,
3541        ) -> fidl::Result<()> {
3542            encoder.debug_check_bounds::<Self>(offset);
3543            if self.bits() & Self::all().bits() != self.bits() {
3544                return Err(fidl::Error::InvalidBitsValue);
3545            }
3546            encoder.write_num(self.bits(), offset);
3547            Ok(())
3548        }
3549    }
3550
3551    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioGainValidFlags {
3552        #[inline(always)]
3553        fn new_empty() -> Self {
3554            Self::empty()
3555        }
3556
3557        #[inline]
3558        unsafe fn decode(
3559            &mut self,
3560            decoder: &mut fidl::encoding::Decoder<'_, D>,
3561            offset: usize,
3562            _depth: fidl::encoding::Depth,
3563        ) -> fidl::Result<()> {
3564            decoder.debug_check_bounds::<Self>(offset);
3565            let prim = decoder.read_num::<u32>(offset);
3566            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
3567            Ok(())
3568        }
3569    }
3570    unsafe impl fidl::encoding::TypeMarker for AacAudioObjectType {
3571        type Owned = Self;
3572
3573        #[inline(always)]
3574        fn inline_align(_context: fidl::encoding::Context) -> usize {
3575            std::mem::align_of::<u32>()
3576        }
3577
3578        #[inline(always)]
3579        fn inline_size(_context: fidl::encoding::Context) -> usize {
3580            std::mem::size_of::<u32>()
3581        }
3582
3583        #[inline(always)]
3584        fn encode_is_copy() -> bool {
3585            true
3586        }
3587
3588        #[inline(always)]
3589        fn decode_is_copy() -> bool {
3590            false
3591        }
3592    }
3593
3594    impl fidl::encoding::ValueTypeMarker for AacAudioObjectType {
3595        type Borrowed<'a> = Self;
3596        #[inline(always)]
3597        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3598            *value
3599        }
3600    }
3601
3602    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3603        for AacAudioObjectType
3604    {
3605        #[inline]
3606        unsafe fn encode(
3607            self,
3608            encoder: &mut fidl::encoding::Encoder<'_, D>,
3609            offset: usize,
3610            _depth: fidl::encoding::Depth,
3611        ) -> fidl::Result<()> {
3612            encoder.debug_check_bounds::<Self>(offset);
3613            encoder.write_num(self.into_primitive(), offset);
3614            Ok(())
3615        }
3616    }
3617
3618    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacAudioObjectType {
3619        #[inline(always)]
3620        fn new_empty() -> Self {
3621            Self::Mpeg2AacLc
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            let prim = decoder.read_num::<u32>(offset);
3633
3634            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3635            Ok(())
3636        }
3637    }
3638    unsafe impl fidl::encoding::TypeMarker for AacChannelMode {
3639        type Owned = Self;
3640
3641        #[inline(always)]
3642        fn inline_align(_context: fidl::encoding::Context) -> usize {
3643            std::mem::align_of::<u32>()
3644        }
3645
3646        #[inline(always)]
3647        fn inline_size(_context: fidl::encoding::Context) -> usize {
3648            std::mem::size_of::<u32>()
3649        }
3650
3651        #[inline(always)]
3652        fn encode_is_copy() -> bool {
3653            true
3654        }
3655
3656        #[inline(always)]
3657        fn decode_is_copy() -> bool {
3658            false
3659        }
3660    }
3661
3662    impl fidl::encoding::ValueTypeMarker for AacChannelMode {
3663        type Borrowed<'a> = Self;
3664        #[inline(always)]
3665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3666            *value
3667        }
3668    }
3669
3670    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AacChannelMode {
3671        #[inline]
3672        unsafe fn encode(
3673            self,
3674            encoder: &mut fidl::encoding::Encoder<'_, D>,
3675            offset: usize,
3676            _depth: fidl::encoding::Depth,
3677        ) -> fidl::Result<()> {
3678            encoder.debug_check_bounds::<Self>(offset);
3679            encoder.write_num(self.into_primitive(), offset);
3680            Ok(())
3681        }
3682    }
3683
3684    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacChannelMode {
3685        #[inline(always)]
3686        fn new_empty() -> Self {
3687            Self::Mono
3688        }
3689
3690        #[inline]
3691        unsafe fn decode(
3692            &mut self,
3693            decoder: &mut fidl::encoding::Decoder<'_, D>,
3694            offset: usize,
3695            _depth: fidl::encoding::Depth,
3696        ) -> fidl::Result<()> {
3697            decoder.debug_check_bounds::<Self>(offset);
3698            let prim = decoder.read_num::<u32>(offset);
3699
3700            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3701            Ok(())
3702        }
3703    }
3704    unsafe impl fidl::encoding::TypeMarker for AacVariableBitRate {
3705        type Owned = Self;
3706
3707        #[inline(always)]
3708        fn inline_align(_context: fidl::encoding::Context) -> usize {
3709            std::mem::align_of::<u32>()
3710        }
3711
3712        #[inline(always)]
3713        fn inline_size(_context: fidl::encoding::Context) -> usize {
3714            std::mem::size_of::<u32>()
3715        }
3716
3717        #[inline(always)]
3718        fn encode_is_copy() -> bool {
3719            true
3720        }
3721
3722        #[inline(always)]
3723        fn decode_is_copy() -> bool {
3724            false
3725        }
3726    }
3727
3728    impl fidl::encoding::ValueTypeMarker for AacVariableBitRate {
3729        type Borrowed<'a> = Self;
3730        #[inline(always)]
3731        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3732            *value
3733        }
3734    }
3735
3736    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3737        for AacVariableBitRate
3738    {
3739        #[inline]
3740        unsafe fn encode(
3741            self,
3742            encoder: &mut fidl::encoding::Encoder<'_, D>,
3743            offset: usize,
3744            _depth: fidl::encoding::Depth,
3745        ) -> fidl::Result<()> {
3746            encoder.debug_check_bounds::<Self>(offset);
3747            encoder.write_num(self.into_primitive(), offset);
3748            Ok(())
3749        }
3750    }
3751
3752    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacVariableBitRate {
3753        #[inline(always)]
3754        fn new_empty() -> Self {
3755            Self::V1
3756        }
3757
3758        #[inline]
3759        unsafe fn decode(
3760            &mut self,
3761            decoder: &mut fidl::encoding::Decoder<'_, D>,
3762            offset: usize,
3763            _depth: fidl::encoding::Depth,
3764        ) -> fidl::Result<()> {
3765            decoder.debug_check_bounds::<Self>(offset);
3766            let prim = decoder.read_num::<u32>(offset);
3767
3768            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3769            Ok(())
3770        }
3771    }
3772    unsafe impl fidl::encoding::TypeMarker for AudioBitrateMode {
3773        type Owned = Self;
3774
3775        #[inline(always)]
3776        fn inline_align(_context: fidl::encoding::Context) -> usize {
3777            std::mem::align_of::<u32>()
3778        }
3779
3780        #[inline(always)]
3781        fn inline_size(_context: fidl::encoding::Context) -> usize {
3782            std::mem::size_of::<u32>()
3783        }
3784
3785        #[inline(always)]
3786        fn encode_is_copy() -> bool {
3787            true
3788        }
3789
3790        #[inline(always)]
3791        fn decode_is_copy() -> bool {
3792            false
3793        }
3794    }
3795
3796    impl fidl::encoding::ValueTypeMarker for AudioBitrateMode {
3797        type Borrowed<'a> = Self;
3798        #[inline(always)]
3799        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3800            *value
3801        }
3802    }
3803
3804    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3805        for AudioBitrateMode
3806    {
3807        #[inline]
3808        unsafe fn encode(
3809            self,
3810            encoder: &mut fidl::encoding::Encoder<'_, D>,
3811            offset: usize,
3812            _depth: fidl::encoding::Depth,
3813        ) -> fidl::Result<()> {
3814            encoder.debug_check_bounds::<Self>(offset);
3815            encoder.write_num(self.into_primitive(), offset);
3816            Ok(())
3817        }
3818    }
3819
3820    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioBitrateMode {
3821        #[inline(always)]
3822        fn new_empty() -> Self {
3823            Self::Unspecified
3824        }
3825
3826        #[inline]
3827        unsafe fn decode(
3828            &mut self,
3829            decoder: &mut fidl::encoding::Decoder<'_, D>,
3830            offset: usize,
3831            _depth: fidl::encoding::Depth,
3832        ) -> fidl::Result<()> {
3833            decoder.debug_check_bounds::<Self>(offset);
3834            let prim = decoder.read_num::<u32>(offset);
3835
3836            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3837            Ok(())
3838        }
3839    }
3840    unsafe impl fidl::encoding::TypeMarker for AudioCaptureUsage {
3841        type Owned = Self;
3842
3843        #[inline(always)]
3844        fn inline_align(_context: fidl::encoding::Context) -> usize {
3845            std::mem::align_of::<u32>()
3846        }
3847
3848        #[inline(always)]
3849        fn inline_size(_context: fidl::encoding::Context) -> usize {
3850            std::mem::size_of::<u32>()
3851        }
3852
3853        #[inline(always)]
3854        fn encode_is_copy() -> bool {
3855            true
3856        }
3857
3858        #[inline(always)]
3859        fn decode_is_copy() -> bool {
3860            false
3861        }
3862    }
3863
3864    impl fidl::encoding::ValueTypeMarker for AudioCaptureUsage {
3865        type Borrowed<'a> = Self;
3866        #[inline(always)]
3867        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3868            *value
3869        }
3870    }
3871
3872    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3873        for AudioCaptureUsage
3874    {
3875        #[inline]
3876        unsafe fn encode(
3877            self,
3878            encoder: &mut fidl::encoding::Encoder<'_, D>,
3879            offset: usize,
3880            _depth: fidl::encoding::Depth,
3881        ) -> fidl::Result<()> {
3882            encoder.debug_check_bounds::<Self>(offset);
3883            encoder.write_num(self.into_primitive(), offset);
3884            Ok(())
3885        }
3886    }
3887
3888    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioCaptureUsage {
3889        #[inline(always)]
3890        fn new_empty() -> Self {
3891            Self::Background
3892        }
3893
3894        #[inline]
3895        unsafe fn decode(
3896            &mut self,
3897            decoder: &mut fidl::encoding::Decoder<'_, D>,
3898            offset: usize,
3899            _depth: fidl::encoding::Depth,
3900        ) -> fidl::Result<()> {
3901            decoder.debug_check_bounds::<Self>(offset);
3902            let prim = decoder.read_num::<u32>(offset);
3903
3904            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3905            Ok(())
3906        }
3907    }
3908    unsafe impl fidl::encoding::TypeMarker for AudioCaptureUsage2 {
3909        type Owned = Self;
3910
3911        #[inline(always)]
3912        fn inline_align(_context: fidl::encoding::Context) -> usize {
3913            std::mem::align_of::<u32>()
3914        }
3915
3916        #[inline(always)]
3917        fn inline_size(_context: fidl::encoding::Context) -> usize {
3918            std::mem::size_of::<u32>()
3919        }
3920
3921        #[inline(always)]
3922        fn encode_is_copy() -> bool {
3923            false
3924        }
3925
3926        #[inline(always)]
3927        fn decode_is_copy() -> bool {
3928            false
3929        }
3930    }
3931
3932    impl fidl::encoding::ValueTypeMarker for AudioCaptureUsage2 {
3933        type Borrowed<'a> = Self;
3934        #[inline(always)]
3935        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3936            *value
3937        }
3938    }
3939
3940    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3941        for AudioCaptureUsage2
3942    {
3943        #[inline]
3944        unsafe fn encode(
3945            self,
3946            encoder: &mut fidl::encoding::Encoder<'_, D>,
3947            offset: usize,
3948            _depth: fidl::encoding::Depth,
3949        ) -> fidl::Result<()> {
3950            encoder.debug_check_bounds::<Self>(offset);
3951            encoder.write_num(self.into_primitive(), offset);
3952            Ok(())
3953        }
3954    }
3955
3956    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioCaptureUsage2 {
3957        #[inline(always)]
3958        fn new_empty() -> Self {
3959            Self::unknown()
3960        }
3961
3962        #[inline]
3963        unsafe fn decode(
3964            &mut self,
3965            decoder: &mut fidl::encoding::Decoder<'_, D>,
3966            offset: usize,
3967            _depth: fidl::encoding::Depth,
3968        ) -> fidl::Result<()> {
3969            decoder.debug_check_bounds::<Self>(offset);
3970            let prim = decoder.read_num::<u32>(offset);
3971
3972            *self = Self::from_primitive_allow_unknown(prim);
3973            Ok(())
3974        }
3975    }
3976    unsafe impl fidl::encoding::TypeMarker for AudioChannelId {
3977        type Owned = Self;
3978
3979        #[inline(always)]
3980        fn inline_align(_context: fidl::encoding::Context) -> usize {
3981            std::mem::align_of::<u32>()
3982        }
3983
3984        #[inline(always)]
3985        fn inline_size(_context: fidl::encoding::Context) -> usize {
3986            std::mem::size_of::<u32>()
3987        }
3988
3989        #[inline(always)]
3990        fn encode_is_copy() -> bool {
3991            true
3992        }
3993
3994        #[inline(always)]
3995        fn decode_is_copy() -> bool {
3996            false
3997        }
3998    }
3999
4000    impl fidl::encoding::ValueTypeMarker for AudioChannelId {
4001        type Borrowed<'a> = Self;
4002        #[inline(always)]
4003        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4004            *value
4005        }
4006    }
4007
4008    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AudioChannelId {
4009        #[inline]
4010        unsafe fn encode(
4011            self,
4012            encoder: &mut fidl::encoding::Encoder<'_, D>,
4013            offset: usize,
4014            _depth: fidl::encoding::Depth,
4015        ) -> fidl::Result<()> {
4016            encoder.debug_check_bounds::<Self>(offset);
4017            encoder.write_num(self.into_primitive(), offset);
4018            Ok(())
4019        }
4020    }
4021
4022    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioChannelId {
4023        #[inline(always)]
4024        fn new_empty() -> Self {
4025            Self::Skip
4026        }
4027
4028        #[inline]
4029        unsafe fn decode(
4030            &mut self,
4031            decoder: &mut fidl::encoding::Decoder<'_, D>,
4032            offset: usize,
4033            _depth: fidl::encoding::Depth,
4034        ) -> fidl::Result<()> {
4035            decoder.debug_check_bounds::<Self>(offset);
4036            let prim = decoder.read_num::<u32>(offset);
4037
4038            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4039            Ok(())
4040        }
4041    }
4042    unsafe impl fidl::encoding::TypeMarker for AudioOutputRoutingPolicy {
4043        type Owned = Self;
4044
4045        #[inline(always)]
4046        fn inline_align(_context: fidl::encoding::Context) -> usize {
4047            std::mem::align_of::<u32>()
4048        }
4049
4050        #[inline(always)]
4051        fn inline_size(_context: fidl::encoding::Context) -> usize {
4052            std::mem::size_of::<u32>()
4053        }
4054
4055        #[inline(always)]
4056        fn encode_is_copy() -> bool {
4057            true
4058        }
4059
4060        #[inline(always)]
4061        fn decode_is_copy() -> bool {
4062            false
4063        }
4064    }
4065
4066    impl fidl::encoding::ValueTypeMarker for AudioOutputRoutingPolicy {
4067        type Borrowed<'a> = Self;
4068        #[inline(always)]
4069        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4070            *value
4071        }
4072    }
4073
4074    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4075        for AudioOutputRoutingPolicy
4076    {
4077        #[inline]
4078        unsafe fn encode(
4079            self,
4080            encoder: &mut fidl::encoding::Encoder<'_, D>,
4081            offset: usize,
4082            _depth: fidl::encoding::Depth,
4083        ) -> fidl::Result<()> {
4084            encoder.debug_check_bounds::<Self>(offset);
4085            encoder.write_num(self.into_primitive(), offset);
4086            Ok(())
4087        }
4088    }
4089
4090    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4091        for AudioOutputRoutingPolicy
4092    {
4093        #[inline(always)]
4094        fn new_empty() -> Self {
4095            Self::AllPluggedOutputs
4096        }
4097
4098        #[inline]
4099        unsafe fn decode(
4100            &mut self,
4101            decoder: &mut fidl::encoding::Decoder<'_, D>,
4102            offset: usize,
4103            _depth: fidl::encoding::Depth,
4104        ) -> fidl::Result<()> {
4105            decoder.debug_check_bounds::<Self>(offset);
4106            let prim = decoder.read_num::<u32>(offset);
4107
4108            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4109            Ok(())
4110        }
4111    }
4112    unsafe impl fidl::encoding::TypeMarker for AudioPcmMode {
4113        type Owned = Self;
4114
4115        #[inline(always)]
4116        fn inline_align(_context: fidl::encoding::Context) -> usize {
4117            std::mem::align_of::<u32>()
4118        }
4119
4120        #[inline(always)]
4121        fn inline_size(_context: fidl::encoding::Context) -> usize {
4122            std::mem::size_of::<u32>()
4123        }
4124
4125        #[inline(always)]
4126        fn encode_is_copy() -> bool {
4127            true
4128        }
4129
4130        #[inline(always)]
4131        fn decode_is_copy() -> bool {
4132            false
4133        }
4134    }
4135
4136    impl fidl::encoding::ValueTypeMarker for AudioPcmMode {
4137        type Borrowed<'a> = Self;
4138        #[inline(always)]
4139        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4140            *value
4141        }
4142    }
4143
4144    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AudioPcmMode {
4145        #[inline]
4146        unsafe fn encode(
4147            self,
4148            encoder: &mut fidl::encoding::Encoder<'_, D>,
4149            offset: usize,
4150            _depth: fidl::encoding::Depth,
4151        ) -> fidl::Result<()> {
4152            encoder.debug_check_bounds::<Self>(offset);
4153            encoder.write_num(self.into_primitive(), offset);
4154            Ok(())
4155        }
4156    }
4157
4158    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioPcmMode {
4159        #[inline(always)]
4160        fn new_empty() -> Self {
4161            Self::Linear
4162        }
4163
4164        #[inline]
4165        unsafe fn decode(
4166            &mut self,
4167            decoder: &mut fidl::encoding::Decoder<'_, D>,
4168            offset: usize,
4169            _depth: fidl::encoding::Depth,
4170        ) -> fidl::Result<()> {
4171            decoder.debug_check_bounds::<Self>(offset);
4172            let prim = decoder.read_num::<u32>(offset);
4173
4174            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4175            Ok(())
4176        }
4177    }
4178    unsafe impl fidl::encoding::TypeMarker for AudioRenderUsage {
4179        type Owned = Self;
4180
4181        #[inline(always)]
4182        fn inline_align(_context: fidl::encoding::Context) -> usize {
4183            std::mem::align_of::<u32>()
4184        }
4185
4186        #[inline(always)]
4187        fn inline_size(_context: fidl::encoding::Context) -> usize {
4188            std::mem::size_of::<u32>()
4189        }
4190
4191        #[inline(always)]
4192        fn encode_is_copy() -> bool {
4193            true
4194        }
4195
4196        #[inline(always)]
4197        fn decode_is_copy() -> bool {
4198            false
4199        }
4200    }
4201
4202    impl fidl::encoding::ValueTypeMarker for AudioRenderUsage {
4203        type Borrowed<'a> = Self;
4204        #[inline(always)]
4205        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4206            *value
4207        }
4208    }
4209
4210    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4211        for AudioRenderUsage
4212    {
4213        #[inline]
4214        unsafe fn encode(
4215            self,
4216            encoder: &mut fidl::encoding::Encoder<'_, D>,
4217            offset: usize,
4218            _depth: fidl::encoding::Depth,
4219        ) -> fidl::Result<()> {
4220            encoder.debug_check_bounds::<Self>(offset);
4221            encoder.write_num(self.into_primitive(), offset);
4222            Ok(())
4223        }
4224    }
4225
4226    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioRenderUsage {
4227        #[inline(always)]
4228        fn new_empty() -> Self {
4229            Self::Background
4230        }
4231
4232        #[inline]
4233        unsafe fn decode(
4234            &mut self,
4235            decoder: &mut fidl::encoding::Decoder<'_, D>,
4236            offset: usize,
4237            _depth: fidl::encoding::Depth,
4238        ) -> fidl::Result<()> {
4239            decoder.debug_check_bounds::<Self>(offset);
4240            let prim = decoder.read_num::<u32>(offset);
4241
4242            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4243            Ok(())
4244        }
4245    }
4246    unsafe impl fidl::encoding::TypeMarker for AudioRenderUsage2 {
4247        type Owned = Self;
4248
4249        #[inline(always)]
4250        fn inline_align(_context: fidl::encoding::Context) -> usize {
4251            std::mem::align_of::<u32>()
4252        }
4253
4254        #[inline(always)]
4255        fn inline_size(_context: fidl::encoding::Context) -> usize {
4256            std::mem::size_of::<u32>()
4257        }
4258
4259        #[inline(always)]
4260        fn encode_is_copy() -> bool {
4261            false
4262        }
4263
4264        #[inline(always)]
4265        fn decode_is_copy() -> bool {
4266            false
4267        }
4268    }
4269
4270    impl fidl::encoding::ValueTypeMarker for AudioRenderUsage2 {
4271        type Borrowed<'a> = Self;
4272        #[inline(always)]
4273        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4274            *value
4275        }
4276    }
4277
4278    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4279        for AudioRenderUsage2
4280    {
4281        #[inline]
4282        unsafe fn encode(
4283            self,
4284            encoder: &mut fidl::encoding::Encoder<'_, D>,
4285            offset: usize,
4286            _depth: fidl::encoding::Depth,
4287        ) -> fidl::Result<()> {
4288            encoder.debug_check_bounds::<Self>(offset);
4289            encoder.write_num(self.into_primitive(), offset);
4290            Ok(())
4291        }
4292    }
4293
4294    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioRenderUsage2 {
4295        #[inline(always)]
4296        fn new_empty() -> Self {
4297            Self::unknown()
4298        }
4299
4300        #[inline]
4301        unsafe fn decode(
4302            &mut self,
4303            decoder: &mut fidl::encoding::Decoder<'_, D>,
4304            offset: usize,
4305            _depth: fidl::encoding::Depth,
4306        ) -> fidl::Result<()> {
4307            decoder.debug_check_bounds::<Self>(offset);
4308            let prim = decoder.read_num::<u32>(offset);
4309
4310            *self = Self::from_primitive_allow_unknown(prim);
4311            Ok(())
4312        }
4313    }
4314    unsafe impl fidl::encoding::TypeMarker for AudioSampleFormat {
4315        type Owned = Self;
4316
4317        #[inline(always)]
4318        fn inline_align(_context: fidl::encoding::Context) -> usize {
4319            std::mem::align_of::<u32>()
4320        }
4321
4322        #[inline(always)]
4323        fn inline_size(_context: fidl::encoding::Context) -> usize {
4324            std::mem::size_of::<u32>()
4325        }
4326
4327        #[inline(always)]
4328        fn encode_is_copy() -> bool {
4329            true
4330        }
4331
4332        #[inline(always)]
4333        fn decode_is_copy() -> bool {
4334            false
4335        }
4336    }
4337
4338    impl fidl::encoding::ValueTypeMarker for AudioSampleFormat {
4339        type Borrowed<'a> = Self;
4340        #[inline(always)]
4341        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4342            *value
4343        }
4344    }
4345
4346    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4347        for AudioSampleFormat
4348    {
4349        #[inline]
4350        unsafe fn encode(
4351            self,
4352            encoder: &mut fidl::encoding::Encoder<'_, D>,
4353            offset: usize,
4354            _depth: fidl::encoding::Depth,
4355        ) -> fidl::Result<()> {
4356            encoder.debug_check_bounds::<Self>(offset);
4357            encoder.write_num(self.into_primitive(), offset);
4358            Ok(())
4359        }
4360    }
4361
4362    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioSampleFormat {
4363        #[inline(always)]
4364        fn new_empty() -> Self {
4365            Self::Unsigned8
4366        }
4367
4368        #[inline]
4369        unsafe fn decode(
4370            &mut self,
4371            decoder: &mut fidl::encoding::Decoder<'_, D>,
4372            offset: usize,
4373            _depth: fidl::encoding::Depth,
4374        ) -> fidl::Result<()> {
4375            decoder.debug_check_bounds::<Self>(offset);
4376            let prim = decoder.read_num::<u32>(offset);
4377
4378            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4379            Ok(())
4380        }
4381    }
4382    unsafe impl fidl::encoding::TypeMarker for Behavior {
4383        type Owned = Self;
4384
4385        #[inline(always)]
4386        fn inline_align(_context: fidl::encoding::Context) -> usize {
4387            std::mem::align_of::<u32>()
4388        }
4389
4390        #[inline(always)]
4391        fn inline_size(_context: fidl::encoding::Context) -> usize {
4392            std::mem::size_of::<u32>()
4393        }
4394
4395        #[inline(always)]
4396        fn encode_is_copy() -> bool {
4397            false
4398        }
4399
4400        #[inline(always)]
4401        fn decode_is_copy() -> bool {
4402            false
4403        }
4404    }
4405
4406    impl fidl::encoding::ValueTypeMarker for Behavior {
4407        type Borrowed<'a> = Self;
4408        #[inline(always)]
4409        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4410            *value
4411        }
4412    }
4413
4414    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Behavior {
4415        #[inline]
4416        unsafe fn encode(
4417            self,
4418            encoder: &mut fidl::encoding::Encoder<'_, D>,
4419            offset: usize,
4420            _depth: fidl::encoding::Depth,
4421        ) -> fidl::Result<()> {
4422            encoder.debug_check_bounds::<Self>(offset);
4423            encoder.write_num(self.into_primitive(), offset);
4424            Ok(())
4425        }
4426    }
4427
4428    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Behavior {
4429        #[inline(always)]
4430        fn new_empty() -> Self {
4431            Self::unknown()
4432        }
4433
4434        #[inline]
4435        unsafe fn decode(
4436            &mut self,
4437            decoder: &mut fidl::encoding::Decoder<'_, D>,
4438            offset: usize,
4439            _depth: fidl::encoding::Depth,
4440        ) -> fidl::Result<()> {
4441            decoder.debug_check_bounds::<Self>(offset);
4442            let prim = decoder.read_num::<u32>(offset);
4443
4444            *self = Self::from_primitive_allow_unknown(prim);
4445            Ok(())
4446        }
4447    }
4448    unsafe impl fidl::encoding::TypeMarker for CodecProfile {
4449        type Owned = Self;
4450
4451        #[inline(always)]
4452        fn inline_align(_context: fidl::encoding::Context) -> usize {
4453            std::mem::align_of::<u32>()
4454        }
4455
4456        #[inline(always)]
4457        fn inline_size(_context: fidl::encoding::Context) -> usize {
4458            std::mem::size_of::<u32>()
4459        }
4460
4461        #[inline(always)]
4462        fn encode_is_copy() -> bool {
4463            false
4464        }
4465
4466        #[inline(always)]
4467        fn decode_is_copy() -> bool {
4468            false
4469        }
4470    }
4471
4472    impl fidl::encoding::ValueTypeMarker for CodecProfile {
4473        type Borrowed<'a> = Self;
4474        #[inline(always)]
4475        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4476            *value
4477        }
4478    }
4479
4480    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for CodecProfile {
4481        #[inline]
4482        unsafe fn encode(
4483            self,
4484            encoder: &mut fidl::encoding::Encoder<'_, D>,
4485            offset: usize,
4486            _depth: fidl::encoding::Depth,
4487        ) -> fidl::Result<()> {
4488            encoder.debug_check_bounds::<Self>(offset);
4489            encoder.write_num(self.into_primitive(), offset);
4490            Ok(())
4491        }
4492    }
4493
4494    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecProfile {
4495        #[inline(always)]
4496        fn new_empty() -> Self {
4497            Self::unknown()
4498        }
4499
4500        #[inline]
4501        unsafe fn decode(
4502            &mut self,
4503            decoder: &mut fidl::encoding::Decoder<'_, D>,
4504            offset: usize,
4505            _depth: fidl::encoding::Depth,
4506        ) -> fidl::Result<()> {
4507            decoder.debug_check_bounds::<Self>(offset);
4508            let prim = decoder.read_num::<u32>(offset);
4509
4510            *self = Self::from_primitive_allow_unknown(prim);
4511            Ok(())
4512        }
4513    }
4514    unsafe impl fidl::encoding::TypeMarker for ColorSpace {
4515        type Owned = Self;
4516
4517        #[inline(always)]
4518        fn inline_align(_context: fidl::encoding::Context) -> usize {
4519            std::mem::align_of::<u32>()
4520        }
4521
4522        #[inline(always)]
4523        fn inline_size(_context: fidl::encoding::Context) -> usize {
4524            std::mem::size_of::<u32>()
4525        }
4526
4527        #[inline(always)]
4528        fn encode_is_copy() -> bool {
4529            true
4530        }
4531
4532        #[inline(always)]
4533        fn decode_is_copy() -> bool {
4534            false
4535        }
4536    }
4537
4538    impl fidl::encoding::ValueTypeMarker for ColorSpace {
4539        type Borrowed<'a> = Self;
4540        #[inline(always)]
4541        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4542            *value
4543        }
4544    }
4545
4546    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ColorSpace {
4547        #[inline]
4548        unsafe fn encode(
4549            self,
4550            encoder: &mut fidl::encoding::Encoder<'_, D>,
4551            offset: usize,
4552            _depth: fidl::encoding::Depth,
4553        ) -> fidl::Result<()> {
4554            encoder.debug_check_bounds::<Self>(offset);
4555            encoder.write_num(self.into_primitive(), offset);
4556            Ok(())
4557        }
4558    }
4559
4560    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ColorSpace {
4561        #[inline(always)]
4562        fn new_empty() -> Self {
4563            Self::Unknown
4564        }
4565
4566        #[inline]
4567        unsafe fn decode(
4568            &mut self,
4569            decoder: &mut fidl::encoding::Decoder<'_, D>,
4570            offset: usize,
4571            _depth: fidl::encoding::Depth,
4572        ) -> fidl::Result<()> {
4573            decoder.debug_check_bounds::<Self>(offset);
4574            let prim = decoder.read_num::<u32>(offset);
4575
4576            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4577            Ok(())
4578        }
4579    }
4580    unsafe impl fidl::encoding::TypeMarker for Lc3FrameDuration {
4581        type Owned = Self;
4582
4583        #[inline(always)]
4584        fn inline_align(_context: fidl::encoding::Context) -> usize {
4585            std::mem::align_of::<u32>()
4586        }
4587
4588        #[inline(always)]
4589        fn inline_size(_context: fidl::encoding::Context) -> usize {
4590            std::mem::size_of::<u32>()
4591        }
4592
4593        #[inline(always)]
4594        fn encode_is_copy() -> bool {
4595            false
4596        }
4597
4598        #[inline(always)]
4599        fn decode_is_copy() -> bool {
4600            false
4601        }
4602    }
4603
4604    impl fidl::encoding::ValueTypeMarker for Lc3FrameDuration {
4605        type Borrowed<'a> = Self;
4606        #[inline(always)]
4607        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4608            *value
4609        }
4610    }
4611
4612    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4613        for Lc3FrameDuration
4614    {
4615        #[inline]
4616        unsafe fn encode(
4617            self,
4618            encoder: &mut fidl::encoding::Encoder<'_, D>,
4619            offset: usize,
4620            _depth: fidl::encoding::Depth,
4621        ) -> fidl::Result<()> {
4622            encoder.debug_check_bounds::<Self>(offset);
4623            encoder.write_num(self.into_primitive(), offset);
4624            Ok(())
4625        }
4626    }
4627
4628    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Lc3FrameDuration {
4629        #[inline(always)]
4630        fn new_empty() -> Self {
4631            Self::unknown()
4632        }
4633
4634        #[inline]
4635        unsafe fn decode(
4636            &mut self,
4637            decoder: &mut fidl::encoding::Decoder<'_, D>,
4638            offset: usize,
4639            _depth: fidl::encoding::Depth,
4640        ) -> fidl::Result<()> {
4641            decoder.debug_check_bounds::<Self>(offset);
4642            let prim = decoder.read_num::<u32>(offset);
4643
4644            *self = Self::from_primitive_allow_unknown(prim);
4645            Ok(())
4646        }
4647    }
4648    unsafe impl fidl::encoding::TypeMarker for SbcAllocation {
4649        type Owned = Self;
4650
4651        #[inline(always)]
4652        fn inline_align(_context: fidl::encoding::Context) -> usize {
4653            std::mem::align_of::<u32>()
4654        }
4655
4656        #[inline(always)]
4657        fn inline_size(_context: fidl::encoding::Context) -> usize {
4658            std::mem::size_of::<u32>()
4659        }
4660
4661        #[inline(always)]
4662        fn encode_is_copy() -> bool {
4663            true
4664        }
4665
4666        #[inline(always)]
4667        fn decode_is_copy() -> bool {
4668            false
4669        }
4670    }
4671
4672    impl fidl::encoding::ValueTypeMarker for SbcAllocation {
4673        type Borrowed<'a> = Self;
4674        #[inline(always)]
4675        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4676            *value
4677        }
4678    }
4679
4680    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcAllocation {
4681        #[inline]
4682        unsafe fn encode(
4683            self,
4684            encoder: &mut fidl::encoding::Encoder<'_, D>,
4685            offset: usize,
4686            _depth: fidl::encoding::Depth,
4687        ) -> fidl::Result<()> {
4688            encoder.debug_check_bounds::<Self>(offset);
4689            encoder.write_num(self.into_primitive(), offset);
4690            Ok(())
4691        }
4692    }
4693
4694    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcAllocation {
4695        #[inline(always)]
4696        fn new_empty() -> Self {
4697            Self::AllocLoudness
4698        }
4699
4700        #[inline]
4701        unsafe fn decode(
4702            &mut self,
4703            decoder: &mut fidl::encoding::Decoder<'_, D>,
4704            offset: usize,
4705            _depth: fidl::encoding::Depth,
4706        ) -> fidl::Result<()> {
4707            decoder.debug_check_bounds::<Self>(offset);
4708            let prim = decoder.read_num::<u32>(offset);
4709
4710            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4711            Ok(())
4712        }
4713    }
4714    unsafe impl fidl::encoding::TypeMarker for SbcBlockCount {
4715        type Owned = Self;
4716
4717        #[inline(always)]
4718        fn inline_align(_context: fidl::encoding::Context) -> usize {
4719            std::mem::align_of::<u32>()
4720        }
4721
4722        #[inline(always)]
4723        fn inline_size(_context: fidl::encoding::Context) -> usize {
4724            std::mem::size_of::<u32>()
4725        }
4726
4727        #[inline(always)]
4728        fn encode_is_copy() -> bool {
4729            true
4730        }
4731
4732        #[inline(always)]
4733        fn decode_is_copy() -> bool {
4734            false
4735        }
4736    }
4737
4738    impl fidl::encoding::ValueTypeMarker for SbcBlockCount {
4739        type Borrowed<'a> = Self;
4740        #[inline(always)]
4741        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4742            *value
4743        }
4744    }
4745
4746    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcBlockCount {
4747        #[inline]
4748        unsafe fn encode(
4749            self,
4750            encoder: &mut fidl::encoding::Encoder<'_, D>,
4751            offset: usize,
4752            _depth: fidl::encoding::Depth,
4753        ) -> fidl::Result<()> {
4754            encoder.debug_check_bounds::<Self>(offset);
4755            encoder.write_num(self.into_primitive(), offset);
4756            Ok(())
4757        }
4758    }
4759
4760    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcBlockCount {
4761        #[inline(always)]
4762        fn new_empty() -> Self {
4763            Self::BlockCount4
4764        }
4765
4766        #[inline]
4767        unsafe fn decode(
4768            &mut self,
4769            decoder: &mut fidl::encoding::Decoder<'_, D>,
4770            offset: usize,
4771            _depth: fidl::encoding::Depth,
4772        ) -> fidl::Result<()> {
4773            decoder.debug_check_bounds::<Self>(offset);
4774            let prim = decoder.read_num::<u32>(offset);
4775
4776            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4777            Ok(())
4778        }
4779    }
4780    unsafe impl fidl::encoding::TypeMarker for SbcChannelMode {
4781        type Owned = Self;
4782
4783        #[inline(always)]
4784        fn inline_align(_context: fidl::encoding::Context) -> usize {
4785            std::mem::align_of::<u32>()
4786        }
4787
4788        #[inline(always)]
4789        fn inline_size(_context: fidl::encoding::Context) -> usize {
4790            std::mem::size_of::<u32>()
4791        }
4792
4793        #[inline(always)]
4794        fn encode_is_copy() -> bool {
4795            true
4796        }
4797
4798        #[inline(always)]
4799        fn decode_is_copy() -> bool {
4800            false
4801        }
4802    }
4803
4804    impl fidl::encoding::ValueTypeMarker for SbcChannelMode {
4805        type Borrowed<'a> = Self;
4806        #[inline(always)]
4807        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4808            *value
4809        }
4810    }
4811
4812    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcChannelMode {
4813        #[inline]
4814        unsafe fn encode(
4815            self,
4816            encoder: &mut fidl::encoding::Encoder<'_, D>,
4817            offset: usize,
4818            _depth: fidl::encoding::Depth,
4819        ) -> fidl::Result<()> {
4820            encoder.debug_check_bounds::<Self>(offset);
4821            encoder.write_num(self.into_primitive(), offset);
4822            Ok(())
4823        }
4824    }
4825
4826    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcChannelMode {
4827        #[inline(always)]
4828        fn new_empty() -> Self {
4829            Self::Mono
4830        }
4831
4832        #[inline]
4833        unsafe fn decode(
4834            &mut self,
4835            decoder: &mut fidl::encoding::Decoder<'_, D>,
4836            offset: usize,
4837            _depth: fidl::encoding::Depth,
4838        ) -> fidl::Result<()> {
4839            decoder.debug_check_bounds::<Self>(offset);
4840            let prim = decoder.read_num::<u32>(offset);
4841
4842            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4843            Ok(())
4844        }
4845    }
4846    unsafe impl fidl::encoding::TypeMarker for SbcSubBands {
4847        type Owned = Self;
4848
4849        #[inline(always)]
4850        fn inline_align(_context: fidl::encoding::Context) -> usize {
4851            std::mem::align_of::<u32>()
4852        }
4853
4854        #[inline(always)]
4855        fn inline_size(_context: fidl::encoding::Context) -> usize {
4856            std::mem::size_of::<u32>()
4857        }
4858
4859        #[inline(always)]
4860        fn encode_is_copy() -> bool {
4861            true
4862        }
4863
4864        #[inline(always)]
4865        fn decode_is_copy() -> bool {
4866            false
4867        }
4868    }
4869
4870    impl fidl::encoding::ValueTypeMarker for SbcSubBands {
4871        type Borrowed<'a> = Self;
4872        #[inline(always)]
4873        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4874            *value
4875        }
4876    }
4877
4878    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcSubBands {
4879        #[inline]
4880        unsafe fn encode(
4881            self,
4882            encoder: &mut fidl::encoding::Encoder<'_, D>,
4883            offset: usize,
4884            _depth: fidl::encoding::Depth,
4885        ) -> fidl::Result<()> {
4886            encoder.debug_check_bounds::<Self>(offset);
4887            encoder.write_num(self.into_primitive(), offset);
4888            Ok(())
4889        }
4890    }
4891
4892    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcSubBands {
4893        #[inline(always)]
4894        fn new_empty() -> Self {
4895            Self::SubBands4
4896        }
4897
4898        #[inline]
4899        unsafe fn decode(
4900            &mut self,
4901            decoder: &mut fidl::encoding::Decoder<'_, D>,
4902            offset: usize,
4903            _depth: fidl::encoding::Depth,
4904        ) -> fidl::Result<()> {
4905            decoder.debug_check_bounds::<Self>(offset);
4906            let prim = decoder.read_num::<u32>(offset);
4907
4908            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4909            Ok(())
4910        }
4911    }
4912    unsafe impl fidl::encoding::TypeMarker for StreamError {
4913        type Owned = Self;
4914
4915        #[inline(always)]
4916        fn inline_align(_context: fidl::encoding::Context) -> usize {
4917            std::mem::align_of::<u32>()
4918        }
4919
4920        #[inline(always)]
4921        fn inline_size(_context: fidl::encoding::Context) -> usize {
4922            std::mem::size_of::<u32>()
4923        }
4924
4925        #[inline(always)]
4926        fn encode_is_copy() -> bool {
4927            true
4928        }
4929
4930        #[inline(always)]
4931        fn decode_is_copy() -> bool {
4932            false
4933        }
4934    }
4935
4936    impl fidl::encoding::ValueTypeMarker for StreamError {
4937        type Borrowed<'a> = Self;
4938        #[inline(always)]
4939        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4940            *value
4941        }
4942    }
4943
4944    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for StreamError {
4945        #[inline]
4946        unsafe fn encode(
4947            self,
4948            encoder: &mut fidl::encoding::Encoder<'_, D>,
4949            offset: usize,
4950            _depth: fidl::encoding::Depth,
4951        ) -> fidl::Result<()> {
4952            encoder.debug_check_bounds::<Self>(offset);
4953            encoder.write_num(self.into_primitive(), offset);
4954            Ok(())
4955        }
4956    }
4957
4958    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamError {
4959        #[inline(always)]
4960        fn new_empty() -> Self {
4961            Self::Unknown
4962        }
4963
4964        #[inline]
4965        unsafe fn decode(
4966            &mut self,
4967            decoder: &mut fidl::encoding::Decoder<'_, D>,
4968            offset: usize,
4969            _depth: fidl::encoding::Depth,
4970        ) -> fidl::Result<()> {
4971            decoder.debug_check_bounds::<Self>(offset);
4972            let prim = decoder.read_num::<u32>(offset);
4973
4974            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4975            Ok(())
4976        }
4977    }
4978    unsafe impl fidl::encoding::TypeMarker for VideoColorSpace {
4979        type Owned = Self;
4980
4981        #[inline(always)]
4982        fn inline_align(_context: fidl::encoding::Context) -> usize {
4983            std::mem::align_of::<u32>()
4984        }
4985
4986        #[inline(always)]
4987        fn inline_size(_context: fidl::encoding::Context) -> usize {
4988            std::mem::size_of::<u32>()
4989        }
4990
4991        #[inline(always)]
4992        fn encode_is_copy() -> bool {
4993            true
4994        }
4995
4996        #[inline(always)]
4997        fn decode_is_copy() -> bool {
4998            false
4999        }
5000    }
5001
5002    impl fidl::encoding::ValueTypeMarker for VideoColorSpace {
5003        type Borrowed<'a> = Self;
5004        #[inline(always)]
5005        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5006            *value
5007        }
5008    }
5009
5010    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
5011        for VideoColorSpace
5012    {
5013        #[inline]
5014        unsafe fn encode(
5015            self,
5016            encoder: &mut fidl::encoding::Encoder<'_, D>,
5017            offset: usize,
5018            _depth: fidl::encoding::Depth,
5019        ) -> fidl::Result<()> {
5020            encoder.debug_check_bounds::<Self>(offset);
5021            encoder.write_num(self.into_primitive(), offset);
5022            Ok(())
5023        }
5024    }
5025
5026    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoColorSpace {
5027        #[inline(always)]
5028        fn new_empty() -> Self {
5029            Self::Invalid
5030        }
5031
5032        #[inline]
5033        unsafe fn decode(
5034            &mut self,
5035            decoder: &mut fidl::encoding::Decoder<'_, D>,
5036            offset: usize,
5037            _depth: fidl::encoding::Depth,
5038        ) -> fidl::Result<()> {
5039            decoder.debug_check_bounds::<Self>(offset);
5040            let prim = decoder.read_num::<u32>(offset);
5041
5042            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
5043            Ok(())
5044        }
5045    }
5046
5047    impl fidl::encoding::ValueTypeMarker for AacConstantBitRate {
5048        type Borrowed<'a> = &'a Self;
5049        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5050            value
5051        }
5052    }
5053
5054    unsafe impl fidl::encoding::TypeMarker for AacConstantBitRate {
5055        type Owned = Self;
5056
5057        #[inline(always)]
5058        fn inline_align(_context: fidl::encoding::Context) -> usize {
5059            4
5060        }
5061
5062        #[inline(always)]
5063        fn inline_size(_context: fidl::encoding::Context) -> usize {
5064            4
5065        }
5066        #[inline(always)]
5067        fn encode_is_copy() -> bool {
5068            true
5069        }
5070
5071        #[inline(always)]
5072        fn decode_is_copy() -> bool {
5073            true
5074        }
5075    }
5076
5077    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacConstantBitRate, D>
5078        for &AacConstantBitRate
5079    {
5080        #[inline]
5081        unsafe fn encode(
5082            self,
5083            encoder: &mut fidl::encoding::Encoder<'_, D>,
5084            offset: usize,
5085            _depth: fidl::encoding::Depth,
5086        ) -> fidl::Result<()> {
5087            encoder.debug_check_bounds::<AacConstantBitRate>(offset);
5088            unsafe {
5089                // Copy the object into the buffer.
5090                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5091                (buf_ptr as *mut AacConstantBitRate)
5092                    .write_unaligned((self as *const AacConstantBitRate).read());
5093                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5094                // done second because the memcpy will write garbage to these bytes.
5095            }
5096            Ok(())
5097        }
5098    }
5099    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
5100        fidl::encoding::Encode<AacConstantBitRate, D> for (T0,)
5101    {
5102        #[inline]
5103        unsafe fn encode(
5104            self,
5105            encoder: &mut fidl::encoding::Encoder<'_, D>,
5106            offset: usize,
5107            depth: fidl::encoding::Depth,
5108        ) -> fidl::Result<()> {
5109            encoder.debug_check_bounds::<AacConstantBitRate>(offset);
5110            // Zero out padding regions. There's no need to apply masks
5111            // because the unmasked parts will be overwritten by fields.
5112            // Write the fields.
5113            self.0.encode(encoder, offset + 0, depth)?;
5114            Ok(())
5115        }
5116    }
5117
5118    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacConstantBitRate {
5119        #[inline(always)]
5120        fn new_empty() -> Self {
5121            Self { bit_rate: fidl::new_empty!(u32, D) }
5122        }
5123
5124        #[inline]
5125        unsafe fn decode(
5126            &mut self,
5127            decoder: &mut fidl::encoding::Decoder<'_, D>,
5128            offset: usize,
5129            _depth: fidl::encoding::Depth,
5130        ) -> fidl::Result<()> {
5131            decoder.debug_check_bounds::<Self>(offset);
5132            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5133            // Verify that padding bytes are zero.
5134            // Copy from the buffer into the object.
5135            unsafe {
5136                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
5137            }
5138            Ok(())
5139        }
5140    }
5141
5142    impl fidl::encoding::ValueTypeMarker for AacEncoderSettings {
5143        type Borrowed<'a> = &'a Self;
5144        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5145            value
5146        }
5147    }
5148
5149    unsafe impl fidl::encoding::TypeMarker for AacEncoderSettings {
5150        type Owned = Self;
5151
5152        #[inline(always)]
5153        fn inline_align(_context: fidl::encoding::Context) -> usize {
5154            8
5155        }
5156
5157        #[inline(always)]
5158        fn inline_size(_context: fidl::encoding::Context) -> usize {
5159            48
5160        }
5161    }
5162
5163    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacEncoderSettings, D>
5164        for &AacEncoderSettings
5165    {
5166        #[inline]
5167        unsafe fn encode(
5168            self,
5169            encoder: &mut fidl::encoding::Encoder<'_, D>,
5170            offset: usize,
5171            _depth: fidl::encoding::Depth,
5172        ) -> fidl::Result<()> {
5173            encoder.debug_check_bounds::<AacEncoderSettings>(offset);
5174            // Delegate to tuple encoding.
5175            fidl::encoding::Encode::<AacEncoderSettings, D>::encode(
5176                (
5177                    <AacTransport as fidl::encoding::ValueTypeMarker>::borrow(&self.transport),
5178                    <AacChannelMode as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_mode),
5179                    <AacBitRate as fidl::encoding::ValueTypeMarker>::borrow(&self.bit_rate),
5180                    <AacAudioObjectType as fidl::encoding::ValueTypeMarker>::borrow(&self.aot),
5181                ),
5182                encoder,
5183                offset,
5184                _depth,
5185            )
5186        }
5187    }
5188    unsafe impl<
5189            D: fidl::encoding::ResourceDialect,
5190            T0: fidl::encoding::Encode<AacTransport, D>,
5191            T1: fidl::encoding::Encode<AacChannelMode, D>,
5192            T2: fidl::encoding::Encode<AacBitRate, D>,
5193            T3: fidl::encoding::Encode<AacAudioObjectType, D>,
5194        > fidl::encoding::Encode<AacEncoderSettings, D> for (T0, T1, T2, T3)
5195    {
5196        #[inline]
5197        unsafe fn encode(
5198            self,
5199            encoder: &mut fidl::encoding::Encoder<'_, D>,
5200            offset: usize,
5201            depth: fidl::encoding::Depth,
5202        ) -> fidl::Result<()> {
5203            encoder.debug_check_bounds::<AacEncoderSettings>(offset);
5204            // Zero out padding regions. There's no need to apply masks
5205            // because the unmasked parts will be overwritten by fields.
5206            unsafe {
5207                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
5208                (ptr as *mut u64).write_unaligned(0);
5209            }
5210            unsafe {
5211                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
5212                (ptr as *mut u64).write_unaligned(0);
5213            }
5214            // Write the fields.
5215            self.0.encode(encoder, offset + 0, depth)?;
5216            self.1.encode(encoder, offset + 16, depth)?;
5217            self.2.encode(encoder, offset + 24, depth)?;
5218            self.3.encode(encoder, offset + 40, depth)?;
5219            Ok(())
5220        }
5221    }
5222
5223    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacEncoderSettings {
5224        #[inline(always)]
5225        fn new_empty() -> Self {
5226            Self {
5227                transport: fidl::new_empty!(AacTransport, D),
5228                channel_mode: fidl::new_empty!(AacChannelMode, D),
5229                bit_rate: fidl::new_empty!(AacBitRate, D),
5230                aot: fidl::new_empty!(AacAudioObjectType, D),
5231            }
5232        }
5233
5234        #[inline]
5235        unsafe fn decode(
5236            &mut self,
5237            decoder: &mut fidl::encoding::Decoder<'_, D>,
5238            offset: usize,
5239            _depth: fidl::encoding::Depth,
5240        ) -> fidl::Result<()> {
5241            decoder.debug_check_bounds::<Self>(offset);
5242            // Verify that padding bytes are zero.
5243            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
5244            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5245            let mask = 0xffffffff00000000u64;
5246            let maskedval = padval & mask;
5247            if maskedval != 0 {
5248                return Err(fidl::Error::NonZeroPadding {
5249                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
5250                });
5251            }
5252            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
5253            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5254            let mask = 0xffffffff00000000u64;
5255            let maskedval = padval & mask;
5256            if maskedval != 0 {
5257                return Err(fidl::Error::NonZeroPadding {
5258                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
5259                });
5260            }
5261            fidl::decode!(AacTransport, D, &mut self.transport, decoder, offset + 0, _depth)?;
5262            fidl::decode!(AacChannelMode, D, &mut self.channel_mode, decoder, offset + 16, _depth)?;
5263            fidl::decode!(AacBitRate, D, &mut self.bit_rate, decoder, offset + 24, _depth)?;
5264            fidl::decode!(AacAudioObjectType, D, &mut self.aot, decoder, offset + 40, _depth)?;
5265            Ok(())
5266        }
5267    }
5268
5269    impl fidl::encoding::ValueTypeMarker for AacTransportAdts {
5270        type Borrowed<'a> = &'a Self;
5271        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5272            value
5273        }
5274    }
5275
5276    unsafe impl fidl::encoding::TypeMarker for AacTransportAdts {
5277        type Owned = Self;
5278
5279        #[inline(always)]
5280        fn inline_align(_context: fidl::encoding::Context) -> usize {
5281            1
5282        }
5283
5284        #[inline(always)]
5285        fn inline_size(_context: fidl::encoding::Context) -> usize {
5286            1
5287        }
5288    }
5289
5290    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransportAdts, D>
5291        for &AacTransportAdts
5292    {
5293        #[inline]
5294        unsafe fn encode(
5295            self,
5296            encoder: &mut fidl::encoding::Encoder<'_, D>,
5297            offset: usize,
5298            _depth: fidl::encoding::Depth,
5299        ) -> fidl::Result<()> {
5300            encoder.debug_check_bounds::<AacTransportAdts>(offset);
5301            encoder.write_num(0u8, offset);
5302            Ok(())
5303        }
5304    }
5305
5306    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransportAdts {
5307        #[inline(always)]
5308        fn new_empty() -> Self {
5309            Self
5310        }
5311
5312        #[inline]
5313        unsafe fn decode(
5314            &mut self,
5315            decoder: &mut fidl::encoding::Decoder<'_, D>,
5316            offset: usize,
5317            _depth: fidl::encoding::Depth,
5318        ) -> fidl::Result<()> {
5319            decoder.debug_check_bounds::<Self>(offset);
5320            match decoder.read_num::<u8>(offset) {
5321                0 => Ok(()),
5322                _ => Err(fidl::Error::Invalid),
5323            }
5324        }
5325    }
5326
5327    impl fidl::encoding::ValueTypeMarker for AacTransportLatm {
5328        type Borrowed<'a> = &'a Self;
5329        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5330            value
5331        }
5332    }
5333
5334    unsafe impl fidl::encoding::TypeMarker for AacTransportLatm {
5335        type Owned = Self;
5336
5337        #[inline(always)]
5338        fn inline_align(_context: fidl::encoding::Context) -> usize {
5339            1
5340        }
5341
5342        #[inline(always)]
5343        fn inline_size(_context: fidl::encoding::Context) -> usize {
5344            1
5345        }
5346    }
5347
5348    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransportLatm, D>
5349        for &AacTransportLatm
5350    {
5351        #[inline]
5352        unsafe fn encode(
5353            self,
5354            encoder: &mut fidl::encoding::Encoder<'_, D>,
5355            offset: usize,
5356            _depth: fidl::encoding::Depth,
5357        ) -> fidl::Result<()> {
5358            encoder.debug_check_bounds::<AacTransportLatm>(offset);
5359            // Delegate to tuple encoding.
5360            fidl::encoding::Encode::<AacTransportLatm, D>::encode(
5361                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.mux_config_present),),
5362                encoder,
5363                offset,
5364                _depth,
5365            )
5366        }
5367    }
5368    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
5369        fidl::encoding::Encode<AacTransportLatm, D> for (T0,)
5370    {
5371        #[inline]
5372        unsafe fn encode(
5373            self,
5374            encoder: &mut fidl::encoding::Encoder<'_, D>,
5375            offset: usize,
5376            depth: fidl::encoding::Depth,
5377        ) -> fidl::Result<()> {
5378            encoder.debug_check_bounds::<AacTransportLatm>(offset);
5379            // Zero out padding regions. There's no need to apply masks
5380            // because the unmasked parts will be overwritten by fields.
5381            // Write the fields.
5382            self.0.encode(encoder, offset + 0, depth)?;
5383            Ok(())
5384        }
5385    }
5386
5387    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransportLatm {
5388        #[inline(always)]
5389        fn new_empty() -> Self {
5390            Self { mux_config_present: fidl::new_empty!(bool, D) }
5391        }
5392
5393        #[inline]
5394        unsafe fn decode(
5395            &mut self,
5396            decoder: &mut fidl::encoding::Decoder<'_, D>,
5397            offset: usize,
5398            _depth: fidl::encoding::Depth,
5399        ) -> fidl::Result<()> {
5400            decoder.debug_check_bounds::<Self>(offset);
5401            // Verify that padding bytes are zero.
5402            fidl::decode!(bool, D, &mut self.mux_config_present, decoder, offset + 0, _depth)?;
5403            Ok(())
5404        }
5405    }
5406
5407    impl fidl::encoding::ValueTypeMarker for AacTransportRaw {
5408        type Borrowed<'a> = &'a Self;
5409        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5410            value
5411        }
5412    }
5413
5414    unsafe impl fidl::encoding::TypeMarker for AacTransportRaw {
5415        type Owned = Self;
5416
5417        #[inline(always)]
5418        fn inline_align(_context: fidl::encoding::Context) -> usize {
5419            1
5420        }
5421
5422        #[inline(always)]
5423        fn inline_size(_context: fidl::encoding::Context) -> usize {
5424            1
5425        }
5426    }
5427
5428    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransportRaw, D>
5429        for &AacTransportRaw
5430    {
5431        #[inline]
5432        unsafe fn encode(
5433            self,
5434            encoder: &mut fidl::encoding::Encoder<'_, D>,
5435            offset: usize,
5436            _depth: fidl::encoding::Depth,
5437        ) -> fidl::Result<()> {
5438            encoder.debug_check_bounds::<AacTransportRaw>(offset);
5439            encoder.write_num(0u8, offset);
5440            Ok(())
5441        }
5442    }
5443
5444    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransportRaw {
5445        #[inline(always)]
5446        fn new_empty() -> Self {
5447            Self
5448        }
5449
5450        #[inline]
5451        unsafe fn decode(
5452            &mut self,
5453            decoder: &mut fidl::encoding::Decoder<'_, D>,
5454            offset: usize,
5455            _depth: fidl::encoding::Depth,
5456        ) -> fidl::Result<()> {
5457            decoder.debug_check_bounds::<Self>(offset);
5458            match decoder.read_num::<u8>(offset) {
5459                0 => Ok(()),
5460                _ => Err(fidl::Error::Invalid),
5461            }
5462        }
5463    }
5464
5465    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchCaptureActivityResponse {
5466        type Borrowed<'a> = &'a Self;
5467        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5468            value
5469        }
5470    }
5471
5472    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchCaptureActivityResponse {
5473        type Owned = Self;
5474
5475        #[inline(always)]
5476        fn inline_align(_context: fidl::encoding::Context) -> usize {
5477            8
5478        }
5479
5480        #[inline(always)]
5481        fn inline_size(_context: fidl::encoding::Context) -> usize {
5482            16
5483        }
5484    }
5485
5486    unsafe impl<D: fidl::encoding::ResourceDialect>
5487        fidl::encoding::Encode<ActivityReporterWatchCaptureActivityResponse, D>
5488        for &ActivityReporterWatchCaptureActivityResponse
5489    {
5490        #[inline]
5491        unsafe fn encode(
5492            self,
5493            encoder: &mut fidl::encoding::Encoder<'_, D>,
5494            offset: usize,
5495            _depth: fidl::encoding::Depth,
5496        ) -> fidl::Result<()> {
5497            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivityResponse>(offset);
5498            // Delegate to tuple encoding.
5499            fidl::encoding::Encode::<ActivityReporterWatchCaptureActivityResponse, D>::encode(
5500                (
5501                    <fidl::encoding::Vector<AudioCaptureUsage, 4> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5502                ),
5503                encoder, offset, _depth
5504            )
5505        }
5506    }
5507    unsafe impl<
5508            D: fidl::encoding::ResourceDialect,
5509            T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioCaptureUsage, 4>, D>,
5510        > fidl::encoding::Encode<ActivityReporterWatchCaptureActivityResponse, D> for (T0,)
5511    {
5512        #[inline]
5513        unsafe fn encode(
5514            self,
5515            encoder: &mut fidl::encoding::Encoder<'_, D>,
5516            offset: usize,
5517            depth: fidl::encoding::Depth,
5518        ) -> fidl::Result<()> {
5519            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivityResponse>(offset);
5520            // Zero out padding regions. There's no need to apply masks
5521            // because the unmasked parts will be overwritten by fields.
5522            // Write the fields.
5523            self.0.encode(encoder, offset + 0, depth)?;
5524            Ok(())
5525        }
5526    }
5527
5528    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5529        for ActivityReporterWatchCaptureActivityResponse
5530    {
5531        #[inline(always)]
5532        fn new_empty() -> Self {
5533            Self {
5534                active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioCaptureUsage, 4>, D),
5535            }
5536        }
5537
5538        #[inline]
5539        unsafe fn decode(
5540            &mut self,
5541            decoder: &mut fidl::encoding::Decoder<'_, D>,
5542            offset: usize,
5543            _depth: fidl::encoding::Depth,
5544        ) -> fidl::Result<()> {
5545            decoder.debug_check_bounds::<Self>(offset);
5546            // Verify that padding bytes are zero.
5547            fidl::decode!(fidl::encoding::Vector<AudioCaptureUsage, 4>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5548            Ok(())
5549        }
5550    }
5551
5552    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchRenderActivityResponse {
5553        type Borrowed<'a> = &'a Self;
5554        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5555            value
5556        }
5557    }
5558
5559    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchRenderActivityResponse {
5560        type Owned = Self;
5561
5562        #[inline(always)]
5563        fn inline_align(_context: fidl::encoding::Context) -> usize {
5564            8
5565        }
5566
5567        #[inline(always)]
5568        fn inline_size(_context: fidl::encoding::Context) -> usize {
5569            16
5570        }
5571    }
5572
5573    unsafe impl<D: fidl::encoding::ResourceDialect>
5574        fidl::encoding::Encode<ActivityReporterWatchRenderActivityResponse, D>
5575        for &ActivityReporterWatchRenderActivityResponse
5576    {
5577        #[inline]
5578        unsafe fn encode(
5579            self,
5580            encoder: &mut fidl::encoding::Encoder<'_, D>,
5581            offset: usize,
5582            _depth: fidl::encoding::Depth,
5583        ) -> fidl::Result<()> {
5584            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivityResponse>(offset);
5585            // Delegate to tuple encoding.
5586            fidl::encoding::Encode::<ActivityReporterWatchRenderActivityResponse, D>::encode(
5587                (
5588                    <fidl::encoding::Vector<AudioRenderUsage, 5> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5589                ),
5590                encoder, offset, _depth
5591            )
5592        }
5593    }
5594    unsafe impl<
5595            D: fidl::encoding::ResourceDialect,
5596            T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioRenderUsage, 5>, D>,
5597        > fidl::encoding::Encode<ActivityReporterWatchRenderActivityResponse, D> for (T0,)
5598    {
5599        #[inline]
5600        unsafe fn encode(
5601            self,
5602            encoder: &mut fidl::encoding::Encoder<'_, D>,
5603            offset: usize,
5604            depth: fidl::encoding::Depth,
5605        ) -> fidl::Result<()> {
5606            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivityResponse>(offset);
5607            // Zero out padding regions. There's no need to apply masks
5608            // because the unmasked parts will be overwritten by fields.
5609            // Write the fields.
5610            self.0.encode(encoder, offset + 0, depth)?;
5611            Ok(())
5612        }
5613    }
5614
5615    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5616        for ActivityReporterWatchRenderActivityResponse
5617    {
5618        #[inline(always)]
5619        fn new_empty() -> Self {
5620            Self { active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioRenderUsage, 5>, D) }
5621        }
5622
5623        #[inline]
5624        unsafe fn decode(
5625            &mut self,
5626            decoder: &mut fidl::encoding::Decoder<'_, D>,
5627            offset: usize,
5628            _depth: fidl::encoding::Depth,
5629        ) -> fidl::Result<()> {
5630            decoder.debug_check_bounds::<Self>(offset);
5631            // Verify that padding bytes are zero.
5632            fidl::decode!(fidl::encoding::Vector<AudioRenderUsage, 5>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5633            Ok(())
5634        }
5635    }
5636
5637    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchCaptureActivity2Response {
5638        type Borrowed<'a> = &'a Self;
5639        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5640            value
5641        }
5642    }
5643
5644    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchCaptureActivity2Response {
5645        type Owned = Self;
5646
5647        #[inline(always)]
5648        fn inline_align(_context: fidl::encoding::Context) -> usize {
5649            8
5650        }
5651
5652        #[inline(always)]
5653        fn inline_size(_context: fidl::encoding::Context) -> usize {
5654            16
5655        }
5656    }
5657
5658    unsafe impl<D: fidl::encoding::ResourceDialect>
5659        fidl::encoding::Encode<ActivityReporterWatchCaptureActivity2Response, D>
5660        for &ActivityReporterWatchCaptureActivity2Response
5661    {
5662        #[inline]
5663        unsafe fn encode(
5664            self,
5665            encoder: &mut fidl::encoding::Encoder<'_, D>,
5666            offset: usize,
5667            _depth: fidl::encoding::Depth,
5668        ) -> fidl::Result<()> {
5669            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivity2Response>(offset);
5670            // Delegate to tuple encoding.
5671            fidl::encoding::Encode::<ActivityReporterWatchCaptureActivity2Response, D>::encode(
5672                (
5673                    <fidl::encoding::Vector<AudioCaptureUsage2, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5674                ),
5675                encoder, offset, _depth
5676            )
5677        }
5678    }
5679    unsafe impl<
5680            D: fidl::encoding::ResourceDialect,
5681            T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioCaptureUsage2, 8>, D>,
5682        > fidl::encoding::Encode<ActivityReporterWatchCaptureActivity2Response, D> for (T0,)
5683    {
5684        #[inline]
5685        unsafe fn encode(
5686            self,
5687            encoder: &mut fidl::encoding::Encoder<'_, D>,
5688            offset: usize,
5689            depth: fidl::encoding::Depth,
5690        ) -> fidl::Result<()> {
5691            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivity2Response>(offset);
5692            // Zero out padding regions. There's no need to apply masks
5693            // because the unmasked parts will be overwritten by fields.
5694            // Write the fields.
5695            self.0.encode(encoder, offset + 0, depth)?;
5696            Ok(())
5697        }
5698    }
5699
5700    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5701        for ActivityReporterWatchCaptureActivity2Response
5702    {
5703        #[inline(always)]
5704        fn new_empty() -> Self {
5705            Self {
5706                active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioCaptureUsage2, 8>, D),
5707            }
5708        }
5709
5710        #[inline]
5711        unsafe fn decode(
5712            &mut self,
5713            decoder: &mut fidl::encoding::Decoder<'_, D>,
5714            offset: usize,
5715            _depth: fidl::encoding::Depth,
5716        ) -> fidl::Result<()> {
5717            decoder.debug_check_bounds::<Self>(offset);
5718            // Verify that padding bytes are zero.
5719            fidl::decode!(fidl::encoding::Vector<AudioCaptureUsage2, 8>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5720            Ok(())
5721        }
5722    }
5723
5724    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchRenderActivity2Response {
5725        type Borrowed<'a> = &'a Self;
5726        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5727            value
5728        }
5729    }
5730
5731    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchRenderActivity2Response {
5732        type Owned = Self;
5733
5734        #[inline(always)]
5735        fn inline_align(_context: fidl::encoding::Context) -> usize {
5736            8
5737        }
5738
5739        #[inline(always)]
5740        fn inline_size(_context: fidl::encoding::Context) -> usize {
5741            16
5742        }
5743    }
5744
5745    unsafe impl<D: fidl::encoding::ResourceDialect>
5746        fidl::encoding::Encode<ActivityReporterWatchRenderActivity2Response, D>
5747        for &ActivityReporterWatchRenderActivity2Response
5748    {
5749        #[inline]
5750        unsafe fn encode(
5751            self,
5752            encoder: &mut fidl::encoding::Encoder<'_, D>,
5753            offset: usize,
5754            _depth: fidl::encoding::Depth,
5755        ) -> fidl::Result<()> {
5756            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivity2Response>(offset);
5757            // Delegate to tuple encoding.
5758            fidl::encoding::Encode::<ActivityReporterWatchRenderActivity2Response, D>::encode(
5759                (
5760                    <fidl::encoding::Vector<AudioRenderUsage2, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5761                ),
5762                encoder, offset, _depth
5763            )
5764        }
5765    }
5766    unsafe impl<
5767            D: fidl::encoding::ResourceDialect,
5768            T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioRenderUsage2, 8>, D>,
5769        > fidl::encoding::Encode<ActivityReporterWatchRenderActivity2Response, D> for (T0,)
5770    {
5771        #[inline]
5772        unsafe fn encode(
5773            self,
5774            encoder: &mut fidl::encoding::Encoder<'_, D>,
5775            offset: usize,
5776            depth: fidl::encoding::Depth,
5777        ) -> fidl::Result<()> {
5778            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivity2Response>(offset);
5779            // Zero out padding regions. There's no need to apply masks
5780            // because the unmasked parts will be overwritten by fields.
5781            // Write the fields.
5782            self.0.encode(encoder, offset + 0, depth)?;
5783            Ok(())
5784        }
5785    }
5786
5787    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5788        for ActivityReporterWatchRenderActivity2Response
5789    {
5790        #[inline(always)]
5791        fn new_empty() -> Self {
5792            Self {
5793                active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioRenderUsage2, 8>, D),
5794            }
5795        }
5796
5797        #[inline]
5798        unsafe fn decode(
5799            &mut self,
5800            decoder: &mut fidl::encoding::Decoder<'_, D>,
5801            offset: usize,
5802            _depth: fidl::encoding::Depth,
5803        ) -> fidl::Result<()> {
5804            decoder.debug_check_bounds::<Self>(offset);
5805            // Verify that padding bytes are zero.
5806            fidl::decode!(fidl::encoding::Vector<AudioRenderUsage2, 8>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5807            Ok(())
5808        }
5809    }
5810
5811    impl fidl::encoding::ValueTypeMarker for AudioCapturerCaptureAtRequest {
5812        type Borrowed<'a> = &'a Self;
5813        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5814            value
5815        }
5816    }
5817
5818    unsafe impl fidl::encoding::TypeMarker for AudioCapturerCaptureAtRequest {
5819        type Owned = Self;
5820
5821        #[inline(always)]
5822        fn inline_align(_context: fidl::encoding::Context) -> usize {
5823            4
5824        }
5825
5826        #[inline(always)]
5827        fn inline_size(_context: fidl::encoding::Context) -> usize {
5828            12
5829        }
5830        #[inline(always)]
5831        fn encode_is_copy() -> bool {
5832            true
5833        }
5834
5835        #[inline(always)]
5836        fn decode_is_copy() -> bool {
5837            true
5838        }
5839    }
5840
5841    unsafe impl<D: fidl::encoding::ResourceDialect>
5842        fidl::encoding::Encode<AudioCapturerCaptureAtRequest, D>
5843        for &AudioCapturerCaptureAtRequest
5844    {
5845        #[inline]
5846        unsafe fn encode(
5847            self,
5848            encoder: &mut fidl::encoding::Encoder<'_, D>,
5849            offset: usize,
5850            _depth: fidl::encoding::Depth,
5851        ) -> fidl::Result<()> {
5852            encoder.debug_check_bounds::<AudioCapturerCaptureAtRequest>(offset);
5853            unsafe {
5854                // Copy the object into the buffer.
5855                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5856                (buf_ptr as *mut AudioCapturerCaptureAtRequest)
5857                    .write_unaligned((self as *const AudioCapturerCaptureAtRequest).read());
5858                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5859                // done second because the memcpy will write garbage to these bytes.
5860            }
5861            Ok(())
5862        }
5863    }
5864    unsafe impl<
5865            D: fidl::encoding::ResourceDialect,
5866            T0: fidl::encoding::Encode<u32, D>,
5867            T1: fidl::encoding::Encode<u32, D>,
5868            T2: fidl::encoding::Encode<u32, D>,
5869        > fidl::encoding::Encode<AudioCapturerCaptureAtRequest, D> for (T0, T1, T2)
5870    {
5871        #[inline]
5872        unsafe fn encode(
5873            self,
5874            encoder: &mut fidl::encoding::Encoder<'_, D>,
5875            offset: usize,
5876            depth: fidl::encoding::Depth,
5877        ) -> fidl::Result<()> {
5878            encoder.debug_check_bounds::<AudioCapturerCaptureAtRequest>(offset);
5879            // Zero out padding regions. There's no need to apply masks
5880            // because the unmasked parts will be overwritten by fields.
5881            // Write the fields.
5882            self.0.encode(encoder, offset + 0, depth)?;
5883            self.1.encode(encoder, offset + 4, depth)?;
5884            self.2.encode(encoder, offset + 8, depth)?;
5885            Ok(())
5886        }
5887    }
5888
5889    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5890        for AudioCapturerCaptureAtRequest
5891    {
5892        #[inline(always)]
5893        fn new_empty() -> Self {
5894            Self {
5895                payload_buffer_id: fidl::new_empty!(u32, D),
5896                payload_offset: fidl::new_empty!(u32, D),
5897                frames: fidl::new_empty!(u32, D),
5898            }
5899        }
5900
5901        #[inline]
5902        unsafe fn decode(
5903            &mut self,
5904            decoder: &mut fidl::encoding::Decoder<'_, D>,
5905            offset: usize,
5906            _depth: fidl::encoding::Depth,
5907        ) -> fidl::Result<()> {
5908            decoder.debug_check_bounds::<Self>(offset);
5909            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5910            // Verify that padding bytes are zero.
5911            // Copy from the buffer into the object.
5912            unsafe {
5913                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
5914            }
5915            Ok(())
5916        }
5917    }
5918
5919    impl fidl::encoding::ValueTypeMarker for AudioCapturerCaptureAtResponse {
5920        type Borrowed<'a> = &'a Self;
5921        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5922            value
5923        }
5924    }
5925
5926    unsafe impl fidl::encoding::TypeMarker for AudioCapturerCaptureAtResponse {
5927        type Owned = Self;
5928
5929        #[inline(always)]
5930        fn inline_align(_context: fidl::encoding::Context) -> usize {
5931            8
5932        }
5933
5934        #[inline(always)]
5935        fn inline_size(_context: fidl::encoding::Context) -> usize {
5936            56
5937        }
5938    }
5939
5940    unsafe impl<D: fidl::encoding::ResourceDialect>
5941        fidl::encoding::Encode<AudioCapturerCaptureAtResponse, D>
5942        for &AudioCapturerCaptureAtResponse
5943    {
5944        #[inline]
5945        unsafe fn encode(
5946            self,
5947            encoder: &mut fidl::encoding::Encoder<'_, D>,
5948            offset: usize,
5949            _depth: fidl::encoding::Depth,
5950        ) -> fidl::Result<()> {
5951            encoder.debug_check_bounds::<AudioCapturerCaptureAtResponse>(offset);
5952            unsafe {
5953                // Copy the object into the buffer.
5954                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5955                (buf_ptr as *mut AudioCapturerCaptureAtResponse)
5956                    .write_unaligned((self as *const AudioCapturerCaptureAtResponse).read());
5957                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5958                // done second because the memcpy will write garbage to these bytes.
5959                let padding_ptr = buf_ptr.offset(8) as *mut u64;
5960                let padding_mask = 0xffffffff00000000u64;
5961                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
5962                let padding_ptr = buf_ptr.offset(32) as *mut u64;
5963                let padding_mask = 0xffffffff00000000u64;
5964                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
5965            }
5966            Ok(())
5967        }
5968    }
5969    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
5970        fidl::encoding::Encode<AudioCapturerCaptureAtResponse, D> for (T0,)
5971    {
5972        #[inline]
5973        unsafe fn encode(
5974            self,
5975            encoder: &mut fidl::encoding::Encoder<'_, D>,
5976            offset: usize,
5977            depth: fidl::encoding::Depth,
5978        ) -> fidl::Result<()> {
5979            encoder.debug_check_bounds::<AudioCapturerCaptureAtResponse>(offset);
5980            // Zero out padding regions. There's no need to apply masks
5981            // because the unmasked parts will be overwritten by fields.
5982            // Write the fields.
5983            self.0.encode(encoder, offset + 0, depth)?;
5984            Ok(())
5985        }
5986    }
5987
5988    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5989        for AudioCapturerCaptureAtResponse
5990    {
5991        #[inline(always)]
5992        fn new_empty() -> Self {
5993            Self { captured_packet: fidl::new_empty!(StreamPacket, D) }
5994        }
5995
5996        #[inline]
5997        unsafe fn decode(
5998            &mut self,
5999            decoder: &mut fidl::encoding::Decoder<'_, D>,
6000            offset: usize,
6001            _depth: fidl::encoding::Depth,
6002        ) -> fidl::Result<()> {
6003            decoder.debug_check_bounds::<Self>(offset);
6004            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
6005            // Verify that padding bytes are zero.
6006            let ptr = unsafe { buf_ptr.offset(8) };
6007            let padval = unsafe { (ptr as *const u64).read_unaligned() };
6008            let mask = 0xffffffff00000000u64;
6009            let maskedval = padval & mask;
6010            if maskedval != 0 {
6011                return Err(fidl::Error::NonZeroPadding {
6012                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
6013                });
6014            }
6015            let ptr = unsafe { buf_ptr.offset(32) };
6016            let padval = unsafe { (ptr as *const u64).read_unaligned() };
6017            let mask = 0xffffffff00000000u64;
6018            let maskedval = padval & mask;
6019            if maskedval != 0 {
6020                return Err(fidl::Error::NonZeroPadding {
6021                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
6022                });
6023            }
6024            // Copy from the buffer into the object.
6025            unsafe {
6026                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
6027            }
6028            Ok(())
6029        }
6030    }
6031
6032    impl fidl::encoding::ValueTypeMarker for AudioCapturerGetStreamTypeResponse {
6033        type Borrowed<'a> = &'a Self;
6034        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6035            value
6036        }
6037    }
6038
6039    unsafe impl fidl::encoding::TypeMarker for AudioCapturerGetStreamTypeResponse {
6040        type Owned = Self;
6041
6042        #[inline(always)]
6043        fn inline_align(_context: fidl::encoding::Context) -> usize {
6044            8
6045        }
6046
6047        #[inline(always)]
6048        fn inline_size(_context: fidl::encoding::Context) -> usize {
6049            48
6050        }
6051    }
6052
6053    unsafe impl<D: fidl::encoding::ResourceDialect>
6054        fidl::encoding::Encode<AudioCapturerGetStreamTypeResponse, D>
6055        for &AudioCapturerGetStreamTypeResponse
6056    {
6057        #[inline]
6058        unsafe fn encode(
6059            self,
6060            encoder: &mut fidl::encoding::Encoder<'_, D>,
6061            offset: usize,
6062            _depth: fidl::encoding::Depth,
6063        ) -> fidl::Result<()> {
6064            encoder.debug_check_bounds::<AudioCapturerGetStreamTypeResponse>(offset);
6065            // Delegate to tuple encoding.
6066            fidl::encoding::Encode::<AudioCapturerGetStreamTypeResponse, D>::encode(
6067                (<StreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_type),),
6068                encoder,
6069                offset,
6070                _depth,
6071            )
6072        }
6073    }
6074    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamType, D>>
6075        fidl::encoding::Encode<AudioCapturerGetStreamTypeResponse, D> for (T0,)
6076    {
6077        #[inline]
6078        unsafe fn encode(
6079            self,
6080            encoder: &mut fidl::encoding::Encoder<'_, D>,
6081            offset: usize,
6082            depth: fidl::encoding::Depth,
6083        ) -> fidl::Result<()> {
6084            encoder.debug_check_bounds::<AudioCapturerGetStreamTypeResponse>(offset);
6085            // Zero out padding regions. There's no need to apply masks
6086            // because the unmasked parts will be overwritten by fields.
6087            // Write the fields.
6088            self.0.encode(encoder, offset + 0, depth)?;
6089            Ok(())
6090        }
6091    }
6092
6093    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6094        for AudioCapturerGetStreamTypeResponse
6095    {
6096        #[inline(always)]
6097        fn new_empty() -> Self {
6098            Self { stream_type: fidl::new_empty!(StreamType, D) }
6099        }
6100
6101        #[inline]
6102        unsafe fn decode(
6103            &mut self,
6104            decoder: &mut fidl::encoding::Decoder<'_, D>,
6105            offset: usize,
6106            _depth: fidl::encoding::Depth,
6107        ) -> fidl::Result<()> {
6108            decoder.debug_check_bounds::<Self>(offset);
6109            // Verify that padding bytes are zero.
6110            fidl::decode!(StreamType, D, &mut self.stream_type, decoder, offset + 0, _depth)?;
6111            Ok(())
6112        }
6113    }
6114
6115    impl fidl::encoding::ValueTypeMarker for AudioCapturerSetPcmStreamTypeRequest {
6116        type Borrowed<'a> = &'a Self;
6117        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6118            value
6119        }
6120    }
6121
6122    unsafe impl fidl::encoding::TypeMarker for AudioCapturerSetPcmStreamTypeRequest {
6123        type Owned = Self;
6124
6125        #[inline(always)]
6126        fn inline_align(_context: fidl::encoding::Context) -> usize {
6127            4
6128        }
6129
6130        #[inline(always)]
6131        fn inline_size(_context: fidl::encoding::Context) -> usize {
6132            12
6133        }
6134    }
6135
6136    unsafe impl<D: fidl::encoding::ResourceDialect>
6137        fidl::encoding::Encode<AudioCapturerSetPcmStreamTypeRequest, D>
6138        for &AudioCapturerSetPcmStreamTypeRequest
6139    {
6140        #[inline]
6141        unsafe fn encode(
6142            self,
6143            encoder: &mut fidl::encoding::Encoder<'_, D>,
6144            offset: usize,
6145            _depth: fidl::encoding::Depth,
6146        ) -> fidl::Result<()> {
6147            encoder.debug_check_bounds::<AudioCapturerSetPcmStreamTypeRequest>(offset);
6148            // Delegate to tuple encoding.
6149            fidl::encoding::Encode::<AudioCapturerSetPcmStreamTypeRequest, D>::encode(
6150                (<AudioStreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_type),),
6151                encoder,
6152                offset,
6153                _depth,
6154            )
6155        }
6156    }
6157    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioStreamType, D>>
6158        fidl::encoding::Encode<AudioCapturerSetPcmStreamTypeRequest, D> for (T0,)
6159    {
6160        #[inline]
6161        unsafe fn encode(
6162            self,
6163            encoder: &mut fidl::encoding::Encoder<'_, D>,
6164            offset: usize,
6165            depth: fidl::encoding::Depth,
6166        ) -> fidl::Result<()> {
6167            encoder.debug_check_bounds::<AudioCapturerSetPcmStreamTypeRequest>(offset);
6168            // Zero out padding regions. There's no need to apply masks
6169            // because the unmasked parts will be overwritten by fields.
6170            // Write the fields.
6171            self.0.encode(encoder, offset + 0, depth)?;
6172            Ok(())
6173        }
6174    }
6175
6176    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6177        for AudioCapturerSetPcmStreamTypeRequest
6178    {
6179        #[inline(always)]
6180        fn new_empty() -> Self {
6181            Self { stream_type: fidl::new_empty!(AudioStreamType, D) }
6182        }
6183
6184        #[inline]
6185        unsafe fn decode(
6186            &mut self,
6187            decoder: &mut fidl::encoding::Decoder<'_, D>,
6188            offset: usize,
6189            _depth: fidl::encoding::Depth,
6190        ) -> fidl::Result<()> {
6191            decoder.debug_check_bounds::<Self>(offset);
6192            // Verify that padding bytes are zero.
6193            fidl::decode!(AudioStreamType, D, &mut self.stream_type, decoder, offset + 0, _depth)?;
6194            Ok(())
6195        }
6196    }
6197
6198    impl fidl::encoding::ValueTypeMarker for AudioCapturerSetUsage2Request {
6199        type Borrowed<'a> = &'a Self;
6200        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6201            value
6202        }
6203    }
6204
6205    unsafe impl fidl::encoding::TypeMarker for AudioCapturerSetUsage2Request {
6206        type Owned = Self;
6207
6208        #[inline(always)]
6209        fn inline_align(_context: fidl::encoding::Context) -> usize {
6210            4
6211        }
6212
6213        #[inline(always)]
6214        fn inline_size(_context: fidl::encoding::Context) -> usize {
6215            4
6216        }
6217    }
6218
6219    unsafe impl<D: fidl::encoding::ResourceDialect>
6220        fidl::encoding::Encode<AudioCapturerSetUsage2Request, D>
6221        for &AudioCapturerSetUsage2Request
6222    {
6223        #[inline]
6224        unsafe fn encode(
6225            self,
6226            encoder: &mut fidl::encoding::Encoder<'_, D>,
6227            offset: usize,
6228            _depth: fidl::encoding::Depth,
6229        ) -> fidl::Result<()> {
6230            encoder.debug_check_bounds::<AudioCapturerSetUsage2Request>(offset);
6231            // Delegate to tuple encoding.
6232            fidl::encoding::Encode::<AudioCapturerSetUsage2Request, D>::encode(
6233                (<AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),),
6234                encoder,
6235                offset,
6236                _depth,
6237            )
6238        }
6239    }
6240    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioCaptureUsage2, D>>
6241        fidl::encoding::Encode<AudioCapturerSetUsage2Request, D> for (T0,)
6242    {
6243        #[inline]
6244        unsafe fn encode(
6245            self,
6246            encoder: &mut fidl::encoding::Encoder<'_, D>,
6247            offset: usize,
6248            depth: fidl::encoding::Depth,
6249        ) -> fidl::Result<()> {
6250            encoder.debug_check_bounds::<AudioCapturerSetUsage2Request>(offset);
6251            // Zero out padding regions. There's no need to apply masks
6252            // because the unmasked parts will be overwritten by fields.
6253            // Write the fields.
6254            self.0.encode(encoder, offset + 0, depth)?;
6255            Ok(())
6256        }
6257    }
6258
6259    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6260        for AudioCapturerSetUsage2Request
6261    {
6262        #[inline(always)]
6263        fn new_empty() -> Self {
6264            Self { usage: fidl::new_empty!(AudioCaptureUsage2, D) }
6265        }
6266
6267        #[inline]
6268        unsafe fn decode(
6269            &mut self,
6270            decoder: &mut fidl::encoding::Decoder<'_, D>,
6271            offset: usize,
6272            _depth: fidl::encoding::Depth,
6273        ) -> fidl::Result<()> {
6274            decoder.debug_check_bounds::<Self>(offset);
6275            // Verify that padding bytes are zero.
6276            fidl::decode!(AudioCaptureUsage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
6277            Ok(())
6278        }
6279    }
6280
6281    impl fidl::encoding::ValueTypeMarker for AudioCapturerSetUsageRequest {
6282        type Borrowed<'a> = &'a Self;
6283        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6284            value
6285        }
6286    }
6287
6288    unsafe impl fidl::encoding::TypeMarker for AudioCapturerSetUsageRequest {
6289        type Owned = Self;
6290
6291        #[inline(always)]
6292        fn inline_align(_context: fidl::encoding::Context) -> usize {
6293            4
6294        }
6295
6296        #[inline(always)]
6297        fn inline_size(_context: fidl::encoding::Context) -> usize {
6298            4
6299        }
6300    }
6301
6302    unsafe impl<D: fidl::encoding::ResourceDialect>
6303        fidl::encoding::Encode<AudioCapturerSetUsageRequest, D> for &AudioCapturerSetUsageRequest
6304    {
6305        #[inline]
6306        unsafe fn encode(
6307            self,
6308            encoder: &mut fidl::encoding::Encoder<'_, D>,
6309            offset: usize,
6310            _depth: fidl::encoding::Depth,
6311        ) -> fidl::Result<()> {
6312            encoder.debug_check_bounds::<AudioCapturerSetUsageRequest>(offset);
6313            // Delegate to tuple encoding.
6314            fidl::encoding::Encode::<AudioCapturerSetUsageRequest, D>::encode(
6315                (<AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),),
6316                encoder,
6317                offset,
6318                _depth,
6319            )
6320        }
6321    }
6322    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioCaptureUsage, D>>
6323        fidl::encoding::Encode<AudioCapturerSetUsageRequest, D> for (T0,)
6324    {
6325        #[inline]
6326        unsafe fn encode(
6327            self,
6328            encoder: &mut fidl::encoding::Encoder<'_, D>,
6329            offset: usize,
6330            depth: fidl::encoding::Depth,
6331        ) -> fidl::Result<()> {
6332            encoder.debug_check_bounds::<AudioCapturerSetUsageRequest>(offset);
6333            // Zero out padding regions. There's no need to apply masks
6334            // because the unmasked parts will be overwritten by fields.
6335            // Write the fields.
6336            self.0.encode(encoder, offset + 0, depth)?;
6337            Ok(())
6338        }
6339    }
6340
6341    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6342        for AudioCapturerSetUsageRequest
6343    {
6344        #[inline(always)]
6345        fn new_empty() -> Self {
6346            Self { usage: fidl::new_empty!(AudioCaptureUsage, D) }
6347        }
6348
6349        #[inline]
6350        unsafe fn decode(
6351            &mut self,
6352            decoder: &mut fidl::encoding::Decoder<'_, D>,
6353            offset: usize,
6354            _depth: fidl::encoding::Depth,
6355        ) -> fidl::Result<()> {
6356            decoder.debug_check_bounds::<Self>(offset);
6357            // Verify that padding bytes are zero.
6358            fidl::decode!(AudioCaptureUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
6359            Ok(())
6360        }
6361    }
6362
6363    impl fidl::encoding::ValueTypeMarker for AudioCapturerStartAsyncCaptureRequest {
6364        type Borrowed<'a> = &'a Self;
6365        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6366            value
6367        }
6368    }
6369
6370    unsafe impl fidl::encoding::TypeMarker for AudioCapturerStartAsyncCaptureRequest {
6371        type Owned = Self;
6372
6373        #[inline(always)]
6374        fn inline_align(_context: fidl::encoding::Context) -> usize {
6375            4
6376        }
6377
6378        #[inline(always)]
6379        fn inline_size(_context: fidl::encoding::Context) -> usize {
6380            4
6381        }
6382        #[inline(always)]
6383        fn encode_is_copy() -> bool {
6384            true
6385        }
6386
6387        #[inline(always)]
6388        fn decode_is_copy() -> bool {
6389            true
6390        }
6391    }
6392
6393    unsafe impl<D: fidl::encoding::ResourceDialect>
6394        fidl::encoding::Encode<AudioCapturerStartAsyncCaptureRequest, D>
6395        for &AudioCapturerStartAsyncCaptureRequest
6396    {
6397        #[inline]
6398        unsafe fn encode(
6399            self,
6400            encoder: &mut fidl::encoding::Encoder<'_, D>,
6401            offset: usize,
6402            _depth: fidl::encoding::Depth,
6403        ) -> fidl::Result<()> {
6404            encoder.debug_check_bounds::<AudioCapturerStartAsyncCaptureRequest>(offset);
6405            unsafe {
6406                // Copy the object into the buffer.
6407                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
6408                (buf_ptr as *mut AudioCapturerStartAsyncCaptureRequest)
6409                    .write_unaligned((self as *const AudioCapturerStartAsyncCaptureRequest).read());
6410                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
6411                // done second because the memcpy will write garbage to these bytes.
6412            }
6413            Ok(())
6414        }
6415    }
6416    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
6417        fidl::encoding::Encode<AudioCapturerStartAsyncCaptureRequest, D> for (T0,)
6418    {
6419        #[inline]
6420        unsafe fn encode(
6421            self,
6422            encoder: &mut fidl::encoding::Encoder<'_, D>,
6423            offset: usize,
6424            depth: fidl::encoding::Depth,
6425        ) -> fidl::Result<()> {
6426            encoder.debug_check_bounds::<AudioCapturerStartAsyncCaptureRequest>(offset);
6427            // Zero out padding regions. There's no need to apply masks
6428            // because the unmasked parts will be overwritten by fields.
6429            // Write the fields.
6430            self.0.encode(encoder, offset + 0, depth)?;
6431            Ok(())
6432        }
6433    }
6434
6435    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6436        for AudioCapturerStartAsyncCaptureRequest
6437    {
6438        #[inline(always)]
6439        fn new_empty() -> Self {
6440            Self { frames_per_packet: fidl::new_empty!(u32, D) }
6441        }
6442
6443        #[inline]
6444        unsafe fn decode(
6445            &mut self,
6446            decoder: &mut fidl::encoding::Decoder<'_, D>,
6447            offset: usize,
6448            _depth: fidl::encoding::Depth,
6449        ) -> fidl::Result<()> {
6450            decoder.debug_check_bounds::<Self>(offset);
6451            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
6452            // Verify that padding bytes are zero.
6453            // Copy from the buffer into the object.
6454            unsafe {
6455                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
6456            }
6457            Ok(())
6458        }
6459    }
6460
6461    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatAac {
6462        type Borrowed<'a> = &'a Self;
6463        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6464            value
6465        }
6466    }
6467
6468    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatAac {
6469        type Owned = Self;
6470
6471        #[inline(always)]
6472        fn inline_align(_context: fidl::encoding::Context) -> usize {
6473            1
6474        }
6475
6476        #[inline(always)]
6477        fn inline_size(_context: fidl::encoding::Context) -> usize {
6478            1
6479        }
6480    }
6481
6482    unsafe impl<D: fidl::encoding::ResourceDialect>
6483        fidl::encoding::Encode<AudioCompressedFormatAac, D> for &AudioCompressedFormatAac
6484    {
6485        #[inline]
6486        unsafe fn encode(
6487            self,
6488            encoder: &mut fidl::encoding::Encoder<'_, D>,
6489            offset: usize,
6490            _depth: fidl::encoding::Depth,
6491        ) -> fidl::Result<()> {
6492            encoder.debug_check_bounds::<AudioCompressedFormatAac>(offset);
6493            encoder.write_num(0u8, offset);
6494            Ok(())
6495        }
6496    }
6497
6498    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6499        for AudioCompressedFormatAac
6500    {
6501        #[inline(always)]
6502        fn new_empty() -> Self {
6503            Self
6504        }
6505
6506        #[inline]
6507        unsafe fn decode(
6508            &mut self,
6509            decoder: &mut fidl::encoding::Decoder<'_, D>,
6510            offset: usize,
6511            _depth: fidl::encoding::Depth,
6512        ) -> fidl::Result<()> {
6513            decoder.debug_check_bounds::<Self>(offset);
6514            match decoder.read_num::<u8>(offset) {
6515                0 => Ok(()),
6516                _ => Err(fidl::Error::Invalid),
6517            }
6518        }
6519    }
6520
6521    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatSbc {
6522        type Borrowed<'a> = &'a Self;
6523        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6524            value
6525        }
6526    }
6527
6528    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatSbc {
6529        type Owned = Self;
6530
6531        #[inline(always)]
6532        fn inline_align(_context: fidl::encoding::Context) -> usize {
6533            1
6534        }
6535
6536        #[inline(always)]
6537        fn inline_size(_context: fidl::encoding::Context) -> usize {
6538            1
6539        }
6540    }
6541
6542    unsafe impl<D: fidl::encoding::ResourceDialect>
6543        fidl::encoding::Encode<AudioCompressedFormatSbc, D> for &AudioCompressedFormatSbc
6544    {
6545        #[inline]
6546        unsafe fn encode(
6547            self,
6548            encoder: &mut fidl::encoding::Encoder<'_, D>,
6549            offset: usize,
6550            _depth: fidl::encoding::Depth,
6551        ) -> fidl::Result<()> {
6552            encoder.debug_check_bounds::<AudioCompressedFormatSbc>(offset);
6553            encoder.write_num(0u8, offset);
6554            Ok(())
6555        }
6556    }
6557
6558    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6559        for AudioCompressedFormatSbc
6560    {
6561        #[inline(always)]
6562        fn new_empty() -> Self {
6563            Self
6564        }
6565
6566        #[inline]
6567        unsafe fn decode(
6568            &mut self,
6569            decoder: &mut fidl::encoding::Decoder<'_, D>,
6570            offset: usize,
6571            _depth: fidl::encoding::Depth,
6572        ) -> fidl::Result<()> {
6573            decoder.debug_check_bounds::<Self>(offset);
6574            match decoder.read_num::<u8>(offset) {
6575                0 => Ok(()),
6576                _ => Err(fidl::Error::Invalid),
6577            }
6578        }
6579    }
6580
6581    impl fidl::encoding::ValueTypeMarker for AudioConsumerSetRateRequest {
6582        type Borrowed<'a> = &'a Self;
6583        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6584            value
6585        }
6586    }
6587
6588    unsafe impl fidl::encoding::TypeMarker for AudioConsumerSetRateRequest {
6589        type Owned = Self;
6590
6591        #[inline(always)]
6592        fn inline_align(_context: fidl::encoding::Context) -> usize {
6593            4
6594        }
6595
6596        #[inline(always)]
6597        fn inline_size(_context: fidl::encoding::Context) -> usize {
6598            4
6599        }
6600    }
6601
6602    unsafe impl<D: fidl::encoding::ResourceDialect>
6603        fidl::encoding::Encode<AudioConsumerSetRateRequest, D> for &AudioConsumerSetRateRequest
6604    {
6605        #[inline]
6606        unsafe fn encode(
6607            self,
6608            encoder: &mut fidl::encoding::Encoder<'_, D>,
6609            offset: usize,
6610            _depth: fidl::encoding::Depth,
6611        ) -> fidl::Result<()> {
6612            encoder.debug_check_bounds::<AudioConsumerSetRateRequest>(offset);
6613            // Delegate to tuple encoding.
6614            fidl::encoding::Encode::<AudioConsumerSetRateRequest, D>::encode(
6615                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.rate),),
6616                encoder,
6617                offset,
6618                _depth,
6619            )
6620        }
6621    }
6622    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
6623        fidl::encoding::Encode<AudioConsumerSetRateRequest, D> for (T0,)
6624    {
6625        #[inline]
6626        unsafe fn encode(
6627            self,
6628            encoder: &mut fidl::encoding::Encoder<'_, D>,
6629            offset: usize,
6630            depth: fidl::encoding::Depth,
6631        ) -> fidl::Result<()> {
6632            encoder.debug_check_bounds::<AudioConsumerSetRateRequest>(offset);
6633            // Zero out padding regions. There's no need to apply masks
6634            // because the unmasked parts will be overwritten by fields.
6635            // Write the fields.
6636            self.0.encode(encoder, offset + 0, depth)?;
6637            Ok(())
6638        }
6639    }
6640
6641    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6642        for AudioConsumerSetRateRequest
6643    {
6644        #[inline(always)]
6645        fn new_empty() -> Self {
6646            Self { rate: fidl::new_empty!(f32, D) }
6647        }
6648
6649        #[inline]
6650        unsafe fn decode(
6651            &mut self,
6652            decoder: &mut fidl::encoding::Decoder<'_, D>,
6653            offset: usize,
6654            _depth: fidl::encoding::Depth,
6655        ) -> fidl::Result<()> {
6656            decoder.debug_check_bounds::<Self>(offset);
6657            // Verify that padding bytes are zero.
6658            fidl::decode!(f32, D, &mut self.rate, decoder, offset + 0, _depth)?;
6659            Ok(())
6660        }
6661    }
6662
6663    impl fidl::encoding::ValueTypeMarker for AudioConsumerStartRequest {
6664        type Borrowed<'a> = &'a Self;
6665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6666            value
6667        }
6668    }
6669
6670    unsafe impl fidl::encoding::TypeMarker for AudioConsumerStartRequest {
6671        type Owned = Self;
6672
6673        #[inline(always)]
6674        fn inline_align(_context: fidl::encoding::Context) -> usize {
6675            8
6676        }
6677
6678        #[inline(always)]
6679        fn inline_size(_context: fidl::encoding::Context) -> usize {
6680            24
6681        }
6682    }
6683
6684    unsafe impl<D: fidl::encoding::ResourceDialect>
6685        fidl::encoding::Encode<AudioConsumerStartRequest, D> for &AudioConsumerStartRequest
6686    {
6687        #[inline]
6688        unsafe fn encode(
6689            self,
6690            encoder: &mut fidl::encoding::Encoder<'_, D>,
6691            offset: usize,
6692            _depth: fidl::encoding::Depth,
6693        ) -> fidl::Result<()> {
6694            encoder.debug_check_bounds::<AudioConsumerStartRequest>(offset);
6695            // Delegate to tuple encoding.
6696            fidl::encoding::Encode::<AudioConsumerStartRequest, D>::encode(
6697                (
6698                    <AudioConsumerStartFlags as fidl::encoding::ValueTypeMarker>::borrow(
6699                        &self.flags,
6700                    ),
6701                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(&self.reference_time),
6702                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(&self.media_time),
6703                ),
6704                encoder,
6705                offset,
6706                _depth,
6707            )
6708        }
6709    }
6710    unsafe impl<
6711            D: fidl::encoding::ResourceDialect,
6712            T0: fidl::encoding::Encode<AudioConsumerStartFlags, D>,
6713            T1: fidl::encoding::Encode<i64, D>,
6714            T2: fidl::encoding::Encode<i64, D>,
6715        > fidl::encoding::Encode<AudioConsumerStartRequest, D> for (T0, T1, T2)
6716    {
6717        #[inline]
6718        unsafe fn encode(
6719            self,
6720            encoder: &mut fidl::encoding::Encoder<'_, D>,
6721            offset: usize,
6722            depth: fidl::encoding::Depth,
6723        ) -> fidl::Result<()> {
6724            encoder.debug_check_bounds::<AudioConsumerStartRequest>(offset);
6725            // Zero out padding regions. There's no need to apply masks
6726            // because the unmasked parts will be overwritten by fields.
6727            unsafe {
6728                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
6729                (ptr as *mut u64).write_unaligned(0);
6730            }
6731            // Write the fields.
6732            self.0.encode(encoder, offset + 0, depth)?;
6733            self.1.encode(encoder, offset + 8, depth)?;
6734            self.2.encode(encoder, offset + 16, depth)?;
6735            Ok(())
6736        }
6737    }
6738
6739    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6740        for AudioConsumerStartRequest
6741    {
6742        #[inline(always)]
6743        fn new_empty() -> Self {
6744            Self {
6745                flags: fidl::new_empty!(AudioConsumerStartFlags, D),
6746                reference_time: fidl::new_empty!(i64, D),
6747                media_time: fidl::new_empty!(i64, D),
6748            }
6749        }
6750
6751        #[inline]
6752        unsafe fn decode(
6753            &mut self,
6754            decoder: &mut fidl::encoding::Decoder<'_, D>,
6755            offset: usize,
6756            _depth: fidl::encoding::Depth,
6757        ) -> fidl::Result<()> {
6758            decoder.debug_check_bounds::<Self>(offset);
6759            // Verify that padding bytes are zero.
6760            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
6761            let padval = unsafe { (ptr as *const u64).read_unaligned() };
6762            let mask = 0xffffffff00000000u64;
6763            let maskedval = padval & mask;
6764            if maskedval != 0 {
6765                return Err(fidl::Error::NonZeroPadding {
6766                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
6767                });
6768            }
6769            fidl::decode!(
6770                AudioConsumerStartFlags,
6771                D,
6772                &mut self.flags,
6773                decoder,
6774                offset + 0,
6775                _depth
6776            )?;
6777            fidl::decode!(i64, D, &mut self.reference_time, decoder, offset + 8, _depth)?;
6778            fidl::decode!(i64, D, &mut self.media_time, decoder, offset + 16, _depth)?;
6779            Ok(())
6780        }
6781    }
6782
6783    impl fidl::encoding::ValueTypeMarker for AudioConsumerWatchStatusResponse {
6784        type Borrowed<'a> = &'a Self;
6785        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6786            value
6787        }
6788    }
6789
6790    unsafe impl fidl::encoding::TypeMarker for AudioConsumerWatchStatusResponse {
6791        type Owned = Self;
6792
6793        #[inline(always)]
6794        fn inline_align(_context: fidl::encoding::Context) -> usize {
6795            8
6796        }
6797
6798        #[inline(always)]
6799        fn inline_size(_context: fidl::encoding::Context) -> usize {
6800            16
6801        }
6802    }
6803
6804    unsafe impl<D: fidl::encoding::ResourceDialect>
6805        fidl::encoding::Encode<AudioConsumerWatchStatusResponse, D>
6806        for &AudioConsumerWatchStatusResponse
6807    {
6808        #[inline]
6809        unsafe fn encode(
6810            self,
6811            encoder: &mut fidl::encoding::Encoder<'_, D>,
6812            offset: usize,
6813            _depth: fidl::encoding::Depth,
6814        ) -> fidl::Result<()> {
6815            encoder.debug_check_bounds::<AudioConsumerWatchStatusResponse>(offset);
6816            // Delegate to tuple encoding.
6817            fidl::encoding::Encode::<AudioConsumerWatchStatusResponse, D>::encode(
6818                (<AudioConsumerStatus as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
6819                encoder,
6820                offset,
6821                _depth,
6822            )
6823        }
6824    }
6825    unsafe impl<
6826            D: fidl::encoding::ResourceDialect,
6827            T0: fidl::encoding::Encode<AudioConsumerStatus, D>,
6828        > fidl::encoding::Encode<AudioConsumerWatchStatusResponse, D> for (T0,)
6829    {
6830        #[inline]
6831        unsafe fn encode(
6832            self,
6833            encoder: &mut fidl::encoding::Encoder<'_, D>,
6834            offset: usize,
6835            depth: fidl::encoding::Depth,
6836        ) -> fidl::Result<()> {
6837            encoder.debug_check_bounds::<AudioConsumerWatchStatusResponse>(offset);
6838            // Zero out padding regions. There's no need to apply masks
6839            // because the unmasked parts will be overwritten by fields.
6840            // Write the fields.
6841            self.0.encode(encoder, offset + 0, depth)?;
6842            Ok(())
6843        }
6844    }
6845
6846    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6847        for AudioConsumerWatchStatusResponse
6848    {
6849        #[inline(always)]
6850        fn new_empty() -> Self {
6851            Self { status: fidl::new_empty!(AudioConsumerStatus, D) }
6852        }
6853
6854        #[inline]
6855        unsafe fn decode(
6856            &mut self,
6857            decoder: &mut fidl::encoding::Decoder<'_, D>,
6858            offset: usize,
6859            _depth: fidl::encoding::Depth,
6860        ) -> fidl::Result<()> {
6861            decoder.debug_check_bounds::<Self>(offset);
6862            // Verify that padding bytes are zero.
6863            fidl::decode!(AudioConsumerStatus, D, &mut self.status, decoder, offset + 0, _depth)?;
6864            Ok(())
6865        }
6866    }
6867
6868    impl fidl::encoding::ValueTypeMarker for AudioCoreEnableDeviceSettingsRequest {
6869        type Borrowed<'a> = &'a Self;
6870        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6871            value
6872        }
6873    }
6874
6875    unsafe impl fidl::encoding::TypeMarker for AudioCoreEnableDeviceSettingsRequest {
6876        type Owned = Self;
6877
6878        #[inline(always)]
6879        fn inline_align(_context: fidl::encoding::Context) -> usize {
6880            1
6881        }
6882
6883        #[inline(always)]
6884        fn inline_size(_context: fidl::encoding::Context) -> usize {
6885            1
6886        }
6887    }
6888
6889    unsafe impl<D: fidl::encoding::ResourceDialect>
6890        fidl::encoding::Encode<AudioCoreEnableDeviceSettingsRequest, D>
6891        for &AudioCoreEnableDeviceSettingsRequest
6892    {
6893        #[inline]
6894        unsafe fn encode(
6895            self,
6896            encoder: &mut fidl::encoding::Encoder<'_, D>,
6897            offset: usize,
6898            _depth: fidl::encoding::Depth,
6899        ) -> fidl::Result<()> {
6900            encoder.debug_check_bounds::<AudioCoreEnableDeviceSettingsRequest>(offset);
6901            // Delegate to tuple encoding.
6902            fidl::encoding::Encode::<AudioCoreEnableDeviceSettingsRequest, D>::encode(
6903                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.enabled),),
6904                encoder,
6905                offset,
6906                _depth,
6907            )
6908        }
6909    }
6910    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
6911        fidl::encoding::Encode<AudioCoreEnableDeviceSettingsRequest, D> for (T0,)
6912    {
6913        #[inline]
6914        unsafe fn encode(
6915            self,
6916            encoder: &mut fidl::encoding::Encoder<'_, D>,
6917            offset: usize,
6918            depth: fidl::encoding::Depth,
6919        ) -> fidl::Result<()> {
6920            encoder.debug_check_bounds::<AudioCoreEnableDeviceSettingsRequest>(offset);
6921            // Zero out padding regions. There's no need to apply masks
6922            // because the unmasked parts will be overwritten by fields.
6923            // Write the fields.
6924            self.0.encode(encoder, offset + 0, depth)?;
6925            Ok(())
6926        }
6927    }
6928
6929    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6930        for AudioCoreEnableDeviceSettingsRequest
6931    {
6932        #[inline(always)]
6933        fn new_empty() -> Self {
6934            Self { enabled: fidl::new_empty!(bool, D) }
6935        }
6936
6937        #[inline]
6938        unsafe fn decode(
6939            &mut self,
6940            decoder: &mut fidl::encoding::Decoder<'_, D>,
6941            offset: usize,
6942            _depth: fidl::encoding::Depth,
6943        ) -> fidl::Result<()> {
6944            decoder.debug_check_bounds::<Self>(offset);
6945            // Verify that padding bytes are zero.
6946            fidl::decode!(bool, D, &mut self.enabled, decoder, offset + 0, _depth)?;
6947            Ok(())
6948        }
6949    }
6950
6951    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolume2Request {
6952        type Borrowed<'a> = &'a Self;
6953        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6954            value
6955        }
6956    }
6957
6958    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolume2Request {
6959        type Owned = Self;
6960
6961        #[inline(always)]
6962        fn inline_align(_context: fidl::encoding::Context) -> usize {
6963            8
6964        }
6965
6966        #[inline(always)]
6967        fn inline_size(_context: fidl::encoding::Context) -> usize {
6968            24
6969        }
6970    }
6971
6972    unsafe impl<D: fidl::encoding::ResourceDialect>
6973        fidl::encoding::Encode<AudioCoreGetDbFromVolume2Request, D>
6974        for &AudioCoreGetDbFromVolume2Request
6975    {
6976        #[inline]
6977        unsafe fn encode(
6978            self,
6979            encoder: &mut fidl::encoding::Encoder<'_, D>,
6980            offset: usize,
6981            _depth: fidl::encoding::Depth,
6982        ) -> fidl::Result<()> {
6983            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Request>(offset);
6984            // Delegate to tuple encoding.
6985            fidl::encoding::Encode::<AudioCoreGetDbFromVolume2Request, D>::encode(
6986                (
6987                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
6988                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),
6989                ),
6990                encoder,
6991                offset,
6992                _depth,
6993            )
6994        }
6995    }
6996    unsafe impl<
6997            D: fidl::encoding::ResourceDialect,
6998            T0: fidl::encoding::Encode<Usage2, D>,
6999            T1: fidl::encoding::Encode<f32, D>,
7000        > fidl::encoding::Encode<AudioCoreGetDbFromVolume2Request, D> for (T0, T1)
7001    {
7002        #[inline]
7003        unsafe fn encode(
7004            self,
7005            encoder: &mut fidl::encoding::Encoder<'_, D>,
7006            offset: usize,
7007            depth: fidl::encoding::Depth,
7008        ) -> fidl::Result<()> {
7009            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Request>(offset);
7010            // Zero out padding regions. There's no need to apply masks
7011            // because the unmasked parts will be overwritten by fields.
7012            unsafe {
7013                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7014                (ptr as *mut u64).write_unaligned(0);
7015            }
7016            // Write the fields.
7017            self.0.encode(encoder, offset + 0, depth)?;
7018            self.1.encode(encoder, offset + 16, depth)?;
7019            Ok(())
7020        }
7021    }
7022
7023    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7024        for AudioCoreGetDbFromVolume2Request
7025    {
7026        #[inline(always)]
7027        fn new_empty() -> Self {
7028            Self { usage: fidl::new_empty!(Usage2, D), volume: fidl::new_empty!(f32, D) }
7029        }
7030
7031        #[inline]
7032        unsafe fn decode(
7033            &mut self,
7034            decoder: &mut fidl::encoding::Decoder<'_, D>,
7035            offset: usize,
7036            _depth: fidl::encoding::Depth,
7037        ) -> fidl::Result<()> {
7038            decoder.debug_check_bounds::<Self>(offset);
7039            // Verify that padding bytes are zero.
7040            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7041            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7042            let mask = 0xffffffff00000000u64;
7043            let maskedval = padval & mask;
7044            if maskedval != 0 {
7045                return Err(fidl::Error::NonZeroPadding {
7046                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7047                });
7048            }
7049            fidl::decode!(Usage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
7050            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 16, _depth)?;
7051            Ok(())
7052        }
7053    }
7054
7055    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolumeRequest {
7056        type Borrowed<'a> = &'a Self;
7057        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7058            value
7059        }
7060    }
7061
7062    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolumeRequest {
7063        type Owned = Self;
7064
7065        #[inline(always)]
7066        fn inline_align(_context: fidl::encoding::Context) -> usize {
7067            8
7068        }
7069
7070        #[inline(always)]
7071        fn inline_size(_context: fidl::encoding::Context) -> usize {
7072            24
7073        }
7074    }
7075
7076    unsafe impl<D: fidl::encoding::ResourceDialect>
7077        fidl::encoding::Encode<AudioCoreGetDbFromVolumeRequest, D>
7078        for &AudioCoreGetDbFromVolumeRequest
7079    {
7080        #[inline]
7081        unsafe fn encode(
7082            self,
7083            encoder: &mut fidl::encoding::Encoder<'_, D>,
7084            offset: usize,
7085            _depth: fidl::encoding::Depth,
7086        ) -> fidl::Result<()> {
7087            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeRequest>(offset);
7088            // Delegate to tuple encoding.
7089            fidl::encoding::Encode::<AudioCoreGetDbFromVolumeRequest, D>::encode(
7090                (
7091                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7092                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),
7093                ),
7094                encoder,
7095                offset,
7096                _depth,
7097            )
7098        }
7099    }
7100    unsafe impl<
7101            D: fidl::encoding::ResourceDialect,
7102            T0: fidl::encoding::Encode<Usage, D>,
7103            T1: fidl::encoding::Encode<f32, D>,
7104        > fidl::encoding::Encode<AudioCoreGetDbFromVolumeRequest, D> for (T0, T1)
7105    {
7106        #[inline]
7107        unsafe fn encode(
7108            self,
7109            encoder: &mut fidl::encoding::Encoder<'_, D>,
7110            offset: usize,
7111            depth: fidl::encoding::Depth,
7112        ) -> fidl::Result<()> {
7113            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeRequest>(offset);
7114            // Zero out padding regions. There's no need to apply masks
7115            // because the unmasked parts will be overwritten by fields.
7116            unsafe {
7117                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7118                (ptr as *mut u64).write_unaligned(0);
7119            }
7120            // Write the fields.
7121            self.0.encode(encoder, offset + 0, depth)?;
7122            self.1.encode(encoder, offset + 16, depth)?;
7123            Ok(())
7124        }
7125    }
7126
7127    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7128        for AudioCoreGetDbFromVolumeRequest
7129    {
7130        #[inline(always)]
7131        fn new_empty() -> Self {
7132            Self { usage: fidl::new_empty!(Usage, D), volume: fidl::new_empty!(f32, D) }
7133        }
7134
7135        #[inline]
7136        unsafe fn decode(
7137            &mut self,
7138            decoder: &mut fidl::encoding::Decoder<'_, D>,
7139            offset: usize,
7140            _depth: fidl::encoding::Depth,
7141        ) -> fidl::Result<()> {
7142            decoder.debug_check_bounds::<Self>(offset);
7143            // Verify that padding bytes are zero.
7144            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7145            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7146            let mask = 0xffffffff00000000u64;
7147            let maskedval = padval & mask;
7148            if maskedval != 0 {
7149                return Err(fidl::Error::NonZeroPadding {
7150                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7151                });
7152            }
7153            fidl::decode!(Usage, D, &mut self.usage, decoder, offset + 0, _depth)?;
7154            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 16, _depth)?;
7155            Ok(())
7156        }
7157    }
7158
7159    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolumeResponse {
7160        type Borrowed<'a> = &'a Self;
7161        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7162            value
7163        }
7164    }
7165
7166    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolumeResponse {
7167        type Owned = Self;
7168
7169        #[inline(always)]
7170        fn inline_align(_context: fidl::encoding::Context) -> usize {
7171            4
7172        }
7173
7174        #[inline(always)]
7175        fn inline_size(_context: fidl::encoding::Context) -> usize {
7176            4
7177        }
7178    }
7179
7180    unsafe impl<D: fidl::encoding::ResourceDialect>
7181        fidl::encoding::Encode<AudioCoreGetDbFromVolumeResponse, D>
7182        for &AudioCoreGetDbFromVolumeResponse
7183    {
7184        #[inline]
7185        unsafe fn encode(
7186            self,
7187            encoder: &mut fidl::encoding::Encoder<'_, D>,
7188            offset: usize,
7189            _depth: fidl::encoding::Depth,
7190        ) -> fidl::Result<()> {
7191            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeResponse>(offset);
7192            // Delegate to tuple encoding.
7193            fidl::encoding::Encode::<AudioCoreGetDbFromVolumeResponse, D>::encode(
7194                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),),
7195                encoder,
7196                offset,
7197                _depth,
7198            )
7199        }
7200    }
7201    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
7202        fidl::encoding::Encode<AudioCoreGetDbFromVolumeResponse, D> for (T0,)
7203    {
7204        #[inline]
7205        unsafe fn encode(
7206            self,
7207            encoder: &mut fidl::encoding::Encoder<'_, D>,
7208            offset: usize,
7209            depth: fidl::encoding::Depth,
7210        ) -> fidl::Result<()> {
7211            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeResponse>(offset);
7212            // Zero out padding regions. There's no need to apply masks
7213            // because the unmasked parts will be overwritten by fields.
7214            // Write the fields.
7215            self.0.encode(encoder, offset + 0, depth)?;
7216            Ok(())
7217        }
7218    }
7219
7220    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7221        for AudioCoreGetDbFromVolumeResponse
7222    {
7223        #[inline(always)]
7224        fn new_empty() -> Self {
7225            Self { gain_db: fidl::new_empty!(f32, D) }
7226        }
7227
7228        #[inline]
7229        unsafe fn decode(
7230            &mut self,
7231            decoder: &mut fidl::encoding::Decoder<'_, D>,
7232            offset: usize,
7233            _depth: fidl::encoding::Depth,
7234        ) -> fidl::Result<()> {
7235            decoder.debug_check_bounds::<Self>(offset);
7236            // Verify that padding bytes are zero.
7237            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 0, _depth)?;
7238            Ok(())
7239        }
7240    }
7241
7242    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDb2Request {
7243        type Borrowed<'a> = &'a Self;
7244        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7245            value
7246        }
7247    }
7248
7249    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDb2Request {
7250        type Owned = Self;
7251
7252        #[inline(always)]
7253        fn inline_align(_context: fidl::encoding::Context) -> usize {
7254            8
7255        }
7256
7257        #[inline(always)]
7258        fn inline_size(_context: fidl::encoding::Context) -> usize {
7259            24
7260        }
7261    }
7262
7263    unsafe impl<D: fidl::encoding::ResourceDialect>
7264        fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Request, D>
7265        for &AudioCoreGetVolumeFromDb2Request
7266    {
7267        #[inline]
7268        unsafe fn encode(
7269            self,
7270            encoder: &mut fidl::encoding::Encoder<'_, D>,
7271            offset: usize,
7272            _depth: fidl::encoding::Depth,
7273        ) -> fidl::Result<()> {
7274            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Request>(offset);
7275            // Delegate to tuple encoding.
7276            fidl::encoding::Encode::<AudioCoreGetVolumeFromDb2Request, D>::encode(
7277                (
7278                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7279                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7280                ),
7281                encoder,
7282                offset,
7283                _depth,
7284            )
7285        }
7286    }
7287    unsafe impl<
7288            D: fidl::encoding::ResourceDialect,
7289            T0: fidl::encoding::Encode<Usage2, D>,
7290            T1: fidl::encoding::Encode<f32, D>,
7291        > fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Request, D> for (T0, T1)
7292    {
7293        #[inline]
7294        unsafe fn encode(
7295            self,
7296            encoder: &mut fidl::encoding::Encoder<'_, D>,
7297            offset: usize,
7298            depth: fidl::encoding::Depth,
7299        ) -> fidl::Result<()> {
7300            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Request>(offset);
7301            // Zero out padding regions. There's no need to apply masks
7302            // because the unmasked parts will be overwritten by fields.
7303            unsafe {
7304                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7305                (ptr as *mut u64).write_unaligned(0);
7306            }
7307            // Write the fields.
7308            self.0.encode(encoder, offset + 0, depth)?;
7309            self.1.encode(encoder, offset + 16, depth)?;
7310            Ok(())
7311        }
7312    }
7313
7314    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7315        for AudioCoreGetVolumeFromDb2Request
7316    {
7317        #[inline(always)]
7318        fn new_empty() -> Self {
7319            Self { usage: fidl::new_empty!(Usage2, D), gain_db: fidl::new_empty!(f32, D) }
7320        }
7321
7322        #[inline]
7323        unsafe fn decode(
7324            &mut self,
7325            decoder: &mut fidl::encoding::Decoder<'_, D>,
7326            offset: usize,
7327            _depth: fidl::encoding::Depth,
7328        ) -> fidl::Result<()> {
7329            decoder.debug_check_bounds::<Self>(offset);
7330            // Verify that padding bytes are zero.
7331            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7332            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7333            let mask = 0xffffffff00000000u64;
7334            let maskedval = padval & mask;
7335            if maskedval != 0 {
7336                return Err(fidl::Error::NonZeroPadding {
7337                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7338                });
7339            }
7340            fidl::decode!(Usage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
7341            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 16, _depth)?;
7342            Ok(())
7343        }
7344    }
7345
7346    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDbRequest {
7347        type Borrowed<'a> = &'a Self;
7348        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7349            value
7350        }
7351    }
7352
7353    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDbRequest {
7354        type Owned = Self;
7355
7356        #[inline(always)]
7357        fn inline_align(_context: fidl::encoding::Context) -> usize {
7358            8
7359        }
7360
7361        #[inline(always)]
7362        fn inline_size(_context: fidl::encoding::Context) -> usize {
7363            24
7364        }
7365    }
7366
7367    unsafe impl<D: fidl::encoding::ResourceDialect>
7368        fidl::encoding::Encode<AudioCoreGetVolumeFromDbRequest, D>
7369        for &AudioCoreGetVolumeFromDbRequest
7370    {
7371        #[inline]
7372        unsafe fn encode(
7373            self,
7374            encoder: &mut fidl::encoding::Encoder<'_, D>,
7375            offset: usize,
7376            _depth: fidl::encoding::Depth,
7377        ) -> fidl::Result<()> {
7378            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbRequest>(offset);
7379            // Delegate to tuple encoding.
7380            fidl::encoding::Encode::<AudioCoreGetVolumeFromDbRequest, D>::encode(
7381                (
7382                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7383                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7384                ),
7385                encoder,
7386                offset,
7387                _depth,
7388            )
7389        }
7390    }
7391    unsafe impl<
7392            D: fidl::encoding::ResourceDialect,
7393            T0: fidl::encoding::Encode<Usage, D>,
7394            T1: fidl::encoding::Encode<f32, D>,
7395        > fidl::encoding::Encode<AudioCoreGetVolumeFromDbRequest, D> for (T0, T1)
7396    {
7397        #[inline]
7398        unsafe fn encode(
7399            self,
7400            encoder: &mut fidl::encoding::Encoder<'_, D>,
7401            offset: usize,
7402            depth: fidl::encoding::Depth,
7403        ) -> fidl::Result<()> {
7404            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbRequest>(offset);
7405            // Zero out padding regions. There's no need to apply masks
7406            // because the unmasked parts will be overwritten by fields.
7407            unsafe {
7408                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7409                (ptr as *mut u64).write_unaligned(0);
7410            }
7411            // Write the fields.
7412            self.0.encode(encoder, offset + 0, depth)?;
7413            self.1.encode(encoder, offset + 16, depth)?;
7414            Ok(())
7415        }
7416    }
7417
7418    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7419        for AudioCoreGetVolumeFromDbRequest
7420    {
7421        #[inline(always)]
7422        fn new_empty() -> Self {
7423            Self { usage: fidl::new_empty!(Usage, D), gain_db: fidl::new_empty!(f32, D) }
7424        }
7425
7426        #[inline]
7427        unsafe fn decode(
7428            &mut self,
7429            decoder: &mut fidl::encoding::Decoder<'_, D>,
7430            offset: usize,
7431            _depth: fidl::encoding::Depth,
7432        ) -> fidl::Result<()> {
7433            decoder.debug_check_bounds::<Self>(offset);
7434            // Verify that padding bytes are zero.
7435            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7436            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7437            let mask = 0xffffffff00000000u64;
7438            let maskedval = padval & mask;
7439            if maskedval != 0 {
7440                return Err(fidl::Error::NonZeroPadding {
7441                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7442                });
7443            }
7444            fidl::decode!(Usage, D, &mut self.usage, decoder, offset + 0, _depth)?;
7445            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 16, _depth)?;
7446            Ok(())
7447        }
7448    }
7449
7450    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDbResponse {
7451        type Borrowed<'a> = &'a Self;
7452        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7453            value
7454        }
7455    }
7456
7457    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDbResponse {
7458        type Owned = Self;
7459
7460        #[inline(always)]
7461        fn inline_align(_context: fidl::encoding::Context) -> usize {
7462            4
7463        }
7464
7465        #[inline(always)]
7466        fn inline_size(_context: fidl::encoding::Context) -> usize {
7467            4
7468        }
7469    }
7470
7471    unsafe impl<D: fidl::encoding::ResourceDialect>
7472        fidl::encoding::Encode<AudioCoreGetVolumeFromDbResponse, D>
7473        for &AudioCoreGetVolumeFromDbResponse
7474    {
7475        #[inline]
7476        unsafe fn encode(
7477            self,
7478            encoder: &mut fidl::encoding::Encoder<'_, D>,
7479            offset: usize,
7480            _depth: fidl::encoding::Depth,
7481        ) -> fidl::Result<()> {
7482            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbResponse>(offset);
7483            // Delegate to tuple encoding.
7484            fidl::encoding::Encode::<AudioCoreGetVolumeFromDbResponse, D>::encode(
7485                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),),
7486                encoder,
7487                offset,
7488                _depth,
7489            )
7490        }
7491    }
7492    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
7493        fidl::encoding::Encode<AudioCoreGetVolumeFromDbResponse, D> for (T0,)
7494    {
7495        #[inline]
7496        unsafe fn encode(
7497            self,
7498            encoder: &mut fidl::encoding::Encoder<'_, D>,
7499            offset: usize,
7500            depth: fidl::encoding::Depth,
7501        ) -> fidl::Result<()> {
7502            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbResponse>(offset);
7503            // Zero out padding regions. There's no need to apply masks
7504            // because the unmasked parts will be overwritten by fields.
7505            // Write the fields.
7506            self.0.encode(encoder, offset + 0, depth)?;
7507            Ok(())
7508        }
7509    }
7510
7511    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7512        for AudioCoreGetVolumeFromDbResponse
7513    {
7514        #[inline(always)]
7515        fn new_empty() -> Self {
7516            Self { volume: fidl::new_empty!(f32, D) }
7517        }
7518
7519        #[inline]
7520        unsafe fn decode(
7521            &mut self,
7522            decoder: &mut fidl::encoding::Decoder<'_, D>,
7523            offset: usize,
7524            _depth: fidl::encoding::Depth,
7525        ) -> fidl::Result<()> {
7526            decoder.debug_check_bounds::<Self>(offset);
7527            // Verify that padding bytes are zero.
7528            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 0, _depth)?;
7529            Ok(())
7530        }
7531    }
7532
7533    impl fidl::encoding::ValueTypeMarker for AudioCoreSetCaptureUsageGain2Request {
7534        type Borrowed<'a> = &'a Self;
7535        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7536            value
7537        }
7538    }
7539
7540    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetCaptureUsageGain2Request {
7541        type Owned = Self;
7542
7543        #[inline(always)]
7544        fn inline_align(_context: fidl::encoding::Context) -> usize {
7545            4
7546        }
7547
7548        #[inline(always)]
7549        fn inline_size(_context: fidl::encoding::Context) -> usize {
7550            8
7551        }
7552    }
7553
7554    unsafe impl<D: fidl::encoding::ResourceDialect>
7555        fidl::encoding::Encode<AudioCoreSetCaptureUsageGain2Request, D>
7556        for &AudioCoreSetCaptureUsageGain2Request
7557    {
7558        #[inline]
7559        unsafe fn encode(
7560            self,
7561            encoder: &mut fidl::encoding::Encoder<'_, D>,
7562            offset: usize,
7563            _depth: fidl::encoding::Depth,
7564        ) -> fidl::Result<()> {
7565            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGain2Request>(offset);
7566            // Delegate to tuple encoding.
7567            fidl::encoding::Encode::<AudioCoreSetCaptureUsageGain2Request, D>::encode(
7568                (
7569                    <AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7570                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7571                ),
7572                encoder,
7573                offset,
7574                _depth,
7575            )
7576        }
7577    }
7578    unsafe impl<
7579            D: fidl::encoding::ResourceDialect,
7580            T0: fidl::encoding::Encode<AudioCaptureUsage2, D>,
7581            T1: fidl::encoding::Encode<f32, D>,
7582        > fidl::encoding::Encode<AudioCoreSetCaptureUsageGain2Request, D> for (T0, T1)
7583    {
7584        #[inline]
7585        unsafe fn encode(
7586            self,
7587            encoder: &mut fidl::encoding::Encoder<'_, D>,
7588            offset: usize,
7589            depth: fidl::encoding::Depth,
7590        ) -> fidl::Result<()> {
7591            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGain2Request>(offset);
7592            // Zero out padding regions. There's no need to apply masks
7593            // because the unmasked parts will be overwritten by fields.
7594            // Write the fields.
7595            self.0.encode(encoder, offset + 0, depth)?;
7596            self.1.encode(encoder, offset + 4, depth)?;
7597            Ok(())
7598        }
7599    }
7600
7601    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7602        for AudioCoreSetCaptureUsageGain2Request
7603    {
7604        #[inline(always)]
7605        fn new_empty() -> Self {
7606            Self {
7607                usage: fidl::new_empty!(AudioCaptureUsage2, D),
7608                gain_db: fidl::new_empty!(f32, D),
7609            }
7610        }
7611
7612        #[inline]
7613        unsafe fn decode(
7614            &mut self,
7615            decoder: &mut fidl::encoding::Decoder<'_, D>,
7616            offset: usize,
7617            _depth: fidl::encoding::Depth,
7618        ) -> fidl::Result<()> {
7619            decoder.debug_check_bounds::<Self>(offset);
7620            // Verify that padding bytes are zero.
7621            fidl::decode!(AudioCaptureUsage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
7622            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
7623            Ok(())
7624        }
7625    }
7626
7627    impl fidl::encoding::ValueTypeMarker for AudioCoreSetCaptureUsageGainRequest {
7628        type Borrowed<'a> = &'a Self;
7629        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7630            value
7631        }
7632    }
7633
7634    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetCaptureUsageGainRequest {
7635        type Owned = Self;
7636
7637        #[inline(always)]
7638        fn inline_align(_context: fidl::encoding::Context) -> usize {
7639            4
7640        }
7641
7642        #[inline(always)]
7643        fn inline_size(_context: fidl::encoding::Context) -> usize {
7644            8
7645        }
7646    }
7647
7648    unsafe impl<D: fidl::encoding::ResourceDialect>
7649        fidl::encoding::Encode<AudioCoreSetCaptureUsageGainRequest, D>
7650        for &AudioCoreSetCaptureUsageGainRequest
7651    {
7652        #[inline]
7653        unsafe fn encode(
7654            self,
7655            encoder: &mut fidl::encoding::Encoder<'_, D>,
7656            offset: usize,
7657            _depth: fidl::encoding::Depth,
7658        ) -> fidl::Result<()> {
7659            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGainRequest>(offset);
7660            // Delegate to tuple encoding.
7661            fidl::encoding::Encode::<AudioCoreSetCaptureUsageGainRequest, D>::encode(
7662                (
7663                    <AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7664                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7665                ),
7666                encoder,
7667                offset,
7668                _depth,
7669            )
7670        }
7671    }
7672    unsafe impl<
7673            D: fidl::encoding::ResourceDialect,
7674            T0: fidl::encoding::Encode<AudioCaptureUsage, D>,
7675            T1: fidl::encoding::Encode<f32, D>,
7676        > fidl::encoding::Encode<AudioCoreSetCaptureUsageGainRequest, D> for (T0, T1)
7677    {
7678        #[inline]
7679        unsafe fn encode(
7680            self,
7681            encoder: &mut fidl::encoding::Encoder<'_, D>,
7682            offset: usize,
7683            depth: fidl::encoding::Depth,
7684        ) -> fidl::Result<()> {
7685            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGainRequest>(offset);
7686            // Zero out padding regions. There's no need to apply masks
7687            // because the unmasked parts will be overwritten by fields.
7688            // Write the fields.
7689            self.0.encode(encoder, offset + 0, depth)?;
7690            self.1.encode(encoder, offset + 4, depth)?;
7691            Ok(())
7692        }
7693    }
7694
7695    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7696        for AudioCoreSetCaptureUsageGainRequest
7697    {
7698        #[inline(always)]
7699        fn new_empty() -> Self {
7700            Self {
7701                usage: fidl::new_empty!(AudioCaptureUsage, D),
7702                gain_db: fidl::new_empty!(f32, D),
7703            }
7704        }
7705
7706        #[inline]
7707        unsafe fn decode(
7708            &mut self,
7709            decoder: &mut fidl::encoding::Decoder<'_, D>,
7710            offset: usize,
7711            _depth: fidl::encoding::Depth,
7712        ) -> fidl::Result<()> {
7713            decoder.debug_check_bounds::<Self>(offset);
7714            // Verify that padding bytes are zero.
7715            fidl::decode!(AudioCaptureUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
7716            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
7717            Ok(())
7718        }
7719    }
7720
7721    impl fidl::encoding::ValueTypeMarker for AudioCoreSetInteraction2Request {
7722        type Borrowed<'a> = &'a Self;
7723        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7724            value
7725        }
7726    }
7727
7728    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetInteraction2Request {
7729        type Owned = Self;
7730
7731        #[inline(always)]
7732        fn inline_align(_context: fidl::encoding::Context) -> usize {
7733            8
7734        }
7735
7736        #[inline(always)]
7737        fn inline_size(_context: fidl::encoding::Context) -> usize {
7738            40
7739        }
7740    }
7741
7742    unsafe impl<D: fidl::encoding::ResourceDialect>
7743        fidl::encoding::Encode<AudioCoreSetInteraction2Request, D>
7744        for &AudioCoreSetInteraction2Request
7745    {
7746        #[inline]
7747        unsafe fn encode(
7748            self,
7749            encoder: &mut fidl::encoding::Encoder<'_, D>,
7750            offset: usize,
7751            _depth: fidl::encoding::Depth,
7752        ) -> fidl::Result<()> {
7753            encoder.debug_check_bounds::<AudioCoreSetInteraction2Request>(offset);
7754            // Delegate to tuple encoding.
7755            fidl::encoding::Encode::<AudioCoreSetInteraction2Request, D>::encode(
7756                (
7757                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.active),
7758                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.affected),
7759                    <Behavior as fidl::encoding::ValueTypeMarker>::borrow(&self.behavior),
7760                ),
7761                encoder,
7762                offset,
7763                _depth,
7764            )
7765        }
7766    }
7767    unsafe impl<
7768            D: fidl::encoding::ResourceDialect,
7769            T0: fidl::encoding::Encode<Usage2, D>,
7770            T1: fidl::encoding::Encode<Usage2, D>,
7771            T2: fidl::encoding::Encode<Behavior, D>,
7772        > fidl::encoding::Encode<AudioCoreSetInteraction2Request, D> for (T0, T1, T2)
7773    {
7774        #[inline]
7775        unsafe fn encode(
7776            self,
7777            encoder: &mut fidl::encoding::Encoder<'_, D>,
7778            offset: usize,
7779            depth: fidl::encoding::Depth,
7780        ) -> fidl::Result<()> {
7781            encoder.debug_check_bounds::<AudioCoreSetInteraction2Request>(offset);
7782            // Zero out padding regions. There's no need to apply masks
7783            // because the unmasked parts will be overwritten by fields.
7784            unsafe {
7785                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
7786                (ptr as *mut u64).write_unaligned(0);
7787            }
7788            // Write the fields.
7789            self.0.encode(encoder, offset + 0, depth)?;
7790            self.1.encode(encoder, offset + 16, depth)?;
7791            self.2.encode(encoder, offset + 32, depth)?;
7792            Ok(())
7793        }
7794    }
7795
7796    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7797        for AudioCoreSetInteraction2Request
7798    {
7799        #[inline(always)]
7800        fn new_empty() -> Self {
7801            Self {
7802                active: fidl::new_empty!(Usage2, D),
7803                affected: fidl::new_empty!(Usage2, D),
7804                behavior: fidl::new_empty!(Behavior, D),
7805            }
7806        }
7807
7808        #[inline]
7809        unsafe fn decode(
7810            &mut self,
7811            decoder: &mut fidl::encoding::Decoder<'_, D>,
7812            offset: usize,
7813            _depth: fidl::encoding::Depth,
7814        ) -> fidl::Result<()> {
7815            decoder.debug_check_bounds::<Self>(offset);
7816            // Verify that padding bytes are zero.
7817            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
7818            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7819            let mask = 0xffffffff00000000u64;
7820            let maskedval = padval & mask;
7821            if maskedval != 0 {
7822                return Err(fidl::Error::NonZeroPadding {
7823                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
7824                });
7825            }
7826            fidl::decode!(Usage2, D, &mut self.active, decoder, offset + 0, _depth)?;
7827            fidl::decode!(Usage2, D, &mut self.affected, decoder, offset + 16, _depth)?;
7828            fidl::decode!(Behavior, D, &mut self.behavior, decoder, offset + 32, _depth)?;
7829            Ok(())
7830        }
7831    }
7832
7833    impl fidl::encoding::ValueTypeMarker for AudioCoreSetInteractionRequest {
7834        type Borrowed<'a> = &'a Self;
7835        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7836            value
7837        }
7838    }
7839
7840    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetInteractionRequest {
7841        type Owned = Self;
7842
7843        #[inline(always)]
7844        fn inline_align(_context: fidl::encoding::Context) -> usize {
7845            8
7846        }
7847
7848        #[inline(always)]
7849        fn inline_size(_context: fidl::encoding::Context) -> usize {
7850            40
7851        }
7852    }
7853
7854    unsafe impl<D: fidl::encoding::ResourceDialect>
7855        fidl::encoding::Encode<AudioCoreSetInteractionRequest, D>
7856        for &AudioCoreSetInteractionRequest
7857    {
7858        #[inline]
7859        unsafe fn encode(
7860            self,
7861            encoder: &mut fidl::encoding::Encoder<'_, D>,
7862            offset: usize,
7863            _depth: fidl::encoding::Depth,
7864        ) -> fidl::Result<()> {
7865            encoder.debug_check_bounds::<AudioCoreSetInteractionRequest>(offset);
7866            // Delegate to tuple encoding.
7867            fidl::encoding::Encode::<AudioCoreSetInteractionRequest, D>::encode(
7868                (
7869                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.active),
7870                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.affected),
7871                    <Behavior as fidl::encoding::ValueTypeMarker>::borrow(&self.behavior),
7872                ),
7873                encoder,
7874                offset,
7875                _depth,
7876            )
7877        }
7878    }
7879    unsafe impl<
7880            D: fidl::encoding::ResourceDialect,
7881            T0: fidl::encoding::Encode<Usage, D>,
7882            T1: fidl::encoding::Encode<Usage, D>,
7883            T2: fidl::encoding::Encode<Behavior, D>,
7884        > fidl::encoding::Encode<AudioCoreSetInteractionRequest, D> for (T0, T1, T2)
7885    {
7886        #[inline]
7887        unsafe fn encode(
7888            self,
7889            encoder: &mut fidl::encoding::Encoder<'_, D>,
7890            offset: usize,
7891            depth: fidl::encoding::Depth,
7892        ) -> fidl::Result<()> {
7893            encoder.debug_check_bounds::<AudioCoreSetInteractionRequest>(offset);
7894            // Zero out padding regions. There's no need to apply masks
7895            // because the unmasked parts will be overwritten by fields.
7896            unsafe {
7897                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
7898                (ptr as *mut u64).write_unaligned(0);
7899            }
7900            // Write the fields.
7901            self.0.encode(encoder, offset + 0, depth)?;
7902            self.1.encode(encoder, offset + 16, depth)?;
7903            self.2.encode(encoder, offset + 32, depth)?;
7904            Ok(())
7905        }
7906    }
7907
7908    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7909        for AudioCoreSetInteractionRequest
7910    {
7911        #[inline(always)]
7912        fn new_empty() -> Self {
7913            Self {
7914                active: fidl::new_empty!(Usage, D),
7915                affected: fidl::new_empty!(Usage, D),
7916                behavior: fidl::new_empty!(Behavior, D),
7917            }
7918        }
7919
7920        #[inline]
7921        unsafe fn decode(
7922            &mut self,
7923            decoder: &mut fidl::encoding::Decoder<'_, D>,
7924            offset: usize,
7925            _depth: fidl::encoding::Depth,
7926        ) -> fidl::Result<()> {
7927            decoder.debug_check_bounds::<Self>(offset);
7928            // Verify that padding bytes are zero.
7929            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
7930            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7931            let mask = 0xffffffff00000000u64;
7932            let maskedval = padval & mask;
7933            if maskedval != 0 {
7934                return Err(fidl::Error::NonZeroPadding {
7935                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
7936                });
7937            }
7938            fidl::decode!(Usage, D, &mut self.active, decoder, offset + 0, _depth)?;
7939            fidl::decode!(Usage, D, &mut self.affected, decoder, offset + 16, _depth)?;
7940            fidl::decode!(Behavior, D, &mut self.behavior, decoder, offset + 32, _depth)?;
7941            Ok(())
7942        }
7943    }
7944
7945    impl fidl::encoding::ValueTypeMarker for AudioCoreSetRenderUsageGain2Request {
7946        type Borrowed<'a> = &'a Self;
7947        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7948            value
7949        }
7950    }
7951
7952    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetRenderUsageGain2Request {
7953        type Owned = Self;
7954
7955        #[inline(always)]
7956        fn inline_align(_context: fidl::encoding::Context) -> usize {
7957            4
7958        }
7959
7960        #[inline(always)]
7961        fn inline_size(_context: fidl::encoding::Context) -> usize {
7962            8
7963        }
7964    }
7965
7966    unsafe impl<D: fidl::encoding::ResourceDialect>
7967        fidl::encoding::Encode<AudioCoreSetRenderUsageGain2Request, D>
7968        for &AudioCoreSetRenderUsageGain2Request
7969    {
7970        #[inline]
7971        unsafe fn encode(
7972            self,
7973            encoder: &mut fidl::encoding::Encoder<'_, D>,
7974            offset: usize,
7975            _depth: fidl::encoding::Depth,
7976        ) -> fidl::Result<()> {
7977            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGain2Request>(offset);
7978            // Delegate to tuple encoding.
7979            fidl::encoding::Encode::<AudioCoreSetRenderUsageGain2Request, D>::encode(
7980                (
7981                    <AudioRenderUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7982                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7983                ),
7984                encoder,
7985                offset,
7986                _depth,
7987            )
7988        }
7989    }
7990    unsafe impl<
7991            D: fidl::encoding::ResourceDialect,
7992            T0: fidl::encoding::Encode<AudioRenderUsage2, D>,
7993            T1: fidl::encoding::Encode<f32, D>,
7994        > fidl::encoding::Encode<AudioCoreSetRenderUsageGain2Request, D> for (T0, T1)
7995    {
7996        #[inline]
7997        unsafe fn encode(
7998            self,
7999            encoder: &mut fidl::encoding::Encoder<'_, D>,
8000            offset: usize,
8001            depth: fidl::encoding::Depth,
8002        ) -> fidl::Result<()> {
8003            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGain2Request>(offset);
8004            // Zero out padding regions. There's no need to apply masks
8005            // because the unmasked parts will be overwritten by fields.
8006            // Write the fields.
8007            self.0.encode(encoder, offset + 0, depth)?;
8008            self.1.encode(encoder, offset + 4, depth)?;
8009            Ok(())
8010        }
8011    }
8012
8013    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8014        for AudioCoreSetRenderUsageGain2Request
8015    {
8016        #[inline(always)]
8017        fn new_empty() -> Self {
8018            Self {
8019                usage: fidl::new_empty!(AudioRenderUsage2, D),
8020                gain_db: fidl::new_empty!(f32, D),
8021            }
8022        }
8023
8024        #[inline]
8025        unsafe fn decode(
8026            &mut self,
8027            decoder: &mut fidl::encoding::Decoder<'_, D>,
8028            offset: usize,
8029            _depth: fidl::encoding::Depth,
8030        ) -> fidl::Result<()> {
8031            decoder.debug_check_bounds::<Self>(offset);
8032            // Verify that padding bytes are zero.
8033            fidl::decode!(AudioRenderUsage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
8034            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
8035            Ok(())
8036        }
8037    }
8038
8039    impl fidl::encoding::ValueTypeMarker for AudioCoreSetRenderUsageGainRequest {
8040        type Borrowed<'a> = &'a Self;
8041        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8042            value
8043        }
8044    }
8045
8046    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetRenderUsageGainRequest {
8047        type Owned = Self;
8048
8049        #[inline(always)]
8050        fn inline_align(_context: fidl::encoding::Context) -> usize {
8051            4
8052        }
8053
8054        #[inline(always)]
8055        fn inline_size(_context: fidl::encoding::Context) -> usize {
8056            8
8057        }
8058    }
8059
8060    unsafe impl<D: fidl::encoding::ResourceDialect>
8061        fidl::encoding::Encode<AudioCoreSetRenderUsageGainRequest, D>
8062        for &AudioCoreSetRenderUsageGainRequest
8063    {
8064        #[inline]
8065        unsafe fn encode(
8066            self,
8067            encoder: &mut fidl::encoding::Encoder<'_, D>,
8068            offset: usize,
8069            _depth: fidl::encoding::Depth,
8070        ) -> fidl::Result<()> {
8071            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGainRequest>(offset);
8072            // Delegate to tuple encoding.
8073            fidl::encoding::Encode::<AudioCoreSetRenderUsageGainRequest, D>::encode(
8074                (
8075                    <AudioRenderUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
8076                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
8077                ),
8078                encoder,
8079                offset,
8080                _depth,
8081            )
8082        }
8083    }
8084    unsafe impl<
8085            D: fidl::encoding::ResourceDialect,
8086            T0: fidl::encoding::Encode<AudioRenderUsage, D>,
8087            T1: fidl::encoding::Encode<f32, D>,
8088        > fidl::encoding::Encode<AudioCoreSetRenderUsageGainRequest, D> for (T0, T1)
8089    {
8090        #[inline]
8091        unsafe fn encode(
8092            self,
8093            encoder: &mut fidl::encoding::Encoder<'_, D>,
8094            offset: usize,
8095            depth: fidl::encoding::Depth,
8096        ) -> fidl::Result<()> {
8097            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGainRequest>(offset);
8098            // Zero out padding regions. There's no need to apply masks
8099            // because the unmasked parts will be overwritten by fields.
8100            // Write the fields.
8101            self.0.encode(encoder, offset + 0, depth)?;
8102            self.1.encode(encoder, offset + 4, depth)?;
8103            Ok(())
8104        }
8105    }
8106
8107    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8108        for AudioCoreSetRenderUsageGainRequest
8109    {
8110        #[inline(always)]
8111        fn new_empty() -> Self {
8112            Self { usage: fidl::new_empty!(AudioRenderUsage, D), gain_db: fidl::new_empty!(f32, D) }
8113        }
8114
8115        #[inline]
8116        unsafe fn decode(
8117            &mut self,
8118            decoder: &mut fidl::encoding::Decoder<'_, D>,
8119            offset: usize,
8120            _depth: fidl::encoding::Depth,
8121        ) -> fidl::Result<()> {
8122            decoder.debug_check_bounds::<Self>(offset);
8123            // Verify that padding bytes are zero.
8124            fidl::decode!(AudioRenderUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
8125            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
8126            Ok(())
8127        }
8128    }
8129
8130    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolume2Response {
8131        type Borrowed<'a> = &'a Self;
8132        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8133            value
8134        }
8135    }
8136
8137    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolume2Response {
8138        type Owned = Self;
8139
8140        #[inline(always)]
8141        fn inline_align(_context: fidl::encoding::Context) -> usize {
8142            4
8143        }
8144
8145        #[inline(always)]
8146        fn inline_size(_context: fidl::encoding::Context) -> usize {
8147            4
8148        }
8149    }
8150
8151    unsafe impl<D: fidl::encoding::ResourceDialect>
8152        fidl::encoding::Encode<AudioCoreGetDbFromVolume2Response, D>
8153        for &AudioCoreGetDbFromVolume2Response
8154    {
8155        #[inline]
8156        unsafe fn encode(
8157            self,
8158            encoder: &mut fidl::encoding::Encoder<'_, D>,
8159            offset: usize,
8160            _depth: fidl::encoding::Depth,
8161        ) -> fidl::Result<()> {
8162            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Response>(offset);
8163            // Delegate to tuple encoding.
8164            fidl::encoding::Encode::<AudioCoreGetDbFromVolume2Response, D>::encode(
8165                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),),
8166                encoder,
8167                offset,
8168                _depth,
8169            )
8170        }
8171    }
8172    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
8173        fidl::encoding::Encode<AudioCoreGetDbFromVolume2Response, D> for (T0,)
8174    {
8175        #[inline]
8176        unsafe fn encode(
8177            self,
8178            encoder: &mut fidl::encoding::Encoder<'_, D>,
8179            offset: usize,
8180            depth: fidl::encoding::Depth,
8181        ) -> fidl::Result<()> {
8182            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Response>(offset);
8183            // Zero out padding regions. There's no need to apply masks
8184            // because the unmasked parts will be overwritten by fields.
8185            // Write the fields.
8186            self.0.encode(encoder, offset + 0, depth)?;
8187            Ok(())
8188        }
8189    }
8190
8191    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8192        for AudioCoreGetDbFromVolume2Response
8193    {
8194        #[inline(always)]
8195        fn new_empty() -> Self {
8196            Self { gain_db: fidl::new_empty!(f32, D) }
8197        }
8198
8199        #[inline]
8200        unsafe fn decode(
8201            &mut self,
8202            decoder: &mut fidl::encoding::Decoder<'_, D>,
8203            offset: usize,
8204            _depth: fidl::encoding::Depth,
8205        ) -> fidl::Result<()> {
8206            decoder.debug_check_bounds::<Self>(offset);
8207            // Verify that padding bytes are zero.
8208            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 0, _depth)?;
8209            Ok(())
8210        }
8211    }
8212
8213    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDb2Response {
8214        type Borrowed<'a> = &'a Self;
8215        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8216            value
8217        }
8218    }
8219
8220    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDb2Response {
8221        type Owned = Self;
8222
8223        #[inline(always)]
8224        fn inline_align(_context: fidl::encoding::Context) -> usize {
8225            4
8226        }
8227
8228        #[inline(always)]
8229        fn inline_size(_context: fidl::encoding::Context) -> usize {
8230            4
8231        }
8232    }
8233
8234    unsafe impl<D: fidl::encoding::ResourceDialect>
8235        fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Response, D>
8236        for &AudioCoreGetVolumeFromDb2Response
8237    {
8238        #[inline]
8239        unsafe fn encode(
8240            self,
8241            encoder: &mut fidl::encoding::Encoder<'_, D>,
8242            offset: usize,
8243            _depth: fidl::encoding::Depth,
8244        ) -> fidl::Result<()> {
8245            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Response>(offset);
8246            // Delegate to tuple encoding.
8247            fidl::encoding::Encode::<AudioCoreGetVolumeFromDb2Response, D>::encode(
8248                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),),
8249                encoder,
8250                offset,
8251                _depth,
8252            )
8253        }
8254    }
8255    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
8256        fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Response, D> for (T0,)
8257    {
8258        #[inline]
8259        unsafe fn encode(
8260            self,
8261            encoder: &mut fidl::encoding::Encoder<'_, D>,
8262            offset: usize,
8263            depth: fidl::encoding::Depth,
8264        ) -> fidl::Result<()> {
8265            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Response>(offset);
8266            // Zero out padding regions. There's no need to apply masks
8267            // because the unmasked parts will be overwritten by fields.
8268            // Write the fields.
8269            self.0.encode(encoder, offset + 0, depth)?;
8270            Ok(())
8271        }
8272    }
8273
8274    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8275        for AudioCoreGetVolumeFromDb2Response
8276    {
8277        #[inline(always)]
8278        fn new_empty() -> Self {
8279            Self { volume: fidl::new_empty!(f32, D) }
8280        }
8281
8282        #[inline]
8283        unsafe fn decode(
8284            &mut self,
8285            decoder: &mut fidl::encoding::Decoder<'_, D>,
8286            offset: usize,
8287            _depth: fidl::encoding::Depth,
8288        ) -> fidl::Result<()> {
8289            decoder.debug_check_bounds::<Self>(offset);
8290            // Verify that padding bytes are zero.
8291            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 0, _depth)?;
8292            Ok(())
8293        }
8294    }
8295
8296    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorGetDeviceGainRequest {
8297        type Borrowed<'a> = &'a Self;
8298        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8299            value
8300        }
8301    }
8302
8303    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorGetDeviceGainRequest {
8304        type Owned = Self;
8305
8306        #[inline(always)]
8307        fn inline_align(_context: fidl::encoding::Context) -> usize {
8308            8
8309        }
8310
8311        #[inline(always)]
8312        fn inline_size(_context: fidl::encoding::Context) -> usize {
8313            8
8314        }
8315        #[inline(always)]
8316        fn encode_is_copy() -> bool {
8317            true
8318        }
8319
8320        #[inline(always)]
8321        fn decode_is_copy() -> bool {
8322            true
8323        }
8324    }
8325
8326    unsafe impl<D: fidl::encoding::ResourceDialect>
8327        fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainRequest, D>
8328        for &AudioDeviceEnumeratorGetDeviceGainRequest
8329    {
8330        #[inline]
8331        unsafe fn encode(
8332            self,
8333            encoder: &mut fidl::encoding::Encoder<'_, D>,
8334            offset: usize,
8335            _depth: fidl::encoding::Depth,
8336        ) -> fidl::Result<()> {
8337            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainRequest>(offset);
8338            unsafe {
8339                // Copy the object into the buffer.
8340                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
8341                (buf_ptr as *mut AudioDeviceEnumeratorGetDeviceGainRequest).write_unaligned(
8342                    (self as *const AudioDeviceEnumeratorGetDeviceGainRequest).read(),
8343                );
8344                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
8345                // done second because the memcpy will write garbage to these bytes.
8346            }
8347            Ok(())
8348        }
8349    }
8350    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
8351        fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainRequest, D> for (T0,)
8352    {
8353        #[inline]
8354        unsafe fn encode(
8355            self,
8356            encoder: &mut fidl::encoding::Encoder<'_, D>,
8357            offset: usize,
8358            depth: fidl::encoding::Depth,
8359        ) -> fidl::Result<()> {
8360            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainRequest>(offset);
8361            // Zero out padding regions. There's no need to apply masks
8362            // because the unmasked parts will be overwritten by fields.
8363            // Write the fields.
8364            self.0.encode(encoder, offset + 0, depth)?;
8365            Ok(())
8366        }
8367    }
8368
8369    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8370        for AudioDeviceEnumeratorGetDeviceGainRequest
8371    {
8372        #[inline(always)]
8373        fn new_empty() -> Self {
8374            Self { device_token: fidl::new_empty!(u64, D) }
8375        }
8376
8377        #[inline]
8378        unsafe fn decode(
8379            &mut self,
8380            decoder: &mut fidl::encoding::Decoder<'_, D>,
8381            offset: usize,
8382            _depth: fidl::encoding::Depth,
8383        ) -> fidl::Result<()> {
8384            decoder.debug_check_bounds::<Self>(offset);
8385            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
8386            // Verify that padding bytes are zero.
8387            // Copy from the buffer into the object.
8388            unsafe {
8389                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
8390            }
8391            Ok(())
8392        }
8393    }
8394
8395    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorGetDeviceGainResponse {
8396        type Borrowed<'a> = &'a Self;
8397        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8398            value
8399        }
8400    }
8401
8402    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorGetDeviceGainResponse {
8403        type Owned = Self;
8404
8405        #[inline(always)]
8406        fn inline_align(_context: fidl::encoding::Context) -> usize {
8407            8
8408        }
8409
8410        #[inline(always)]
8411        fn inline_size(_context: fidl::encoding::Context) -> usize {
8412            16
8413        }
8414    }
8415
8416    unsafe impl<D: fidl::encoding::ResourceDialect>
8417        fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainResponse, D>
8418        for &AudioDeviceEnumeratorGetDeviceGainResponse
8419    {
8420        #[inline]
8421        unsafe fn encode(
8422            self,
8423            encoder: &mut fidl::encoding::Encoder<'_, D>,
8424            offset: usize,
8425            _depth: fidl::encoding::Depth,
8426        ) -> fidl::Result<()> {
8427            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainResponse>(offset);
8428            // Delegate to tuple encoding.
8429            fidl::encoding::Encode::<AudioDeviceEnumeratorGetDeviceGainResponse, D>::encode(
8430                (
8431                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_token),
8432                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
8433                ),
8434                encoder,
8435                offset,
8436                _depth,
8437            )
8438        }
8439    }
8440    unsafe impl<
8441            D: fidl::encoding::ResourceDialect,
8442            T0: fidl::encoding::Encode<u64, D>,
8443            T1: fidl::encoding::Encode<AudioGainInfo, D>,
8444        > fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainResponse, D> for (T0, T1)
8445    {
8446        #[inline]
8447        unsafe fn encode(
8448            self,
8449            encoder: &mut fidl::encoding::Encoder<'_, D>,
8450            offset: usize,
8451            depth: fidl::encoding::Depth,
8452        ) -> fidl::Result<()> {
8453            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainResponse>(offset);
8454            // Zero out padding regions. There's no need to apply masks
8455            // because the unmasked parts will be overwritten by fields.
8456            // Write the fields.
8457            self.0.encode(encoder, offset + 0, depth)?;
8458            self.1.encode(encoder, offset + 8, depth)?;
8459            Ok(())
8460        }
8461    }
8462
8463    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8464        for AudioDeviceEnumeratorGetDeviceGainResponse
8465    {
8466        #[inline(always)]
8467        fn new_empty() -> Self {
8468            Self {
8469                device_token: fidl::new_empty!(u64, D),
8470                gain_info: fidl::new_empty!(AudioGainInfo, D),
8471            }
8472        }
8473
8474        #[inline]
8475        unsafe fn decode(
8476            &mut self,
8477            decoder: &mut fidl::encoding::Decoder<'_, D>,
8478            offset: usize,
8479            _depth: fidl::encoding::Depth,
8480        ) -> fidl::Result<()> {
8481            decoder.debug_check_bounds::<Self>(offset);
8482            // Verify that padding bytes are zero.
8483            fidl::decode!(u64, D, &mut self.device_token, decoder, offset + 0, _depth)?;
8484            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 8, _depth)?;
8485            Ok(())
8486        }
8487    }
8488
8489    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorGetDevicesResponse {
8490        type Borrowed<'a> = &'a Self;
8491        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8492            value
8493        }
8494    }
8495
8496    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorGetDevicesResponse {
8497        type Owned = Self;
8498
8499        #[inline(always)]
8500        fn inline_align(_context: fidl::encoding::Context) -> usize {
8501            8
8502        }
8503
8504        #[inline(always)]
8505        fn inline_size(_context: fidl::encoding::Context) -> usize {
8506            16
8507        }
8508    }
8509
8510    unsafe impl<D: fidl::encoding::ResourceDialect>
8511        fidl::encoding::Encode<AudioDeviceEnumeratorGetDevicesResponse, D>
8512        for &AudioDeviceEnumeratorGetDevicesResponse
8513    {
8514        #[inline]
8515        unsafe fn encode(
8516            self,
8517            encoder: &mut fidl::encoding::Encoder<'_, D>,
8518            offset: usize,
8519            _depth: fidl::encoding::Depth,
8520        ) -> fidl::Result<()> {
8521            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDevicesResponse>(offset);
8522            // Delegate to tuple encoding.
8523            fidl::encoding::Encode::<AudioDeviceEnumeratorGetDevicesResponse, D>::encode(
8524                (
8525                    <fidl::encoding::UnboundedVector<AudioDeviceInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.devices),
8526                ),
8527                encoder, offset, _depth
8528            )
8529        }
8530    }
8531    unsafe impl<
8532            D: fidl::encoding::ResourceDialect,
8533            T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<AudioDeviceInfo>, D>,
8534        > fidl::encoding::Encode<AudioDeviceEnumeratorGetDevicesResponse, D> for (T0,)
8535    {
8536        #[inline]
8537        unsafe fn encode(
8538            self,
8539            encoder: &mut fidl::encoding::Encoder<'_, D>,
8540            offset: usize,
8541            depth: fidl::encoding::Depth,
8542        ) -> fidl::Result<()> {
8543            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDevicesResponse>(offset);
8544            // Zero out padding regions. There's no need to apply masks
8545            // because the unmasked parts will be overwritten by fields.
8546            // Write the fields.
8547            self.0.encode(encoder, offset + 0, depth)?;
8548            Ok(())
8549        }
8550    }
8551
8552    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8553        for AudioDeviceEnumeratorGetDevicesResponse
8554    {
8555        #[inline(always)]
8556        fn new_empty() -> Self {
8557            Self { devices: fidl::new_empty!(fidl::encoding::UnboundedVector<AudioDeviceInfo>, D) }
8558        }
8559
8560        #[inline]
8561        unsafe fn decode(
8562            &mut self,
8563            decoder: &mut fidl::encoding::Decoder<'_, D>,
8564            offset: usize,
8565            _depth: fidl::encoding::Depth,
8566        ) -> fidl::Result<()> {
8567            decoder.debug_check_bounds::<Self>(offset);
8568            // Verify that padding bytes are zero.
8569            fidl::decode!(
8570                fidl::encoding::UnboundedVector<AudioDeviceInfo>,
8571                D,
8572                &mut self.devices,
8573                decoder,
8574                offset + 0,
8575                _depth
8576            )?;
8577            Ok(())
8578        }
8579    }
8580
8581    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {
8582        type Borrowed<'a> = &'a Self;
8583        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8584            value
8585        }
8586    }
8587
8588    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {
8589        type Owned = Self;
8590
8591        #[inline(always)]
8592        fn inline_align(_context: fidl::encoding::Context) -> usize {
8593            8
8594        }
8595
8596        #[inline(always)]
8597        fn inline_size(_context: fidl::encoding::Context) -> usize {
8598            16
8599        }
8600        #[inline(always)]
8601        fn encode_is_copy() -> bool {
8602            true
8603        }
8604
8605        #[inline(always)]
8606        fn decode_is_copy() -> bool {
8607            true
8608        }
8609    }
8610
8611    unsafe impl<D: fidl::encoding::ResourceDialect>
8612        fidl::encoding::Encode<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest, D>
8613        for &AudioDeviceEnumeratorOnDefaultDeviceChangedRequest
8614    {
8615        #[inline]
8616        unsafe fn encode(
8617            self,
8618            encoder: &mut fidl::encoding::Encoder<'_, D>,
8619            offset: usize,
8620            _depth: fidl::encoding::Depth,
8621        ) -> fidl::Result<()> {
8622            encoder
8623                .debug_check_bounds::<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest>(offset);
8624            unsafe {
8625                // Copy the object into the buffer.
8626                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
8627                (buf_ptr as *mut AudioDeviceEnumeratorOnDefaultDeviceChangedRequest)
8628                    .write_unaligned(
8629                        (self as *const AudioDeviceEnumeratorOnDefaultDeviceChangedRequest).read(),
8630                    );
8631                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
8632                // done second because the memcpy will write garbage to these bytes.
8633            }
8634            Ok(())
8635        }
8636    }
8637    unsafe impl<
8638            D: fidl::encoding::ResourceDialect,
8639            T0: fidl::encoding::Encode<u64, D>,
8640            T1: fidl::encoding::Encode<u64, D>,
8641        > fidl::encoding::Encode<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest, D>
8642        for (T0, T1)
8643    {
8644        #[inline]
8645        unsafe fn encode(
8646            self,
8647            encoder: &mut fidl::encoding::Encoder<'_, D>,
8648            offset: usize,
8649            depth: fidl::encoding::Depth,
8650        ) -> fidl::Result<()> {
8651            encoder
8652                .debug_check_bounds::<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest>(offset);
8653            // Zero out padding regions. There's no need to apply masks
8654            // because the unmasked parts will be overwritten by fields.
8655            // Write the fields.
8656            self.0.encode(encoder, offset + 0, depth)?;
8657            self.1.encode(encoder, offset + 8, depth)?;
8658            Ok(())
8659        }
8660    }
8661
8662    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8663        for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest
8664    {
8665        #[inline(always)]
8666        fn new_empty() -> Self {
8667            Self {
8668                old_default_token: fidl::new_empty!(u64, D),
8669                new_default_token: fidl::new_empty!(u64, D),
8670            }
8671        }
8672
8673        #[inline]
8674        unsafe fn decode(
8675            &mut self,
8676            decoder: &mut fidl::encoding::Decoder<'_, D>,
8677            offset: usize,
8678            _depth: fidl::encoding::Depth,
8679        ) -> fidl::Result<()> {
8680            decoder.debug_check_bounds::<Self>(offset);
8681            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
8682            // Verify that padding bytes are zero.
8683            // Copy from the buffer into the object.
8684            unsafe {
8685                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
8686            }
8687            Ok(())
8688        }
8689    }
8690
8691    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDeviceAddedRequest {
8692        type Borrowed<'a> = &'a Self;
8693        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8694            value
8695        }
8696    }
8697
8698    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDeviceAddedRequest {
8699        type Owned = Self;
8700
8701        #[inline(always)]
8702        fn inline_align(_context: fidl::encoding::Context) -> usize {
8703            8
8704        }
8705
8706        #[inline(always)]
8707        fn inline_size(_context: fidl::encoding::Context) -> usize {
8708            56
8709        }
8710    }
8711
8712    unsafe impl<D: fidl::encoding::ResourceDialect>
8713        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceAddedRequest, D>
8714        for &AudioDeviceEnumeratorOnDeviceAddedRequest
8715    {
8716        #[inline]
8717        unsafe fn encode(
8718            self,
8719            encoder: &mut fidl::encoding::Encoder<'_, D>,
8720            offset: usize,
8721            _depth: fidl::encoding::Depth,
8722        ) -> fidl::Result<()> {
8723            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceAddedRequest>(offset);
8724            // Delegate to tuple encoding.
8725            fidl::encoding::Encode::<AudioDeviceEnumeratorOnDeviceAddedRequest, D>::encode(
8726                (<AudioDeviceInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.device),),
8727                encoder,
8728                offset,
8729                _depth,
8730            )
8731        }
8732    }
8733    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioDeviceInfo, D>>
8734        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceAddedRequest, D> for (T0,)
8735    {
8736        #[inline]
8737        unsafe fn encode(
8738            self,
8739            encoder: &mut fidl::encoding::Encoder<'_, D>,
8740            offset: usize,
8741            depth: fidl::encoding::Depth,
8742        ) -> fidl::Result<()> {
8743            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceAddedRequest>(offset);
8744            // Zero out padding regions. There's no need to apply masks
8745            // because the unmasked parts will be overwritten by fields.
8746            // Write the fields.
8747            self.0.encode(encoder, offset + 0, depth)?;
8748            Ok(())
8749        }
8750    }
8751
8752    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8753        for AudioDeviceEnumeratorOnDeviceAddedRequest
8754    {
8755        #[inline(always)]
8756        fn new_empty() -> Self {
8757            Self { device: fidl::new_empty!(AudioDeviceInfo, D) }
8758        }
8759
8760        #[inline]
8761        unsafe fn decode(
8762            &mut self,
8763            decoder: &mut fidl::encoding::Decoder<'_, D>,
8764            offset: usize,
8765            _depth: fidl::encoding::Depth,
8766        ) -> fidl::Result<()> {
8767            decoder.debug_check_bounds::<Self>(offset);
8768            // Verify that padding bytes are zero.
8769            fidl::decode!(AudioDeviceInfo, D, &mut self.device, decoder, offset + 0, _depth)?;
8770            Ok(())
8771        }
8772    }
8773
8774    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDeviceGainChangedRequest {
8775        type Borrowed<'a> = &'a Self;
8776        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8777            value
8778        }
8779    }
8780
8781    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDeviceGainChangedRequest {
8782        type Owned = Self;
8783
8784        #[inline(always)]
8785        fn inline_align(_context: fidl::encoding::Context) -> usize {
8786            8
8787        }
8788
8789        #[inline(always)]
8790        fn inline_size(_context: fidl::encoding::Context) -> usize {
8791            16
8792        }
8793    }
8794
8795    unsafe impl<D: fidl::encoding::ResourceDialect>
8796        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceGainChangedRequest, D>
8797        for &AudioDeviceEnumeratorOnDeviceGainChangedRequest
8798    {
8799        #[inline]
8800        unsafe fn encode(
8801            self,
8802            encoder: &mut fidl::encoding::Encoder<'_, D>,
8803            offset: usize,
8804            _depth: fidl::encoding::Depth,
8805        ) -> fidl::Result<()> {
8806            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceGainChangedRequest>(offset);
8807            // Delegate to tuple encoding.
8808            fidl::encoding::Encode::<AudioDeviceEnumeratorOnDeviceGainChangedRequest, D>::encode(
8809                (
8810                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_token),
8811                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
8812                ),
8813                encoder,
8814                offset,
8815                _depth,
8816            )
8817        }
8818    }
8819    unsafe impl<
8820            D: fidl::encoding::ResourceDialect,
8821            T0: fidl::encoding::Encode<u64, D>,
8822            T1: fidl::encoding::Encode<AudioGainInfo, D>,
8823        > fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceGainChangedRequest, D> for (T0, T1)
8824    {
8825        #[inline]
8826        unsafe fn encode(
8827            self,
8828            encoder: &mut fidl::encoding::Encoder<'_, D>,
8829            offset: usize,
8830            depth: fidl::encoding::Depth,
8831        ) -> fidl::Result<()> {
8832            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceGainChangedRequest>(offset);
8833            // Zero out padding regions. There's no need to apply masks
8834            // because the unmasked parts will be overwritten by fields.
8835            // Write the fields.
8836            self.0.encode(encoder, offset + 0, depth)?;
8837            self.1.encode(encoder, offset + 8, depth)?;
8838            Ok(())
8839        }
8840    }
8841
8842    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8843        for AudioDeviceEnumeratorOnDeviceGainChangedRequest
8844    {
8845        #[inline(always)]
8846        fn new_empty() -> Self {
8847            Self {
8848                device_token: fidl::new_empty!(u64, D),
8849                gain_info: fidl::new_empty!(AudioGainInfo, D),
8850            }
8851        }
8852
8853        #[inline]
8854        unsafe fn decode(
8855            &mut self,
8856            decoder: &mut fidl::encoding::Decoder<'_, D>,
8857            offset: usize,
8858            _depth: fidl::encoding::Depth,
8859        ) -> fidl::Result<()> {
8860            decoder.debug_check_bounds::<Self>(offset);
8861            // Verify that padding bytes are zero.
8862            fidl::decode!(u64, D, &mut self.device_token, decoder, offset + 0, _depth)?;
8863            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 8, _depth)?;
8864            Ok(())
8865        }
8866    }
8867
8868    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDeviceRemovedRequest {
8869        type Borrowed<'a> = &'a Self;
8870        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8871            value
8872        }
8873    }
8874
8875    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDeviceRemovedRequest {
8876        type Owned = Self;
8877
8878        #[inline(always)]
8879        fn inline_align(_context: fidl::encoding::Context) -> usize {
8880            8
8881        }
8882
8883        #[inline(always)]
8884        fn inline_size(_context: fidl::encoding::Context) -> usize {
8885            8
8886        }
8887        #[inline(always)]
8888        fn encode_is_copy() -> bool {
8889            true
8890        }
8891
8892        #[inline(always)]
8893        fn decode_is_copy() -> bool {
8894            true
8895        }
8896    }
8897
8898    unsafe impl<D: fidl::encoding::ResourceDialect>
8899        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceRemovedRequest, D>
8900        for &AudioDeviceEnumeratorOnDeviceRemovedRequest
8901    {
8902        #[inline]
8903        unsafe fn encode(
8904            self,
8905            encoder: &mut fidl::encoding::Encoder<'_, D>,
8906            offset: usize,
8907            _depth: fidl::encoding::Depth,
8908        ) -> fidl::Result<()> {
8909            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceRemovedRequest>(offset);
8910            unsafe {
8911                // Copy the object into the buffer.
8912                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
8913                (buf_ptr as *mut AudioDeviceEnumeratorOnDeviceRemovedRequest).write_unaligned(
8914                    (self as *const AudioDeviceEnumeratorOnDeviceRemovedRequest).read(),
8915                );
8916                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
8917                // done second because the memcpy will write garbage to these bytes.
8918            }
8919            Ok(())
8920        }
8921    }
8922    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
8923        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceRemovedRequest, D> for (T0,)
8924    {
8925        #[inline]
8926        unsafe fn encode(
8927            self,
8928            encoder: &mut fidl::encoding::Encoder<'_, D>,
8929            offset: usize,
8930            depth: fidl::encoding::Depth,
8931        ) -> fidl::Result<()> {
8932            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceRemovedRequest>(offset);
8933            // Zero out padding regions. There's no need to apply masks
8934            // because the unmasked parts will be overwritten by fields.
8935            // Write the fields.
8936            self.0.encode(encoder, offset + 0, depth)?;
8937            Ok(())
8938        }
8939    }
8940
8941    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8942        for AudioDeviceEnumeratorOnDeviceRemovedRequest
8943    {
8944        #[inline(always)]
8945        fn new_empty() -> Self {
8946            Self { device_token: fidl::new_empty!(u64, D) }
8947        }
8948
8949        #[inline]
8950        unsafe fn decode(
8951            &mut self,
8952            decoder: &mut fidl::encoding::Decoder<'_, D>,
8953            offset: usize,
8954            _depth: fidl::encoding::Depth,
8955        ) -> fidl::Result<()> {
8956            decoder.debug_check_bounds::<Self>(offset);
8957            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
8958            // Verify that padding bytes are zero.
8959            // Copy from the buffer into the object.
8960            unsafe {
8961                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
8962            }
8963            Ok(())
8964        }
8965    }
8966
8967    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorSetDeviceGainRequest {
8968        type Borrowed<'a> = &'a Self;
8969        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8970            value
8971        }
8972    }
8973
8974    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorSetDeviceGainRequest {
8975        type Owned = Self;
8976
8977        #[inline(always)]
8978        fn inline_align(_context: fidl::encoding::Context) -> usize {
8979            8
8980        }
8981
8982        #[inline(always)]
8983        fn inline_size(_context: fidl::encoding::Context) -> usize {
8984            24
8985        }
8986    }
8987
8988    unsafe impl<D: fidl::encoding::ResourceDialect>
8989        fidl::encoding::Encode<AudioDeviceEnumeratorSetDeviceGainRequest, D>
8990        for &AudioDeviceEnumeratorSetDeviceGainRequest
8991    {
8992        #[inline]
8993        unsafe fn encode(
8994            self,
8995            encoder: &mut fidl::encoding::Encoder<'_, D>,
8996            offset: usize,
8997            _depth: fidl::encoding::Depth,
8998        ) -> fidl::Result<()> {
8999            encoder.debug_check_bounds::<AudioDeviceEnumeratorSetDeviceGainRequest>(offset);
9000            // Delegate to tuple encoding.
9001            fidl::encoding::Encode::<AudioDeviceEnumeratorSetDeviceGainRequest, D>::encode(
9002                (
9003                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_token),
9004                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
9005                    <AudioGainValidFlags as fidl::encoding::ValueTypeMarker>::borrow(
9006                        &self.valid_flags,
9007                    ),
9008                ),
9009                encoder,
9010                offset,
9011                _depth,
9012            )
9013        }
9014    }
9015    unsafe impl<
9016            D: fidl::encoding::ResourceDialect,
9017            T0: fidl::encoding::Encode<u64, D>,
9018            T1: fidl::encoding::Encode<AudioGainInfo, D>,
9019            T2: fidl::encoding::Encode<AudioGainValidFlags, D>,
9020        > fidl::encoding::Encode<AudioDeviceEnumeratorSetDeviceGainRequest, D> for (T0, T1, T2)
9021    {
9022        #[inline]
9023        unsafe fn encode(
9024            self,
9025            encoder: &mut fidl::encoding::Encoder<'_, D>,
9026            offset: usize,
9027            depth: fidl::encoding::Depth,
9028        ) -> fidl::Result<()> {
9029            encoder.debug_check_bounds::<AudioDeviceEnumeratorSetDeviceGainRequest>(offset);
9030            // Zero out padding regions. There's no need to apply masks
9031            // because the unmasked parts will be overwritten by fields.
9032            unsafe {
9033                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
9034                (ptr as *mut u64).write_unaligned(0);
9035            }
9036            // Write the fields.
9037            self.0.encode(encoder, offset + 0, depth)?;
9038            self.1.encode(encoder, offset + 8, depth)?;
9039            self.2.encode(encoder, offset + 16, depth)?;
9040            Ok(())
9041        }
9042    }
9043
9044    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9045        for AudioDeviceEnumeratorSetDeviceGainRequest
9046    {
9047        #[inline(always)]
9048        fn new_empty() -> Self {
9049            Self {
9050                device_token: fidl::new_empty!(u64, D),
9051                gain_info: fidl::new_empty!(AudioGainInfo, D),
9052                valid_flags: fidl::new_empty!(AudioGainValidFlags, D),
9053            }
9054        }
9055
9056        #[inline]
9057        unsafe fn decode(
9058            &mut self,
9059            decoder: &mut fidl::encoding::Decoder<'_, D>,
9060            offset: usize,
9061            _depth: fidl::encoding::Depth,
9062        ) -> fidl::Result<()> {
9063            decoder.debug_check_bounds::<Self>(offset);
9064            // Verify that padding bytes are zero.
9065            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
9066            let padval = unsafe { (ptr as *const u64).read_unaligned() };
9067            let mask = 0xffffffff00000000u64;
9068            let maskedval = padval & mask;
9069            if maskedval != 0 {
9070                return Err(fidl::Error::NonZeroPadding {
9071                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
9072                });
9073            }
9074            fidl::decode!(u64, D, &mut self.device_token, decoder, offset + 0, _depth)?;
9075            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 8, _depth)?;
9076            fidl::decode!(
9077                AudioGainValidFlags,
9078                D,
9079                &mut self.valid_flags,
9080                decoder,
9081                offset + 16,
9082                _depth
9083            )?;
9084            Ok(())
9085        }
9086    }
9087
9088    impl fidl::encoding::ValueTypeMarker for AudioDeviceInfo {
9089        type Borrowed<'a> = &'a Self;
9090        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9091            value
9092        }
9093    }
9094
9095    unsafe impl fidl::encoding::TypeMarker for AudioDeviceInfo {
9096        type Owned = Self;
9097
9098        #[inline(always)]
9099        fn inline_align(_context: fidl::encoding::Context) -> usize {
9100            8
9101        }
9102
9103        #[inline(always)]
9104        fn inline_size(_context: fidl::encoding::Context) -> usize {
9105            56
9106        }
9107    }
9108
9109    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioDeviceInfo, D>
9110        for &AudioDeviceInfo
9111    {
9112        #[inline]
9113        unsafe fn encode(
9114            self,
9115            encoder: &mut fidl::encoding::Encoder<'_, D>,
9116            offset: usize,
9117            _depth: fidl::encoding::Depth,
9118        ) -> fidl::Result<()> {
9119            encoder.debug_check_bounds::<AudioDeviceInfo>(offset);
9120            // Delegate to tuple encoding.
9121            fidl::encoding::Encode::<AudioDeviceInfo, D>::encode(
9122                (
9123                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
9124                        &self.name,
9125                    ),
9126                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
9127                        &self.unique_id,
9128                    ),
9129                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.token_id),
9130                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.is_input),
9131                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
9132                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.is_default),
9133                ),
9134                encoder,
9135                offset,
9136                _depth,
9137            )
9138        }
9139    }
9140    unsafe impl<
9141            D: fidl::encoding::ResourceDialect,
9142            T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
9143            T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
9144            T2: fidl::encoding::Encode<u64, D>,
9145            T3: fidl::encoding::Encode<bool, D>,
9146            T4: fidl::encoding::Encode<AudioGainInfo, D>,
9147            T5: fidl::encoding::Encode<bool, D>,
9148        > fidl::encoding::Encode<AudioDeviceInfo, D> for (T0, T1, T2, T3, T4, T5)
9149    {
9150        #[inline]
9151        unsafe fn encode(
9152            self,
9153            encoder: &mut fidl::encoding::Encoder<'_, D>,
9154            offset: usize,
9155            depth: fidl::encoding::Depth,
9156        ) -> fidl::Result<()> {
9157            encoder.debug_check_bounds::<AudioDeviceInfo>(offset);
9158            // Zero out padding regions. There's no need to apply masks
9159            // because the unmasked parts will be overwritten by fields.
9160            unsafe {
9161                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
9162                (ptr as *mut u64).write_unaligned(0);
9163            }
9164            unsafe {
9165                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(48);
9166                (ptr as *mut u64).write_unaligned(0);
9167            }
9168            // Write the fields.
9169            self.0.encode(encoder, offset + 0, depth)?;
9170            self.1.encode(encoder, offset + 16, depth)?;
9171            self.2.encode(encoder, offset + 32, depth)?;
9172            self.3.encode(encoder, offset + 40, depth)?;
9173            self.4.encode(encoder, offset + 44, depth)?;
9174            self.5.encode(encoder, offset + 52, depth)?;
9175            Ok(())
9176        }
9177    }
9178
9179    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioDeviceInfo {
9180        #[inline(always)]
9181        fn new_empty() -> Self {
9182            Self {
9183                name: fidl::new_empty!(fidl::encoding::UnboundedString, D),
9184                unique_id: fidl::new_empty!(fidl::encoding::UnboundedString, D),
9185                token_id: fidl::new_empty!(u64, D),
9186                is_input: fidl::new_empty!(bool, D),
9187                gain_info: fidl::new_empty!(AudioGainInfo, D),
9188                is_default: fidl::new_empty!(bool, D),
9189            }
9190        }
9191
9192        #[inline]
9193        unsafe fn decode(
9194            &mut self,
9195            decoder: &mut fidl::encoding::Decoder<'_, D>,
9196            offset: usize,
9197            _depth: fidl::encoding::Depth,
9198        ) -> fidl::Result<()> {
9199            decoder.debug_check_bounds::<Self>(offset);
9200            // Verify that padding bytes are zero.
9201            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
9202            let padval = unsafe { (ptr as *const u64).read_unaligned() };
9203            let mask = 0xffffff00u64;
9204            let maskedval = padval & mask;
9205            if maskedval != 0 {
9206                return Err(fidl::Error::NonZeroPadding {
9207                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
9208                });
9209            }
9210            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(48) };
9211            let padval = unsafe { (ptr as *const u64).read_unaligned() };
9212            let mask = 0xffffff0000000000u64;
9213            let maskedval = padval & mask;
9214            if maskedval != 0 {
9215                return Err(fidl::Error::NonZeroPadding {
9216                    padding_start: offset + 48 + ((mask as u64).trailing_zeros() / 8) as usize,
9217                });
9218            }
9219            fidl::decode!(
9220                fidl::encoding::UnboundedString,
9221                D,
9222                &mut self.name,
9223                decoder,
9224                offset + 0,
9225                _depth
9226            )?;
9227            fidl::decode!(
9228                fidl::encoding::UnboundedString,
9229                D,
9230                &mut self.unique_id,
9231                decoder,
9232                offset + 16,
9233                _depth
9234            )?;
9235            fidl::decode!(u64, D, &mut self.token_id, decoder, offset + 32, _depth)?;
9236            fidl::decode!(bool, D, &mut self.is_input, decoder, offset + 40, _depth)?;
9237            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 44, _depth)?;
9238            fidl::decode!(bool, D, &mut self.is_default, decoder, offset + 52, _depth)?;
9239            Ok(())
9240        }
9241    }
9242
9243    impl fidl::encoding::ValueTypeMarker for AudioGainInfo {
9244        type Borrowed<'a> = &'a Self;
9245        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9246            value
9247        }
9248    }
9249
9250    unsafe impl fidl::encoding::TypeMarker for AudioGainInfo {
9251        type Owned = Self;
9252
9253        #[inline(always)]
9254        fn inline_align(_context: fidl::encoding::Context) -> usize {
9255            4
9256        }
9257
9258        #[inline(always)]
9259        fn inline_size(_context: fidl::encoding::Context) -> usize {
9260            8
9261        }
9262    }
9263
9264    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioGainInfo, D>
9265        for &AudioGainInfo
9266    {
9267        #[inline]
9268        unsafe fn encode(
9269            self,
9270            encoder: &mut fidl::encoding::Encoder<'_, D>,
9271            offset: usize,
9272            _depth: fidl::encoding::Depth,
9273        ) -> fidl::Result<()> {
9274            encoder.debug_check_bounds::<AudioGainInfo>(offset);
9275            // Delegate to tuple encoding.
9276            fidl::encoding::Encode::<AudioGainInfo, D>::encode(
9277                (
9278                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
9279                    <AudioGainInfoFlags as fidl::encoding::ValueTypeMarker>::borrow(&self.flags),
9280                ),
9281                encoder,
9282                offset,
9283                _depth,
9284            )
9285        }
9286    }
9287    unsafe impl<
9288            D: fidl::encoding::ResourceDialect,
9289            T0: fidl::encoding::Encode<f32, D>,
9290            T1: fidl::encoding::Encode<AudioGainInfoFlags, D>,
9291        > fidl::encoding::Encode<AudioGainInfo, D> for (T0, T1)
9292    {
9293        #[inline]
9294        unsafe fn encode(
9295            self,
9296            encoder: &mut fidl::encoding::Encoder<'_, D>,
9297            offset: usize,
9298            depth: fidl::encoding::Depth,
9299        ) -> fidl::Result<()> {
9300            encoder.debug_check_bounds::<AudioGainInfo>(offset);
9301            // Zero out padding regions. There's no need to apply masks
9302            // because the unmasked parts will be overwritten by fields.
9303            // Write the fields.
9304            self.0.encode(encoder, offset + 0, depth)?;
9305            self.1.encode(encoder, offset + 4, depth)?;
9306            Ok(())
9307        }
9308    }
9309
9310    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioGainInfo {
9311        #[inline(always)]
9312        fn new_empty() -> Self {
9313            Self {
9314                gain_db: fidl::new_empty!(f32, D),
9315                flags: fidl::new_empty!(AudioGainInfoFlags, D),
9316            }
9317        }
9318
9319        #[inline]
9320        unsafe fn decode(
9321            &mut self,
9322            decoder: &mut fidl::encoding::Decoder<'_, D>,
9323            offset: usize,
9324            _depth: fidl::encoding::Depth,
9325        ) -> fidl::Result<()> {
9326            decoder.debug_check_bounds::<Self>(offset);
9327            // Verify that padding bytes are zero.
9328            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 0, _depth)?;
9329            fidl::decode!(AudioGainInfoFlags, D, &mut self.flags, decoder, offset + 4, _depth)?;
9330            Ok(())
9331        }
9332    }
9333
9334    impl fidl::encoding::ValueTypeMarker for AudioRendererEnableMinLeadTimeEventsRequest {
9335        type Borrowed<'a> = &'a Self;
9336        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9337            value
9338        }
9339    }
9340
9341    unsafe impl fidl::encoding::TypeMarker for AudioRendererEnableMinLeadTimeEventsRequest {
9342        type Owned = Self;
9343
9344        #[inline(always)]
9345        fn inline_align(_context: fidl::encoding::Context) -> usize {
9346            1
9347        }
9348
9349        #[inline(always)]
9350        fn inline_size(_context: fidl::encoding::Context) -> usize {
9351            1
9352        }
9353    }
9354
9355    unsafe impl<D: fidl::encoding::ResourceDialect>
9356        fidl::encoding::Encode<AudioRendererEnableMinLeadTimeEventsRequest, D>
9357        for &AudioRendererEnableMinLeadTimeEventsRequest
9358    {
9359        #[inline]
9360        unsafe fn encode(
9361            self,
9362            encoder: &mut fidl::encoding::Encoder<'_, D>,
9363            offset: usize,
9364            _depth: fidl::encoding::Depth,
9365        ) -> fidl::Result<()> {
9366            encoder.debug_check_bounds::<AudioRendererEnableMinLeadTimeEventsRequest>(offset);
9367            // Delegate to tuple encoding.
9368            fidl::encoding::Encode::<AudioRendererEnableMinLeadTimeEventsRequest, D>::encode(
9369                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.enabled),),
9370                encoder,
9371                offset,
9372                _depth,
9373            )
9374        }
9375    }
9376    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
9377        fidl::encoding::Encode<AudioRendererEnableMinLeadTimeEventsRequest, D> for (T0,)
9378    {
9379        #[inline]
9380        unsafe fn encode(
9381            self,
9382            encoder: &mut fidl::encoding::Encoder<'_, D>,
9383            offset: usize,
9384            depth: fidl::encoding::Depth,
9385        ) -> fidl::Result<()> {
9386            encoder.debug_check_bounds::<AudioRendererEnableMinLeadTimeEventsRequest>(offset);
9387            // Zero out padding regions. There's no need to apply masks
9388            // because the unmasked parts will be overwritten by fields.
9389            // Write the fields.
9390            self.0.encode(encoder, offset + 0, depth)?;
9391            Ok(())
9392        }
9393    }
9394
9395    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9396        for AudioRendererEnableMinLeadTimeEventsRequest
9397    {
9398        #[inline(always)]
9399        fn new_empty() -> Self {
9400            Self { enabled: fidl::new_empty!(bool, D) }
9401        }
9402
9403        #[inline]
9404        unsafe fn decode(
9405            &mut self,
9406            decoder: &mut fidl::encoding::Decoder<'_, D>,
9407            offset: usize,
9408            _depth: fidl::encoding::Depth,
9409        ) -> fidl::Result<()> {
9410            decoder.debug_check_bounds::<Self>(offset);
9411            // Verify that padding bytes are zero.
9412            fidl::decode!(bool, D, &mut self.enabled, decoder, offset + 0, _depth)?;
9413            Ok(())
9414        }
9415    }
9416
9417    impl fidl::encoding::ValueTypeMarker for AudioRendererGetMinLeadTimeResponse {
9418        type Borrowed<'a> = &'a Self;
9419        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9420            value
9421        }
9422    }
9423
9424    unsafe impl fidl::encoding::TypeMarker for AudioRendererGetMinLeadTimeResponse {
9425        type Owned = Self;
9426
9427        #[inline(always)]
9428        fn inline_align(_context: fidl::encoding::Context) -> usize {
9429            8
9430        }
9431
9432        #[inline(always)]
9433        fn inline_size(_context: fidl::encoding::Context) -> usize {
9434            8
9435        }
9436        #[inline(always)]
9437        fn encode_is_copy() -> bool {
9438            true
9439        }
9440
9441        #[inline(always)]
9442        fn decode_is_copy() -> bool {
9443            true
9444        }
9445    }
9446
9447    unsafe impl<D: fidl::encoding::ResourceDialect>
9448        fidl::encoding::Encode<AudioRendererGetMinLeadTimeResponse, D>
9449        for &AudioRendererGetMinLeadTimeResponse
9450    {
9451        #[inline]
9452        unsafe fn encode(
9453            self,
9454            encoder: &mut fidl::encoding::Encoder<'_, D>,
9455            offset: usize,
9456            _depth: fidl::encoding::Depth,
9457        ) -> fidl::Result<()> {
9458            encoder.debug_check_bounds::<AudioRendererGetMinLeadTimeResponse>(offset);
9459            unsafe {
9460                // Copy the object into the buffer.
9461                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9462                (buf_ptr as *mut AudioRendererGetMinLeadTimeResponse)
9463                    .write_unaligned((self as *const AudioRendererGetMinLeadTimeResponse).read());
9464                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9465                // done second because the memcpy will write garbage to these bytes.
9466            }
9467            Ok(())
9468        }
9469    }
9470    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
9471        fidl::encoding::Encode<AudioRendererGetMinLeadTimeResponse, D> for (T0,)
9472    {
9473        #[inline]
9474        unsafe fn encode(
9475            self,
9476            encoder: &mut fidl::encoding::Encoder<'_, D>,
9477            offset: usize,
9478            depth: fidl::encoding::Depth,
9479        ) -> fidl::Result<()> {
9480            encoder.debug_check_bounds::<AudioRendererGetMinLeadTimeResponse>(offset);
9481            // Zero out padding regions. There's no need to apply masks
9482            // because the unmasked parts will be overwritten by fields.
9483            // Write the fields.
9484            self.0.encode(encoder, offset + 0, depth)?;
9485            Ok(())
9486        }
9487    }
9488
9489    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9490        for AudioRendererGetMinLeadTimeResponse
9491    {
9492        #[inline(always)]
9493        fn new_empty() -> Self {
9494            Self { min_lead_time_nsec: fidl::new_empty!(i64, D) }
9495        }
9496
9497        #[inline]
9498        unsafe fn decode(
9499            &mut self,
9500            decoder: &mut fidl::encoding::Decoder<'_, D>,
9501            offset: usize,
9502            _depth: fidl::encoding::Depth,
9503        ) -> fidl::Result<()> {
9504            decoder.debug_check_bounds::<Self>(offset);
9505            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9506            // Verify that padding bytes are zero.
9507            // Copy from the buffer into the object.
9508            unsafe {
9509                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
9510            }
9511            Ok(())
9512        }
9513    }
9514
9515    impl fidl::encoding::ValueTypeMarker for AudioRendererOnMinLeadTimeChangedRequest {
9516        type Borrowed<'a> = &'a Self;
9517        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9518            value
9519        }
9520    }
9521
9522    unsafe impl fidl::encoding::TypeMarker for AudioRendererOnMinLeadTimeChangedRequest {
9523        type Owned = Self;
9524
9525        #[inline(always)]
9526        fn inline_align(_context: fidl::encoding::Context) -> usize {
9527            8
9528        }
9529
9530        #[inline(always)]
9531        fn inline_size(_context: fidl::encoding::Context) -> usize {
9532            8
9533        }
9534        #[inline(always)]
9535        fn encode_is_copy() -> bool {
9536            true
9537        }
9538
9539        #[inline(always)]
9540        fn decode_is_copy() -> bool {
9541            true
9542        }
9543    }
9544
9545    unsafe impl<D: fidl::encoding::ResourceDialect>
9546        fidl::encoding::Encode<AudioRendererOnMinLeadTimeChangedRequest, D>
9547        for &AudioRendererOnMinLeadTimeChangedRequest
9548    {
9549        #[inline]
9550        unsafe fn encode(
9551            self,
9552            encoder: &mut fidl::encoding::Encoder<'_, D>,
9553            offset: usize,
9554            _depth: fidl::encoding::Depth,
9555        ) -> fidl::Result<()> {
9556            encoder.debug_check_bounds::<AudioRendererOnMinLeadTimeChangedRequest>(offset);
9557            unsafe {
9558                // Copy the object into the buffer.
9559                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9560                (buf_ptr as *mut AudioRendererOnMinLeadTimeChangedRequest).write_unaligned(
9561                    (self as *const AudioRendererOnMinLeadTimeChangedRequest).read(),
9562                );
9563                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9564                // done second because the memcpy will write garbage to these bytes.
9565            }
9566            Ok(())
9567        }
9568    }
9569    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
9570        fidl::encoding::Encode<AudioRendererOnMinLeadTimeChangedRequest, D> for (T0,)
9571    {
9572        #[inline]
9573        unsafe fn encode(
9574            self,
9575            encoder: &mut fidl::encoding::Encoder<'_, D>,
9576            offset: usize,
9577            depth: fidl::encoding::Depth,
9578        ) -> fidl::Result<()> {
9579            encoder.debug_check_bounds::<AudioRendererOnMinLeadTimeChangedRequest>(offset);
9580            // Zero out padding regions. There's no need to apply masks
9581            // because the unmasked parts will be overwritten by fields.
9582            // Write the fields.
9583            self.0.encode(encoder, offset + 0, depth)?;
9584            Ok(())
9585        }
9586    }
9587
9588    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9589        for AudioRendererOnMinLeadTimeChangedRequest
9590    {
9591        #[inline(always)]
9592        fn new_empty() -> Self {
9593            Self { min_lead_time_nsec: fidl::new_empty!(i64, D) }
9594        }
9595
9596        #[inline]
9597        unsafe fn decode(
9598            &mut self,
9599            decoder: &mut fidl::encoding::Decoder<'_, D>,
9600            offset: usize,
9601            _depth: fidl::encoding::Depth,
9602        ) -> fidl::Result<()> {
9603            decoder.debug_check_bounds::<Self>(offset);
9604            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9605            // Verify that padding bytes are zero.
9606            // Copy from the buffer into the object.
9607            unsafe {
9608                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
9609            }
9610            Ok(())
9611        }
9612    }
9613
9614    impl fidl::encoding::ValueTypeMarker for AudioRendererPauseResponse {
9615        type Borrowed<'a> = &'a Self;
9616        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9617            value
9618        }
9619    }
9620
9621    unsafe impl fidl::encoding::TypeMarker for AudioRendererPauseResponse {
9622        type Owned = Self;
9623
9624        #[inline(always)]
9625        fn inline_align(_context: fidl::encoding::Context) -> usize {
9626            8
9627        }
9628
9629        #[inline(always)]
9630        fn inline_size(_context: fidl::encoding::Context) -> usize {
9631            16
9632        }
9633        #[inline(always)]
9634        fn encode_is_copy() -> bool {
9635            true
9636        }
9637
9638        #[inline(always)]
9639        fn decode_is_copy() -> bool {
9640            true
9641        }
9642    }
9643
9644    unsafe impl<D: fidl::encoding::ResourceDialect>
9645        fidl::encoding::Encode<AudioRendererPauseResponse, D> for &AudioRendererPauseResponse
9646    {
9647        #[inline]
9648        unsafe fn encode(
9649            self,
9650            encoder: &mut fidl::encoding::Encoder<'_, D>,
9651            offset: usize,
9652            _depth: fidl::encoding::Depth,
9653        ) -> fidl::Result<()> {
9654            encoder.debug_check_bounds::<AudioRendererPauseResponse>(offset);
9655            unsafe {
9656                // Copy the object into the buffer.
9657                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9658                (buf_ptr as *mut AudioRendererPauseResponse)
9659                    .write_unaligned((self as *const AudioRendererPauseResponse).read());
9660                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9661                // done second because the memcpy will write garbage to these bytes.
9662            }
9663            Ok(())
9664        }
9665    }
9666    unsafe impl<
9667            D: fidl::encoding::ResourceDialect,
9668            T0: fidl::encoding::Encode<i64, D>,
9669            T1: fidl::encoding::Encode<i64, D>,
9670        > fidl::encoding::Encode<AudioRendererPauseResponse, D> for (T0, T1)
9671    {
9672        #[inline]
9673        unsafe fn encode(
9674            self,
9675            encoder: &mut fidl::encoding::Encoder<'_, D>,
9676            offset: usize,
9677            depth: fidl::encoding::Depth,
9678        ) -> fidl::Result<()> {
9679            encoder.debug_check_bounds::<AudioRendererPauseResponse>(offset);
9680            // Zero out padding regions. There's no need to apply masks
9681            // because the unmasked parts will be overwritten by fields.
9682            // Write the fields.
9683            self.0.encode(encoder, offset + 0, depth)?;
9684            self.1.encode(encoder, offset + 8, depth)?;
9685            Ok(())
9686        }
9687    }
9688
9689    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9690        for AudioRendererPauseResponse
9691    {
9692        #[inline(always)]
9693        fn new_empty() -> Self {
9694            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
9695        }
9696
9697        #[inline]
9698        unsafe fn decode(
9699            &mut self,
9700            decoder: &mut fidl::encoding::Decoder<'_, D>,
9701            offset: usize,
9702            _depth: fidl::encoding::Depth,
9703        ) -> fidl::Result<()> {
9704            decoder.debug_check_bounds::<Self>(offset);
9705            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9706            // Verify that padding bytes are zero.
9707            // Copy from the buffer into the object.
9708            unsafe {
9709                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
9710            }
9711            Ok(())
9712        }
9713    }
9714
9715    impl fidl::encoding::ValueTypeMarker for AudioRendererPlayNoReplyRequest {
9716        type Borrowed<'a> = &'a Self;
9717        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9718            value
9719        }
9720    }
9721
9722    unsafe impl fidl::encoding::TypeMarker for AudioRendererPlayNoReplyRequest {
9723        type Owned = Self;
9724
9725        #[inline(always)]
9726        fn inline_align(_context: fidl::encoding::Context) -> usize {
9727            8
9728        }
9729
9730        #[inline(always)]
9731        fn inline_size(_context: fidl::encoding::Context) -> usize {
9732            16
9733        }
9734        #[inline(always)]
9735        fn encode_is_copy() -> bool {
9736            true
9737        }
9738
9739        #[inline(always)]
9740        fn decode_is_copy() -> bool {
9741            true
9742        }
9743    }
9744
9745    unsafe impl<D: fidl::encoding::ResourceDialect>
9746        fidl::encoding::Encode<AudioRendererPlayNoReplyRequest, D>
9747        for &AudioRendererPlayNoReplyRequest
9748    {
9749        #[inline]
9750        unsafe fn encode(
9751            self,
9752            encoder: &mut fidl::encoding::Encoder<'_, D>,
9753            offset: usize,
9754            _depth: fidl::encoding::Depth,
9755        ) -> fidl::Result<()> {
9756            encoder.debug_check_bounds::<AudioRendererPlayNoReplyRequest>(offset);
9757            unsafe {
9758                // Copy the object into the buffer.
9759                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9760                (buf_ptr as *mut AudioRendererPlayNoReplyRequest)
9761                    .write_unaligned((self as *const AudioRendererPlayNoReplyRequest).read());
9762                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9763                // done second because the memcpy will write garbage to these bytes.
9764            }
9765            Ok(())
9766        }
9767    }
9768    unsafe impl<
9769            D: fidl::encoding::ResourceDialect,
9770            T0: fidl::encoding::Encode<i64, D>,
9771            T1: fidl::encoding::Encode<i64, D>,
9772        > fidl::encoding::Encode<AudioRendererPlayNoReplyRequest, D> for (T0, T1)
9773    {
9774        #[inline]
9775        unsafe fn encode(
9776            self,
9777            encoder: &mut fidl::encoding::Encoder<'_, D>,
9778            offset: usize,
9779            depth: fidl::encoding::Depth,
9780        ) -> fidl::Result<()> {
9781            encoder.debug_check_bounds::<AudioRendererPlayNoReplyRequest>(offset);
9782            // Zero out padding regions. There's no need to apply masks
9783            // because the unmasked parts will be overwritten by fields.
9784            // Write the fields.
9785            self.0.encode(encoder, offset + 0, depth)?;
9786            self.1.encode(encoder, offset + 8, depth)?;
9787            Ok(())
9788        }
9789    }
9790
9791    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9792        for AudioRendererPlayNoReplyRequest
9793    {
9794        #[inline(always)]
9795        fn new_empty() -> Self {
9796            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
9797        }
9798
9799        #[inline]
9800        unsafe fn decode(
9801            &mut self,
9802            decoder: &mut fidl::encoding::Decoder<'_, D>,
9803            offset: usize,
9804            _depth: fidl::encoding::Depth,
9805        ) -> fidl::Result<()> {
9806            decoder.debug_check_bounds::<Self>(offset);
9807            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9808            // Verify that padding bytes are zero.
9809            // Copy from the buffer into the object.
9810            unsafe {
9811                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
9812            }
9813            Ok(())
9814        }
9815    }
9816
9817    impl fidl::encoding::ValueTypeMarker for AudioRendererPlayRequest {
9818        type Borrowed<'a> = &'a Self;
9819        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9820            value
9821        }
9822    }
9823
9824    unsafe impl fidl::encoding::TypeMarker for AudioRendererPlayRequest {
9825        type Owned = Self;
9826
9827        #[inline(always)]
9828        fn inline_align(_context: fidl::encoding::Context) -> usize {
9829            8
9830        }
9831
9832        #[inline(always)]
9833        fn inline_size(_context: fidl::encoding::Context) -> usize {
9834            16
9835        }
9836        #[inline(always)]
9837        fn encode_is_copy() -> bool {
9838            true
9839        }
9840
9841        #[inline(always)]
9842        fn decode_is_copy() -> bool {
9843            true
9844        }
9845    }
9846
9847    unsafe impl<D: fidl::encoding::ResourceDialect>
9848        fidl::encoding::Encode<AudioRendererPlayRequest, D> for &AudioRendererPlayRequest
9849    {
9850        #[inline]
9851        unsafe fn encode(
9852            self,
9853            encoder: &mut fidl::encoding::Encoder<'_, D>,
9854            offset: usize,
9855            _depth: fidl::encoding::Depth,
9856        ) -> fidl::Result<()> {
9857            encoder.debug_check_bounds::<AudioRendererPlayRequest>(offset);
9858            unsafe {
9859                // Copy the object into the buffer.
9860                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9861                (buf_ptr as *mut AudioRendererPlayRequest)
9862                    .write_unaligned((self as *const AudioRendererPlayRequest).read());
9863                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9864                // done second because the memcpy will write garbage to these bytes.
9865            }
9866            Ok(())
9867        }
9868    }
9869    unsafe impl<
9870            D: fidl::encoding::ResourceDialect,
9871            T0: fidl::encoding::Encode<i64, D>,
9872            T1: fidl::encoding::Encode<i64, D>,
9873        > fidl::encoding::Encode<AudioRendererPlayRequest, D> for (T0, T1)
9874    {
9875        #[inline]
9876        unsafe fn encode(
9877            self,
9878            encoder: &mut fidl::encoding::Encoder<'_, D>,
9879            offset: usize,
9880            depth: fidl::encoding::Depth,
9881        ) -> fidl::Result<()> {
9882            encoder.debug_check_bounds::<AudioRendererPlayRequest>(offset);
9883            // Zero out padding regions. There's no need to apply masks
9884            // because the unmasked parts will be overwritten by fields.
9885            // Write the fields.
9886            self.0.encode(encoder, offset + 0, depth)?;
9887            self.1.encode(encoder, offset + 8, depth)?;
9888            Ok(())
9889        }
9890    }
9891
9892    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9893        for AudioRendererPlayRequest
9894    {
9895        #[inline(always)]
9896        fn new_empty() -> Self {
9897            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
9898        }
9899
9900        #[inline]
9901        unsafe fn decode(
9902            &mut self,
9903            decoder: &mut fidl::encoding::Decoder<'_, D>,
9904            offset: usize,
9905            _depth: fidl::encoding::Depth,
9906        ) -> fidl::Result<()> {
9907            decoder.debug_check_bounds::<Self>(offset);
9908            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9909            // Verify that padding bytes are zero.
9910            // Copy from the buffer into the object.
9911            unsafe {
9912                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
9913            }
9914            Ok(())
9915        }
9916    }
9917
9918    impl fidl::encoding::ValueTypeMarker for AudioRendererPlayResponse {
9919        type Borrowed<'a> = &'a Self;
9920        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9921            value
9922        }
9923    }
9924
9925    unsafe impl fidl::encoding::TypeMarker for AudioRendererPlayResponse {
9926        type Owned = Self;
9927
9928        #[inline(always)]
9929        fn inline_align(_context: fidl::encoding::Context) -> usize {
9930            8
9931        }
9932
9933        #[inline(always)]
9934        fn inline_size(_context: fidl::encoding::Context) -> usize {
9935            16
9936        }
9937        #[inline(always)]
9938        fn encode_is_copy() -> bool {
9939            true
9940        }
9941
9942        #[inline(always)]
9943        fn decode_is_copy() -> bool {
9944            true
9945        }
9946    }
9947
9948    unsafe impl<D: fidl::encoding::ResourceDialect>
9949        fidl::encoding::Encode<AudioRendererPlayResponse, D> for &AudioRendererPlayResponse
9950    {
9951        #[inline]
9952        unsafe fn encode(
9953            self,
9954            encoder: &mut fidl::encoding::Encoder<'_, D>,
9955            offset: usize,
9956            _depth: fidl::encoding::Depth,
9957        ) -> fidl::Result<()> {
9958            encoder.debug_check_bounds::<AudioRendererPlayResponse>(offset);
9959            unsafe {
9960                // Copy the object into the buffer.
9961                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9962                (buf_ptr as *mut AudioRendererPlayResponse)
9963                    .write_unaligned((self as *const AudioRendererPlayResponse).read());
9964                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9965                // done second because the memcpy will write garbage to these bytes.
9966            }
9967            Ok(())
9968        }
9969    }
9970    unsafe impl<
9971            D: fidl::encoding::ResourceDialect,
9972            T0: fidl::encoding::Encode<i64, D>,
9973            T1: fidl::encoding::Encode<i64, D>,
9974        > fidl::encoding::Encode<AudioRendererPlayResponse, D> for (T0, T1)
9975    {
9976        #[inline]
9977        unsafe fn encode(
9978            self,
9979            encoder: &mut fidl::encoding::Encoder<'_, D>,
9980            offset: usize,
9981            depth: fidl::encoding::Depth,
9982        ) -> fidl::Result<()> {
9983            encoder.debug_check_bounds::<AudioRendererPlayResponse>(offset);
9984            // Zero out padding regions. There's no need to apply masks
9985            // because the unmasked parts will be overwritten by fields.
9986            // Write the fields.
9987            self.0.encode(encoder, offset + 0, depth)?;
9988            self.1.encode(encoder, offset + 8, depth)?;
9989            Ok(())
9990        }
9991    }
9992
9993    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9994        for AudioRendererPlayResponse
9995    {
9996        #[inline(always)]
9997        fn new_empty() -> Self {
9998            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
9999        }
10000
10001        #[inline]
10002        unsafe fn decode(
10003            &mut self,
10004            decoder: &mut fidl::encoding::Decoder<'_, D>,
10005            offset: usize,
10006            _depth: fidl::encoding::Depth,
10007        ) -> fidl::Result<()> {
10008            decoder.debug_check_bounds::<Self>(offset);
10009            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10010            // Verify that padding bytes are zero.
10011            // Copy from the buffer into the object.
10012            unsafe {
10013                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
10014            }
10015            Ok(())
10016        }
10017    }
10018
10019    impl fidl::encoding::ValueTypeMarker for AudioRendererSetPcmStreamTypeRequest {
10020        type Borrowed<'a> = &'a Self;
10021        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10022            value
10023        }
10024    }
10025
10026    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetPcmStreamTypeRequest {
10027        type Owned = Self;
10028
10029        #[inline(always)]
10030        fn inline_align(_context: fidl::encoding::Context) -> usize {
10031            4
10032        }
10033
10034        #[inline(always)]
10035        fn inline_size(_context: fidl::encoding::Context) -> usize {
10036            12
10037        }
10038    }
10039
10040    unsafe impl<D: fidl::encoding::ResourceDialect>
10041        fidl::encoding::Encode<AudioRendererSetPcmStreamTypeRequest, D>
10042        for &AudioRendererSetPcmStreamTypeRequest
10043    {
10044        #[inline]
10045        unsafe fn encode(
10046            self,
10047            encoder: &mut fidl::encoding::Encoder<'_, D>,
10048            offset: usize,
10049            _depth: fidl::encoding::Depth,
10050        ) -> fidl::Result<()> {
10051            encoder.debug_check_bounds::<AudioRendererSetPcmStreamTypeRequest>(offset);
10052            // Delegate to tuple encoding.
10053            fidl::encoding::Encode::<AudioRendererSetPcmStreamTypeRequest, D>::encode(
10054                (<AudioStreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),),
10055                encoder,
10056                offset,
10057                _depth,
10058            )
10059        }
10060    }
10061    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioStreamType, D>>
10062        fidl::encoding::Encode<AudioRendererSetPcmStreamTypeRequest, D> for (T0,)
10063    {
10064        #[inline]
10065        unsafe fn encode(
10066            self,
10067            encoder: &mut fidl::encoding::Encoder<'_, D>,
10068            offset: usize,
10069            depth: fidl::encoding::Depth,
10070        ) -> fidl::Result<()> {
10071            encoder.debug_check_bounds::<AudioRendererSetPcmStreamTypeRequest>(offset);
10072            // Zero out padding regions. There's no need to apply masks
10073            // because the unmasked parts will be overwritten by fields.
10074            // Write the fields.
10075            self.0.encode(encoder, offset + 0, depth)?;
10076            Ok(())
10077        }
10078    }
10079
10080    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10081        for AudioRendererSetPcmStreamTypeRequest
10082    {
10083        #[inline(always)]
10084        fn new_empty() -> Self {
10085            Self { type_: fidl::new_empty!(AudioStreamType, D) }
10086        }
10087
10088        #[inline]
10089        unsafe fn decode(
10090            &mut self,
10091            decoder: &mut fidl::encoding::Decoder<'_, D>,
10092            offset: usize,
10093            _depth: fidl::encoding::Depth,
10094        ) -> fidl::Result<()> {
10095            decoder.debug_check_bounds::<Self>(offset);
10096            // Verify that padding bytes are zero.
10097            fidl::decode!(AudioStreamType, D, &mut self.type_, decoder, offset + 0, _depth)?;
10098            Ok(())
10099        }
10100    }
10101
10102    impl fidl::encoding::ValueTypeMarker for AudioRendererSetPtsContinuityThresholdRequest {
10103        type Borrowed<'a> = &'a Self;
10104        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10105            value
10106        }
10107    }
10108
10109    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetPtsContinuityThresholdRequest {
10110        type Owned = Self;
10111
10112        #[inline(always)]
10113        fn inline_align(_context: fidl::encoding::Context) -> usize {
10114            4
10115        }
10116
10117        #[inline(always)]
10118        fn inline_size(_context: fidl::encoding::Context) -> usize {
10119            4
10120        }
10121    }
10122
10123    unsafe impl<D: fidl::encoding::ResourceDialect>
10124        fidl::encoding::Encode<AudioRendererSetPtsContinuityThresholdRequest, D>
10125        for &AudioRendererSetPtsContinuityThresholdRequest
10126    {
10127        #[inline]
10128        unsafe fn encode(
10129            self,
10130            encoder: &mut fidl::encoding::Encoder<'_, D>,
10131            offset: usize,
10132            _depth: fidl::encoding::Depth,
10133        ) -> fidl::Result<()> {
10134            encoder.debug_check_bounds::<AudioRendererSetPtsContinuityThresholdRequest>(offset);
10135            // Delegate to tuple encoding.
10136            fidl::encoding::Encode::<AudioRendererSetPtsContinuityThresholdRequest, D>::encode(
10137                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.threshold_seconds),),
10138                encoder,
10139                offset,
10140                _depth,
10141            )
10142        }
10143    }
10144    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
10145        fidl::encoding::Encode<AudioRendererSetPtsContinuityThresholdRequest, D> for (T0,)
10146    {
10147        #[inline]
10148        unsafe fn encode(
10149            self,
10150            encoder: &mut fidl::encoding::Encoder<'_, D>,
10151            offset: usize,
10152            depth: fidl::encoding::Depth,
10153        ) -> fidl::Result<()> {
10154            encoder.debug_check_bounds::<AudioRendererSetPtsContinuityThresholdRequest>(offset);
10155            // Zero out padding regions. There's no need to apply masks
10156            // because the unmasked parts will be overwritten by fields.
10157            // Write the fields.
10158            self.0.encode(encoder, offset + 0, depth)?;
10159            Ok(())
10160        }
10161    }
10162
10163    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10164        for AudioRendererSetPtsContinuityThresholdRequest
10165    {
10166        #[inline(always)]
10167        fn new_empty() -> Self {
10168            Self { threshold_seconds: fidl::new_empty!(f32, D) }
10169        }
10170
10171        #[inline]
10172        unsafe fn decode(
10173            &mut self,
10174            decoder: &mut fidl::encoding::Decoder<'_, D>,
10175            offset: usize,
10176            _depth: fidl::encoding::Depth,
10177        ) -> fidl::Result<()> {
10178            decoder.debug_check_bounds::<Self>(offset);
10179            // Verify that padding bytes are zero.
10180            fidl::decode!(f32, D, &mut self.threshold_seconds, decoder, offset + 0, _depth)?;
10181            Ok(())
10182        }
10183    }
10184
10185    impl fidl::encoding::ValueTypeMarker for AudioRendererSetPtsUnitsRequest {
10186        type Borrowed<'a> = &'a Self;
10187        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10188            value
10189        }
10190    }
10191
10192    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetPtsUnitsRequest {
10193        type Owned = Self;
10194
10195        #[inline(always)]
10196        fn inline_align(_context: fidl::encoding::Context) -> usize {
10197            4
10198        }
10199
10200        #[inline(always)]
10201        fn inline_size(_context: fidl::encoding::Context) -> usize {
10202            8
10203        }
10204        #[inline(always)]
10205        fn encode_is_copy() -> bool {
10206            true
10207        }
10208
10209        #[inline(always)]
10210        fn decode_is_copy() -> bool {
10211            true
10212        }
10213    }
10214
10215    unsafe impl<D: fidl::encoding::ResourceDialect>
10216        fidl::encoding::Encode<AudioRendererSetPtsUnitsRequest, D>
10217        for &AudioRendererSetPtsUnitsRequest
10218    {
10219        #[inline]
10220        unsafe fn encode(
10221            self,
10222            encoder: &mut fidl::encoding::Encoder<'_, D>,
10223            offset: usize,
10224            _depth: fidl::encoding::Depth,
10225        ) -> fidl::Result<()> {
10226            encoder.debug_check_bounds::<AudioRendererSetPtsUnitsRequest>(offset);
10227            unsafe {
10228                // Copy the object into the buffer.
10229                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
10230                (buf_ptr as *mut AudioRendererSetPtsUnitsRequest)
10231                    .write_unaligned((self as *const AudioRendererSetPtsUnitsRequest).read());
10232                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
10233                // done second because the memcpy will write garbage to these bytes.
10234            }
10235            Ok(())
10236        }
10237    }
10238    unsafe impl<
10239            D: fidl::encoding::ResourceDialect,
10240            T0: fidl::encoding::Encode<u32, D>,
10241            T1: fidl::encoding::Encode<u32, D>,
10242        > fidl::encoding::Encode<AudioRendererSetPtsUnitsRequest, D> for (T0, T1)
10243    {
10244        #[inline]
10245        unsafe fn encode(
10246            self,
10247            encoder: &mut fidl::encoding::Encoder<'_, D>,
10248            offset: usize,
10249            depth: fidl::encoding::Depth,
10250        ) -> fidl::Result<()> {
10251            encoder.debug_check_bounds::<AudioRendererSetPtsUnitsRequest>(offset);
10252            // Zero out padding regions. There's no need to apply masks
10253            // because the unmasked parts will be overwritten by fields.
10254            // Write the fields.
10255            self.0.encode(encoder, offset + 0, depth)?;
10256            self.1.encode(encoder, offset + 4, depth)?;
10257            Ok(())
10258        }
10259    }
10260
10261    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10262        for AudioRendererSetPtsUnitsRequest
10263    {
10264        #[inline(always)]
10265        fn new_empty() -> Self {
10266            Self {
10267                tick_per_second_numerator: fidl::new_empty!(u32, D),
10268                tick_per_second_denominator: fidl::new_empty!(u32, D),
10269            }
10270        }
10271
10272        #[inline]
10273        unsafe fn decode(
10274            &mut self,
10275            decoder: &mut fidl::encoding::Decoder<'_, D>,
10276            offset: usize,
10277            _depth: fidl::encoding::Depth,
10278        ) -> fidl::Result<()> {
10279            decoder.debug_check_bounds::<Self>(offset);
10280            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10281            // Verify that padding bytes are zero.
10282            // Copy from the buffer into the object.
10283            unsafe {
10284                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
10285            }
10286            Ok(())
10287        }
10288    }
10289
10290    impl fidl::encoding::ValueTypeMarker for AudioRendererSetUsage2Request {
10291        type Borrowed<'a> = &'a Self;
10292        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10293            value
10294        }
10295    }
10296
10297    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetUsage2Request {
10298        type Owned = Self;
10299
10300        #[inline(always)]
10301        fn inline_align(_context: fidl::encoding::Context) -> usize {
10302            4
10303        }
10304
10305        #[inline(always)]
10306        fn inline_size(_context: fidl::encoding::Context) -> usize {
10307            4
10308        }
10309    }
10310
10311    unsafe impl<D: fidl::encoding::ResourceDialect>
10312        fidl::encoding::Encode<AudioRendererSetUsage2Request, D>
10313        for &AudioRendererSetUsage2Request
10314    {
10315        #[inline]
10316        unsafe fn encode(
10317            self,
10318            encoder: &mut fidl::encoding::Encoder<'_, D>,
10319            offset: usize,
10320            _depth: fidl::encoding::Depth,
10321        ) -> fidl::Result<()> {
10322            encoder.debug_check_bounds::<AudioRendererSetUsage2Request>(offset);
10323            // Delegate to tuple encoding.
10324            fidl::encoding::Encode::<AudioRendererSetUsage2Request, D>::encode(
10325                (<AudioRenderUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage2),),
10326                encoder,
10327                offset,
10328                _depth,
10329            )
10330        }
10331    }
10332    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioRenderUsage2, D>>
10333        fidl::encoding::Encode<AudioRendererSetUsage2Request, D> for (T0,)
10334    {
10335        #[inline]
10336        unsafe fn encode(
10337            self,
10338            encoder: &mut fidl::encoding::Encoder<'_, D>,
10339            offset: usize,
10340            depth: fidl::encoding::Depth,
10341        ) -> fidl::Result<()> {
10342            encoder.debug_check_bounds::<AudioRendererSetUsage2Request>(offset);
10343            // Zero out padding regions. There's no need to apply masks
10344            // because the unmasked parts will be overwritten by fields.
10345            // Write the fields.
10346            self.0.encode(encoder, offset + 0, depth)?;
10347            Ok(())
10348        }
10349    }
10350
10351    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10352        for AudioRendererSetUsage2Request
10353    {
10354        #[inline(always)]
10355        fn new_empty() -> Self {
10356            Self { usage2: fidl::new_empty!(AudioRenderUsage2, D) }
10357        }
10358
10359        #[inline]
10360        unsafe fn decode(
10361            &mut self,
10362            decoder: &mut fidl::encoding::Decoder<'_, D>,
10363            offset: usize,
10364            _depth: fidl::encoding::Depth,
10365        ) -> fidl::Result<()> {
10366            decoder.debug_check_bounds::<Self>(offset);
10367            // Verify that padding bytes are zero.
10368            fidl::decode!(AudioRenderUsage2, D, &mut self.usage2, decoder, offset + 0, _depth)?;
10369            Ok(())
10370        }
10371    }
10372
10373    impl fidl::encoding::ValueTypeMarker for AudioRendererSetUsageRequest {
10374        type Borrowed<'a> = &'a Self;
10375        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10376            value
10377        }
10378    }
10379
10380    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetUsageRequest {
10381        type Owned = Self;
10382
10383        #[inline(always)]
10384        fn inline_align(_context: fidl::encoding::Context) -> usize {
10385            4
10386        }
10387
10388        #[inline(always)]
10389        fn inline_size(_context: fidl::encoding::Context) -> usize {
10390            4
10391        }
10392    }
10393
10394    unsafe impl<D: fidl::encoding::ResourceDialect>
10395        fidl::encoding::Encode<AudioRendererSetUsageRequest, D> for &AudioRendererSetUsageRequest
10396    {
10397        #[inline]
10398        unsafe fn encode(
10399            self,
10400            encoder: &mut fidl::encoding::Encoder<'_, D>,
10401            offset: usize,
10402            _depth: fidl::encoding::Depth,
10403        ) -> fidl::Result<()> {
10404            encoder.debug_check_bounds::<AudioRendererSetUsageRequest>(offset);
10405            // Delegate to tuple encoding.
10406            fidl::encoding::Encode::<AudioRendererSetUsageRequest, D>::encode(
10407                (<AudioRenderUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),),
10408                encoder,
10409                offset,
10410                _depth,
10411            )
10412        }
10413    }
10414    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioRenderUsage, D>>
10415        fidl::encoding::Encode<AudioRendererSetUsageRequest, D> for (T0,)
10416    {
10417        #[inline]
10418        unsafe fn encode(
10419            self,
10420            encoder: &mut fidl::encoding::Encoder<'_, D>,
10421            offset: usize,
10422            depth: fidl::encoding::Depth,
10423        ) -> fidl::Result<()> {
10424            encoder.debug_check_bounds::<AudioRendererSetUsageRequest>(offset);
10425            // Zero out padding regions. There's no need to apply masks
10426            // because the unmasked parts will be overwritten by fields.
10427            // Write the fields.
10428            self.0.encode(encoder, offset + 0, depth)?;
10429            Ok(())
10430        }
10431    }
10432
10433    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10434        for AudioRendererSetUsageRequest
10435    {
10436        #[inline(always)]
10437        fn new_empty() -> Self {
10438            Self { usage: fidl::new_empty!(AudioRenderUsage, D) }
10439        }
10440
10441        #[inline]
10442        unsafe fn decode(
10443            &mut self,
10444            decoder: &mut fidl::encoding::Decoder<'_, D>,
10445            offset: usize,
10446            _depth: fidl::encoding::Depth,
10447        ) -> fidl::Result<()> {
10448            decoder.debug_check_bounds::<Self>(offset);
10449            // Verify that padding bytes are zero.
10450            fidl::decode!(AudioRenderUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
10451            Ok(())
10452        }
10453    }
10454
10455    impl fidl::encoding::ValueTypeMarker for AudioStreamType {
10456        type Borrowed<'a> = &'a Self;
10457        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10458            value
10459        }
10460    }
10461
10462    unsafe impl fidl::encoding::TypeMarker for AudioStreamType {
10463        type Owned = Self;
10464
10465        #[inline(always)]
10466        fn inline_align(_context: fidl::encoding::Context) -> usize {
10467            4
10468        }
10469
10470        #[inline(always)]
10471        fn inline_size(_context: fidl::encoding::Context) -> usize {
10472            12
10473        }
10474    }
10475
10476    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioStreamType, D>
10477        for &AudioStreamType
10478    {
10479        #[inline]
10480        unsafe fn encode(
10481            self,
10482            encoder: &mut fidl::encoding::Encoder<'_, D>,
10483            offset: usize,
10484            _depth: fidl::encoding::Depth,
10485        ) -> fidl::Result<()> {
10486            encoder.debug_check_bounds::<AudioStreamType>(offset);
10487            // Delegate to tuple encoding.
10488            fidl::encoding::Encode::<AudioStreamType, D>::encode(
10489                (
10490                    <AudioSampleFormat as fidl::encoding::ValueTypeMarker>::borrow(
10491                        &self.sample_format,
10492                    ),
10493                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.channels),
10494                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frames_per_second),
10495                ),
10496                encoder,
10497                offset,
10498                _depth,
10499            )
10500        }
10501    }
10502    unsafe impl<
10503            D: fidl::encoding::ResourceDialect,
10504            T0: fidl::encoding::Encode<AudioSampleFormat, D>,
10505            T1: fidl::encoding::Encode<u32, D>,
10506            T2: fidl::encoding::Encode<u32, D>,
10507        > fidl::encoding::Encode<AudioStreamType, D> for (T0, T1, T2)
10508    {
10509        #[inline]
10510        unsafe fn encode(
10511            self,
10512            encoder: &mut fidl::encoding::Encoder<'_, D>,
10513            offset: usize,
10514            depth: fidl::encoding::Depth,
10515        ) -> fidl::Result<()> {
10516            encoder.debug_check_bounds::<AudioStreamType>(offset);
10517            // Zero out padding regions. There's no need to apply masks
10518            // because the unmasked parts will be overwritten by fields.
10519            // Write the fields.
10520            self.0.encode(encoder, offset + 0, depth)?;
10521            self.1.encode(encoder, offset + 4, depth)?;
10522            self.2.encode(encoder, offset + 8, depth)?;
10523            Ok(())
10524        }
10525    }
10526
10527    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioStreamType {
10528        #[inline(always)]
10529        fn new_empty() -> Self {
10530            Self {
10531                sample_format: fidl::new_empty!(AudioSampleFormat, D),
10532                channels: fidl::new_empty!(u32, D),
10533                frames_per_second: fidl::new_empty!(u32, D),
10534            }
10535        }
10536
10537        #[inline]
10538        unsafe fn decode(
10539            &mut self,
10540            decoder: &mut fidl::encoding::Decoder<'_, D>,
10541            offset: usize,
10542            _depth: fidl::encoding::Depth,
10543        ) -> fidl::Result<()> {
10544            decoder.debug_check_bounds::<Self>(offset);
10545            // Verify that padding bytes are zero.
10546            fidl::decode!(
10547                AudioSampleFormat,
10548                D,
10549                &mut self.sample_format,
10550                decoder,
10551                offset + 0,
10552                _depth
10553            )?;
10554            fidl::decode!(u32, D, &mut self.channels, decoder, offset + 4, _depth)?;
10555            fidl::decode!(u32, D, &mut self.frames_per_second, decoder, offset + 8, _depth)?;
10556            Ok(())
10557        }
10558    }
10559
10560    impl fidl::encoding::ValueTypeMarker for Compression {
10561        type Borrowed<'a> = &'a Self;
10562        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10563            value
10564        }
10565    }
10566
10567    unsafe impl fidl::encoding::TypeMarker for Compression {
10568        type Owned = Self;
10569
10570        #[inline(always)]
10571        fn inline_align(_context: fidl::encoding::Context) -> usize {
10572            8
10573        }
10574
10575        #[inline(always)]
10576        fn inline_size(_context: fidl::encoding::Context) -> usize {
10577            32
10578        }
10579    }
10580
10581    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Compression, D>
10582        for &Compression
10583    {
10584        #[inline]
10585        unsafe fn encode(
10586            self,
10587            encoder: &mut fidl::encoding::Encoder<'_, D>,
10588            offset: usize,
10589            _depth: fidl::encoding::Depth,
10590        ) -> fidl::Result<()> {
10591            encoder.debug_check_bounds::<Compression>(offset);
10592            // Delegate to tuple encoding.
10593            fidl::encoding::Encode::<Compression, D>::encode(
10594                (
10595                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),
10596                    <fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>> as fidl::encoding::ValueTypeMarker>::borrow(&self.parameters),
10597                ),
10598                encoder, offset, _depth
10599            )
10600        }
10601    }
10602    unsafe impl<
10603            D: fidl::encoding::ResourceDialect,
10604            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<256>, D>,
10605            T1: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>>, D>,
10606        > fidl::encoding::Encode<Compression, D> for (T0, T1)
10607    {
10608        #[inline]
10609        unsafe fn encode(
10610            self,
10611            encoder: &mut fidl::encoding::Encoder<'_, D>,
10612            offset: usize,
10613            depth: fidl::encoding::Depth,
10614        ) -> fidl::Result<()> {
10615            encoder.debug_check_bounds::<Compression>(offset);
10616            // Zero out padding regions. There's no need to apply masks
10617            // because the unmasked parts will be overwritten by fields.
10618            // Write the fields.
10619            self.0.encode(encoder, offset + 0, depth)?;
10620            self.1.encode(encoder, offset + 16, depth)?;
10621            Ok(())
10622        }
10623    }
10624
10625    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Compression {
10626        #[inline(always)]
10627        fn new_empty() -> Self {
10628            Self {
10629                type_: fidl::new_empty!(fidl::encoding::BoundedString<256>, D),
10630                parameters: fidl::new_empty!(
10631                    fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>>,
10632                    D
10633                ),
10634            }
10635        }
10636
10637        #[inline]
10638        unsafe fn decode(
10639            &mut self,
10640            decoder: &mut fidl::encoding::Decoder<'_, D>,
10641            offset: usize,
10642            _depth: fidl::encoding::Depth,
10643        ) -> fidl::Result<()> {
10644            decoder.debug_check_bounds::<Self>(offset);
10645            // Verify that padding bytes are zero.
10646            fidl::decode!(
10647                fidl::encoding::BoundedString<256>,
10648                D,
10649                &mut self.type_,
10650                decoder,
10651                offset + 0,
10652                _depth
10653            )?;
10654            fidl::decode!(
10655                fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>>,
10656                D,
10657                &mut self.parameters,
10658                decoder,
10659                offset + 16,
10660                _depth
10661            )?;
10662            Ok(())
10663        }
10664    }
10665
10666    impl fidl::encoding::ValueTypeMarker for EncryptionPattern {
10667        type Borrowed<'a> = &'a Self;
10668        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10669            value
10670        }
10671    }
10672
10673    unsafe impl fidl::encoding::TypeMarker for EncryptionPattern {
10674        type Owned = Self;
10675
10676        #[inline(always)]
10677        fn inline_align(_context: fidl::encoding::Context) -> usize {
10678            4
10679        }
10680
10681        #[inline(always)]
10682        fn inline_size(_context: fidl::encoding::Context) -> usize {
10683            8
10684        }
10685        #[inline(always)]
10686        fn encode_is_copy() -> bool {
10687            true
10688        }
10689
10690        #[inline(always)]
10691        fn decode_is_copy() -> bool {
10692            true
10693        }
10694    }
10695
10696    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncryptionPattern, D>
10697        for &EncryptionPattern
10698    {
10699        #[inline]
10700        unsafe fn encode(
10701            self,
10702            encoder: &mut fidl::encoding::Encoder<'_, D>,
10703            offset: usize,
10704            _depth: fidl::encoding::Depth,
10705        ) -> fidl::Result<()> {
10706            encoder.debug_check_bounds::<EncryptionPattern>(offset);
10707            unsafe {
10708                // Copy the object into the buffer.
10709                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
10710                (buf_ptr as *mut EncryptionPattern)
10711                    .write_unaligned((self as *const EncryptionPattern).read());
10712                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
10713                // done second because the memcpy will write garbage to these bytes.
10714            }
10715            Ok(())
10716        }
10717    }
10718    unsafe impl<
10719            D: fidl::encoding::ResourceDialect,
10720            T0: fidl::encoding::Encode<u32, D>,
10721            T1: fidl::encoding::Encode<u32, D>,
10722        > fidl::encoding::Encode<EncryptionPattern, D> for (T0, T1)
10723    {
10724        #[inline]
10725        unsafe fn encode(
10726            self,
10727            encoder: &mut fidl::encoding::Encoder<'_, D>,
10728            offset: usize,
10729            depth: fidl::encoding::Depth,
10730        ) -> fidl::Result<()> {
10731            encoder.debug_check_bounds::<EncryptionPattern>(offset);
10732            // Zero out padding regions. There's no need to apply masks
10733            // because the unmasked parts will be overwritten by fields.
10734            // Write the fields.
10735            self.0.encode(encoder, offset + 0, depth)?;
10736            self.1.encode(encoder, offset + 4, depth)?;
10737            Ok(())
10738        }
10739    }
10740
10741    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncryptionPattern {
10742        #[inline(always)]
10743        fn new_empty() -> Self {
10744            Self {
10745                clear_blocks: fidl::new_empty!(u32, D),
10746                encrypted_blocks: fidl::new_empty!(u32, D),
10747            }
10748        }
10749
10750        #[inline]
10751        unsafe fn decode(
10752            &mut self,
10753            decoder: &mut fidl::encoding::Decoder<'_, D>,
10754            offset: usize,
10755            _depth: fidl::encoding::Depth,
10756        ) -> fidl::Result<()> {
10757            decoder.debug_check_bounds::<Self>(offset);
10758            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10759            // Verify that padding bytes are zero.
10760            // Copy from the buffer into the object.
10761            unsafe {
10762                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
10763            }
10764            Ok(())
10765        }
10766    }
10767
10768    impl fidl::encoding::ValueTypeMarker for Metadata {
10769        type Borrowed<'a> = &'a Self;
10770        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10771            value
10772        }
10773    }
10774
10775    unsafe impl fidl::encoding::TypeMarker for Metadata {
10776        type Owned = Self;
10777
10778        #[inline(always)]
10779        fn inline_align(_context: fidl::encoding::Context) -> usize {
10780            8
10781        }
10782
10783        #[inline(always)]
10784        fn inline_size(_context: fidl::encoding::Context) -> usize {
10785            16
10786        }
10787    }
10788
10789    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Metadata, D> for &Metadata {
10790        #[inline]
10791        unsafe fn encode(
10792            self,
10793            encoder: &mut fidl::encoding::Encoder<'_, D>,
10794            offset: usize,
10795            _depth: fidl::encoding::Depth,
10796        ) -> fidl::Result<()> {
10797            encoder.debug_check_bounds::<Metadata>(offset);
10798            // Delegate to tuple encoding.
10799            fidl::encoding::Encode::<Metadata, D>::encode(
10800                (
10801                    <fidl::encoding::UnboundedVector<Property> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
10802                ),
10803                encoder, offset, _depth
10804            )
10805        }
10806    }
10807    unsafe impl<
10808            D: fidl::encoding::ResourceDialect,
10809            T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<Property>, D>,
10810        > fidl::encoding::Encode<Metadata, D> for (T0,)
10811    {
10812        #[inline]
10813        unsafe fn encode(
10814            self,
10815            encoder: &mut fidl::encoding::Encoder<'_, D>,
10816            offset: usize,
10817            depth: fidl::encoding::Depth,
10818        ) -> fidl::Result<()> {
10819            encoder.debug_check_bounds::<Metadata>(offset);
10820            // Zero out padding regions. There's no need to apply masks
10821            // because the unmasked parts will be overwritten by fields.
10822            // Write the fields.
10823            self.0.encode(encoder, offset + 0, depth)?;
10824            Ok(())
10825        }
10826    }
10827
10828    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Metadata {
10829        #[inline(always)]
10830        fn new_empty() -> Self {
10831            Self { properties: fidl::new_empty!(fidl::encoding::UnboundedVector<Property>, D) }
10832        }
10833
10834        #[inline]
10835        unsafe fn decode(
10836            &mut self,
10837            decoder: &mut fidl::encoding::Decoder<'_, D>,
10838            offset: usize,
10839            _depth: fidl::encoding::Depth,
10840        ) -> fidl::Result<()> {
10841            decoder.debug_check_bounds::<Self>(offset);
10842            // Verify that padding bytes are zero.
10843            fidl::decode!(
10844                fidl::encoding::UnboundedVector<Property>,
10845                D,
10846                &mut self.properties,
10847                decoder,
10848                offset + 0,
10849                _depth
10850            )?;
10851            Ok(())
10852        }
10853    }
10854
10855    impl fidl::encoding::ValueTypeMarker for Parameter {
10856        type Borrowed<'a> = &'a Self;
10857        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10858            value
10859        }
10860    }
10861
10862    unsafe impl fidl::encoding::TypeMarker for Parameter {
10863        type Owned = Self;
10864
10865        #[inline(always)]
10866        fn inline_align(_context: fidl::encoding::Context) -> usize {
10867            8
10868        }
10869
10870        #[inline(always)]
10871        fn inline_size(_context: fidl::encoding::Context) -> usize {
10872            48
10873        }
10874    }
10875
10876    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Parameter, D>
10877        for &Parameter
10878    {
10879        #[inline]
10880        unsafe fn encode(
10881            self,
10882            encoder: &mut fidl::encoding::Encoder<'_, D>,
10883            offset: usize,
10884            _depth: fidl::encoding::Depth,
10885        ) -> fidl::Result<()> {
10886            encoder.debug_check_bounds::<Parameter>(offset);
10887            // Delegate to tuple encoding.
10888            fidl::encoding::Encode::<Parameter, D>::encode(
10889                (
10890                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
10891                        &self.scope,
10892                    ),
10893                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
10894                        &self.name,
10895                    ),
10896                    <Value as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
10897                ),
10898                encoder,
10899                offset,
10900                _depth,
10901            )
10902        }
10903    }
10904    unsafe impl<
10905            D: fidl::encoding::ResourceDialect,
10906            T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
10907            T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
10908            T2: fidl::encoding::Encode<Value, D>,
10909        > fidl::encoding::Encode<Parameter, D> for (T0, T1, T2)
10910    {
10911        #[inline]
10912        unsafe fn encode(
10913            self,
10914            encoder: &mut fidl::encoding::Encoder<'_, D>,
10915            offset: usize,
10916            depth: fidl::encoding::Depth,
10917        ) -> fidl::Result<()> {
10918            encoder.debug_check_bounds::<Parameter>(offset);
10919            // Zero out padding regions. There's no need to apply masks
10920            // because the unmasked parts will be overwritten by fields.
10921            // Write the fields.
10922            self.0.encode(encoder, offset + 0, depth)?;
10923            self.1.encode(encoder, offset + 16, depth)?;
10924            self.2.encode(encoder, offset + 32, depth)?;
10925            Ok(())
10926        }
10927    }
10928
10929    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Parameter {
10930        #[inline(always)]
10931        fn new_empty() -> Self {
10932            Self {
10933                scope: fidl::new_empty!(fidl::encoding::UnboundedString, D),
10934                name: fidl::new_empty!(fidl::encoding::UnboundedString, D),
10935                value: fidl::new_empty!(Value, D),
10936            }
10937        }
10938
10939        #[inline]
10940        unsafe fn decode(
10941            &mut self,
10942            decoder: &mut fidl::encoding::Decoder<'_, D>,
10943            offset: usize,
10944            _depth: fidl::encoding::Depth,
10945        ) -> fidl::Result<()> {
10946            decoder.debug_check_bounds::<Self>(offset);
10947            // Verify that padding bytes are zero.
10948            fidl::decode!(
10949                fidl::encoding::UnboundedString,
10950                D,
10951                &mut self.scope,
10952                decoder,
10953                offset + 0,
10954                _depth
10955            )?;
10956            fidl::decode!(
10957                fidl::encoding::UnboundedString,
10958                D,
10959                &mut self.name,
10960                decoder,
10961                offset + 16,
10962                _depth
10963            )?;
10964            fidl::decode!(Value, D, &mut self.value, decoder, offset + 32, _depth)?;
10965            Ok(())
10966        }
10967    }
10968
10969    impl fidl::encoding::ValueTypeMarker for PcmFormat {
10970        type Borrowed<'a> = &'a Self;
10971        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10972            value
10973        }
10974    }
10975
10976    unsafe impl fidl::encoding::TypeMarker for PcmFormat {
10977        type Owned = Self;
10978
10979        #[inline(always)]
10980        fn inline_align(_context: fidl::encoding::Context) -> usize {
10981            8
10982        }
10983
10984        #[inline(always)]
10985        fn inline_size(_context: fidl::encoding::Context) -> usize {
10986            32
10987        }
10988    }
10989
10990    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmFormat, D>
10991        for &PcmFormat
10992    {
10993        #[inline]
10994        unsafe fn encode(
10995            self,
10996            encoder: &mut fidl::encoding::Encoder<'_, D>,
10997            offset: usize,
10998            _depth: fidl::encoding::Depth,
10999        ) -> fidl::Result<()> {
11000            encoder.debug_check_bounds::<PcmFormat>(offset);
11001            // Delegate to tuple encoding.
11002            fidl::encoding::Encode::<PcmFormat, D>::encode(
11003                (
11004                    <AudioPcmMode as fidl::encoding::ValueTypeMarker>::borrow(&self.pcm_mode),
11005                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
11006                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frames_per_second),
11007                    <fidl::encoding::Vector<AudioChannelId, 16> as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_map),
11008                ),
11009                encoder, offset, _depth
11010            )
11011        }
11012    }
11013    unsafe impl<
11014            D: fidl::encoding::ResourceDialect,
11015            T0: fidl::encoding::Encode<AudioPcmMode, D>,
11016            T1: fidl::encoding::Encode<u32, D>,
11017            T2: fidl::encoding::Encode<u32, D>,
11018            T3: fidl::encoding::Encode<fidl::encoding::Vector<AudioChannelId, 16>, D>,
11019        > fidl::encoding::Encode<PcmFormat, D> for (T0, T1, T2, T3)
11020    {
11021        #[inline]
11022        unsafe fn encode(
11023            self,
11024            encoder: &mut fidl::encoding::Encoder<'_, D>,
11025            offset: usize,
11026            depth: fidl::encoding::Depth,
11027        ) -> fidl::Result<()> {
11028            encoder.debug_check_bounds::<PcmFormat>(offset);
11029            // Zero out padding regions. There's no need to apply masks
11030            // because the unmasked parts will be overwritten by fields.
11031            unsafe {
11032                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
11033                (ptr as *mut u64).write_unaligned(0);
11034            }
11035            // Write the fields.
11036            self.0.encode(encoder, offset + 0, depth)?;
11037            self.1.encode(encoder, offset + 4, depth)?;
11038            self.2.encode(encoder, offset + 8, depth)?;
11039            self.3.encode(encoder, offset + 16, depth)?;
11040            Ok(())
11041        }
11042    }
11043
11044    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmFormat {
11045        #[inline(always)]
11046        fn new_empty() -> Self {
11047            Self {
11048                pcm_mode: fidl::new_empty!(AudioPcmMode, D),
11049                bits_per_sample: fidl::new_empty!(u32, D),
11050                frames_per_second: fidl::new_empty!(u32, D),
11051                channel_map: fidl::new_empty!(fidl::encoding::Vector<AudioChannelId, 16>, D),
11052            }
11053        }
11054
11055        #[inline]
11056        unsafe fn decode(
11057            &mut self,
11058            decoder: &mut fidl::encoding::Decoder<'_, D>,
11059            offset: usize,
11060            _depth: fidl::encoding::Depth,
11061        ) -> fidl::Result<()> {
11062            decoder.debug_check_bounds::<Self>(offset);
11063            // Verify that padding bytes are zero.
11064            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
11065            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11066            let mask = 0xffffffff00000000u64;
11067            let maskedval = padval & mask;
11068            if maskedval != 0 {
11069                return Err(fidl::Error::NonZeroPadding {
11070                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
11071                });
11072            }
11073            fidl::decode!(AudioPcmMode, D, &mut self.pcm_mode, decoder, offset + 0, _depth)?;
11074            fidl::decode!(u32, D, &mut self.bits_per_sample, decoder, offset + 4, _depth)?;
11075            fidl::decode!(u32, D, &mut self.frames_per_second, decoder, offset + 8, _depth)?;
11076            fidl::decode!(fidl::encoding::Vector<AudioChannelId, 16>, D, &mut self.channel_map, decoder, offset + 16, _depth)?;
11077            Ok(())
11078        }
11079    }
11080
11081    impl fidl::encoding::ValueTypeMarker for ProfileProviderRegisterHandlerWithCapacityResponse {
11082        type Borrowed<'a> = &'a Self;
11083        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11084            value
11085        }
11086    }
11087
11088    unsafe impl fidl::encoding::TypeMarker for ProfileProviderRegisterHandlerWithCapacityResponse {
11089        type Owned = Self;
11090
11091        #[inline(always)]
11092        fn inline_align(_context: fidl::encoding::Context) -> usize {
11093            8
11094        }
11095
11096        #[inline(always)]
11097        fn inline_size(_context: fidl::encoding::Context) -> usize {
11098            16
11099        }
11100        #[inline(always)]
11101        fn encode_is_copy() -> bool {
11102            true
11103        }
11104
11105        #[inline(always)]
11106        fn decode_is_copy() -> bool {
11107            true
11108        }
11109    }
11110
11111    unsafe impl<D: fidl::encoding::ResourceDialect>
11112        fidl::encoding::Encode<ProfileProviderRegisterHandlerWithCapacityResponse, D>
11113        for &ProfileProviderRegisterHandlerWithCapacityResponse
11114    {
11115        #[inline]
11116        unsafe fn encode(
11117            self,
11118            encoder: &mut fidl::encoding::Encoder<'_, D>,
11119            offset: usize,
11120            _depth: fidl::encoding::Depth,
11121        ) -> fidl::Result<()> {
11122            encoder
11123                .debug_check_bounds::<ProfileProviderRegisterHandlerWithCapacityResponse>(offset);
11124            unsafe {
11125                // Copy the object into the buffer.
11126                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11127                (buf_ptr as *mut ProfileProviderRegisterHandlerWithCapacityResponse)
11128                    .write_unaligned(
11129                        (self as *const ProfileProviderRegisterHandlerWithCapacityResponse).read(),
11130                    );
11131                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11132                // done second because the memcpy will write garbage to these bytes.
11133            }
11134            Ok(())
11135        }
11136    }
11137    unsafe impl<
11138            D: fidl::encoding::ResourceDialect,
11139            T0: fidl::encoding::Encode<i64, D>,
11140            T1: fidl::encoding::Encode<i64, D>,
11141        > fidl::encoding::Encode<ProfileProviderRegisterHandlerWithCapacityResponse, D>
11142        for (T0, T1)
11143    {
11144        #[inline]
11145        unsafe fn encode(
11146            self,
11147            encoder: &mut fidl::encoding::Encoder<'_, D>,
11148            offset: usize,
11149            depth: fidl::encoding::Depth,
11150        ) -> fidl::Result<()> {
11151            encoder
11152                .debug_check_bounds::<ProfileProviderRegisterHandlerWithCapacityResponse>(offset);
11153            // Zero out padding regions. There's no need to apply masks
11154            // because the unmasked parts will be overwritten by fields.
11155            // Write the fields.
11156            self.0.encode(encoder, offset + 0, depth)?;
11157            self.1.encode(encoder, offset + 8, depth)?;
11158            Ok(())
11159        }
11160    }
11161
11162    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11163        for ProfileProviderRegisterHandlerWithCapacityResponse
11164    {
11165        #[inline(always)]
11166        fn new_empty() -> Self {
11167            Self { period: fidl::new_empty!(i64, D), capacity: fidl::new_empty!(i64, D) }
11168        }
11169
11170        #[inline]
11171        unsafe fn decode(
11172            &mut self,
11173            decoder: &mut fidl::encoding::Decoder<'_, D>,
11174            offset: usize,
11175            _depth: fidl::encoding::Depth,
11176        ) -> fidl::Result<()> {
11177            decoder.debug_check_bounds::<Self>(offset);
11178            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11179            // Verify that padding bytes are zero.
11180            // Copy from the buffer into the object.
11181            unsafe {
11182                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
11183            }
11184            Ok(())
11185        }
11186    }
11187
11188    impl fidl::encoding::ValueTypeMarker for Property {
11189        type Borrowed<'a> = &'a Self;
11190        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11191            value
11192        }
11193    }
11194
11195    unsafe impl fidl::encoding::TypeMarker for Property {
11196        type Owned = Self;
11197
11198        #[inline(always)]
11199        fn inline_align(_context: fidl::encoding::Context) -> usize {
11200            8
11201        }
11202
11203        #[inline(always)]
11204        fn inline_size(_context: fidl::encoding::Context) -> usize {
11205            32
11206        }
11207    }
11208
11209    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Property, D> for &Property {
11210        #[inline]
11211        unsafe fn encode(
11212            self,
11213            encoder: &mut fidl::encoding::Encoder<'_, D>,
11214            offset: usize,
11215            _depth: fidl::encoding::Depth,
11216        ) -> fidl::Result<()> {
11217            encoder.debug_check_bounds::<Property>(offset);
11218            // Delegate to tuple encoding.
11219            fidl::encoding::Encode::<Property, D>::encode(
11220                (
11221                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
11222                        &self.label,
11223                    ),
11224                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
11225                        &self.value,
11226                    ),
11227                ),
11228                encoder,
11229                offset,
11230                _depth,
11231            )
11232        }
11233    }
11234    unsafe impl<
11235            D: fidl::encoding::ResourceDialect,
11236            T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11237            T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11238        > fidl::encoding::Encode<Property, D> for (T0, T1)
11239    {
11240        #[inline]
11241        unsafe fn encode(
11242            self,
11243            encoder: &mut fidl::encoding::Encoder<'_, D>,
11244            offset: usize,
11245            depth: fidl::encoding::Depth,
11246        ) -> fidl::Result<()> {
11247            encoder.debug_check_bounds::<Property>(offset);
11248            // Zero out padding regions. There's no need to apply masks
11249            // because the unmasked parts will be overwritten by fields.
11250            // Write the fields.
11251            self.0.encode(encoder, offset + 0, depth)?;
11252            self.1.encode(encoder, offset + 16, depth)?;
11253            Ok(())
11254        }
11255    }
11256
11257    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Property {
11258        #[inline(always)]
11259        fn new_empty() -> Self {
11260            Self {
11261                label: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11262                value: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11263            }
11264        }
11265
11266        #[inline]
11267        unsafe fn decode(
11268            &mut self,
11269            decoder: &mut fidl::encoding::Decoder<'_, D>,
11270            offset: usize,
11271            _depth: fidl::encoding::Depth,
11272        ) -> fidl::Result<()> {
11273            decoder.debug_check_bounds::<Self>(offset);
11274            // Verify that padding bytes are zero.
11275            fidl::decode!(
11276                fidl::encoding::UnboundedString,
11277                D,
11278                &mut self.label,
11279                decoder,
11280                offset + 0,
11281                _depth
11282            )?;
11283            fidl::decode!(
11284                fidl::encoding::UnboundedString,
11285                D,
11286                &mut self.value,
11287                decoder,
11288                offset + 16,
11289                _depth
11290            )?;
11291            Ok(())
11292        }
11293    }
11294
11295    impl fidl::encoding::ValueTypeMarker for SbcEncoderSettings {
11296        type Borrowed<'a> = &'a Self;
11297        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11298            value
11299        }
11300    }
11301
11302    unsafe impl fidl::encoding::TypeMarker for SbcEncoderSettings {
11303        type Owned = Self;
11304
11305        #[inline(always)]
11306        fn inline_align(_context: fidl::encoding::Context) -> usize {
11307            8
11308        }
11309
11310        #[inline(always)]
11311        fn inline_size(_context: fidl::encoding::Context) -> usize {
11312            24
11313        }
11314    }
11315
11316    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SbcEncoderSettings, D>
11317        for &SbcEncoderSettings
11318    {
11319        #[inline]
11320        unsafe fn encode(
11321            self,
11322            encoder: &mut fidl::encoding::Encoder<'_, D>,
11323            offset: usize,
11324            _depth: fidl::encoding::Depth,
11325        ) -> fidl::Result<()> {
11326            encoder.debug_check_bounds::<SbcEncoderSettings>(offset);
11327            // Delegate to tuple encoding.
11328            fidl::encoding::Encode::<SbcEncoderSettings, D>::encode(
11329                (
11330                    <SbcSubBands as fidl::encoding::ValueTypeMarker>::borrow(&self.sub_bands),
11331                    <SbcAllocation as fidl::encoding::ValueTypeMarker>::borrow(&self.allocation),
11332                    <SbcBlockCount as fidl::encoding::ValueTypeMarker>::borrow(&self.block_count),
11333                    <SbcChannelMode as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_mode),
11334                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.bit_pool),
11335                ),
11336                encoder,
11337                offset,
11338                _depth,
11339            )
11340        }
11341    }
11342    unsafe impl<
11343            D: fidl::encoding::ResourceDialect,
11344            T0: fidl::encoding::Encode<SbcSubBands, D>,
11345            T1: fidl::encoding::Encode<SbcAllocation, D>,
11346            T2: fidl::encoding::Encode<SbcBlockCount, D>,
11347            T3: fidl::encoding::Encode<SbcChannelMode, D>,
11348            T4: fidl::encoding::Encode<u64, D>,
11349        > fidl::encoding::Encode<SbcEncoderSettings, D> for (T0, T1, T2, T3, T4)
11350    {
11351        #[inline]
11352        unsafe fn encode(
11353            self,
11354            encoder: &mut fidl::encoding::Encoder<'_, D>,
11355            offset: usize,
11356            depth: fidl::encoding::Depth,
11357        ) -> fidl::Result<()> {
11358            encoder.debug_check_bounds::<SbcEncoderSettings>(offset);
11359            // Zero out padding regions. There's no need to apply masks
11360            // because the unmasked parts will be overwritten by fields.
11361            // Write the fields.
11362            self.0.encode(encoder, offset + 0, depth)?;
11363            self.1.encode(encoder, offset + 4, depth)?;
11364            self.2.encode(encoder, offset + 8, depth)?;
11365            self.3.encode(encoder, offset + 12, depth)?;
11366            self.4.encode(encoder, offset + 16, depth)?;
11367            Ok(())
11368        }
11369    }
11370
11371    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcEncoderSettings {
11372        #[inline(always)]
11373        fn new_empty() -> Self {
11374            Self {
11375                sub_bands: fidl::new_empty!(SbcSubBands, D),
11376                allocation: fidl::new_empty!(SbcAllocation, D),
11377                block_count: fidl::new_empty!(SbcBlockCount, D),
11378                channel_mode: fidl::new_empty!(SbcChannelMode, D),
11379                bit_pool: fidl::new_empty!(u64, D),
11380            }
11381        }
11382
11383        #[inline]
11384        unsafe fn decode(
11385            &mut self,
11386            decoder: &mut fidl::encoding::Decoder<'_, D>,
11387            offset: usize,
11388            _depth: fidl::encoding::Depth,
11389        ) -> fidl::Result<()> {
11390            decoder.debug_check_bounds::<Self>(offset);
11391            // Verify that padding bytes are zero.
11392            fidl::decode!(SbcSubBands, D, &mut self.sub_bands, decoder, offset + 0, _depth)?;
11393            fidl::decode!(SbcAllocation, D, &mut self.allocation, decoder, offset + 4, _depth)?;
11394            fidl::decode!(SbcBlockCount, D, &mut self.block_count, decoder, offset + 8, _depth)?;
11395            fidl::decode!(SbcChannelMode, D, &mut self.channel_mode, decoder, offset + 12, _depth)?;
11396            fidl::decode!(u64, D, &mut self.bit_pool, decoder, offset + 16, _depth)?;
11397            Ok(())
11398        }
11399    }
11400
11401    impl fidl::encoding::ValueTypeMarker for StreamBufferSetRemovePayloadBufferRequest {
11402        type Borrowed<'a> = &'a Self;
11403        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11404            value
11405        }
11406    }
11407
11408    unsafe impl fidl::encoding::TypeMarker for StreamBufferSetRemovePayloadBufferRequest {
11409        type Owned = Self;
11410
11411        #[inline(always)]
11412        fn inline_align(_context: fidl::encoding::Context) -> usize {
11413            4
11414        }
11415
11416        #[inline(always)]
11417        fn inline_size(_context: fidl::encoding::Context) -> usize {
11418            4
11419        }
11420        #[inline(always)]
11421        fn encode_is_copy() -> bool {
11422            true
11423        }
11424
11425        #[inline(always)]
11426        fn decode_is_copy() -> bool {
11427            true
11428        }
11429    }
11430
11431    unsafe impl<D: fidl::encoding::ResourceDialect>
11432        fidl::encoding::Encode<StreamBufferSetRemovePayloadBufferRequest, D>
11433        for &StreamBufferSetRemovePayloadBufferRequest
11434    {
11435        #[inline]
11436        unsafe fn encode(
11437            self,
11438            encoder: &mut fidl::encoding::Encoder<'_, D>,
11439            offset: usize,
11440            _depth: fidl::encoding::Depth,
11441        ) -> fidl::Result<()> {
11442            encoder.debug_check_bounds::<StreamBufferSetRemovePayloadBufferRequest>(offset);
11443            unsafe {
11444                // Copy the object into the buffer.
11445                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11446                (buf_ptr as *mut StreamBufferSetRemovePayloadBufferRequest).write_unaligned(
11447                    (self as *const StreamBufferSetRemovePayloadBufferRequest).read(),
11448                );
11449                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11450                // done second because the memcpy will write garbage to these bytes.
11451            }
11452            Ok(())
11453        }
11454    }
11455    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
11456        fidl::encoding::Encode<StreamBufferSetRemovePayloadBufferRequest, D> for (T0,)
11457    {
11458        #[inline]
11459        unsafe fn encode(
11460            self,
11461            encoder: &mut fidl::encoding::Encoder<'_, D>,
11462            offset: usize,
11463            depth: fidl::encoding::Depth,
11464        ) -> fidl::Result<()> {
11465            encoder.debug_check_bounds::<StreamBufferSetRemovePayloadBufferRequest>(offset);
11466            // Zero out padding regions. There's no need to apply masks
11467            // because the unmasked parts will be overwritten by fields.
11468            // Write the fields.
11469            self.0.encode(encoder, offset + 0, depth)?;
11470            Ok(())
11471        }
11472    }
11473
11474    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11475        for StreamBufferSetRemovePayloadBufferRequest
11476    {
11477        #[inline(always)]
11478        fn new_empty() -> Self {
11479            Self { id: fidl::new_empty!(u32, D) }
11480        }
11481
11482        #[inline]
11483        unsafe fn decode(
11484            &mut self,
11485            decoder: &mut fidl::encoding::Decoder<'_, D>,
11486            offset: usize,
11487            _depth: fidl::encoding::Depth,
11488        ) -> fidl::Result<()> {
11489            decoder.debug_check_bounds::<Self>(offset);
11490            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11491            // Verify that padding bytes are zero.
11492            // Copy from the buffer into the object.
11493            unsafe {
11494                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
11495            }
11496            Ok(())
11497        }
11498    }
11499
11500    impl fidl::encoding::ValueTypeMarker for StreamPacket {
11501        type Borrowed<'a> = &'a Self;
11502        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11503            value
11504        }
11505    }
11506
11507    unsafe impl fidl::encoding::TypeMarker for StreamPacket {
11508        type Owned = Self;
11509
11510        #[inline(always)]
11511        fn inline_align(_context: fidl::encoding::Context) -> usize {
11512            8
11513        }
11514
11515        #[inline(always)]
11516        fn inline_size(_context: fidl::encoding::Context) -> usize {
11517            56
11518        }
11519    }
11520
11521    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamPacket, D>
11522        for &StreamPacket
11523    {
11524        #[inline]
11525        unsafe fn encode(
11526            self,
11527            encoder: &mut fidl::encoding::Encoder<'_, D>,
11528            offset: usize,
11529            _depth: fidl::encoding::Depth,
11530        ) -> fidl::Result<()> {
11531            encoder.debug_check_bounds::<StreamPacket>(offset);
11532            unsafe {
11533                // Copy the object into the buffer.
11534                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11535                (buf_ptr as *mut StreamPacket)
11536                    .write_unaligned((self as *const StreamPacket).read());
11537                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11538                // done second because the memcpy will write garbage to these bytes.
11539                let padding_ptr = buf_ptr.offset(8) as *mut u64;
11540                let padding_mask = 0xffffffff00000000u64;
11541                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
11542                let padding_ptr = buf_ptr.offset(32) as *mut u64;
11543                let padding_mask = 0xffffffff00000000u64;
11544                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
11545            }
11546            Ok(())
11547        }
11548    }
11549    unsafe impl<
11550            D: fidl::encoding::ResourceDialect,
11551            T0: fidl::encoding::Encode<i64, D>,
11552            T1: fidl::encoding::Encode<u32, D>,
11553            T2: fidl::encoding::Encode<u64, D>,
11554            T3: fidl::encoding::Encode<u64, D>,
11555            T4: fidl::encoding::Encode<u32, D>,
11556            T5: fidl::encoding::Encode<u64, D>,
11557            T6: fidl::encoding::Encode<u64, D>,
11558        > fidl::encoding::Encode<StreamPacket, D> for (T0, T1, T2, T3, T4, T5, T6)
11559    {
11560        #[inline]
11561        unsafe fn encode(
11562            self,
11563            encoder: &mut fidl::encoding::Encoder<'_, D>,
11564            offset: usize,
11565            depth: fidl::encoding::Depth,
11566        ) -> fidl::Result<()> {
11567            encoder.debug_check_bounds::<StreamPacket>(offset);
11568            // Zero out padding regions. There's no need to apply masks
11569            // because the unmasked parts will be overwritten by fields.
11570            unsafe {
11571                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
11572                (ptr as *mut u64).write_unaligned(0);
11573            }
11574            unsafe {
11575                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
11576                (ptr as *mut u64).write_unaligned(0);
11577            }
11578            // Write the fields.
11579            self.0.encode(encoder, offset + 0, depth)?;
11580            self.1.encode(encoder, offset + 8, depth)?;
11581            self.2.encode(encoder, offset + 16, depth)?;
11582            self.3.encode(encoder, offset + 24, depth)?;
11583            self.4.encode(encoder, offset + 32, depth)?;
11584            self.5.encode(encoder, offset + 40, depth)?;
11585            self.6.encode(encoder, offset + 48, depth)?;
11586            Ok(())
11587        }
11588    }
11589
11590    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamPacket {
11591        #[inline(always)]
11592        fn new_empty() -> Self {
11593            Self {
11594                pts: fidl::new_empty!(i64, D),
11595                payload_buffer_id: fidl::new_empty!(u32, D),
11596                payload_offset: fidl::new_empty!(u64, D),
11597                payload_size: fidl::new_empty!(u64, D),
11598                flags: fidl::new_empty!(u32, D),
11599                buffer_config: fidl::new_empty!(u64, D),
11600                stream_segment_id: fidl::new_empty!(u64, D),
11601            }
11602        }
11603
11604        #[inline]
11605        unsafe fn decode(
11606            &mut self,
11607            decoder: &mut fidl::encoding::Decoder<'_, D>,
11608            offset: usize,
11609            _depth: fidl::encoding::Depth,
11610        ) -> fidl::Result<()> {
11611            decoder.debug_check_bounds::<Self>(offset);
11612            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11613            // Verify that padding bytes are zero.
11614            let ptr = unsafe { buf_ptr.offset(8) };
11615            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11616            let mask = 0xffffffff00000000u64;
11617            let maskedval = padval & mask;
11618            if maskedval != 0 {
11619                return Err(fidl::Error::NonZeroPadding {
11620                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
11621                });
11622            }
11623            let ptr = unsafe { buf_ptr.offset(32) };
11624            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11625            let mask = 0xffffffff00000000u64;
11626            let maskedval = padval & mask;
11627            if maskedval != 0 {
11628                return Err(fidl::Error::NonZeroPadding {
11629                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
11630                });
11631            }
11632            // Copy from the buffer into the object.
11633            unsafe {
11634                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
11635            }
11636            Ok(())
11637        }
11638    }
11639
11640    impl fidl::encoding::ValueTypeMarker for StreamProcessorCloseCurrentStreamRequest {
11641        type Borrowed<'a> = &'a Self;
11642        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11643            value
11644        }
11645    }
11646
11647    unsafe impl fidl::encoding::TypeMarker for StreamProcessorCloseCurrentStreamRequest {
11648        type Owned = Self;
11649
11650        #[inline(always)]
11651        fn inline_align(_context: fidl::encoding::Context) -> usize {
11652            8
11653        }
11654
11655        #[inline(always)]
11656        fn inline_size(_context: fidl::encoding::Context) -> usize {
11657            16
11658        }
11659    }
11660
11661    unsafe impl<D: fidl::encoding::ResourceDialect>
11662        fidl::encoding::Encode<StreamProcessorCloseCurrentStreamRequest, D>
11663        for &StreamProcessorCloseCurrentStreamRequest
11664    {
11665        #[inline]
11666        unsafe fn encode(
11667            self,
11668            encoder: &mut fidl::encoding::Encoder<'_, D>,
11669            offset: usize,
11670            _depth: fidl::encoding::Depth,
11671        ) -> fidl::Result<()> {
11672            encoder.debug_check_bounds::<StreamProcessorCloseCurrentStreamRequest>(offset);
11673            // Delegate to tuple encoding.
11674            fidl::encoding::Encode::<StreamProcessorCloseCurrentStreamRequest, D>::encode(
11675                (
11676                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
11677                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.release_input_buffers),
11678                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.release_output_buffers),
11679                ),
11680                encoder,
11681                offset,
11682                _depth,
11683            )
11684        }
11685    }
11686    unsafe impl<
11687            D: fidl::encoding::ResourceDialect,
11688            T0: fidl::encoding::Encode<u64, D>,
11689            T1: fidl::encoding::Encode<bool, D>,
11690            T2: fidl::encoding::Encode<bool, D>,
11691        > fidl::encoding::Encode<StreamProcessorCloseCurrentStreamRequest, D> for (T0, T1, T2)
11692    {
11693        #[inline]
11694        unsafe fn encode(
11695            self,
11696            encoder: &mut fidl::encoding::Encoder<'_, D>,
11697            offset: usize,
11698            depth: fidl::encoding::Depth,
11699        ) -> fidl::Result<()> {
11700            encoder.debug_check_bounds::<StreamProcessorCloseCurrentStreamRequest>(offset);
11701            // Zero out padding regions. There's no need to apply masks
11702            // because the unmasked parts will be overwritten by fields.
11703            unsafe {
11704                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
11705                (ptr as *mut u64).write_unaligned(0);
11706            }
11707            // Write the fields.
11708            self.0.encode(encoder, offset + 0, depth)?;
11709            self.1.encode(encoder, offset + 8, depth)?;
11710            self.2.encode(encoder, offset + 9, depth)?;
11711            Ok(())
11712        }
11713    }
11714
11715    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11716        for StreamProcessorCloseCurrentStreamRequest
11717    {
11718        #[inline(always)]
11719        fn new_empty() -> Self {
11720            Self {
11721                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
11722                release_input_buffers: fidl::new_empty!(bool, D),
11723                release_output_buffers: fidl::new_empty!(bool, D),
11724            }
11725        }
11726
11727        #[inline]
11728        unsafe fn decode(
11729            &mut self,
11730            decoder: &mut fidl::encoding::Decoder<'_, D>,
11731            offset: usize,
11732            _depth: fidl::encoding::Depth,
11733        ) -> fidl::Result<()> {
11734            decoder.debug_check_bounds::<Self>(offset);
11735            // Verify that padding bytes are zero.
11736            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
11737            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11738            let mask = 0xffffffffffff0000u64;
11739            let maskedval = padval & mask;
11740            if maskedval != 0 {
11741                return Err(fidl::Error::NonZeroPadding {
11742                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
11743                });
11744            }
11745            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
11746            fidl::decode!(bool, D, &mut self.release_input_buffers, decoder, offset + 8, _depth)?;
11747            fidl::decode!(bool, D, &mut self.release_output_buffers, decoder, offset + 9, _depth)?;
11748            Ok(())
11749        }
11750    }
11751
11752    impl fidl::encoding::ValueTypeMarker for StreamProcessorCompleteOutputBufferPartialSettingsRequest {
11753        type Borrowed<'a> = &'a Self;
11754        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11755            value
11756        }
11757    }
11758
11759    unsafe impl fidl::encoding::TypeMarker
11760        for StreamProcessorCompleteOutputBufferPartialSettingsRequest
11761    {
11762        type Owned = Self;
11763
11764        #[inline(always)]
11765        fn inline_align(_context: fidl::encoding::Context) -> usize {
11766            8
11767        }
11768
11769        #[inline(always)]
11770        fn inline_size(_context: fidl::encoding::Context) -> usize {
11771            8
11772        }
11773        #[inline(always)]
11774        fn encode_is_copy() -> bool {
11775            true
11776        }
11777
11778        #[inline(always)]
11779        fn decode_is_copy() -> bool {
11780            true
11781        }
11782    }
11783
11784    unsafe impl<D: fidl::encoding::ResourceDialect>
11785        fidl::encoding::Encode<StreamProcessorCompleteOutputBufferPartialSettingsRequest, D>
11786        for &StreamProcessorCompleteOutputBufferPartialSettingsRequest
11787    {
11788        #[inline]
11789        unsafe fn encode(
11790            self,
11791            encoder: &mut fidl::encoding::Encoder<'_, D>,
11792            offset: usize,
11793            _depth: fidl::encoding::Depth,
11794        ) -> fidl::Result<()> {
11795            encoder
11796                .debug_check_bounds::<StreamProcessorCompleteOutputBufferPartialSettingsRequest>(
11797                    offset,
11798                );
11799            unsafe {
11800                // Copy the object into the buffer.
11801                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11802                (buf_ptr as *mut StreamProcessorCompleteOutputBufferPartialSettingsRequest)
11803                    .write_unaligned(
11804                        (self as *const StreamProcessorCompleteOutputBufferPartialSettingsRequest)
11805                            .read(),
11806                    );
11807                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11808                // done second because the memcpy will write garbage to these bytes.
11809            }
11810            Ok(())
11811        }
11812    }
11813    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
11814        fidl::encoding::Encode<StreamProcessorCompleteOutputBufferPartialSettingsRequest, D>
11815        for (T0,)
11816    {
11817        #[inline]
11818        unsafe fn encode(
11819            self,
11820            encoder: &mut fidl::encoding::Encoder<'_, D>,
11821            offset: usize,
11822            depth: fidl::encoding::Depth,
11823        ) -> fidl::Result<()> {
11824            encoder
11825                .debug_check_bounds::<StreamProcessorCompleteOutputBufferPartialSettingsRequest>(
11826                    offset,
11827                );
11828            // Zero out padding regions. There's no need to apply masks
11829            // because the unmasked parts will be overwritten by fields.
11830            // Write the fields.
11831            self.0.encode(encoder, offset + 0, depth)?;
11832            Ok(())
11833        }
11834    }
11835
11836    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11837        for StreamProcessorCompleteOutputBufferPartialSettingsRequest
11838    {
11839        #[inline(always)]
11840        fn new_empty() -> Self {
11841            Self { buffer_lifetime_ordinal: fidl::new_empty!(u64, D) }
11842        }
11843
11844        #[inline]
11845        unsafe fn decode(
11846            &mut self,
11847            decoder: &mut fidl::encoding::Decoder<'_, D>,
11848            offset: usize,
11849            _depth: fidl::encoding::Depth,
11850        ) -> fidl::Result<()> {
11851            decoder.debug_check_bounds::<Self>(offset);
11852            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11853            // Verify that padding bytes are zero.
11854            // Copy from the buffer into the object.
11855            unsafe {
11856                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
11857            }
11858            Ok(())
11859        }
11860    }
11861
11862    impl fidl::encoding::ValueTypeMarker for StreamProcessorFlushEndOfStreamAndCloseStreamRequest {
11863        type Borrowed<'a> = &'a Self;
11864        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11865            value
11866        }
11867    }
11868
11869    unsafe impl fidl::encoding::TypeMarker for StreamProcessorFlushEndOfStreamAndCloseStreamRequest {
11870        type Owned = Self;
11871
11872        #[inline(always)]
11873        fn inline_align(_context: fidl::encoding::Context) -> usize {
11874            8
11875        }
11876
11877        #[inline(always)]
11878        fn inline_size(_context: fidl::encoding::Context) -> usize {
11879            8
11880        }
11881        #[inline(always)]
11882        fn encode_is_copy() -> bool {
11883            true
11884        }
11885
11886        #[inline(always)]
11887        fn decode_is_copy() -> bool {
11888            true
11889        }
11890    }
11891
11892    unsafe impl<D: fidl::encoding::ResourceDialect>
11893        fidl::encoding::Encode<StreamProcessorFlushEndOfStreamAndCloseStreamRequest, D>
11894        for &StreamProcessorFlushEndOfStreamAndCloseStreamRequest
11895    {
11896        #[inline]
11897        unsafe fn encode(
11898            self,
11899            encoder: &mut fidl::encoding::Encoder<'_, D>,
11900            offset: usize,
11901            _depth: fidl::encoding::Depth,
11902        ) -> fidl::Result<()> {
11903            encoder
11904                .debug_check_bounds::<StreamProcessorFlushEndOfStreamAndCloseStreamRequest>(offset);
11905            unsafe {
11906                // Copy the object into the buffer.
11907                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11908                (buf_ptr as *mut StreamProcessorFlushEndOfStreamAndCloseStreamRequest)
11909                    .write_unaligned(
11910                        (self as *const StreamProcessorFlushEndOfStreamAndCloseStreamRequest)
11911                            .read(),
11912                    );
11913                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11914                // done second because the memcpy will write garbage to these bytes.
11915            }
11916            Ok(())
11917        }
11918    }
11919    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
11920        fidl::encoding::Encode<StreamProcessorFlushEndOfStreamAndCloseStreamRequest, D> for (T0,)
11921    {
11922        #[inline]
11923        unsafe fn encode(
11924            self,
11925            encoder: &mut fidl::encoding::Encoder<'_, D>,
11926            offset: usize,
11927            depth: fidl::encoding::Depth,
11928        ) -> fidl::Result<()> {
11929            encoder
11930                .debug_check_bounds::<StreamProcessorFlushEndOfStreamAndCloseStreamRequest>(offset);
11931            // Zero out padding regions. There's no need to apply masks
11932            // because the unmasked parts will be overwritten by fields.
11933            // Write the fields.
11934            self.0.encode(encoder, offset + 0, depth)?;
11935            Ok(())
11936        }
11937    }
11938
11939    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11940        for StreamProcessorFlushEndOfStreamAndCloseStreamRequest
11941    {
11942        #[inline(always)]
11943        fn new_empty() -> Self {
11944            Self { stream_lifetime_ordinal: fidl::new_empty!(u64, D) }
11945        }
11946
11947        #[inline]
11948        unsafe fn decode(
11949            &mut self,
11950            decoder: &mut fidl::encoding::Decoder<'_, D>,
11951            offset: usize,
11952            _depth: fidl::encoding::Depth,
11953        ) -> fidl::Result<()> {
11954            decoder.debug_check_bounds::<Self>(offset);
11955            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11956            // Verify that padding bytes are zero.
11957            // Copy from the buffer into the object.
11958            unsafe {
11959                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
11960            }
11961            Ok(())
11962        }
11963    }
11964
11965    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnFreeInputPacketRequest {
11966        type Borrowed<'a> = &'a Self;
11967        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11968            value
11969        }
11970    }
11971
11972    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnFreeInputPacketRequest {
11973        type Owned = Self;
11974
11975        #[inline(always)]
11976        fn inline_align(_context: fidl::encoding::Context) -> usize {
11977            8
11978        }
11979
11980        #[inline(always)]
11981        fn inline_size(_context: fidl::encoding::Context) -> usize {
11982            16
11983        }
11984    }
11985
11986    unsafe impl<D: fidl::encoding::ResourceDialect>
11987        fidl::encoding::Encode<StreamProcessorOnFreeInputPacketRequest, D>
11988        for &StreamProcessorOnFreeInputPacketRequest
11989    {
11990        #[inline]
11991        unsafe fn encode(
11992            self,
11993            encoder: &mut fidl::encoding::Encoder<'_, D>,
11994            offset: usize,
11995            _depth: fidl::encoding::Depth,
11996        ) -> fidl::Result<()> {
11997            encoder.debug_check_bounds::<StreamProcessorOnFreeInputPacketRequest>(offset);
11998            // Delegate to tuple encoding.
11999            fidl::encoding::Encode::<StreamProcessorOnFreeInputPacketRequest, D>::encode(
12000                (<PacketHeader as fidl::encoding::ValueTypeMarker>::borrow(
12001                    &self.free_input_packet,
12002                ),),
12003                encoder,
12004                offset,
12005                _depth,
12006            )
12007        }
12008    }
12009    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PacketHeader, D>>
12010        fidl::encoding::Encode<StreamProcessorOnFreeInputPacketRequest, D> for (T0,)
12011    {
12012        #[inline]
12013        unsafe fn encode(
12014            self,
12015            encoder: &mut fidl::encoding::Encoder<'_, D>,
12016            offset: usize,
12017            depth: fidl::encoding::Depth,
12018        ) -> fidl::Result<()> {
12019            encoder.debug_check_bounds::<StreamProcessorOnFreeInputPacketRequest>(offset);
12020            // Zero out padding regions. There's no need to apply masks
12021            // because the unmasked parts will be overwritten by fields.
12022            // Write the fields.
12023            self.0.encode(encoder, offset + 0, depth)?;
12024            Ok(())
12025        }
12026    }
12027
12028    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12029        for StreamProcessorOnFreeInputPacketRequest
12030    {
12031        #[inline(always)]
12032        fn new_empty() -> Self {
12033            Self { free_input_packet: fidl::new_empty!(PacketHeader, D) }
12034        }
12035
12036        #[inline]
12037        unsafe fn decode(
12038            &mut self,
12039            decoder: &mut fidl::encoding::Decoder<'_, D>,
12040            offset: usize,
12041            _depth: fidl::encoding::Depth,
12042        ) -> fidl::Result<()> {
12043            decoder.debug_check_bounds::<Self>(offset);
12044            // Verify that padding bytes are zero.
12045            fidl::decode!(
12046                PacketHeader,
12047                D,
12048                &mut self.free_input_packet,
12049                decoder,
12050                offset + 0,
12051                _depth
12052            )?;
12053            Ok(())
12054        }
12055    }
12056
12057    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnInputConstraintsRequest {
12058        type Borrowed<'a> = &'a Self;
12059        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12060            value
12061        }
12062    }
12063
12064    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnInputConstraintsRequest {
12065        type Owned = Self;
12066
12067        #[inline(always)]
12068        fn inline_align(_context: fidl::encoding::Context) -> usize {
12069            8
12070        }
12071
12072        #[inline(always)]
12073        fn inline_size(_context: fidl::encoding::Context) -> usize {
12074            16
12075        }
12076    }
12077
12078    unsafe impl<D: fidl::encoding::ResourceDialect>
12079        fidl::encoding::Encode<StreamProcessorOnInputConstraintsRequest, D>
12080        for &StreamProcessorOnInputConstraintsRequest
12081    {
12082        #[inline]
12083        unsafe fn encode(
12084            self,
12085            encoder: &mut fidl::encoding::Encoder<'_, D>,
12086            offset: usize,
12087            _depth: fidl::encoding::Depth,
12088        ) -> fidl::Result<()> {
12089            encoder.debug_check_bounds::<StreamProcessorOnInputConstraintsRequest>(offset);
12090            // Delegate to tuple encoding.
12091            fidl::encoding::Encode::<StreamProcessorOnInputConstraintsRequest, D>::encode(
12092                (<StreamBufferConstraints as fidl::encoding::ValueTypeMarker>::borrow(
12093                    &self.input_constraints,
12094                ),),
12095                encoder,
12096                offset,
12097                _depth,
12098            )
12099        }
12100    }
12101    unsafe impl<
12102            D: fidl::encoding::ResourceDialect,
12103            T0: fidl::encoding::Encode<StreamBufferConstraints, D>,
12104        > fidl::encoding::Encode<StreamProcessorOnInputConstraintsRequest, D> for (T0,)
12105    {
12106        #[inline]
12107        unsafe fn encode(
12108            self,
12109            encoder: &mut fidl::encoding::Encoder<'_, D>,
12110            offset: usize,
12111            depth: fidl::encoding::Depth,
12112        ) -> fidl::Result<()> {
12113            encoder.debug_check_bounds::<StreamProcessorOnInputConstraintsRequest>(offset);
12114            // Zero out padding regions. There's no need to apply masks
12115            // because the unmasked parts will be overwritten by fields.
12116            // Write the fields.
12117            self.0.encode(encoder, offset + 0, depth)?;
12118            Ok(())
12119        }
12120    }
12121
12122    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12123        for StreamProcessorOnInputConstraintsRequest
12124    {
12125        #[inline(always)]
12126        fn new_empty() -> Self {
12127            Self { input_constraints: fidl::new_empty!(StreamBufferConstraints, D) }
12128        }
12129
12130        #[inline]
12131        unsafe fn decode(
12132            &mut self,
12133            decoder: &mut fidl::encoding::Decoder<'_, D>,
12134            offset: usize,
12135            _depth: fidl::encoding::Depth,
12136        ) -> fidl::Result<()> {
12137            decoder.debug_check_bounds::<Self>(offset);
12138            // Verify that padding bytes are zero.
12139            fidl::decode!(
12140                StreamBufferConstraints,
12141                D,
12142                &mut self.input_constraints,
12143                decoder,
12144                offset + 0,
12145                _depth
12146            )?;
12147            Ok(())
12148        }
12149    }
12150
12151    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputConstraintsRequest {
12152        type Borrowed<'a> = &'a Self;
12153        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12154            value
12155        }
12156    }
12157
12158    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputConstraintsRequest {
12159        type Owned = Self;
12160
12161        #[inline(always)]
12162        fn inline_align(_context: fidl::encoding::Context) -> usize {
12163            8
12164        }
12165
12166        #[inline(always)]
12167        fn inline_size(_context: fidl::encoding::Context) -> usize {
12168            16
12169        }
12170    }
12171
12172    unsafe impl<D: fidl::encoding::ResourceDialect>
12173        fidl::encoding::Encode<StreamProcessorOnOutputConstraintsRequest, D>
12174        for &StreamProcessorOnOutputConstraintsRequest
12175    {
12176        #[inline]
12177        unsafe fn encode(
12178            self,
12179            encoder: &mut fidl::encoding::Encoder<'_, D>,
12180            offset: usize,
12181            _depth: fidl::encoding::Depth,
12182        ) -> fidl::Result<()> {
12183            encoder.debug_check_bounds::<StreamProcessorOnOutputConstraintsRequest>(offset);
12184            // Delegate to tuple encoding.
12185            fidl::encoding::Encode::<StreamProcessorOnOutputConstraintsRequest, D>::encode(
12186                (<StreamOutputConstraints as fidl::encoding::ValueTypeMarker>::borrow(
12187                    &self.output_config,
12188                ),),
12189                encoder,
12190                offset,
12191                _depth,
12192            )
12193        }
12194    }
12195    unsafe impl<
12196            D: fidl::encoding::ResourceDialect,
12197            T0: fidl::encoding::Encode<StreamOutputConstraints, D>,
12198        > fidl::encoding::Encode<StreamProcessorOnOutputConstraintsRequest, D> for (T0,)
12199    {
12200        #[inline]
12201        unsafe fn encode(
12202            self,
12203            encoder: &mut fidl::encoding::Encoder<'_, D>,
12204            offset: usize,
12205            depth: fidl::encoding::Depth,
12206        ) -> fidl::Result<()> {
12207            encoder.debug_check_bounds::<StreamProcessorOnOutputConstraintsRequest>(offset);
12208            // Zero out padding regions. There's no need to apply masks
12209            // because the unmasked parts will be overwritten by fields.
12210            // Write the fields.
12211            self.0.encode(encoder, offset + 0, depth)?;
12212            Ok(())
12213        }
12214    }
12215
12216    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12217        for StreamProcessorOnOutputConstraintsRequest
12218    {
12219        #[inline(always)]
12220        fn new_empty() -> Self {
12221            Self { output_config: fidl::new_empty!(StreamOutputConstraints, D) }
12222        }
12223
12224        #[inline]
12225        unsafe fn decode(
12226            &mut self,
12227            decoder: &mut fidl::encoding::Decoder<'_, D>,
12228            offset: usize,
12229            _depth: fidl::encoding::Depth,
12230        ) -> fidl::Result<()> {
12231            decoder.debug_check_bounds::<Self>(offset);
12232            // Verify that padding bytes are zero.
12233            fidl::decode!(
12234                StreamOutputConstraints,
12235                D,
12236                &mut self.output_config,
12237                decoder,
12238                offset + 0,
12239                _depth
12240            )?;
12241            Ok(())
12242        }
12243    }
12244
12245    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputEndOfStreamRequest {
12246        type Borrowed<'a> = &'a Self;
12247        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12248            value
12249        }
12250    }
12251
12252    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputEndOfStreamRequest {
12253        type Owned = Self;
12254
12255        #[inline(always)]
12256        fn inline_align(_context: fidl::encoding::Context) -> usize {
12257            8
12258        }
12259
12260        #[inline(always)]
12261        fn inline_size(_context: fidl::encoding::Context) -> usize {
12262            16
12263        }
12264    }
12265
12266    unsafe impl<D: fidl::encoding::ResourceDialect>
12267        fidl::encoding::Encode<StreamProcessorOnOutputEndOfStreamRequest, D>
12268        for &StreamProcessorOnOutputEndOfStreamRequest
12269    {
12270        #[inline]
12271        unsafe fn encode(
12272            self,
12273            encoder: &mut fidl::encoding::Encoder<'_, D>,
12274            offset: usize,
12275            _depth: fidl::encoding::Depth,
12276        ) -> fidl::Result<()> {
12277            encoder.debug_check_bounds::<StreamProcessorOnOutputEndOfStreamRequest>(offset);
12278            // Delegate to tuple encoding.
12279            fidl::encoding::Encode::<StreamProcessorOnOutputEndOfStreamRequest, D>::encode(
12280                (
12281                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
12282                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.error_detected_before),
12283                ),
12284                encoder,
12285                offset,
12286                _depth,
12287            )
12288        }
12289    }
12290    unsafe impl<
12291            D: fidl::encoding::ResourceDialect,
12292            T0: fidl::encoding::Encode<u64, D>,
12293            T1: fidl::encoding::Encode<bool, D>,
12294        > fidl::encoding::Encode<StreamProcessorOnOutputEndOfStreamRequest, D> for (T0, T1)
12295    {
12296        #[inline]
12297        unsafe fn encode(
12298            self,
12299            encoder: &mut fidl::encoding::Encoder<'_, D>,
12300            offset: usize,
12301            depth: fidl::encoding::Depth,
12302        ) -> fidl::Result<()> {
12303            encoder.debug_check_bounds::<StreamProcessorOnOutputEndOfStreamRequest>(offset);
12304            // Zero out padding regions. There's no need to apply masks
12305            // because the unmasked parts will be overwritten by fields.
12306            unsafe {
12307                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
12308                (ptr as *mut u64).write_unaligned(0);
12309            }
12310            // Write the fields.
12311            self.0.encode(encoder, offset + 0, depth)?;
12312            self.1.encode(encoder, offset + 8, depth)?;
12313            Ok(())
12314        }
12315    }
12316
12317    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12318        for StreamProcessorOnOutputEndOfStreamRequest
12319    {
12320        #[inline(always)]
12321        fn new_empty() -> Self {
12322            Self {
12323                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
12324                error_detected_before: fidl::new_empty!(bool, D),
12325            }
12326        }
12327
12328        #[inline]
12329        unsafe fn decode(
12330            &mut self,
12331            decoder: &mut fidl::encoding::Decoder<'_, D>,
12332            offset: usize,
12333            _depth: fidl::encoding::Depth,
12334        ) -> fidl::Result<()> {
12335            decoder.debug_check_bounds::<Self>(offset);
12336            // Verify that padding bytes are zero.
12337            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
12338            let padval = unsafe { (ptr as *const u64).read_unaligned() };
12339            let mask = 0xffffffffffffff00u64;
12340            let maskedval = padval & mask;
12341            if maskedval != 0 {
12342                return Err(fidl::Error::NonZeroPadding {
12343                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
12344                });
12345            }
12346            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
12347            fidl::decode!(bool, D, &mut self.error_detected_before, decoder, offset + 8, _depth)?;
12348            Ok(())
12349        }
12350    }
12351
12352    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputFormatRequest {
12353        type Borrowed<'a> = &'a Self;
12354        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12355            value
12356        }
12357    }
12358
12359    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputFormatRequest {
12360        type Owned = Self;
12361
12362        #[inline(always)]
12363        fn inline_align(_context: fidl::encoding::Context) -> usize {
12364            8
12365        }
12366
12367        #[inline(always)]
12368        fn inline_size(_context: fidl::encoding::Context) -> usize {
12369            16
12370        }
12371    }
12372
12373    unsafe impl<D: fidl::encoding::ResourceDialect>
12374        fidl::encoding::Encode<StreamProcessorOnOutputFormatRequest, D>
12375        for &StreamProcessorOnOutputFormatRequest
12376    {
12377        #[inline]
12378        unsafe fn encode(
12379            self,
12380            encoder: &mut fidl::encoding::Encoder<'_, D>,
12381            offset: usize,
12382            _depth: fidl::encoding::Depth,
12383        ) -> fidl::Result<()> {
12384            encoder.debug_check_bounds::<StreamProcessorOnOutputFormatRequest>(offset);
12385            // Delegate to tuple encoding.
12386            fidl::encoding::Encode::<StreamProcessorOnOutputFormatRequest, D>::encode(
12387                (<StreamOutputFormat as fidl::encoding::ValueTypeMarker>::borrow(
12388                    &self.output_format,
12389                ),),
12390                encoder,
12391                offset,
12392                _depth,
12393            )
12394        }
12395    }
12396    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamOutputFormat, D>>
12397        fidl::encoding::Encode<StreamProcessorOnOutputFormatRequest, D> for (T0,)
12398    {
12399        #[inline]
12400        unsafe fn encode(
12401            self,
12402            encoder: &mut fidl::encoding::Encoder<'_, D>,
12403            offset: usize,
12404            depth: fidl::encoding::Depth,
12405        ) -> fidl::Result<()> {
12406            encoder.debug_check_bounds::<StreamProcessorOnOutputFormatRequest>(offset);
12407            // Zero out padding regions. There's no need to apply masks
12408            // because the unmasked parts will be overwritten by fields.
12409            // Write the fields.
12410            self.0.encode(encoder, offset + 0, depth)?;
12411            Ok(())
12412        }
12413    }
12414
12415    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12416        for StreamProcessorOnOutputFormatRequest
12417    {
12418        #[inline(always)]
12419        fn new_empty() -> Self {
12420            Self { output_format: fidl::new_empty!(StreamOutputFormat, D) }
12421        }
12422
12423        #[inline]
12424        unsafe fn decode(
12425            &mut self,
12426            decoder: &mut fidl::encoding::Decoder<'_, D>,
12427            offset: usize,
12428            _depth: fidl::encoding::Depth,
12429        ) -> fidl::Result<()> {
12430            decoder.debug_check_bounds::<Self>(offset);
12431            // Verify that padding bytes are zero.
12432            fidl::decode!(
12433                StreamOutputFormat,
12434                D,
12435                &mut self.output_format,
12436                decoder,
12437                offset + 0,
12438                _depth
12439            )?;
12440            Ok(())
12441        }
12442    }
12443
12444    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputPacketRequest {
12445        type Borrowed<'a> = &'a Self;
12446        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12447            value
12448        }
12449    }
12450
12451    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputPacketRequest {
12452        type Owned = Self;
12453
12454        #[inline(always)]
12455        fn inline_align(_context: fidl::encoding::Context) -> usize {
12456            8
12457        }
12458
12459        #[inline(always)]
12460        fn inline_size(_context: fidl::encoding::Context) -> usize {
12461            24
12462        }
12463    }
12464
12465    unsafe impl<D: fidl::encoding::ResourceDialect>
12466        fidl::encoding::Encode<StreamProcessorOnOutputPacketRequest, D>
12467        for &StreamProcessorOnOutputPacketRequest
12468    {
12469        #[inline]
12470        unsafe fn encode(
12471            self,
12472            encoder: &mut fidl::encoding::Encoder<'_, D>,
12473            offset: usize,
12474            _depth: fidl::encoding::Depth,
12475        ) -> fidl::Result<()> {
12476            encoder.debug_check_bounds::<StreamProcessorOnOutputPacketRequest>(offset);
12477            // Delegate to tuple encoding.
12478            fidl::encoding::Encode::<StreamProcessorOnOutputPacketRequest, D>::encode(
12479                (
12480                    <Packet as fidl::encoding::ValueTypeMarker>::borrow(&self.output_packet),
12481                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.error_detected_before),
12482                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.error_detected_during),
12483                ),
12484                encoder,
12485                offset,
12486                _depth,
12487            )
12488        }
12489    }
12490    unsafe impl<
12491            D: fidl::encoding::ResourceDialect,
12492            T0: fidl::encoding::Encode<Packet, D>,
12493            T1: fidl::encoding::Encode<bool, D>,
12494            T2: fidl::encoding::Encode<bool, D>,
12495        > fidl::encoding::Encode<StreamProcessorOnOutputPacketRequest, D> for (T0, T1, T2)
12496    {
12497        #[inline]
12498        unsafe fn encode(
12499            self,
12500            encoder: &mut fidl::encoding::Encoder<'_, D>,
12501            offset: usize,
12502            depth: fidl::encoding::Depth,
12503        ) -> fidl::Result<()> {
12504            encoder.debug_check_bounds::<StreamProcessorOnOutputPacketRequest>(offset);
12505            // Zero out padding regions. There's no need to apply masks
12506            // because the unmasked parts will be overwritten by fields.
12507            unsafe {
12508                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
12509                (ptr as *mut u64).write_unaligned(0);
12510            }
12511            // Write the fields.
12512            self.0.encode(encoder, offset + 0, depth)?;
12513            self.1.encode(encoder, offset + 16, depth)?;
12514            self.2.encode(encoder, offset + 17, depth)?;
12515            Ok(())
12516        }
12517    }
12518
12519    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12520        for StreamProcessorOnOutputPacketRequest
12521    {
12522        #[inline(always)]
12523        fn new_empty() -> Self {
12524            Self {
12525                output_packet: fidl::new_empty!(Packet, D),
12526                error_detected_before: fidl::new_empty!(bool, D),
12527                error_detected_during: fidl::new_empty!(bool, D),
12528            }
12529        }
12530
12531        #[inline]
12532        unsafe fn decode(
12533            &mut self,
12534            decoder: &mut fidl::encoding::Decoder<'_, D>,
12535            offset: usize,
12536            _depth: fidl::encoding::Depth,
12537        ) -> fidl::Result<()> {
12538            decoder.debug_check_bounds::<Self>(offset);
12539            // Verify that padding bytes are zero.
12540            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
12541            let padval = unsafe { (ptr as *const u64).read_unaligned() };
12542            let mask = 0xffffffffffff0000u64;
12543            let maskedval = padval & mask;
12544            if maskedval != 0 {
12545                return Err(fidl::Error::NonZeroPadding {
12546                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
12547                });
12548            }
12549            fidl::decode!(Packet, D, &mut self.output_packet, decoder, offset + 0, _depth)?;
12550            fidl::decode!(bool, D, &mut self.error_detected_before, decoder, offset + 16, _depth)?;
12551            fidl::decode!(bool, D, &mut self.error_detected_during, decoder, offset + 17, _depth)?;
12552            Ok(())
12553        }
12554    }
12555
12556    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnStreamFailedRequest {
12557        type Borrowed<'a> = &'a Self;
12558        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12559            value
12560        }
12561    }
12562
12563    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnStreamFailedRequest {
12564        type Owned = Self;
12565
12566        #[inline(always)]
12567        fn inline_align(_context: fidl::encoding::Context) -> usize {
12568            8
12569        }
12570
12571        #[inline(always)]
12572        fn inline_size(_context: fidl::encoding::Context) -> usize {
12573            16
12574        }
12575    }
12576
12577    unsafe impl<D: fidl::encoding::ResourceDialect>
12578        fidl::encoding::Encode<StreamProcessorOnStreamFailedRequest, D>
12579        for &StreamProcessorOnStreamFailedRequest
12580    {
12581        #[inline]
12582        unsafe fn encode(
12583            self,
12584            encoder: &mut fidl::encoding::Encoder<'_, D>,
12585            offset: usize,
12586            _depth: fidl::encoding::Depth,
12587        ) -> fidl::Result<()> {
12588            encoder.debug_check_bounds::<StreamProcessorOnStreamFailedRequest>(offset);
12589            // Delegate to tuple encoding.
12590            fidl::encoding::Encode::<StreamProcessorOnStreamFailedRequest, D>::encode(
12591                (
12592                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
12593                    <StreamError as fidl::encoding::ValueTypeMarker>::borrow(&self.error),
12594                ),
12595                encoder,
12596                offset,
12597                _depth,
12598            )
12599        }
12600    }
12601    unsafe impl<
12602            D: fidl::encoding::ResourceDialect,
12603            T0: fidl::encoding::Encode<u64, D>,
12604            T1: fidl::encoding::Encode<StreamError, D>,
12605        > fidl::encoding::Encode<StreamProcessorOnStreamFailedRequest, D> for (T0, T1)
12606    {
12607        #[inline]
12608        unsafe fn encode(
12609            self,
12610            encoder: &mut fidl::encoding::Encoder<'_, D>,
12611            offset: usize,
12612            depth: fidl::encoding::Depth,
12613        ) -> fidl::Result<()> {
12614            encoder.debug_check_bounds::<StreamProcessorOnStreamFailedRequest>(offset);
12615            // Zero out padding regions. There's no need to apply masks
12616            // because the unmasked parts will be overwritten by fields.
12617            unsafe {
12618                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
12619                (ptr as *mut u64).write_unaligned(0);
12620            }
12621            // Write the fields.
12622            self.0.encode(encoder, offset + 0, depth)?;
12623            self.1.encode(encoder, offset + 8, depth)?;
12624            Ok(())
12625        }
12626    }
12627
12628    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12629        for StreamProcessorOnStreamFailedRequest
12630    {
12631        #[inline(always)]
12632        fn new_empty() -> Self {
12633            Self {
12634                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
12635                error: fidl::new_empty!(StreamError, D),
12636            }
12637        }
12638
12639        #[inline]
12640        unsafe fn decode(
12641            &mut self,
12642            decoder: &mut fidl::encoding::Decoder<'_, D>,
12643            offset: usize,
12644            _depth: fidl::encoding::Depth,
12645        ) -> fidl::Result<()> {
12646            decoder.debug_check_bounds::<Self>(offset);
12647            // Verify that padding bytes are zero.
12648            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
12649            let padval = unsafe { (ptr as *const u64).read_unaligned() };
12650            let mask = 0xffffffff00000000u64;
12651            let maskedval = padval & mask;
12652            if maskedval != 0 {
12653                return Err(fidl::Error::NonZeroPadding {
12654                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
12655                });
12656            }
12657            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
12658            fidl::decode!(StreamError, D, &mut self.error, decoder, offset + 8, _depth)?;
12659            Ok(())
12660        }
12661    }
12662
12663    impl fidl::encoding::ValueTypeMarker for StreamProcessorQueueInputEndOfStreamRequest {
12664        type Borrowed<'a> = &'a Self;
12665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12666            value
12667        }
12668    }
12669
12670    unsafe impl fidl::encoding::TypeMarker for StreamProcessorQueueInputEndOfStreamRequest {
12671        type Owned = Self;
12672
12673        #[inline(always)]
12674        fn inline_align(_context: fidl::encoding::Context) -> usize {
12675            8
12676        }
12677
12678        #[inline(always)]
12679        fn inline_size(_context: fidl::encoding::Context) -> usize {
12680            8
12681        }
12682        #[inline(always)]
12683        fn encode_is_copy() -> bool {
12684            true
12685        }
12686
12687        #[inline(always)]
12688        fn decode_is_copy() -> bool {
12689            true
12690        }
12691    }
12692
12693    unsafe impl<D: fidl::encoding::ResourceDialect>
12694        fidl::encoding::Encode<StreamProcessorQueueInputEndOfStreamRequest, D>
12695        for &StreamProcessorQueueInputEndOfStreamRequest
12696    {
12697        #[inline]
12698        unsafe fn encode(
12699            self,
12700            encoder: &mut fidl::encoding::Encoder<'_, D>,
12701            offset: usize,
12702            _depth: fidl::encoding::Depth,
12703        ) -> fidl::Result<()> {
12704            encoder.debug_check_bounds::<StreamProcessorQueueInputEndOfStreamRequest>(offset);
12705            unsafe {
12706                // Copy the object into the buffer.
12707                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
12708                (buf_ptr as *mut StreamProcessorQueueInputEndOfStreamRequest).write_unaligned(
12709                    (self as *const StreamProcessorQueueInputEndOfStreamRequest).read(),
12710                );
12711                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
12712                // done second because the memcpy will write garbage to these bytes.
12713            }
12714            Ok(())
12715        }
12716    }
12717    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
12718        fidl::encoding::Encode<StreamProcessorQueueInputEndOfStreamRequest, D> for (T0,)
12719    {
12720        #[inline]
12721        unsafe fn encode(
12722            self,
12723            encoder: &mut fidl::encoding::Encoder<'_, D>,
12724            offset: usize,
12725            depth: fidl::encoding::Depth,
12726        ) -> fidl::Result<()> {
12727            encoder.debug_check_bounds::<StreamProcessorQueueInputEndOfStreamRequest>(offset);
12728            // Zero out padding regions. There's no need to apply masks
12729            // because the unmasked parts will be overwritten by fields.
12730            // Write the fields.
12731            self.0.encode(encoder, offset + 0, depth)?;
12732            Ok(())
12733        }
12734    }
12735
12736    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12737        for StreamProcessorQueueInputEndOfStreamRequest
12738    {
12739        #[inline(always)]
12740        fn new_empty() -> Self {
12741            Self { stream_lifetime_ordinal: fidl::new_empty!(u64, D) }
12742        }
12743
12744        #[inline]
12745        unsafe fn decode(
12746            &mut self,
12747            decoder: &mut fidl::encoding::Decoder<'_, D>,
12748            offset: usize,
12749            _depth: fidl::encoding::Depth,
12750        ) -> fidl::Result<()> {
12751            decoder.debug_check_bounds::<Self>(offset);
12752            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
12753            // Verify that padding bytes are zero.
12754            // Copy from the buffer into the object.
12755            unsafe {
12756                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
12757            }
12758            Ok(())
12759        }
12760    }
12761
12762    impl fidl::encoding::ValueTypeMarker for StreamProcessorQueueInputFormatDetailsRequest {
12763        type Borrowed<'a> = &'a Self;
12764        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12765            value
12766        }
12767    }
12768
12769    unsafe impl fidl::encoding::TypeMarker for StreamProcessorQueueInputFormatDetailsRequest {
12770        type Owned = Self;
12771
12772        #[inline(always)]
12773        fn inline_align(_context: fidl::encoding::Context) -> usize {
12774            8
12775        }
12776
12777        #[inline(always)]
12778        fn inline_size(_context: fidl::encoding::Context) -> usize {
12779            24
12780        }
12781    }
12782
12783    unsafe impl<D: fidl::encoding::ResourceDialect>
12784        fidl::encoding::Encode<StreamProcessorQueueInputFormatDetailsRequest, D>
12785        for &StreamProcessorQueueInputFormatDetailsRequest
12786    {
12787        #[inline]
12788        unsafe fn encode(
12789            self,
12790            encoder: &mut fidl::encoding::Encoder<'_, D>,
12791            offset: usize,
12792            _depth: fidl::encoding::Depth,
12793        ) -> fidl::Result<()> {
12794            encoder.debug_check_bounds::<StreamProcessorQueueInputFormatDetailsRequest>(offset);
12795            // Delegate to tuple encoding.
12796            fidl::encoding::Encode::<StreamProcessorQueueInputFormatDetailsRequest, D>::encode(
12797                (
12798                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
12799                    <FormatDetails as fidl::encoding::ValueTypeMarker>::borrow(
12800                        &self.format_details,
12801                    ),
12802                ),
12803                encoder,
12804                offset,
12805                _depth,
12806            )
12807        }
12808    }
12809    unsafe impl<
12810            D: fidl::encoding::ResourceDialect,
12811            T0: fidl::encoding::Encode<u64, D>,
12812            T1: fidl::encoding::Encode<FormatDetails, D>,
12813        > fidl::encoding::Encode<StreamProcessorQueueInputFormatDetailsRequest, D> for (T0, T1)
12814    {
12815        #[inline]
12816        unsafe fn encode(
12817            self,
12818            encoder: &mut fidl::encoding::Encoder<'_, D>,
12819            offset: usize,
12820            depth: fidl::encoding::Depth,
12821        ) -> fidl::Result<()> {
12822            encoder.debug_check_bounds::<StreamProcessorQueueInputFormatDetailsRequest>(offset);
12823            // Zero out padding regions. There's no need to apply masks
12824            // because the unmasked parts will be overwritten by fields.
12825            // Write the fields.
12826            self.0.encode(encoder, offset + 0, depth)?;
12827            self.1.encode(encoder, offset + 8, depth)?;
12828            Ok(())
12829        }
12830    }
12831
12832    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12833        for StreamProcessorQueueInputFormatDetailsRequest
12834    {
12835        #[inline(always)]
12836        fn new_empty() -> Self {
12837            Self {
12838                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
12839                format_details: fidl::new_empty!(FormatDetails, D),
12840            }
12841        }
12842
12843        #[inline]
12844        unsafe fn decode(
12845            &mut self,
12846            decoder: &mut fidl::encoding::Decoder<'_, D>,
12847            offset: usize,
12848            _depth: fidl::encoding::Depth,
12849        ) -> fidl::Result<()> {
12850            decoder.debug_check_bounds::<Self>(offset);
12851            // Verify that padding bytes are zero.
12852            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
12853            fidl::decode!(FormatDetails, D, &mut self.format_details, decoder, offset + 8, _depth)?;
12854            Ok(())
12855        }
12856    }
12857
12858    impl fidl::encoding::ValueTypeMarker for StreamProcessorQueueInputPacketRequest {
12859        type Borrowed<'a> = &'a Self;
12860        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12861            value
12862        }
12863    }
12864
12865    unsafe impl fidl::encoding::TypeMarker for StreamProcessorQueueInputPacketRequest {
12866        type Owned = Self;
12867
12868        #[inline(always)]
12869        fn inline_align(_context: fidl::encoding::Context) -> usize {
12870            8
12871        }
12872
12873        #[inline(always)]
12874        fn inline_size(_context: fidl::encoding::Context) -> usize {
12875            16
12876        }
12877    }
12878
12879    unsafe impl<D: fidl::encoding::ResourceDialect>
12880        fidl::encoding::Encode<StreamProcessorQueueInputPacketRequest, D>
12881        for &StreamProcessorQueueInputPacketRequest
12882    {
12883        #[inline]
12884        unsafe fn encode(
12885            self,
12886            encoder: &mut fidl::encoding::Encoder<'_, D>,
12887            offset: usize,
12888            _depth: fidl::encoding::Depth,
12889        ) -> fidl::Result<()> {
12890            encoder.debug_check_bounds::<StreamProcessorQueueInputPacketRequest>(offset);
12891            // Delegate to tuple encoding.
12892            fidl::encoding::Encode::<StreamProcessorQueueInputPacketRequest, D>::encode(
12893                (<Packet as fidl::encoding::ValueTypeMarker>::borrow(&self.packet),),
12894                encoder,
12895                offset,
12896                _depth,
12897            )
12898        }
12899    }
12900    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Packet, D>>
12901        fidl::encoding::Encode<StreamProcessorQueueInputPacketRequest, D> for (T0,)
12902    {
12903        #[inline]
12904        unsafe fn encode(
12905            self,
12906            encoder: &mut fidl::encoding::Encoder<'_, D>,
12907            offset: usize,
12908            depth: fidl::encoding::Depth,
12909        ) -> fidl::Result<()> {
12910            encoder.debug_check_bounds::<StreamProcessorQueueInputPacketRequest>(offset);
12911            // Zero out padding regions. There's no need to apply masks
12912            // because the unmasked parts will be overwritten by fields.
12913            // Write the fields.
12914            self.0.encode(encoder, offset + 0, depth)?;
12915            Ok(())
12916        }
12917    }
12918
12919    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12920        for StreamProcessorQueueInputPacketRequest
12921    {
12922        #[inline(always)]
12923        fn new_empty() -> Self {
12924            Self { packet: fidl::new_empty!(Packet, D) }
12925        }
12926
12927        #[inline]
12928        unsafe fn decode(
12929            &mut self,
12930            decoder: &mut fidl::encoding::Decoder<'_, D>,
12931            offset: usize,
12932            _depth: fidl::encoding::Depth,
12933        ) -> fidl::Result<()> {
12934            decoder.debug_check_bounds::<Self>(offset);
12935            // Verify that padding bytes are zero.
12936            fidl::decode!(Packet, D, &mut self.packet, decoder, offset + 0, _depth)?;
12937            Ok(())
12938        }
12939    }
12940
12941    impl fidl::encoding::ValueTypeMarker for StreamProcessorRecycleOutputPacketRequest {
12942        type Borrowed<'a> = &'a Self;
12943        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12944            value
12945        }
12946    }
12947
12948    unsafe impl fidl::encoding::TypeMarker for StreamProcessorRecycleOutputPacketRequest {
12949        type Owned = Self;
12950
12951        #[inline(always)]
12952        fn inline_align(_context: fidl::encoding::Context) -> usize {
12953            8
12954        }
12955
12956        #[inline(always)]
12957        fn inline_size(_context: fidl::encoding::Context) -> usize {
12958            16
12959        }
12960    }
12961
12962    unsafe impl<D: fidl::encoding::ResourceDialect>
12963        fidl::encoding::Encode<StreamProcessorRecycleOutputPacketRequest, D>
12964        for &StreamProcessorRecycleOutputPacketRequest
12965    {
12966        #[inline]
12967        unsafe fn encode(
12968            self,
12969            encoder: &mut fidl::encoding::Encoder<'_, D>,
12970            offset: usize,
12971            _depth: fidl::encoding::Depth,
12972        ) -> fidl::Result<()> {
12973            encoder.debug_check_bounds::<StreamProcessorRecycleOutputPacketRequest>(offset);
12974            // Delegate to tuple encoding.
12975            fidl::encoding::Encode::<StreamProcessorRecycleOutputPacketRequest, D>::encode(
12976                (<PacketHeader as fidl::encoding::ValueTypeMarker>::borrow(
12977                    &self.available_output_packet,
12978                ),),
12979                encoder,
12980                offset,
12981                _depth,
12982            )
12983        }
12984    }
12985    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PacketHeader, D>>
12986        fidl::encoding::Encode<StreamProcessorRecycleOutputPacketRequest, D> for (T0,)
12987    {
12988        #[inline]
12989        unsafe fn encode(
12990            self,
12991            encoder: &mut fidl::encoding::Encoder<'_, D>,
12992            offset: usize,
12993            depth: fidl::encoding::Depth,
12994        ) -> fidl::Result<()> {
12995            encoder.debug_check_bounds::<StreamProcessorRecycleOutputPacketRequest>(offset);
12996            // Zero out padding regions. There's no need to apply masks
12997            // because the unmasked parts will be overwritten by fields.
12998            // Write the fields.
12999            self.0.encode(encoder, offset + 0, depth)?;
13000            Ok(())
13001        }
13002    }
13003
13004    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13005        for StreamProcessorRecycleOutputPacketRequest
13006    {
13007        #[inline(always)]
13008        fn new_empty() -> Self {
13009            Self { available_output_packet: fidl::new_empty!(PacketHeader, D) }
13010        }
13011
13012        #[inline]
13013        unsafe fn decode(
13014            &mut self,
13015            decoder: &mut fidl::encoding::Decoder<'_, D>,
13016            offset: usize,
13017            _depth: fidl::encoding::Depth,
13018        ) -> fidl::Result<()> {
13019            decoder.debug_check_bounds::<Self>(offset);
13020            // Verify that padding bytes are zero.
13021            fidl::decode!(
13022                PacketHeader,
13023                D,
13024                &mut self.available_output_packet,
13025                decoder,
13026                offset + 0,
13027                _depth
13028            )?;
13029            Ok(())
13030        }
13031    }
13032
13033    impl fidl::encoding::ValueTypeMarker for StreamSinkSendPacketNoReplyRequest {
13034        type Borrowed<'a> = &'a Self;
13035        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13036            value
13037        }
13038    }
13039
13040    unsafe impl fidl::encoding::TypeMarker for StreamSinkSendPacketNoReplyRequest {
13041        type Owned = Self;
13042
13043        #[inline(always)]
13044        fn inline_align(_context: fidl::encoding::Context) -> usize {
13045            8
13046        }
13047
13048        #[inline(always)]
13049        fn inline_size(_context: fidl::encoding::Context) -> usize {
13050            56
13051        }
13052    }
13053
13054    unsafe impl<D: fidl::encoding::ResourceDialect>
13055        fidl::encoding::Encode<StreamSinkSendPacketNoReplyRequest, D>
13056        for &StreamSinkSendPacketNoReplyRequest
13057    {
13058        #[inline]
13059        unsafe fn encode(
13060            self,
13061            encoder: &mut fidl::encoding::Encoder<'_, D>,
13062            offset: usize,
13063            _depth: fidl::encoding::Depth,
13064        ) -> fidl::Result<()> {
13065            encoder.debug_check_bounds::<StreamSinkSendPacketNoReplyRequest>(offset);
13066            unsafe {
13067                // Copy the object into the buffer.
13068                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13069                (buf_ptr as *mut StreamSinkSendPacketNoReplyRequest)
13070                    .write_unaligned((self as *const StreamSinkSendPacketNoReplyRequest).read());
13071                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13072                // done second because the memcpy will write garbage to these bytes.
13073                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13074                let padding_mask = 0xffffffff00000000u64;
13075                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13076                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13077                let padding_mask = 0xffffffff00000000u64;
13078                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13079            }
13080            Ok(())
13081        }
13082    }
13083    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13084        fidl::encoding::Encode<StreamSinkSendPacketNoReplyRequest, D> for (T0,)
13085    {
13086        #[inline]
13087        unsafe fn encode(
13088            self,
13089            encoder: &mut fidl::encoding::Encoder<'_, D>,
13090            offset: usize,
13091            depth: fidl::encoding::Depth,
13092        ) -> fidl::Result<()> {
13093            encoder.debug_check_bounds::<StreamSinkSendPacketNoReplyRequest>(offset);
13094            // Zero out padding regions. There's no need to apply masks
13095            // because the unmasked parts will be overwritten by fields.
13096            // Write the fields.
13097            self.0.encode(encoder, offset + 0, depth)?;
13098            Ok(())
13099        }
13100    }
13101
13102    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13103        for StreamSinkSendPacketNoReplyRequest
13104    {
13105        #[inline(always)]
13106        fn new_empty() -> Self {
13107            Self { packet: fidl::new_empty!(StreamPacket, D) }
13108        }
13109
13110        #[inline]
13111        unsafe fn decode(
13112            &mut self,
13113            decoder: &mut fidl::encoding::Decoder<'_, D>,
13114            offset: usize,
13115            _depth: fidl::encoding::Depth,
13116        ) -> fidl::Result<()> {
13117            decoder.debug_check_bounds::<Self>(offset);
13118            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13119            // Verify that padding bytes are zero.
13120            let ptr = unsafe { buf_ptr.offset(8) };
13121            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13122            let mask = 0xffffffff00000000u64;
13123            let maskedval = padval & mask;
13124            if maskedval != 0 {
13125                return Err(fidl::Error::NonZeroPadding {
13126                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13127                });
13128            }
13129            let ptr = unsafe { buf_ptr.offset(32) };
13130            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13131            let mask = 0xffffffff00000000u64;
13132            let maskedval = padval & mask;
13133            if maskedval != 0 {
13134                return Err(fidl::Error::NonZeroPadding {
13135                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13136                });
13137            }
13138            // Copy from the buffer into the object.
13139            unsafe {
13140                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13141            }
13142            Ok(())
13143        }
13144    }
13145
13146    impl fidl::encoding::ValueTypeMarker for StreamSinkSendPacketRequest {
13147        type Borrowed<'a> = &'a Self;
13148        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13149            value
13150        }
13151    }
13152
13153    unsafe impl fidl::encoding::TypeMarker for StreamSinkSendPacketRequest {
13154        type Owned = Self;
13155
13156        #[inline(always)]
13157        fn inline_align(_context: fidl::encoding::Context) -> usize {
13158            8
13159        }
13160
13161        #[inline(always)]
13162        fn inline_size(_context: fidl::encoding::Context) -> usize {
13163            56
13164        }
13165    }
13166
13167    unsafe impl<D: fidl::encoding::ResourceDialect>
13168        fidl::encoding::Encode<StreamSinkSendPacketRequest, D> for &StreamSinkSendPacketRequest
13169    {
13170        #[inline]
13171        unsafe fn encode(
13172            self,
13173            encoder: &mut fidl::encoding::Encoder<'_, D>,
13174            offset: usize,
13175            _depth: fidl::encoding::Depth,
13176        ) -> fidl::Result<()> {
13177            encoder.debug_check_bounds::<StreamSinkSendPacketRequest>(offset);
13178            unsafe {
13179                // Copy the object into the buffer.
13180                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13181                (buf_ptr as *mut StreamSinkSendPacketRequest)
13182                    .write_unaligned((self as *const StreamSinkSendPacketRequest).read());
13183                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13184                // done second because the memcpy will write garbage to these bytes.
13185                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13186                let padding_mask = 0xffffffff00000000u64;
13187                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13188                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13189                let padding_mask = 0xffffffff00000000u64;
13190                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13191            }
13192            Ok(())
13193        }
13194    }
13195    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13196        fidl::encoding::Encode<StreamSinkSendPacketRequest, D> for (T0,)
13197    {
13198        #[inline]
13199        unsafe fn encode(
13200            self,
13201            encoder: &mut fidl::encoding::Encoder<'_, D>,
13202            offset: usize,
13203            depth: fidl::encoding::Depth,
13204        ) -> fidl::Result<()> {
13205            encoder.debug_check_bounds::<StreamSinkSendPacketRequest>(offset);
13206            // Zero out padding regions. There's no need to apply masks
13207            // because the unmasked parts will be overwritten by fields.
13208            // Write the fields.
13209            self.0.encode(encoder, offset + 0, depth)?;
13210            Ok(())
13211        }
13212    }
13213
13214    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13215        for StreamSinkSendPacketRequest
13216    {
13217        #[inline(always)]
13218        fn new_empty() -> Self {
13219            Self { packet: fidl::new_empty!(StreamPacket, D) }
13220        }
13221
13222        #[inline]
13223        unsafe fn decode(
13224            &mut self,
13225            decoder: &mut fidl::encoding::Decoder<'_, D>,
13226            offset: usize,
13227            _depth: fidl::encoding::Depth,
13228        ) -> fidl::Result<()> {
13229            decoder.debug_check_bounds::<Self>(offset);
13230            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13231            // Verify that padding bytes are zero.
13232            let ptr = unsafe { buf_ptr.offset(8) };
13233            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13234            let mask = 0xffffffff00000000u64;
13235            let maskedval = padval & mask;
13236            if maskedval != 0 {
13237                return Err(fidl::Error::NonZeroPadding {
13238                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13239                });
13240            }
13241            let ptr = unsafe { buf_ptr.offset(32) };
13242            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13243            let mask = 0xffffffff00000000u64;
13244            let maskedval = padval & mask;
13245            if maskedval != 0 {
13246                return Err(fidl::Error::NonZeroPadding {
13247                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13248                });
13249            }
13250            // Copy from the buffer into the object.
13251            unsafe {
13252                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13253            }
13254            Ok(())
13255        }
13256    }
13257
13258    impl fidl::encoding::ValueTypeMarker for StreamSourceOnPacketProducedRequest {
13259        type Borrowed<'a> = &'a Self;
13260        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13261            value
13262        }
13263    }
13264
13265    unsafe impl fidl::encoding::TypeMarker for StreamSourceOnPacketProducedRequest {
13266        type Owned = Self;
13267
13268        #[inline(always)]
13269        fn inline_align(_context: fidl::encoding::Context) -> usize {
13270            8
13271        }
13272
13273        #[inline(always)]
13274        fn inline_size(_context: fidl::encoding::Context) -> usize {
13275            56
13276        }
13277    }
13278
13279    unsafe impl<D: fidl::encoding::ResourceDialect>
13280        fidl::encoding::Encode<StreamSourceOnPacketProducedRequest, D>
13281        for &StreamSourceOnPacketProducedRequest
13282    {
13283        #[inline]
13284        unsafe fn encode(
13285            self,
13286            encoder: &mut fidl::encoding::Encoder<'_, D>,
13287            offset: usize,
13288            _depth: fidl::encoding::Depth,
13289        ) -> fidl::Result<()> {
13290            encoder.debug_check_bounds::<StreamSourceOnPacketProducedRequest>(offset);
13291            unsafe {
13292                // Copy the object into the buffer.
13293                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13294                (buf_ptr as *mut StreamSourceOnPacketProducedRequest)
13295                    .write_unaligned((self as *const StreamSourceOnPacketProducedRequest).read());
13296                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13297                // done second because the memcpy will write garbage to these bytes.
13298                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13299                let padding_mask = 0xffffffff00000000u64;
13300                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13301                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13302                let padding_mask = 0xffffffff00000000u64;
13303                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13304            }
13305            Ok(())
13306        }
13307    }
13308    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13309        fidl::encoding::Encode<StreamSourceOnPacketProducedRequest, D> for (T0,)
13310    {
13311        #[inline]
13312        unsafe fn encode(
13313            self,
13314            encoder: &mut fidl::encoding::Encoder<'_, D>,
13315            offset: usize,
13316            depth: fidl::encoding::Depth,
13317        ) -> fidl::Result<()> {
13318            encoder.debug_check_bounds::<StreamSourceOnPacketProducedRequest>(offset);
13319            // Zero out padding regions. There's no need to apply masks
13320            // because the unmasked parts will be overwritten by fields.
13321            // Write the fields.
13322            self.0.encode(encoder, offset + 0, depth)?;
13323            Ok(())
13324        }
13325    }
13326
13327    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13328        for StreamSourceOnPacketProducedRequest
13329    {
13330        #[inline(always)]
13331        fn new_empty() -> Self {
13332            Self { packet: fidl::new_empty!(StreamPacket, D) }
13333        }
13334
13335        #[inline]
13336        unsafe fn decode(
13337            &mut self,
13338            decoder: &mut fidl::encoding::Decoder<'_, D>,
13339            offset: usize,
13340            _depth: fidl::encoding::Depth,
13341        ) -> fidl::Result<()> {
13342            decoder.debug_check_bounds::<Self>(offset);
13343            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13344            // Verify that padding bytes are zero.
13345            let ptr = unsafe { buf_ptr.offset(8) };
13346            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13347            let mask = 0xffffffff00000000u64;
13348            let maskedval = padval & mask;
13349            if maskedval != 0 {
13350                return Err(fidl::Error::NonZeroPadding {
13351                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13352                });
13353            }
13354            let ptr = unsafe { buf_ptr.offset(32) };
13355            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13356            let mask = 0xffffffff00000000u64;
13357            let maskedval = padval & mask;
13358            if maskedval != 0 {
13359                return Err(fidl::Error::NonZeroPadding {
13360                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13361                });
13362            }
13363            // Copy from the buffer into the object.
13364            unsafe {
13365                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13366            }
13367            Ok(())
13368        }
13369    }
13370
13371    impl fidl::encoding::ValueTypeMarker for StreamSourceReleasePacketRequest {
13372        type Borrowed<'a> = &'a Self;
13373        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13374            value
13375        }
13376    }
13377
13378    unsafe impl fidl::encoding::TypeMarker for StreamSourceReleasePacketRequest {
13379        type Owned = Self;
13380
13381        #[inline(always)]
13382        fn inline_align(_context: fidl::encoding::Context) -> usize {
13383            8
13384        }
13385
13386        #[inline(always)]
13387        fn inline_size(_context: fidl::encoding::Context) -> usize {
13388            56
13389        }
13390    }
13391
13392    unsafe impl<D: fidl::encoding::ResourceDialect>
13393        fidl::encoding::Encode<StreamSourceReleasePacketRequest, D>
13394        for &StreamSourceReleasePacketRequest
13395    {
13396        #[inline]
13397        unsafe fn encode(
13398            self,
13399            encoder: &mut fidl::encoding::Encoder<'_, D>,
13400            offset: usize,
13401            _depth: fidl::encoding::Depth,
13402        ) -> fidl::Result<()> {
13403            encoder.debug_check_bounds::<StreamSourceReleasePacketRequest>(offset);
13404            unsafe {
13405                // Copy the object into the buffer.
13406                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13407                (buf_ptr as *mut StreamSourceReleasePacketRequest)
13408                    .write_unaligned((self as *const StreamSourceReleasePacketRequest).read());
13409                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13410                // done second because the memcpy will write garbage to these bytes.
13411                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13412                let padding_mask = 0xffffffff00000000u64;
13413                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13414                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13415                let padding_mask = 0xffffffff00000000u64;
13416                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13417            }
13418            Ok(())
13419        }
13420    }
13421    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13422        fidl::encoding::Encode<StreamSourceReleasePacketRequest, D> for (T0,)
13423    {
13424        #[inline]
13425        unsafe fn encode(
13426            self,
13427            encoder: &mut fidl::encoding::Encoder<'_, D>,
13428            offset: usize,
13429            depth: fidl::encoding::Depth,
13430        ) -> fidl::Result<()> {
13431            encoder.debug_check_bounds::<StreamSourceReleasePacketRequest>(offset);
13432            // Zero out padding regions. There's no need to apply masks
13433            // because the unmasked parts will be overwritten by fields.
13434            // Write the fields.
13435            self.0.encode(encoder, offset + 0, depth)?;
13436            Ok(())
13437        }
13438    }
13439
13440    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13441        for StreamSourceReleasePacketRequest
13442    {
13443        #[inline(always)]
13444        fn new_empty() -> Self {
13445            Self { packet: fidl::new_empty!(StreamPacket, D) }
13446        }
13447
13448        #[inline]
13449        unsafe fn decode(
13450            &mut self,
13451            decoder: &mut fidl::encoding::Decoder<'_, D>,
13452            offset: usize,
13453            _depth: fidl::encoding::Depth,
13454        ) -> fidl::Result<()> {
13455            decoder.debug_check_bounds::<Self>(offset);
13456            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13457            // Verify that padding bytes are zero.
13458            let ptr = unsafe { buf_ptr.offset(8) };
13459            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13460            let mask = 0xffffffff00000000u64;
13461            let maskedval = padval & mask;
13462            if maskedval != 0 {
13463                return Err(fidl::Error::NonZeroPadding {
13464                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13465                });
13466            }
13467            let ptr = unsafe { buf_ptr.offset(32) };
13468            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13469            let mask = 0xffffffff00000000u64;
13470            let maskedval = padval & mask;
13471            if maskedval != 0 {
13472                return Err(fidl::Error::NonZeroPadding {
13473                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13474                });
13475            }
13476            // Copy from the buffer into the object.
13477            unsafe {
13478                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13479            }
13480            Ok(())
13481        }
13482    }
13483
13484    impl fidl::encoding::ValueTypeMarker for StreamType {
13485        type Borrowed<'a> = &'a Self;
13486        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13487            value
13488        }
13489    }
13490
13491    unsafe impl fidl::encoding::TypeMarker for StreamType {
13492        type Owned = Self;
13493
13494        #[inline(always)]
13495        fn inline_align(_context: fidl::encoding::Context) -> usize {
13496            8
13497        }
13498
13499        #[inline(always)]
13500        fn inline_size(_context: fidl::encoding::Context) -> usize {
13501            48
13502        }
13503    }
13504
13505    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamType, D>
13506        for &StreamType
13507    {
13508        #[inline]
13509        unsafe fn encode(
13510            self,
13511            encoder: &mut fidl::encoding::Encoder<'_, D>,
13512            offset: usize,
13513            _depth: fidl::encoding::Depth,
13514        ) -> fidl::Result<()> {
13515            encoder.debug_check_bounds::<StreamType>(offset);
13516            // Delegate to tuple encoding.
13517            fidl::encoding::Encode::<StreamType, D>::encode(
13518                (
13519                    <MediumSpecificStreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.medium_specific),
13520                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow(&self.encoding),
13521                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>> as fidl::encoding::ValueTypeMarker>::borrow(&self.encoding_parameters),
13522                ),
13523                encoder, offset, _depth
13524            )
13525        }
13526    }
13527    unsafe impl<
13528            D: fidl::encoding::ResourceDialect,
13529            T0: fidl::encoding::Encode<MediumSpecificStreamType, D>,
13530            T1: fidl::encoding::Encode<fidl::encoding::BoundedString<255>, D>,
13531            T2: fidl::encoding::Encode<
13532                fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>>,
13533                D,
13534            >,
13535        > fidl::encoding::Encode<StreamType, D> for (T0, T1, T2)
13536    {
13537        #[inline]
13538        unsafe fn encode(
13539            self,
13540            encoder: &mut fidl::encoding::Encoder<'_, D>,
13541            offset: usize,
13542            depth: fidl::encoding::Depth,
13543        ) -> fidl::Result<()> {
13544            encoder.debug_check_bounds::<StreamType>(offset);
13545            // Zero out padding regions. There's no need to apply masks
13546            // because the unmasked parts will be overwritten by fields.
13547            // Write the fields.
13548            self.0.encode(encoder, offset + 0, depth)?;
13549            self.1.encode(encoder, offset + 16, depth)?;
13550            self.2.encode(encoder, offset + 32, depth)?;
13551            Ok(())
13552        }
13553    }
13554
13555    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamType {
13556        #[inline(always)]
13557        fn new_empty() -> Self {
13558            Self {
13559                medium_specific: fidl::new_empty!(MediumSpecificStreamType, D),
13560                encoding: fidl::new_empty!(fidl::encoding::BoundedString<255>, D),
13561                encoding_parameters: fidl::new_empty!(
13562                    fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>>,
13563                    D
13564                ),
13565            }
13566        }
13567
13568        #[inline]
13569        unsafe fn decode(
13570            &mut self,
13571            decoder: &mut fidl::encoding::Decoder<'_, D>,
13572            offset: usize,
13573            _depth: fidl::encoding::Depth,
13574        ) -> fidl::Result<()> {
13575            decoder.debug_check_bounds::<Self>(offset);
13576            // Verify that padding bytes are zero.
13577            fidl::decode!(
13578                MediumSpecificStreamType,
13579                D,
13580                &mut self.medium_specific,
13581                decoder,
13582                offset + 0,
13583                _depth
13584            )?;
13585            fidl::decode!(
13586                fidl::encoding::BoundedString<255>,
13587                D,
13588                &mut self.encoding,
13589                decoder,
13590                offset + 16,
13591                _depth
13592            )?;
13593            fidl::decode!(
13594                fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>>,
13595                D,
13596                &mut self.encoding_parameters,
13597                decoder,
13598                offset + 32,
13599                _depth
13600            )?;
13601            Ok(())
13602        }
13603    }
13604
13605    impl fidl::encoding::ValueTypeMarker for SubpictureStreamType {
13606        type Borrowed<'a> = &'a Self;
13607        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13608            value
13609        }
13610    }
13611
13612    unsafe impl fidl::encoding::TypeMarker for SubpictureStreamType {
13613        type Owned = Self;
13614
13615        #[inline(always)]
13616        fn inline_align(_context: fidl::encoding::Context) -> usize {
13617            1
13618        }
13619
13620        #[inline(always)]
13621        fn inline_size(_context: fidl::encoding::Context) -> usize {
13622            1
13623        }
13624    }
13625
13626    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SubpictureStreamType, D>
13627        for &SubpictureStreamType
13628    {
13629        #[inline]
13630        unsafe fn encode(
13631            self,
13632            encoder: &mut fidl::encoding::Encoder<'_, D>,
13633            offset: usize,
13634            _depth: fidl::encoding::Depth,
13635        ) -> fidl::Result<()> {
13636            encoder.debug_check_bounds::<SubpictureStreamType>(offset);
13637            encoder.write_num(0u8, offset);
13638            Ok(())
13639        }
13640    }
13641
13642    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SubpictureStreamType {
13643        #[inline(always)]
13644        fn new_empty() -> Self {
13645            Self
13646        }
13647
13648        #[inline]
13649        unsafe fn decode(
13650            &mut self,
13651            decoder: &mut fidl::encoding::Decoder<'_, D>,
13652            offset: usize,
13653            _depth: fidl::encoding::Depth,
13654        ) -> fidl::Result<()> {
13655            decoder.debug_check_bounds::<Self>(offset);
13656            match decoder.read_num::<u8>(offset) {
13657                0 => Ok(()),
13658                _ => Err(fidl::Error::Invalid),
13659            }
13660        }
13661    }
13662
13663    impl fidl::encoding::ValueTypeMarker for SubsampleEntry {
13664        type Borrowed<'a> = &'a Self;
13665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13666            value
13667        }
13668    }
13669
13670    unsafe impl fidl::encoding::TypeMarker for SubsampleEntry {
13671        type Owned = Self;
13672
13673        #[inline(always)]
13674        fn inline_align(_context: fidl::encoding::Context) -> usize {
13675            4
13676        }
13677
13678        #[inline(always)]
13679        fn inline_size(_context: fidl::encoding::Context) -> usize {
13680            8
13681        }
13682        #[inline(always)]
13683        fn encode_is_copy() -> bool {
13684            true
13685        }
13686
13687        #[inline(always)]
13688        fn decode_is_copy() -> bool {
13689            true
13690        }
13691    }
13692
13693    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SubsampleEntry, D>
13694        for &SubsampleEntry
13695    {
13696        #[inline]
13697        unsafe fn encode(
13698            self,
13699            encoder: &mut fidl::encoding::Encoder<'_, D>,
13700            offset: usize,
13701            _depth: fidl::encoding::Depth,
13702        ) -> fidl::Result<()> {
13703            encoder.debug_check_bounds::<SubsampleEntry>(offset);
13704            unsafe {
13705                // Copy the object into the buffer.
13706                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13707                (buf_ptr as *mut SubsampleEntry)
13708                    .write_unaligned((self as *const SubsampleEntry).read());
13709                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13710                // done second because the memcpy will write garbage to these bytes.
13711            }
13712            Ok(())
13713        }
13714    }
13715    unsafe impl<
13716            D: fidl::encoding::ResourceDialect,
13717            T0: fidl::encoding::Encode<u32, D>,
13718            T1: fidl::encoding::Encode<u32, D>,
13719        > fidl::encoding::Encode<SubsampleEntry, D> for (T0, T1)
13720    {
13721        #[inline]
13722        unsafe fn encode(
13723            self,
13724            encoder: &mut fidl::encoding::Encoder<'_, D>,
13725            offset: usize,
13726            depth: fidl::encoding::Depth,
13727        ) -> fidl::Result<()> {
13728            encoder.debug_check_bounds::<SubsampleEntry>(offset);
13729            // Zero out padding regions. There's no need to apply masks
13730            // because the unmasked parts will be overwritten by fields.
13731            // Write the fields.
13732            self.0.encode(encoder, offset + 0, depth)?;
13733            self.1.encode(encoder, offset + 4, depth)?;
13734            Ok(())
13735        }
13736    }
13737
13738    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SubsampleEntry {
13739        #[inline(always)]
13740        fn new_empty() -> Self {
13741            Self {
13742                clear_bytes: fidl::new_empty!(u32, D),
13743                encrypted_bytes: fidl::new_empty!(u32, D),
13744            }
13745        }
13746
13747        #[inline]
13748        unsafe fn decode(
13749            &mut self,
13750            decoder: &mut fidl::encoding::Decoder<'_, D>,
13751            offset: usize,
13752            _depth: fidl::encoding::Depth,
13753        ) -> fidl::Result<()> {
13754            decoder.debug_check_bounds::<Self>(offset);
13755            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13756            // Verify that padding bytes are zero.
13757            // Copy from the buffer into the object.
13758            unsafe {
13759                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
13760            }
13761            Ok(())
13762        }
13763    }
13764
13765    impl fidl::encoding::ValueTypeMarker for TextStreamType {
13766        type Borrowed<'a> = &'a Self;
13767        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13768            value
13769        }
13770    }
13771
13772    unsafe impl fidl::encoding::TypeMarker for TextStreamType {
13773        type Owned = Self;
13774
13775        #[inline(always)]
13776        fn inline_align(_context: fidl::encoding::Context) -> usize {
13777            1
13778        }
13779
13780        #[inline(always)]
13781        fn inline_size(_context: fidl::encoding::Context) -> usize {
13782            1
13783        }
13784    }
13785
13786    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TextStreamType, D>
13787        for &TextStreamType
13788    {
13789        #[inline]
13790        unsafe fn encode(
13791            self,
13792            encoder: &mut fidl::encoding::Encoder<'_, D>,
13793            offset: usize,
13794            _depth: fidl::encoding::Depth,
13795        ) -> fidl::Result<()> {
13796            encoder.debug_check_bounds::<TextStreamType>(offset);
13797            encoder.write_num(0u8, offset);
13798            Ok(())
13799        }
13800    }
13801
13802    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TextStreamType {
13803        #[inline(always)]
13804        fn new_empty() -> Self {
13805            Self
13806        }
13807
13808        #[inline]
13809        unsafe fn decode(
13810            &mut self,
13811            decoder: &mut fidl::encoding::Decoder<'_, D>,
13812            offset: usize,
13813            _depth: fidl::encoding::Depth,
13814        ) -> fidl::Result<()> {
13815            decoder.debug_check_bounds::<Self>(offset);
13816            match decoder.read_num::<u8>(offset) {
13817                0 => Ok(()),
13818                _ => Err(fidl::Error::Invalid),
13819            }
13820        }
13821    }
13822
13823    impl fidl::encoding::ValueTypeMarker for TimelineFunction {
13824        type Borrowed<'a> = &'a Self;
13825        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13826            value
13827        }
13828    }
13829
13830    unsafe impl fidl::encoding::TypeMarker for TimelineFunction {
13831        type Owned = Self;
13832
13833        #[inline(always)]
13834        fn inline_align(_context: fidl::encoding::Context) -> usize {
13835            8
13836        }
13837
13838        #[inline(always)]
13839        fn inline_size(_context: fidl::encoding::Context) -> usize {
13840            24
13841        }
13842        #[inline(always)]
13843        fn encode_is_copy() -> bool {
13844            true
13845        }
13846
13847        #[inline(always)]
13848        fn decode_is_copy() -> bool {
13849            true
13850        }
13851    }
13852
13853    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TimelineFunction, D>
13854        for &TimelineFunction
13855    {
13856        #[inline]
13857        unsafe fn encode(
13858            self,
13859            encoder: &mut fidl::encoding::Encoder<'_, D>,
13860            offset: usize,
13861            _depth: fidl::encoding::Depth,
13862        ) -> fidl::Result<()> {
13863            encoder.debug_check_bounds::<TimelineFunction>(offset);
13864            unsafe {
13865                // Copy the object into the buffer.
13866                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13867                (buf_ptr as *mut TimelineFunction)
13868                    .write_unaligned((self as *const TimelineFunction).read());
13869                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13870                // done second because the memcpy will write garbage to these bytes.
13871            }
13872            Ok(())
13873        }
13874    }
13875    unsafe impl<
13876            D: fidl::encoding::ResourceDialect,
13877            T0: fidl::encoding::Encode<i64, D>,
13878            T1: fidl::encoding::Encode<i64, D>,
13879            T2: fidl::encoding::Encode<u32, D>,
13880            T3: fidl::encoding::Encode<u32, D>,
13881        > fidl::encoding::Encode<TimelineFunction, D> for (T0, T1, T2, T3)
13882    {
13883        #[inline]
13884        unsafe fn encode(
13885            self,
13886            encoder: &mut fidl::encoding::Encoder<'_, D>,
13887            offset: usize,
13888            depth: fidl::encoding::Depth,
13889        ) -> fidl::Result<()> {
13890            encoder.debug_check_bounds::<TimelineFunction>(offset);
13891            // Zero out padding regions. There's no need to apply masks
13892            // because the unmasked parts will be overwritten by fields.
13893            // Write the fields.
13894            self.0.encode(encoder, offset + 0, depth)?;
13895            self.1.encode(encoder, offset + 8, depth)?;
13896            self.2.encode(encoder, offset + 16, depth)?;
13897            self.3.encode(encoder, offset + 20, depth)?;
13898            Ok(())
13899        }
13900    }
13901
13902    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TimelineFunction {
13903        #[inline(always)]
13904        fn new_empty() -> Self {
13905            Self {
13906                subject_time: fidl::new_empty!(i64, D),
13907                reference_time: fidl::new_empty!(i64, D),
13908                subject_delta: fidl::new_empty!(u32, D),
13909                reference_delta: fidl::new_empty!(u32, D),
13910            }
13911        }
13912
13913        #[inline]
13914        unsafe fn decode(
13915            &mut self,
13916            decoder: &mut fidl::encoding::Decoder<'_, D>,
13917            offset: usize,
13918            _depth: fidl::encoding::Depth,
13919        ) -> fidl::Result<()> {
13920            decoder.debug_check_bounds::<Self>(offset);
13921            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13922            // Verify that padding bytes are zero.
13923            // Copy from the buffer into the object.
13924            unsafe {
13925                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 24);
13926            }
13927            Ok(())
13928        }
13929    }
13930
13931    impl fidl::encoding::ValueTypeMarker for UsageGainListenerOnGainMuteChangedRequest {
13932        type Borrowed<'a> = &'a Self;
13933        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13934            value
13935        }
13936    }
13937
13938    unsafe impl fidl::encoding::TypeMarker for UsageGainListenerOnGainMuteChangedRequest {
13939        type Owned = Self;
13940
13941        #[inline(always)]
13942        fn inline_align(_context: fidl::encoding::Context) -> usize {
13943            4
13944        }
13945
13946        #[inline(always)]
13947        fn inline_size(_context: fidl::encoding::Context) -> usize {
13948            8
13949        }
13950    }
13951
13952    unsafe impl<D: fidl::encoding::ResourceDialect>
13953        fidl::encoding::Encode<UsageGainListenerOnGainMuteChangedRequest, D>
13954        for &UsageGainListenerOnGainMuteChangedRequest
13955    {
13956        #[inline]
13957        unsafe fn encode(
13958            self,
13959            encoder: &mut fidl::encoding::Encoder<'_, D>,
13960            offset: usize,
13961            _depth: fidl::encoding::Depth,
13962        ) -> fidl::Result<()> {
13963            encoder.debug_check_bounds::<UsageGainListenerOnGainMuteChangedRequest>(offset);
13964            // Delegate to tuple encoding.
13965            fidl::encoding::Encode::<UsageGainListenerOnGainMuteChangedRequest, D>::encode(
13966                (
13967                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.muted),
13968                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_dbfs),
13969                ),
13970                encoder,
13971                offset,
13972                _depth,
13973            )
13974        }
13975    }
13976    unsafe impl<
13977            D: fidl::encoding::ResourceDialect,
13978            T0: fidl::encoding::Encode<bool, D>,
13979            T1: fidl::encoding::Encode<f32, D>,
13980        > fidl::encoding::Encode<UsageGainListenerOnGainMuteChangedRequest, D> for (T0, T1)
13981    {
13982        #[inline]
13983        unsafe fn encode(
13984            self,
13985            encoder: &mut fidl::encoding::Encoder<'_, D>,
13986            offset: usize,
13987            depth: fidl::encoding::Depth,
13988        ) -> fidl::Result<()> {
13989            encoder.debug_check_bounds::<UsageGainListenerOnGainMuteChangedRequest>(offset);
13990            // Zero out padding regions. There's no need to apply masks
13991            // because the unmasked parts will be overwritten by fields.
13992            unsafe {
13993                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
13994                (ptr as *mut u32).write_unaligned(0);
13995            }
13996            // Write the fields.
13997            self.0.encode(encoder, offset + 0, depth)?;
13998            self.1.encode(encoder, offset + 4, depth)?;
13999            Ok(())
14000        }
14001    }
14002
14003    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14004        for UsageGainListenerOnGainMuteChangedRequest
14005    {
14006        #[inline(always)]
14007        fn new_empty() -> Self {
14008            Self { muted: fidl::new_empty!(bool, D), gain_dbfs: fidl::new_empty!(f32, D) }
14009        }
14010
14011        #[inline]
14012        unsafe fn decode(
14013            &mut self,
14014            decoder: &mut fidl::encoding::Decoder<'_, D>,
14015            offset: usize,
14016            _depth: fidl::encoding::Depth,
14017        ) -> fidl::Result<()> {
14018            decoder.debug_check_bounds::<Self>(offset);
14019            // Verify that padding bytes are zero.
14020            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
14021            let padval = unsafe { (ptr as *const u32).read_unaligned() };
14022            let mask = 0xffffff00u32;
14023            let maskedval = padval & mask;
14024            if maskedval != 0 {
14025                return Err(fidl::Error::NonZeroPadding {
14026                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
14027                });
14028            }
14029            fidl::decode!(bool, D, &mut self.muted, decoder, offset + 0, _depth)?;
14030            fidl::decode!(f32, D, &mut self.gain_dbfs, decoder, offset + 4, _depth)?;
14031            Ok(())
14032        }
14033    }
14034
14035    impl fidl::encoding::ValueTypeMarker for UsageWatcher2OnStateChangedRequest {
14036        type Borrowed<'a> = &'a Self;
14037        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14038            value
14039        }
14040    }
14041
14042    unsafe impl fidl::encoding::TypeMarker for UsageWatcher2OnStateChangedRequest {
14043        type Owned = Self;
14044
14045        #[inline(always)]
14046        fn inline_align(_context: fidl::encoding::Context) -> usize {
14047            8
14048        }
14049
14050        #[inline(always)]
14051        fn inline_size(_context: fidl::encoding::Context) -> usize {
14052            32
14053        }
14054    }
14055
14056    unsafe impl<D: fidl::encoding::ResourceDialect>
14057        fidl::encoding::Encode<UsageWatcher2OnStateChangedRequest, D>
14058        for &UsageWatcher2OnStateChangedRequest
14059    {
14060        #[inline]
14061        unsafe fn encode(
14062            self,
14063            encoder: &mut fidl::encoding::Encoder<'_, D>,
14064            offset: usize,
14065            _depth: fidl::encoding::Depth,
14066        ) -> fidl::Result<()> {
14067            encoder.debug_check_bounds::<UsageWatcher2OnStateChangedRequest>(offset);
14068            // Delegate to tuple encoding.
14069            fidl::encoding::Encode::<UsageWatcher2OnStateChangedRequest, D>::encode(
14070                (
14071                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
14072                    <UsageState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),
14073                ),
14074                encoder,
14075                offset,
14076                _depth,
14077            )
14078        }
14079    }
14080    unsafe impl<
14081            D: fidl::encoding::ResourceDialect,
14082            T0: fidl::encoding::Encode<Usage2, D>,
14083            T1: fidl::encoding::Encode<UsageState, D>,
14084        > fidl::encoding::Encode<UsageWatcher2OnStateChangedRequest, D> for (T0, T1)
14085    {
14086        #[inline]
14087        unsafe fn encode(
14088            self,
14089            encoder: &mut fidl::encoding::Encoder<'_, D>,
14090            offset: usize,
14091            depth: fidl::encoding::Depth,
14092        ) -> fidl::Result<()> {
14093            encoder.debug_check_bounds::<UsageWatcher2OnStateChangedRequest>(offset);
14094            // Zero out padding regions. There's no need to apply masks
14095            // because the unmasked parts will be overwritten by fields.
14096            // Write the fields.
14097            self.0.encode(encoder, offset + 0, depth)?;
14098            self.1.encode(encoder, offset + 16, depth)?;
14099            Ok(())
14100        }
14101    }
14102
14103    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14104        for UsageWatcher2OnStateChangedRequest
14105    {
14106        #[inline(always)]
14107        fn new_empty() -> Self {
14108            Self { usage: fidl::new_empty!(Usage2, D), state: fidl::new_empty!(UsageState, D) }
14109        }
14110
14111        #[inline]
14112        unsafe fn decode(
14113            &mut self,
14114            decoder: &mut fidl::encoding::Decoder<'_, D>,
14115            offset: usize,
14116            _depth: fidl::encoding::Depth,
14117        ) -> fidl::Result<()> {
14118            decoder.debug_check_bounds::<Self>(offset);
14119            // Verify that padding bytes are zero.
14120            fidl::decode!(Usage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
14121            fidl::decode!(UsageState, D, &mut self.state, decoder, offset + 16, _depth)?;
14122            Ok(())
14123        }
14124    }
14125
14126    impl fidl::encoding::ValueTypeMarker for UsageWatcherOnStateChangedRequest {
14127        type Borrowed<'a> = &'a Self;
14128        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14129            value
14130        }
14131    }
14132
14133    unsafe impl fidl::encoding::TypeMarker for UsageWatcherOnStateChangedRequest {
14134        type Owned = Self;
14135
14136        #[inline(always)]
14137        fn inline_align(_context: fidl::encoding::Context) -> usize {
14138            8
14139        }
14140
14141        #[inline(always)]
14142        fn inline_size(_context: fidl::encoding::Context) -> usize {
14143            32
14144        }
14145    }
14146
14147    unsafe impl<D: fidl::encoding::ResourceDialect>
14148        fidl::encoding::Encode<UsageWatcherOnStateChangedRequest, D>
14149        for &UsageWatcherOnStateChangedRequest
14150    {
14151        #[inline]
14152        unsafe fn encode(
14153            self,
14154            encoder: &mut fidl::encoding::Encoder<'_, D>,
14155            offset: usize,
14156            _depth: fidl::encoding::Depth,
14157        ) -> fidl::Result<()> {
14158            encoder.debug_check_bounds::<UsageWatcherOnStateChangedRequest>(offset);
14159            // Delegate to tuple encoding.
14160            fidl::encoding::Encode::<UsageWatcherOnStateChangedRequest, D>::encode(
14161                (
14162                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
14163                    <UsageState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),
14164                ),
14165                encoder,
14166                offset,
14167                _depth,
14168            )
14169        }
14170    }
14171    unsafe impl<
14172            D: fidl::encoding::ResourceDialect,
14173            T0: fidl::encoding::Encode<Usage, D>,
14174            T1: fidl::encoding::Encode<UsageState, D>,
14175        > fidl::encoding::Encode<UsageWatcherOnStateChangedRequest, D> for (T0, T1)
14176    {
14177        #[inline]
14178        unsafe fn encode(
14179            self,
14180            encoder: &mut fidl::encoding::Encoder<'_, D>,
14181            offset: usize,
14182            depth: fidl::encoding::Depth,
14183        ) -> fidl::Result<()> {
14184            encoder.debug_check_bounds::<UsageWatcherOnStateChangedRequest>(offset);
14185            // Zero out padding regions. There's no need to apply masks
14186            // because the unmasked parts will be overwritten by fields.
14187            // Write the fields.
14188            self.0.encode(encoder, offset + 0, depth)?;
14189            self.1.encode(encoder, offset + 16, depth)?;
14190            Ok(())
14191        }
14192    }
14193
14194    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14195        for UsageWatcherOnStateChangedRequest
14196    {
14197        #[inline(always)]
14198        fn new_empty() -> Self {
14199            Self { usage: fidl::new_empty!(Usage, D), state: fidl::new_empty!(UsageState, D) }
14200        }
14201
14202        #[inline]
14203        unsafe fn decode(
14204            &mut self,
14205            decoder: &mut fidl::encoding::Decoder<'_, D>,
14206            offset: usize,
14207            _depth: fidl::encoding::Depth,
14208        ) -> fidl::Result<()> {
14209            decoder.debug_check_bounds::<Self>(offset);
14210            // Verify that padding bytes are zero.
14211            fidl::decode!(Usage, D, &mut self.usage, decoder, offset + 0, _depth)?;
14212            fidl::decode!(UsageState, D, &mut self.state, decoder, offset + 16, _depth)?;
14213            Ok(())
14214        }
14215    }
14216
14217    impl fidl::encoding::ValueTypeMarker for VideoStreamType {
14218        type Borrowed<'a> = &'a Self;
14219        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14220            value
14221        }
14222    }
14223
14224    unsafe impl fidl::encoding::TypeMarker for VideoStreamType {
14225        type Owned = Self;
14226
14227        #[inline(always)]
14228        fn inline_align(_context: fidl::encoding::Context) -> usize {
14229            4
14230        }
14231
14232        #[inline(always)]
14233        fn inline_size(_context: fidl::encoding::Context) -> usize {
14234            36
14235        }
14236    }
14237
14238    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VideoStreamType, D>
14239        for &VideoStreamType
14240    {
14241        #[inline]
14242        unsafe fn encode(
14243            self,
14244            encoder: &mut fidl::encoding::Encoder<'_, D>,
14245            offset: usize,
14246            _depth: fidl::encoding::Depth,
14247        ) -> fidl::Result<()> {
14248            encoder.debug_check_bounds::<VideoStreamType>(offset);
14249            // Delegate to tuple encoding.
14250            fidl::encoding::Encode::<VideoStreamType, D>::encode(
14251                (
14252                    <fidl_fuchsia_images::PixelFormat as fidl::encoding::ValueTypeMarker>::borrow(
14253                        &self.pixel_format,
14254                    ),
14255                    <ColorSpace as fidl::encoding::ValueTypeMarker>::borrow(&self.color_space),
14256                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.width),
14257                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.height),
14258                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.coded_width),
14259                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.coded_height),
14260                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(
14261                        &self.pixel_aspect_ratio_width,
14262                    ),
14263                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(
14264                        &self.pixel_aspect_ratio_height,
14265                    ),
14266                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.stride),
14267                ),
14268                encoder,
14269                offset,
14270                _depth,
14271            )
14272        }
14273    }
14274    unsafe impl<
14275            D: fidl::encoding::ResourceDialect,
14276            T0: fidl::encoding::Encode<fidl_fuchsia_images::PixelFormat, D>,
14277            T1: fidl::encoding::Encode<ColorSpace, D>,
14278            T2: fidl::encoding::Encode<u32, D>,
14279            T3: fidl::encoding::Encode<u32, D>,
14280            T4: fidl::encoding::Encode<u32, D>,
14281            T5: fidl::encoding::Encode<u32, D>,
14282            T6: fidl::encoding::Encode<u32, D>,
14283            T7: fidl::encoding::Encode<u32, D>,
14284            T8: fidl::encoding::Encode<u32, D>,
14285        > fidl::encoding::Encode<VideoStreamType, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
14286    {
14287        #[inline]
14288        unsafe fn encode(
14289            self,
14290            encoder: &mut fidl::encoding::Encoder<'_, D>,
14291            offset: usize,
14292            depth: fidl::encoding::Depth,
14293        ) -> fidl::Result<()> {
14294            encoder.debug_check_bounds::<VideoStreamType>(offset);
14295            // Zero out padding regions. There's no need to apply masks
14296            // because the unmasked parts will be overwritten by fields.
14297            // Write the fields.
14298            self.0.encode(encoder, offset + 0, depth)?;
14299            self.1.encode(encoder, offset + 4, depth)?;
14300            self.2.encode(encoder, offset + 8, depth)?;
14301            self.3.encode(encoder, offset + 12, depth)?;
14302            self.4.encode(encoder, offset + 16, depth)?;
14303            self.5.encode(encoder, offset + 20, depth)?;
14304            self.6.encode(encoder, offset + 24, depth)?;
14305            self.7.encode(encoder, offset + 28, depth)?;
14306            self.8.encode(encoder, offset + 32, depth)?;
14307            Ok(())
14308        }
14309    }
14310
14311    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoStreamType {
14312        #[inline(always)]
14313        fn new_empty() -> Self {
14314            Self {
14315                pixel_format: fidl::new_empty!(fidl_fuchsia_images::PixelFormat, D),
14316                color_space: fidl::new_empty!(ColorSpace, D),
14317                width: fidl::new_empty!(u32, D),
14318                height: fidl::new_empty!(u32, D),
14319                coded_width: fidl::new_empty!(u32, D),
14320                coded_height: fidl::new_empty!(u32, D),
14321                pixel_aspect_ratio_width: fidl::new_empty!(u32, D),
14322                pixel_aspect_ratio_height: fidl::new_empty!(u32, D),
14323                stride: fidl::new_empty!(u32, D),
14324            }
14325        }
14326
14327        #[inline]
14328        unsafe fn decode(
14329            &mut self,
14330            decoder: &mut fidl::encoding::Decoder<'_, D>,
14331            offset: usize,
14332            _depth: fidl::encoding::Depth,
14333        ) -> fidl::Result<()> {
14334            decoder.debug_check_bounds::<Self>(offset);
14335            // Verify that padding bytes are zero.
14336            fidl::decode!(
14337                fidl_fuchsia_images::PixelFormat,
14338                D,
14339                &mut self.pixel_format,
14340                decoder,
14341                offset + 0,
14342                _depth
14343            )?;
14344            fidl::decode!(ColorSpace, D, &mut self.color_space, decoder, offset + 4, _depth)?;
14345            fidl::decode!(u32, D, &mut self.width, decoder, offset + 8, _depth)?;
14346            fidl::decode!(u32, D, &mut self.height, decoder, offset + 12, _depth)?;
14347            fidl::decode!(u32, D, &mut self.coded_width, decoder, offset + 16, _depth)?;
14348            fidl::decode!(u32, D, &mut self.coded_height, decoder, offset + 20, _depth)?;
14349            fidl::decode!(
14350                u32,
14351                D,
14352                &mut self.pixel_aspect_ratio_width,
14353                decoder,
14354                offset + 24,
14355                _depth
14356            )?;
14357            fidl::decode!(
14358                u32,
14359                D,
14360                &mut self.pixel_aspect_ratio_height,
14361                decoder,
14362                offset + 28,
14363                _depth
14364            )?;
14365            fidl::decode!(u32, D, &mut self.stride, decoder, offset + 32, _depth)?;
14366            Ok(())
14367        }
14368    }
14369
14370    impl fidl::encoding::ValueTypeMarker for VideoUncompressedFormat {
14371        type Borrowed<'a> = &'a Self;
14372        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14373            value
14374        }
14375    }
14376
14377    unsafe impl fidl::encoding::TypeMarker for VideoUncompressedFormat {
14378        type Owned = Self;
14379
14380        #[inline(always)]
14381        fn inline_align(_context: fidl::encoding::Context) -> usize {
14382            8
14383        }
14384
14385        #[inline(always)]
14386        fn inline_size(_context: fidl::encoding::Context) -> usize {
14387            128
14388        }
14389    }
14390
14391    unsafe impl<D: fidl::encoding::ResourceDialect>
14392        fidl::encoding::Encode<VideoUncompressedFormat, D> for &VideoUncompressedFormat
14393    {
14394        #[inline]
14395        unsafe fn encode(
14396            self,
14397            encoder: &mut fidl::encoding::Encoder<'_, D>,
14398            offset: usize,
14399            _depth: fidl::encoding::Depth,
14400        ) -> fidl::Result<()> {
14401            encoder.debug_check_bounds::<VideoUncompressedFormat>(offset);
14402            // Delegate to tuple encoding.
14403            fidl::encoding::Encode::<VideoUncompressedFormat, D>::encode(
14404                (
14405                    <fidl_fuchsia_sysmem::ImageFormat2 as fidl::encoding::ValueTypeMarker>::borrow(
14406                        &self.image_format,
14407                    ),
14408                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.fourcc),
14409                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_width_pixels),
14410                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_height_pixels),
14411                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_width_pixels),
14412                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_height_pixels),
14413                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.planar),
14414                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.swizzled),
14415                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(
14416                        &self.primary_line_stride_bytes,
14417                    ),
14418                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(
14419                        &self.secondary_line_stride_bytes,
14420                    ),
14421                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_start_offset),
14422                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_start_offset),
14423                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.tertiary_start_offset),
14424                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_pixel_stride),
14425                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_pixel_stride),
14426                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(
14427                        &self.primary_display_width_pixels,
14428                    ),
14429                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(
14430                        &self.primary_display_height_pixels,
14431                    ),
14432                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.has_pixel_aspect_ratio),
14433                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(
14434                        &self.pixel_aspect_ratio_width,
14435                    ),
14436                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(
14437                        &self.pixel_aspect_ratio_height,
14438                    ),
14439                ),
14440                encoder,
14441                offset,
14442                _depth,
14443            )
14444        }
14445    }
14446    unsafe impl<
14447            D: fidl::encoding::ResourceDialect,
14448            T0: fidl::encoding::Encode<fidl_fuchsia_sysmem::ImageFormat2, D>,
14449            T1: fidl::encoding::Encode<u32, D>,
14450            T2: fidl::encoding::Encode<u32, D>,
14451            T3: fidl::encoding::Encode<u32, D>,
14452            T4: fidl::encoding::Encode<u32, D>,
14453            T5: fidl::encoding::Encode<u32, D>,
14454            T6: fidl::encoding::Encode<bool, D>,
14455            T7: fidl::encoding::Encode<bool, D>,
14456            T8: fidl::encoding::Encode<u32, D>,
14457            T9: fidl::encoding::Encode<u32, D>,
14458            T10: fidl::encoding::Encode<u32, D>,
14459            T11: fidl::encoding::Encode<u32, D>,
14460            T12: fidl::encoding::Encode<u32, D>,
14461            T13: fidl::encoding::Encode<u32, D>,
14462            T14: fidl::encoding::Encode<u32, D>,
14463            T15: fidl::encoding::Encode<u32, D>,
14464            T16: fidl::encoding::Encode<u32, D>,
14465            T17: fidl::encoding::Encode<bool, D>,
14466            T18: fidl::encoding::Encode<u32, D>,
14467            T19: fidl::encoding::Encode<u32, D>,
14468        > fidl::encoding::Encode<VideoUncompressedFormat, D>
14469        for (
14470            T0,
14471            T1,
14472            T2,
14473            T3,
14474            T4,
14475            T5,
14476            T6,
14477            T7,
14478            T8,
14479            T9,
14480            T10,
14481            T11,
14482            T12,
14483            T13,
14484            T14,
14485            T15,
14486            T16,
14487            T17,
14488            T18,
14489            T19,
14490        )
14491    {
14492        #[inline]
14493        unsafe fn encode(
14494            self,
14495            encoder: &mut fidl::encoding::Encoder<'_, D>,
14496            offset: usize,
14497            depth: fidl::encoding::Depth,
14498        ) -> fidl::Result<()> {
14499            encoder.debug_check_bounds::<VideoUncompressedFormat>(offset);
14500            // Zero out padding regions. There's no need to apply masks
14501            // because the unmasked parts will be overwritten by fields.
14502            unsafe {
14503                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(72);
14504                (ptr as *mut u64).write_unaligned(0);
14505            }
14506            unsafe {
14507                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(112);
14508                (ptr as *mut u64).write_unaligned(0);
14509            }
14510            // Write the fields.
14511            self.0.encode(encoder, offset + 0, depth)?;
14512            self.1.encode(encoder, offset + 56, depth)?;
14513            self.2.encode(encoder, offset + 60, depth)?;
14514            self.3.encode(encoder, offset + 64, depth)?;
14515            self.4.encode(encoder, offset + 68, depth)?;
14516            self.5.encode(encoder, offset + 72, depth)?;
14517            self.6.encode(encoder, offset + 76, depth)?;
14518            self.7.encode(encoder, offset + 77, depth)?;
14519            self.8.encode(encoder, offset + 80, depth)?;
14520            self.9.encode(encoder, offset + 84, depth)?;
14521            self.10.encode(encoder, offset + 88, depth)?;
14522            self.11.encode(encoder, offset + 92, depth)?;
14523            self.12.encode(encoder, offset + 96, depth)?;
14524            self.13.encode(encoder, offset + 100, depth)?;
14525            self.14.encode(encoder, offset + 104, depth)?;
14526            self.15.encode(encoder, offset + 108, depth)?;
14527            self.16.encode(encoder, offset + 112, depth)?;
14528            self.17.encode(encoder, offset + 116, depth)?;
14529            self.18.encode(encoder, offset + 120, depth)?;
14530            self.19.encode(encoder, offset + 124, depth)?;
14531            Ok(())
14532        }
14533    }
14534
14535    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14536        for VideoUncompressedFormat
14537    {
14538        #[inline(always)]
14539        fn new_empty() -> Self {
14540            Self {
14541                image_format: fidl::new_empty!(fidl_fuchsia_sysmem::ImageFormat2, D),
14542                fourcc: fidl::new_empty!(u32, D),
14543                primary_width_pixels: fidl::new_empty!(u32, D),
14544                primary_height_pixels: fidl::new_empty!(u32, D),
14545                secondary_width_pixels: fidl::new_empty!(u32, D),
14546                secondary_height_pixels: fidl::new_empty!(u32, D),
14547                planar: fidl::new_empty!(bool, D),
14548                swizzled: fidl::new_empty!(bool, D),
14549                primary_line_stride_bytes: fidl::new_empty!(u32, D),
14550                secondary_line_stride_bytes: fidl::new_empty!(u32, D),
14551                primary_start_offset: fidl::new_empty!(u32, D),
14552                secondary_start_offset: fidl::new_empty!(u32, D),
14553                tertiary_start_offset: fidl::new_empty!(u32, D),
14554                primary_pixel_stride: fidl::new_empty!(u32, D),
14555                secondary_pixel_stride: fidl::new_empty!(u32, D),
14556                primary_display_width_pixels: fidl::new_empty!(u32, D),
14557                primary_display_height_pixels: fidl::new_empty!(u32, D),
14558                has_pixel_aspect_ratio: fidl::new_empty!(bool, D),
14559                pixel_aspect_ratio_width: fidl::new_empty!(u32, D),
14560                pixel_aspect_ratio_height: fidl::new_empty!(u32, D),
14561            }
14562        }
14563
14564        #[inline]
14565        unsafe fn decode(
14566            &mut self,
14567            decoder: &mut fidl::encoding::Decoder<'_, D>,
14568            offset: usize,
14569            _depth: fidl::encoding::Depth,
14570        ) -> fidl::Result<()> {
14571            decoder.debug_check_bounds::<Self>(offset);
14572            // Verify that padding bytes are zero.
14573            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(72) };
14574            let padval = unsafe { (ptr as *const u64).read_unaligned() };
14575            let mask = 0xffff000000000000u64;
14576            let maskedval = padval & mask;
14577            if maskedval != 0 {
14578                return Err(fidl::Error::NonZeroPadding {
14579                    padding_start: offset + 72 + ((mask as u64).trailing_zeros() / 8) as usize,
14580                });
14581            }
14582            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(112) };
14583            let padval = unsafe { (ptr as *const u64).read_unaligned() };
14584            let mask = 0xffffff0000000000u64;
14585            let maskedval = padval & mask;
14586            if maskedval != 0 {
14587                return Err(fidl::Error::NonZeroPadding {
14588                    padding_start: offset + 112 + ((mask as u64).trailing_zeros() / 8) as usize,
14589                });
14590            }
14591            fidl::decode!(
14592                fidl_fuchsia_sysmem::ImageFormat2,
14593                D,
14594                &mut self.image_format,
14595                decoder,
14596                offset + 0,
14597                _depth
14598            )?;
14599            fidl::decode!(u32, D, &mut self.fourcc, decoder, offset + 56, _depth)?;
14600            fidl::decode!(u32, D, &mut self.primary_width_pixels, decoder, offset + 60, _depth)?;
14601            fidl::decode!(u32, D, &mut self.primary_height_pixels, decoder, offset + 64, _depth)?;
14602            fidl::decode!(u32, D, &mut self.secondary_width_pixels, decoder, offset + 68, _depth)?;
14603            fidl::decode!(u32, D, &mut self.secondary_height_pixels, decoder, offset + 72, _depth)?;
14604            fidl::decode!(bool, D, &mut self.planar, decoder, offset + 76, _depth)?;
14605            fidl::decode!(bool, D, &mut self.swizzled, decoder, offset + 77, _depth)?;
14606            fidl::decode!(
14607                u32,
14608                D,
14609                &mut self.primary_line_stride_bytes,
14610                decoder,
14611                offset + 80,
14612                _depth
14613            )?;
14614            fidl::decode!(
14615                u32,
14616                D,
14617                &mut self.secondary_line_stride_bytes,
14618                decoder,
14619                offset + 84,
14620                _depth
14621            )?;
14622            fidl::decode!(u32, D, &mut self.primary_start_offset, decoder, offset + 88, _depth)?;
14623            fidl::decode!(u32, D, &mut self.secondary_start_offset, decoder, offset + 92, _depth)?;
14624            fidl::decode!(u32, D, &mut self.tertiary_start_offset, decoder, offset + 96, _depth)?;
14625            fidl::decode!(u32, D, &mut self.primary_pixel_stride, decoder, offset + 100, _depth)?;
14626            fidl::decode!(u32, D, &mut self.secondary_pixel_stride, decoder, offset + 104, _depth)?;
14627            fidl::decode!(
14628                u32,
14629                D,
14630                &mut self.primary_display_width_pixels,
14631                decoder,
14632                offset + 108,
14633                _depth
14634            )?;
14635            fidl::decode!(
14636                u32,
14637                D,
14638                &mut self.primary_display_height_pixels,
14639                decoder,
14640                offset + 112,
14641                _depth
14642            )?;
14643            fidl::decode!(
14644                bool,
14645                D,
14646                &mut self.has_pixel_aspect_ratio,
14647                decoder,
14648                offset + 116,
14649                _depth
14650            )?;
14651            fidl::decode!(
14652                u32,
14653                D,
14654                &mut self.pixel_aspect_ratio_width,
14655                decoder,
14656                offset + 120,
14657                _depth
14658            )?;
14659            fidl::decode!(
14660                u32,
14661                D,
14662                &mut self.pixel_aspect_ratio_height,
14663                decoder,
14664                offset + 124,
14665                _depth
14666            )?;
14667            Ok(())
14668        }
14669    }
14670
14671    impl fidl::encoding::ValueTypeMarker for Void {
14672        type Borrowed<'a> = &'a Self;
14673        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14674            value
14675        }
14676    }
14677
14678    unsafe impl fidl::encoding::TypeMarker for Void {
14679        type Owned = Self;
14680
14681        #[inline(always)]
14682        fn inline_align(_context: fidl::encoding::Context) -> usize {
14683            1
14684        }
14685
14686        #[inline(always)]
14687        fn inline_size(_context: fidl::encoding::Context) -> usize {
14688            1
14689        }
14690    }
14691
14692    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Void, D> for &Void {
14693        #[inline]
14694        unsafe fn encode(
14695            self,
14696            encoder: &mut fidl::encoding::Encoder<'_, D>,
14697            offset: usize,
14698            _depth: fidl::encoding::Depth,
14699        ) -> fidl::Result<()> {
14700            encoder.debug_check_bounds::<Void>(offset);
14701            encoder.write_num(0u8, offset);
14702            Ok(())
14703        }
14704    }
14705
14706    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Void {
14707        #[inline(always)]
14708        fn new_empty() -> Self {
14709            Self
14710        }
14711
14712        #[inline]
14713        unsafe fn decode(
14714            &mut self,
14715            decoder: &mut fidl::encoding::Decoder<'_, D>,
14716            offset: usize,
14717            _depth: fidl::encoding::Depth,
14718        ) -> fidl::Result<()> {
14719            decoder.debug_check_bounds::<Self>(offset);
14720            match decoder.read_num::<u8>(offset) {
14721                0 => Ok(()),
14722                _ => Err(fidl::Error::Invalid),
14723            }
14724        }
14725    }
14726
14727    impl AudioCompressedFormatCvsd {
14728        #[inline(always)]
14729        fn max_ordinal_present(&self) -> u64 {
14730            0
14731        }
14732    }
14733
14734    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatCvsd {
14735        type Borrowed<'a> = &'a Self;
14736        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14737            value
14738        }
14739    }
14740
14741    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatCvsd {
14742        type Owned = Self;
14743
14744        #[inline(always)]
14745        fn inline_align(_context: fidl::encoding::Context) -> usize {
14746            8
14747        }
14748
14749        #[inline(always)]
14750        fn inline_size(_context: fidl::encoding::Context) -> usize {
14751            16
14752        }
14753    }
14754
14755    unsafe impl<D: fidl::encoding::ResourceDialect>
14756        fidl::encoding::Encode<AudioCompressedFormatCvsd, D> for &AudioCompressedFormatCvsd
14757    {
14758        unsafe fn encode(
14759            self,
14760            encoder: &mut fidl::encoding::Encoder<'_, D>,
14761            offset: usize,
14762            mut depth: fidl::encoding::Depth,
14763        ) -> fidl::Result<()> {
14764            encoder.debug_check_bounds::<AudioCompressedFormatCvsd>(offset);
14765            // Vector header
14766            let max_ordinal: u64 = self.max_ordinal_present();
14767            encoder.write_num(max_ordinal, offset);
14768            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14769            // Calling encoder.out_of_line_offset(0) is not allowed.
14770            if max_ordinal == 0 {
14771                return Ok(());
14772            }
14773            depth.increment()?;
14774            let envelope_size = 8;
14775            let bytes_len = max_ordinal as usize * envelope_size;
14776            #[allow(unused_variables)]
14777            let offset = encoder.out_of_line_offset(bytes_len);
14778            let mut _prev_end_offset: usize = 0;
14779
14780            Ok(())
14781        }
14782    }
14783
14784    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14785        for AudioCompressedFormatCvsd
14786    {
14787        #[inline(always)]
14788        fn new_empty() -> Self {
14789            Self::default()
14790        }
14791
14792        unsafe fn decode(
14793            &mut self,
14794            decoder: &mut fidl::encoding::Decoder<'_, D>,
14795            offset: usize,
14796            mut depth: fidl::encoding::Depth,
14797        ) -> fidl::Result<()> {
14798            decoder.debug_check_bounds::<Self>(offset);
14799            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14800                None => return Err(fidl::Error::NotNullable),
14801                Some(len) => len,
14802            };
14803            // Calling decoder.out_of_line_offset(0) is not allowed.
14804            if len == 0 {
14805                return Ok(());
14806            };
14807            depth.increment()?;
14808            let envelope_size = 8;
14809            let bytes_len = len * envelope_size;
14810            let offset = decoder.out_of_line_offset(bytes_len)?;
14811            // Decode the envelope for each type.
14812            let mut _next_ordinal_to_read = 0;
14813            let mut next_offset = offset;
14814            let end_offset = offset + bytes_len;
14815
14816            // Decode the remaining unknown envelopes.
14817            while next_offset < end_offset {
14818                _next_ordinal_to_read += 1;
14819                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14820                next_offset += envelope_size;
14821            }
14822
14823            Ok(())
14824        }
14825    }
14826
14827    impl AudioCompressedFormatLc3 {
14828        #[inline(always)]
14829        fn max_ordinal_present(&self) -> u64 {
14830            0
14831        }
14832    }
14833
14834    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatLc3 {
14835        type Borrowed<'a> = &'a Self;
14836        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14837            value
14838        }
14839    }
14840
14841    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatLc3 {
14842        type Owned = Self;
14843
14844        #[inline(always)]
14845        fn inline_align(_context: fidl::encoding::Context) -> usize {
14846            8
14847        }
14848
14849        #[inline(always)]
14850        fn inline_size(_context: fidl::encoding::Context) -> usize {
14851            16
14852        }
14853    }
14854
14855    unsafe impl<D: fidl::encoding::ResourceDialect>
14856        fidl::encoding::Encode<AudioCompressedFormatLc3, D> for &AudioCompressedFormatLc3
14857    {
14858        unsafe fn encode(
14859            self,
14860            encoder: &mut fidl::encoding::Encoder<'_, D>,
14861            offset: usize,
14862            mut depth: fidl::encoding::Depth,
14863        ) -> fidl::Result<()> {
14864            encoder.debug_check_bounds::<AudioCompressedFormatLc3>(offset);
14865            // Vector header
14866            let max_ordinal: u64 = self.max_ordinal_present();
14867            encoder.write_num(max_ordinal, offset);
14868            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14869            // Calling encoder.out_of_line_offset(0) is not allowed.
14870            if max_ordinal == 0 {
14871                return Ok(());
14872            }
14873            depth.increment()?;
14874            let envelope_size = 8;
14875            let bytes_len = max_ordinal as usize * envelope_size;
14876            #[allow(unused_variables)]
14877            let offset = encoder.out_of_line_offset(bytes_len);
14878            let mut _prev_end_offset: usize = 0;
14879
14880            Ok(())
14881        }
14882    }
14883
14884    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14885        for AudioCompressedFormatLc3
14886    {
14887        #[inline(always)]
14888        fn new_empty() -> Self {
14889            Self::default()
14890        }
14891
14892        unsafe fn decode(
14893            &mut self,
14894            decoder: &mut fidl::encoding::Decoder<'_, D>,
14895            offset: usize,
14896            mut depth: fidl::encoding::Depth,
14897        ) -> fidl::Result<()> {
14898            decoder.debug_check_bounds::<Self>(offset);
14899            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14900                None => return Err(fidl::Error::NotNullable),
14901                Some(len) => len,
14902            };
14903            // Calling decoder.out_of_line_offset(0) is not allowed.
14904            if len == 0 {
14905                return Ok(());
14906            };
14907            depth.increment()?;
14908            let envelope_size = 8;
14909            let bytes_len = len * envelope_size;
14910            let offset = decoder.out_of_line_offset(bytes_len)?;
14911            // Decode the envelope for each type.
14912            let mut _next_ordinal_to_read = 0;
14913            let mut next_offset = offset;
14914            let end_offset = offset + bytes_len;
14915
14916            // Decode the remaining unknown envelopes.
14917            while next_offset < end_offset {
14918                _next_ordinal_to_read += 1;
14919                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14920                next_offset += envelope_size;
14921            }
14922
14923            Ok(())
14924        }
14925    }
14926
14927    impl AudioConsumerStatus {
14928        #[inline(always)]
14929        fn max_ordinal_present(&self) -> u64 {
14930            if let Some(_) = self.max_lead_time {
14931                return 4;
14932            }
14933            if let Some(_) = self.min_lead_time {
14934                return 3;
14935            }
14936            if let Some(_) = self.presentation_timeline {
14937                return 2;
14938            }
14939            if let Some(_) = self.error {
14940                return 1;
14941            }
14942            0
14943        }
14944    }
14945
14946    impl fidl::encoding::ValueTypeMarker for AudioConsumerStatus {
14947        type Borrowed<'a> = &'a Self;
14948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14949            value
14950        }
14951    }
14952
14953    unsafe impl fidl::encoding::TypeMarker for AudioConsumerStatus {
14954        type Owned = Self;
14955
14956        #[inline(always)]
14957        fn inline_align(_context: fidl::encoding::Context) -> usize {
14958            8
14959        }
14960
14961        #[inline(always)]
14962        fn inline_size(_context: fidl::encoding::Context) -> usize {
14963            16
14964        }
14965    }
14966
14967    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioConsumerStatus, D>
14968        for &AudioConsumerStatus
14969    {
14970        unsafe fn encode(
14971            self,
14972            encoder: &mut fidl::encoding::Encoder<'_, D>,
14973            offset: usize,
14974            mut depth: fidl::encoding::Depth,
14975        ) -> fidl::Result<()> {
14976            encoder.debug_check_bounds::<AudioConsumerStatus>(offset);
14977            // Vector header
14978            let max_ordinal: u64 = self.max_ordinal_present();
14979            encoder.write_num(max_ordinal, offset);
14980            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14981            // Calling encoder.out_of_line_offset(0) is not allowed.
14982            if max_ordinal == 0 {
14983                return Ok(());
14984            }
14985            depth.increment()?;
14986            let envelope_size = 8;
14987            let bytes_len = max_ordinal as usize * envelope_size;
14988            #[allow(unused_variables)]
14989            let offset = encoder.out_of_line_offset(bytes_len);
14990            let mut _prev_end_offset: usize = 0;
14991            if 1 > max_ordinal {
14992                return Ok(());
14993            }
14994
14995            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14996            // are envelope_size bytes.
14997            let cur_offset: usize = (1 - 1) * envelope_size;
14998
14999            // Zero reserved fields.
15000            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15001
15002            // Safety:
15003            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15004            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15005            //   envelope_size bytes, there is always sufficient room.
15006            fidl::encoding::encode_in_envelope_optional::<AudioConsumerError, D>(
15007                self.error
15008                    .as_ref()
15009                    .map(<AudioConsumerError as fidl::encoding::ValueTypeMarker>::borrow),
15010                encoder,
15011                offset + cur_offset,
15012                depth,
15013            )?;
15014
15015            _prev_end_offset = cur_offset + envelope_size;
15016            if 2 > max_ordinal {
15017                return Ok(());
15018            }
15019
15020            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15021            // are envelope_size bytes.
15022            let cur_offset: usize = (2 - 1) * envelope_size;
15023
15024            // Zero reserved fields.
15025            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15026
15027            // Safety:
15028            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15029            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15030            //   envelope_size bytes, there is always sufficient room.
15031            fidl::encoding::encode_in_envelope_optional::<TimelineFunction, D>(
15032                self.presentation_timeline
15033                    .as_ref()
15034                    .map(<TimelineFunction as fidl::encoding::ValueTypeMarker>::borrow),
15035                encoder,
15036                offset + cur_offset,
15037                depth,
15038            )?;
15039
15040            _prev_end_offset = cur_offset + envelope_size;
15041            if 3 > max_ordinal {
15042                return Ok(());
15043            }
15044
15045            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15046            // are envelope_size bytes.
15047            let cur_offset: usize = (3 - 1) * envelope_size;
15048
15049            // Zero reserved fields.
15050            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15051
15052            // Safety:
15053            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15054            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15055            //   envelope_size bytes, there is always sufficient room.
15056            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15057                self.min_lead_time.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15058                encoder,
15059                offset + cur_offset,
15060                depth,
15061            )?;
15062
15063            _prev_end_offset = cur_offset + envelope_size;
15064            if 4 > max_ordinal {
15065                return Ok(());
15066            }
15067
15068            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15069            // are envelope_size bytes.
15070            let cur_offset: usize = (4 - 1) * envelope_size;
15071
15072            // Zero reserved fields.
15073            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15074
15075            // Safety:
15076            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15077            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15078            //   envelope_size bytes, there is always sufficient room.
15079            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15080                self.max_lead_time.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15081                encoder,
15082                offset + cur_offset,
15083                depth,
15084            )?;
15085
15086            _prev_end_offset = cur_offset + envelope_size;
15087
15088            Ok(())
15089        }
15090    }
15091
15092    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioConsumerStatus {
15093        #[inline(always)]
15094        fn new_empty() -> Self {
15095            Self::default()
15096        }
15097
15098        unsafe fn decode(
15099            &mut self,
15100            decoder: &mut fidl::encoding::Decoder<'_, D>,
15101            offset: usize,
15102            mut depth: fidl::encoding::Depth,
15103        ) -> fidl::Result<()> {
15104            decoder.debug_check_bounds::<Self>(offset);
15105            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15106                None => return Err(fidl::Error::NotNullable),
15107                Some(len) => len,
15108            };
15109            // Calling decoder.out_of_line_offset(0) is not allowed.
15110            if len == 0 {
15111                return Ok(());
15112            };
15113            depth.increment()?;
15114            let envelope_size = 8;
15115            let bytes_len = len * envelope_size;
15116            let offset = decoder.out_of_line_offset(bytes_len)?;
15117            // Decode the envelope for each type.
15118            let mut _next_ordinal_to_read = 0;
15119            let mut next_offset = offset;
15120            let end_offset = offset + bytes_len;
15121            _next_ordinal_to_read += 1;
15122            if next_offset >= end_offset {
15123                return Ok(());
15124            }
15125
15126            // Decode unknown envelopes for gaps in ordinals.
15127            while _next_ordinal_to_read < 1 {
15128                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15129                _next_ordinal_to_read += 1;
15130                next_offset += envelope_size;
15131            }
15132
15133            let next_out_of_line = decoder.next_out_of_line();
15134            let handles_before = decoder.remaining_handles();
15135            if let Some((inlined, num_bytes, num_handles)) =
15136                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15137            {
15138                let member_inline_size =
15139                    <AudioConsumerError as fidl::encoding::TypeMarker>::inline_size(
15140                        decoder.context,
15141                    );
15142                if inlined != (member_inline_size <= 4) {
15143                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15144                }
15145                let inner_offset;
15146                let mut inner_depth = depth.clone();
15147                if inlined {
15148                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15149                    inner_offset = next_offset;
15150                } else {
15151                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15152                    inner_depth.increment()?;
15153                }
15154                let val_ref =
15155                    self.error.get_or_insert_with(|| fidl::new_empty!(AudioConsumerError, D));
15156                fidl::decode!(AudioConsumerError, D, val_ref, decoder, inner_offset, inner_depth)?;
15157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15158                {
15159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15160                }
15161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15163                }
15164            }
15165
15166            next_offset += envelope_size;
15167            _next_ordinal_to_read += 1;
15168            if next_offset >= end_offset {
15169                return Ok(());
15170            }
15171
15172            // Decode unknown envelopes for gaps in ordinals.
15173            while _next_ordinal_to_read < 2 {
15174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15175                _next_ordinal_to_read += 1;
15176                next_offset += envelope_size;
15177            }
15178
15179            let next_out_of_line = decoder.next_out_of_line();
15180            let handles_before = decoder.remaining_handles();
15181            if let Some((inlined, num_bytes, num_handles)) =
15182                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15183            {
15184                let member_inline_size =
15185                    <TimelineFunction as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15186                if inlined != (member_inline_size <= 4) {
15187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15188                }
15189                let inner_offset;
15190                let mut inner_depth = depth.clone();
15191                if inlined {
15192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15193                    inner_offset = next_offset;
15194                } else {
15195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15196                    inner_depth.increment()?;
15197                }
15198                let val_ref = self
15199                    .presentation_timeline
15200                    .get_or_insert_with(|| fidl::new_empty!(TimelineFunction, D));
15201                fidl::decode!(TimelineFunction, D, val_ref, decoder, inner_offset, inner_depth)?;
15202                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15203                {
15204                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15205                }
15206                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15207                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15208                }
15209            }
15210
15211            next_offset += envelope_size;
15212            _next_ordinal_to_read += 1;
15213            if next_offset >= end_offset {
15214                return Ok(());
15215            }
15216
15217            // Decode unknown envelopes for gaps in ordinals.
15218            while _next_ordinal_to_read < 3 {
15219                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15220                _next_ordinal_to_read += 1;
15221                next_offset += envelope_size;
15222            }
15223
15224            let next_out_of_line = decoder.next_out_of_line();
15225            let handles_before = decoder.remaining_handles();
15226            if let Some((inlined, num_bytes, num_handles)) =
15227                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15228            {
15229                let member_inline_size =
15230                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15231                if inlined != (member_inline_size <= 4) {
15232                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15233                }
15234                let inner_offset;
15235                let mut inner_depth = depth.clone();
15236                if inlined {
15237                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15238                    inner_offset = next_offset;
15239                } else {
15240                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15241                    inner_depth.increment()?;
15242                }
15243                let val_ref = self.min_lead_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
15244                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15245                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15246                {
15247                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15248                }
15249                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15250                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15251                }
15252            }
15253
15254            next_offset += envelope_size;
15255            _next_ordinal_to_read += 1;
15256            if next_offset >= end_offset {
15257                return Ok(());
15258            }
15259
15260            // Decode unknown envelopes for gaps in ordinals.
15261            while _next_ordinal_to_read < 4 {
15262                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15263                _next_ordinal_to_read += 1;
15264                next_offset += envelope_size;
15265            }
15266
15267            let next_out_of_line = decoder.next_out_of_line();
15268            let handles_before = decoder.remaining_handles();
15269            if let Some((inlined, num_bytes, num_handles)) =
15270                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15271            {
15272                let member_inline_size =
15273                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15274                if inlined != (member_inline_size <= 4) {
15275                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15276                }
15277                let inner_offset;
15278                let mut inner_depth = depth.clone();
15279                if inlined {
15280                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15281                    inner_offset = next_offset;
15282                } else {
15283                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15284                    inner_depth.increment()?;
15285                }
15286                let val_ref = self.max_lead_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
15287                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15288                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15289                {
15290                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15291                }
15292                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15293                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15294                }
15295            }
15296
15297            next_offset += envelope_size;
15298
15299            // Decode the remaining unknown envelopes.
15300            while next_offset < end_offset {
15301                _next_ordinal_to_read += 1;
15302                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15303                next_offset += envelope_size;
15304            }
15305
15306            Ok(())
15307        }
15308    }
15309
15310    impl CvsdEncoderSettings {
15311        #[inline(always)]
15312        fn max_ordinal_present(&self) -> u64 {
15313            0
15314        }
15315    }
15316
15317    impl fidl::encoding::ValueTypeMarker for CvsdEncoderSettings {
15318        type Borrowed<'a> = &'a Self;
15319        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15320            value
15321        }
15322    }
15323
15324    unsafe impl fidl::encoding::TypeMarker for CvsdEncoderSettings {
15325        type Owned = Self;
15326
15327        #[inline(always)]
15328        fn inline_align(_context: fidl::encoding::Context) -> usize {
15329            8
15330        }
15331
15332        #[inline(always)]
15333        fn inline_size(_context: fidl::encoding::Context) -> usize {
15334            16
15335        }
15336    }
15337
15338    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CvsdEncoderSettings, D>
15339        for &CvsdEncoderSettings
15340    {
15341        unsafe fn encode(
15342            self,
15343            encoder: &mut fidl::encoding::Encoder<'_, D>,
15344            offset: usize,
15345            mut depth: fidl::encoding::Depth,
15346        ) -> fidl::Result<()> {
15347            encoder.debug_check_bounds::<CvsdEncoderSettings>(offset);
15348            // Vector header
15349            let max_ordinal: u64 = self.max_ordinal_present();
15350            encoder.write_num(max_ordinal, offset);
15351            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15352            // Calling encoder.out_of_line_offset(0) is not allowed.
15353            if max_ordinal == 0 {
15354                return Ok(());
15355            }
15356            depth.increment()?;
15357            let envelope_size = 8;
15358            let bytes_len = max_ordinal as usize * envelope_size;
15359            #[allow(unused_variables)]
15360            let offset = encoder.out_of_line_offset(bytes_len);
15361            let mut _prev_end_offset: usize = 0;
15362
15363            Ok(())
15364        }
15365    }
15366
15367    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CvsdEncoderSettings {
15368        #[inline(always)]
15369        fn new_empty() -> Self {
15370            Self::default()
15371        }
15372
15373        unsafe fn decode(
15374            &mut self,
15375            decoder: &mut fidl::encoding::Decoder<'_, D>,
15376            offset: usize,
15377            mut depth: fidl::encoding::Depth,
15378        ) -> fidl::Result<()> {
15379            decoder.debug_check_bounds::<Self>(offset);
15380            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15381                None => return Err(fidl::Error::NotNullable),
15382                Some(len) => len,
15383            };
15384            // Calling decoder.out_of_line_offset(0) is not allowed.
15385            if len == 0 {
15386                return Ok(());
15387            };
15388            depth.increment()?;
15389            let envelope_size = 8;
15390            let bytes_len = len * envelope_size;
15391            let offset = decoder.out_of_line_offset(bytes_len)?;
15392            // Decode the envelope for each type.
15393            let mut _next_ordinal_to_read = 0;
15394            let mut next_offset = offset;
15395            let end_offset = offset + bytes_len;
15396
15397            // Decode the remaining unknown envelopes.
15398            while next_offset < end_offset {
15399                _next_ordinal_to_read += 1;
15400                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15401                next_offset += envelope_size;
15402            }
15403
15404            Ok(())
15405        }
15406    }
15407
15408    impl DecryptedFormat {
15409        #[inline(always)]
15410        fn max_ordinal_present(&self) -> u64 {
15411            if let Some(_) = self.ignore_this_field {
15412                return 1;
15413            }
15414            0
15415        }
15416    }
15417
15418    impl fidl::encoding::ValueTypeMarker for DecryptedFormat {
15419        type Borrowed<'a> = &'a Self;
15420        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15421            value
15422        }
15423    }
15424
15425    unsafe impl fidl::encoding::TypeMarker for DecryptedFormat {
15426        type Owned = Self;
15427
15428        #[inline(always)]
15429        fn inline_align(_context: fidl::encoding::Context) -> usize {
15430            8
15431        }
15432
15433        #[inline(always)]
15434        fn inline_size(_context: fidl::encoding::Context) -> usize {
15435            16
15436        }
15437    }
15438
15439    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DecryptedFormat, D>
15440        for &DecryptedFormat
15441    {
15442        unsafe fn encode(
15443            self,
15444            encoder: &mut fidl::encoding::Encoder<'_, D>,
15445            offset: usize,
15446            mut depth: fidl::encoding::Depth,
15447        ) -> fidl::Result<()> {
15448            encoder.debug_check_bounds::<DecryptedFormat>(offset);
15449            // Vector header
15450            let max_ordinal: u64 = self.max_ordinal_present();
15451            encoder.write_num(max_ordinal, offset);
15452            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15453            // Calling encoder.out_of_line_offset(0) is not allowed.
15454            if max_ordinal == 0 {
15455                return Ok(());
15456            }
15457            depth.increment()?;
15458            let envelope_size = 8;
15459            let bytes_len = max_ordinal as usize * envelope_size;
15460            #[allow(unused_variables)]
15461            let offset = encoder.out_of_line_offset(bytes_len);
15462            let mut _prev_end_offset: usize = 0;
15463            if 1 > max_ordinal {
15464                return Ok(());
15465            }
15466
15467            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15468            // are envelope_size bytes.
15469            let cur_offset: usize = (1 - 1) * envelope_size;
15470
15471            // Zero reserved fields.
15472            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15473
15474            // Safety:
15475            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15476            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15477            //   envelope_size bytes, there is always sufficient room.
15478            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15479                self.ignore_this_field
15480                    .as_ref()
15481                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15482                encoder,
15483                offset + cur_offset,
15484                depth,
15485            )?;
15486
15487            _prev_end_offset = cur_offset + envelope_size;
15488
15489            Ok(())
15490        }
15491    }
15492
15493    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DecryptedFormat {
15494        #[inline(always)]
15495        fn new_empty() -> Self {
15496            Self::default()
15497        }
15498
15499        unsafe fn decode(
15500            &mut self,
15501            decoder: &mut fidl::encoding::Decoder<'_, D>,
15502            offset: usize,
15503            mut depth: fidl::encoding::Depth,
15504        ) -> fidl::Result<()> {
15505            decoder.debug_check_bounds::<Self>(offset);
15506            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15507                None => return Err(fidl::Error::NotNullable),
15508                Some(len) => len,
15509            };
15510            // Calling decoder.out_of_line_offset(0) is not allowed.
15511            if len == 0 {
15512                return Ok(());
15513            };
15514            depth.increment()?;
15515            let envelope_size = 8;
15516            let bytes_len = len * envelope_size;
15517            let offset = decoder.out_of_line_offset(bytes_len)?;
15518            // Decode the envelope for each type.
15519            let mut _next_ordinal_to_read = 0;
15520            let mut next_offset = offset;
15521            let end_offset = offset + bytes_len;
15522            _next_ordinal_to_read += 1;
15523            if next_offset >= end_offset {
15524                return Ok(());
15525            }
15526
15527            // Decode unknown envelopes for gaps in ordinals.
15528            while _next_ordinal_to_read < 1 {
15529                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15530                _next_ordinal_to_read += 1;
15531                next_offset += envelope_size;
15532            }
15533
15534            let next_out_of_line = decoder.next_out_of_line();
15535            let handles_before = decoder.remaining_handles();
15536            if let Some((inlined, num_bytes, num_handles)) =
15537                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15538            {
15539                let member_inline_size =
15540                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15541                if inlined != (member_inline_size <= 4) {
15542                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15543                }
15544                let inner_offset;
15545                let mut inner_depth = depth.clone();
15546                if inlined {
15547                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15548                    inner_offset = next_offset;
15549                } else {
15550                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15551                    inner_depth.increment()?;
15552                }
15553                let val_ref =
15554                    self.ignore_this_field.get_or_insert_with(|| fidl::new_empty!(bool, D));
15555                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15556                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15557                {
15558                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15559                }
15560                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15561                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15562                }
15563            }
15564
15565            next_offset += envelope_size;
15566
15567            // Decode the remaining unknown envelopes.
15568            while next_offset < end_offset {
15569                _next_ordinal_to_read += 1;
15570                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15571                next_offset += envelope_size;
15572            }
15573
15574            Ok(())
15575        }
15576    }
15577
15578    impl EncryptedFormat {
15579        #[inline(always)]
15580        fn max_ordinal_present(&self) -> u64 {
15581            if let Some(_) = self.key_id {
15582                return 8;
15583            }
15584            if let Some(_) = self.scheme {
15585                return 6;
15586            }
15587            if let Some(_) = self.pattern {
15588                return 5;
15589            }
15590            if let Some(_) = self.subsamples {
15591                return 4;
15592            }
15593            if let Some(_) = self.init_vector {
15594                return 3;
15595            }
15596            0
15597        }
15598    }
15599
15600    impl fidl::encoding::ValueTypeMarker for EncryptedFormat {
15601        type Borrowed<'a> = &'a Self;
15602        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15603            value
15604        }
15605    }
15606
15607    unsafe impl fidl::encoding::TypeMarker for EncryptedFormat {
15608        type Owned = Self;
15609
15610        #[inline(always)]
15611        fn inline_align(_context: fidl::encoding::Context) -> usize {
15612            8
15613        }
15614
15615        #[inline(always)]
15616        fn inline_size(_context: fidl::encoding::Context) -> usize {
15617            16
15618        }
15619    }
15620
15621    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncryptedFormat, D>
15622        for &EncryptedFormat
15623    {
15624        unsafe fn encode(
15625            self,
15626            encoder: &mut fidl::encoding::Encoder<'_, D>,
15627            offset: usize,
15628            mut depth: fidl::encoding::Depth,
15629        ) -> fidl::Result<()> {
15630            encoder.debug_check_bounds::<EncryptedFormat>(offset);
15631            // Vector header
15632            let max_ordinal: u64 = self.max_ordinal_present();
15633            encoder.write_num(max_ordinal, offset);
15634            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15635            // Calling encoder.out_of_line_offset(0) is not allowed.
15636            if max_ordinal == 0 {
15637                return Ok(());
15638            }
15639            depth.increment()?;
15640            let envelope_size = 8;
15641            let bytes_len = max_ordinal as usize * envelope_size;
15642            #[allow(unused_variables)]
15643            let offset = encoder.out_of_line_offset(bytes_len);
15644            let mut _prev_end_offset: usize = 0;
15645            if 3 > max_ordinal {
15646                return Ok(());
15647            }
15648
15649            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15650            // are envelope_size bytes.
15651            let cur_offset: usize = (3 - 1) * envelope_size;
15652
15653            // Zero reserved fields.
15654            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15655
15656            // Safety:
15657            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15658            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15659            //   envelope_size bytes, there is always sufficient room.
15660            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
15661                self.init_vector.as_ref().map(
15662                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
15663                ),
15664                encoder,
15665                offset + cur_offset,
15666                depth,
15667            )?;
15668
15669            _prev_end_offset = cur_offset + envelope_size;
15670            if 4 > max_ordinal {
15671                return Ok(());
15672            }
15673
15674            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15675            // are envelope_size bytes.
15676            let cur_offset: usize = (4 - 1) * envelope_size;
15677
15678            // Zero reserved fields.
15679            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15680
15681            // Safety:
15682            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15683            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15684            //   envelope_size bytes, there is always sufficient room.
15685            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<SubsampleEntry>, D>(
15686            self.subsamples.as_ref().map(<fidl::encoding::UnboundedVector<SubsampleEntry> as fidl::encoding::ValueTypeMarker>::borrow),
15687            encoder, offset + cur_offset, depth
15688        )?;
15689
15690            _prev_end_offset = cur_offset + envelope_size;
15691            if 5 > max_ordinal {
15692                return Ok(());
15693            }
15694
15695            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15696            // are envelope_size bytes.
15697            let cur_offset: usize = (5 - 1) * envelope_size;
15698
15699            // Zero reserved fields.
15700            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15701
15702            // Safety:
15703            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15704            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15705            //   envelope_size bytes, there is always sufficient room.
15706            fidl::encoding::encode_in_envelope_optional::<EncryptionPattern, D>(
15707                self.pattern
15708                    .as_ref()
15709                    .map(<EncryptionPattern as fidl::encoding::ValueTypeMarker>::borrow),
15710                encoder,
15711                offset + cur_offset,
15712                depth,
15713            )?;
15714
15715            _prev_end_offset = cur_offset + envelope_size;
15716            if 6 > max_ordinal {
15717                return Ok(());
15718            }
15719
15720            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15721            // are envelope_size bytes.
15722            let cur_offset: usize = (6 - 1) * envelope_size;
15723
15724            // Zero reserved fields.
15725            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15726
15727            // Safety:
15728            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15729            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15730            //   envelope_size bytes, there is always sufficient room.
15731            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
15732                self.scheme.as_ref().map(
15733                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
15734                ),
15735                encoder,
15736                offset + cur_offset,
15737                depth,
15738            )?;
15739
15740            _prev_end_offset = cur_offset + envelope_size;
15741            if 8 > max_ordinal {
15742                return Ok(());
15743            }
15744
15745            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15746            // are envelope_size bytes.
15747            let cur_offset: usize = (8 - 1) * envelope_size;
15748
15749            // Zero reserved fields.
15750            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15751
15752            // Safety:
15753            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15754            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15755            //   envelope_size bytes, there is always sufficient room.
15756            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
15757                self.key_id.as_ref().map(
15758                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
15759                ),
15760                encoder,
15761                offset + cur_offset,
15762                depth,
15763            )?;
15764
15765            _prev_end_offset = cur_offset + envelope_size;
15766
15767            Ok(())
15768        }
15769    }
15770
15771    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncryptedFormat {
15772        #[inline(always)]
15773        fn new_empty() -> Self {
15774            Self::default()
15775        }
15776
15777        unsafe fn decode(
15778            &mut self,
15779            decoder: &mut fidl::encoding::Decoder<'_, D>,
15780            offset: usize,
15781            mut depth: fidl::encoding::Depth,
15782        ) -> fidl::Result<()> {
15783            decoder.debug_check_bounds::<Self>(offset);
15784            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15785                None => return Err(fidl::Error::NotNullable),
15786                Some(len) => len,
15787            };
15788            // Calling decoder.out_of_line_offset(0) is not allowed.
15789            if len == 0 {
15790                return Ok(());
15791            };
15792            depth.increment()?;
15793            let envelope_size = 8;
15794            let bytes_len = len * envelope_size;
15795            let offset = decoder.out_of_line_offset(bytes_len)?;
15796            // Decode the envelope for each type.
15797            let mut _next_ordinal_to_read = 0;
15798            let mut next_offset = offset;
15799            let end_offset = offset + bytes_len;
15800            _next_ordinal_to_read += 1;
15801            if next_offset >= end_offset {
15802                return Ok(());
15803            }
15804
15805            // Decode unknown envelopes for gaps in ordinals.
15806            while _next_ordinal_to_read < 3 {
15807                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15808                _next_ordinal_to_read += 1;
15809                next_offset += envelope_size;
15810            }
15811
15812            let next_out_of_line = decoder.next_out_of_line();
15813            let handles_before = decoder.remaining_handles();
15814            if let Some((inlined, num_bytes, num_handles)) =
15815                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15816            {
15817                let member_inline_size =
15818                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
15819                        decoder.context,
15820                    );
15821                if inlined != (member_inline_size <= 4) {
15822                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15823                }
15824                let inner_offset;
15825                let mut inner_depth = depth.clone();
15826                if inlined {
15827                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15828                    inner_offset = next_offset;
15829                } else {
15830                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15831                    inner_depth.increment()?;
15832                }
15833                let val_ref = self
15834                    .init_vector
15835                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
15836                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
15837                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15838                {
15839                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15840                }
15841                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15842                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15843                }
15844            }
15845
15846            next_offset += envelope_size;
15847            _next_ordinal_to_read += 1;
15848            if next_offset >= end_offset {
15849                return Ok(());
15850            }
15851
15852            // Decode unknown envelopes for gaps in ordinals.
15853            while _next_ordinal_to_read < 4 {
15854                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15855                _next_ordinal_to_read += 1;
15856                next_offset += envelope_size;
15857            }
15858
15859            let next_out_of_line = decoder.next_out_of_line();
15860            let handles_before = decoder.remaining_handles();
15861            if let Some((inlined, num_bytes, num_handles)) =
15862                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15863            {
15864                let member_inline_size = <fidl::encoding::UnboundedVector<SubsampleEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15865                if inlined != (member_inline_size <= 4) {
15866                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15867                }
15868                let inner_offset;
15869                let mut inner_depth = depth.clone();
15870                if inlined {
15871                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15872                    inner_offset = next_offset;
15873                } else {
15874                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15875                    inner_depth.increment()?;
15876                }
15877                let val_ref = self.subsamples.get_or_insert_with(|| {
15878                    fidl::new_empty!(fidl::encoding::UnboundedVector<SubsampleEntry>, D)
15879                });
15880                fidl::decode!(
15881                    fidl::encoding::UnboundedVector<SubsampleEntry>,
15882                    D,
15883                    val_ref,
15884                    decoder,
15885                    inner_offset,
15886                    inner_depth
15887                )?;
15888                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15889                {
15890                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15891                }
15892                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15893                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15894                }
15895            }
15896
15897            next_offset += envelope_size;
15898            _next_ordinal_to_read += 1;
15899            if next_offset >= end_offset {
15900                return Ok(());
15901            }
15902
15903            // Decode unknown envelopes for gaps in ordinals.
15904            while _next_ordinal_to_read < 5 {
15905                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15906                _next_ordinal_to_read += 1;
15907                next_offset += envelope_size;
15908            }
15909
15910            let next_out_of_line = decoder.next_out_of_line();
15911            let handles_before = decoder.remaining_handles();
15912            if let Some((inlined, num_bytes, num_handles)) =
15913                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15914            {
15915                let member_inline_size =
15916                    <EncryptionPattern as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15917                if inlined != (member_inline_size <= 4) {
15918                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15919                }
15920                let inner_offset;
15921                let mut inner_depth = depth.clone();
15922                if inlined {
15923                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15924                    inner_offset = next_offset;
15925                } else {
15926                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15927                    inner_depth.increment()?;
15928                }
15929                let val_ref =
15930                    self.pattern.get_or_insert_with(|| fidl::new_empty!(EncryptionPattern, D));
15931                fidl::decode!(EncryptionPattern, D, val_ref, decoder, inner_offset, inner_depth)?;
15932                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15933                {
15934                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15935                }
15936                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15937                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15938                }
15939            }
15940
15941            next_offset += envelope_size;
15942            _next_ordinal_to_read += 1;
15943            if next_offset >= end_offset {
15944                return Ok(());
15945            }
15946
15947            // Decode unknown envelopes for gaps in ordinals.
15948            while _next_ordinal_to_read < 6 {
15949                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15950                _next_ordinal_to_read += 1;
15951                next_offset += envelope_size;
15952            }
15953
15954            let next_out_of_line = decoder.next_out_of_line();
15955            let handles_before = decoder.remaining_handles();
15956            if let Some((inlined, num_bytes, num_handles)) =
15957                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15958            {
15959                let member_inline_size =
15960                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
15961                        decoder.context,
15962                    );
15963                if inlined != (member_inline_size <= 4) {
15964                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15965                }
15966                let inner_offset;
15967                let mut inner_depth = depth.clone();
15968                if inlined {
15969                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15970                    inner_offset = next_offset;
15971                } else {
15972                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15973                    inner_depth.increment()?;
15974                }
15975                let val_ref = self
15976                    .scheme
15977                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
15978                fidl::decode!(
15979                    fidl::encoding::UnboundedString,
15980                    D,
15981                    val_ref,
15982                    decoder,
15983                    inner_offset,
15984                    inner_depth
15985                )?;
15986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15987                {
15988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15989                }
15990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15992                }
15993            }
15994
15995            next_offset += envelope_size;
15996            _next_ordinal_to_read += 1;
15997            if next_offset >= end_offset {
15998                return Ok(());
15999            }
16000
16001            // Decode unknown envelopes for gaps in ordinals.
16002            while _next_ordinal_to_read < 8 {
16003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16004                _next_ordinal_to_read += 1;
16005                next_offset += envelope_size;
16006            }
16007
16008            let next_out_of_line = decoder.next_out_of_line();
16009            let handles_before = decoder.remaining_handles();
16010            if let Some((inlined, num_bytes, num_handles)) =
16011                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16012            {
16013                let member_inline_size =
16014                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
16015                        decoder.context,
16016                    );
16017                if inlined != (member_inline_size <= 4) {
16018                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16019                }
16020                let inner_offset;
16021                let mut inner_depth = depth.clone();
16022                if inlined {
16023                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16024                    inner_offset = next_offset;
16025                } else {
16026                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16027                    inner_depth.increment()?;
16028                }
16029                let val_ref = self
16030                    .key_id
16031                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
16032                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
16033                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16034                {
16035                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16036                }
16037                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16038                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16039                }
16040            }
16041
16042            next_offset += envelope_size;
16043
16044            // Decode the remaining unknown envelopes.
16045            while next_offset < end_offset {
16046                _next_ordinal_to_read += 1;
16047                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16048                next_offset += envelope_size;
16049            }
16050
16051            Ok(())
16052        }
16053    }
16054
16055    impl FormatDetails {
16056        #[inline(always)]
16057        fn max_ordinal_present(&self) -> u64 {
16058            if let Some(_) = self.profile {
16059                return 8;
16060            }
16061            if let Some(_) = self.timebase {
16062                return 7;
16063            }
16064            if let Some(_) = self.encoder_settings {
16065                return 6;
16066            }
16067            if let Some(_) = self.pass_through_parameters {
16068                return 5;
16069            }
16070            if let Some(_) = self.domain {
16071                return 4;
16072            }
16073            if let Some(_) = self.oob_bytes {
16074                return 3;
16075            }
16076            if let Some(_) = self.mime_type {
16077                return 2;
16078            }
16079            if let Some(_) = self.format_details_version_ordinal {
16080                return 1;
16081            }
16082            0
16083        }
16084    }
16085
16086    impl fidl::encoding::ValueTypeMarker for FormatDetails {
16087        type Borrowed<'a> = &'a Self;
16088        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16089            value
16090        }
16091    }
16092
16093    unsafe impl fidl::encoding::TypeMarker for FormatDetails {
16094        type Owned = Self;
16095
16096        #[inline(always)]
16097        fn inline_align(_context: fidl::encoding::Context) -> usize {
16098            8
16099        }
16100
16101        #[inline(always)]
16102        fn inline_size(_context: fidl::encoding::Context) -> usize {
16103            16
16104        }
16105    }
16106
16107    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FormatDetails, D>
16108        for &FormatDetails
16109    {
16110        unsafe fn encode(
16111            self,
16112            encoder: &mut fidl::encoding::Encoder<'_, D>,
16113            offset: usize,
16114            mut depth: fidl::encoding::Depth,
16115        ) -> fidl::Result<()> {
16116            encoder.debug_check_bounds::<FormatDetails>(offset);
16117            // Vector header
16118            let max_ordinal: u64 = self.max_ordinal_present();
16119            encoder.write_num(max_ordinal, offset);
16120            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16121            // Calling encoder.out_of_line_offset(0) is not allowed.
16122            if max_ordinal == 0 {
16123                return Ok(());
16124            }
16125            depth.increment()?;
16126            let envelope_size = 8;
16127            let bytes_len = max_ordinal as usize * envelope_size;
16128            #[allow(unused_variables)]
16129            let offset = encoder.out_of_line_offset(bytes_len);
16130            let mut _prev_end_offset: usize = 0;
16131            if 1 > max_ordinal {
16132                return Ok(());
16133            }
16134
16135            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16136            // are envelope_size bytes.
16137            let cur_offset: usize = (1 - 1) * envelope_size;
16138
16139            // Zero reserved fields.
16140            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16141
16142            // Safety:
16143            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16144            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16145            //   envelope_size bytes, there is always sufficient room.
16146            fidl::encoding::encode_in_envelope_optional::<u64, D>(
16147                self.format_details_version_ordinal
16148                    .as_ref()
16149                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
16150                encoder,
16151                offset + cur_offset,
16152                depth,
16153            )?;
16154
16155            _prev_end_offset = cur_offset + envelope_size;
16156            if 2 > max_ordinal {
16157                return Ok(());
16158            }
16159
16160            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16161            // are envelope_size bytes.
16162            let cur_offset: usize = (2 - 1) * envelope_size;
16163
16164            // Zero reserved fields.
16165            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16166
16167            // Safety:
16168            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16169            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16170            //   envelope_size bytes, there is always sufficient room.
16171            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
16172                self.mime_type.as_ref().map(
16173                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
16174                ),
16175                encoder,
16176                offset + cur_offset,
16177                depth,
16178            )?;
16179
16180            _prev_end_offset = cur_offset + envelope_size;
16181            if 3 > max_ordinal {
16182                return Ok(());
16183            }
16184
16185            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16186            // are envelope_size bytes.
16187            let cur_offset: usize = (3 - 1) * envelope_size;
16188
16189            // Zero reserved fields.
16190            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16191
16192            // Safety:
16193            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16194            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16195            //   envelope_size bytes, there is always sufficient room.
16196            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
16197            self.oob_bytes.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
16198            encoder, offset + cur_offset, depth
16199        )?;
16200
16201            _prev_end_offset = cur_offset + envelope_size;
16202            if 4 > max_ordinal {
16203                return Ok(());
16204            }
16205
16206            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16207            // are envelope_size bytes.
16208            let cur_offset: usize = (4 - 1) * envelope_size;
16209
16210            // Zero reserved fields.
16211            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16212
16213            // Safety:
16214            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16215            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16216            //   envelope_size bytes, there is always sufficient room.
16217            fidl::encoding::encode_in_envelope_optional::<DomainFormat, D>(
16218                self.domain.as_ref().map(<DomainFormat as fidl::encoding::ValueTypeMarker>::borrow),
16219                encoder,
16220                offset + cur_offset,
16221                depth,
16222            )?;
16223
16224            _prev_end_offset = cur_offset + envelope_size;
16225            if 5 > max_ordinal {
16226                return Ok(());
16227            }
16228
16229            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16230            // are envelope_size bytes.
16231            let cur_offset: usize = (5 - 1) * envelope_size;
16232
16233            // Zero reserved fields.
16234            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16235
16236            // Safety:
16237            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16238            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16239            //   envelope_size bytes, there is always sufficient room.
16240            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Parameter>, D>(
16241            self.pass_through_parameters.as_ref().map(<fidl::encoding::UnboundedVector<Parameter> as fidl::encoding::ValueTypeMarker>::borrow),
16242            encoder, offset + cur_offset, depth
16243        )?;
16244
16245            _prev_end_offset = cur_offset + envelope_size;
16246            if 6 > max_ordinal {
16247                return Ok(());
16248            }
16249
16250            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16251            // are envelope_size bytes.
16252            let cur_offset: usize = (6 - 1) * envelope_size;
16253
16254            // Zero reserved fields.
16255            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16256
16257            // Safety:
16258            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16259            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16260            //   envelope_size bytes, there is always sufficient room.
16261            fidl::encoding::encode_in_envelope_optional::<EncoderSettings, D>(
16262                self.encoder_settings
16263                    .as_ref()
16264                    .map(<EncoderSettings as fidl::encoding::ValueTypeMarker>::borrow),
16265                encoder,
16266                offset + cur_offset,
16267                depth,
16268            )?;
16269
16270            _prev_end_offset = cur_offset + envelope_size;
16271            if 7 > max_ordinal {
16272                return Ok(());
16273            }
16274
16275            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16276            // are envelope_size bytes.
16277            let cur_offset: usize = (7 - 1) * envelope_size;
16278
16279            // Zero reserved fields.
16280            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16281
16282            // Safety:
16283            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16284            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16285            //   envelope_size bytes, there is always sufficient room.
16286            fidl::encoding::encode_in_envelope_optional::<u64, D>(
16287                self.timebase.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
16288                encoder,
16289                offset + cur_offset,
16290                depth,
16291            )?;
16292
16293            _prev_end_offset = cur_offset + envelope_size;
16294            if 8 > max_ordinal {
16295                return Ok(());
16296            }
16297
16298            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16299            // are envelope_size bytes.
16300            let cur_offset: usize = (8 - 1) * envelope_size;
16301
16302            // Zero reserved fields.
16303            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16304
16305            // Safety:
16306            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16307            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16308            //   envelope_size bytes, there is always sufficient room.
16309            fidl::encoding::encode_in_envelope_optional::<CodecProfile, D>(
16310                self.profile
16311                    .as_ref()
16312                    .map(<CodecProfile as fidl::encoding::ValueTypeMarker>::borrow),
16313                encoder,
16314                offset + cur_offset,
16315                depth,
16316            )?;
16317
16318            _prev_end_offset = cur_offset + envelope_size;
16319
16320            Ok(())
16321        }
16322    }
16323
16324    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FormatDetails {
16325        #[inline(always)]
16326        fn new_empty() -> Self {
16327            Self::default()
16328        }
16329
16330        unsafe fn decode(
16331            &mut self,
16332            decoder: &mut fidl::encoding::Decoder<'_, D>,
16333            offset: usize,
16334            mut depth: fidl::encoding::Depth,
16335        ) -> fidl::Result<()> {
16336            decoder.debug_check_bounds::<Self>(offset);
16337            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16338                None => return Err(fidl::Error::NotNullable),
16339                Some(len) => len,
16340            };
16341            // Calling decoder.out_of_line_offset(0) is not allowed.
16342            if len == 0 {
16343                return Ok(());
16344            };
16345            depth.increment()?;
16346            let envelope_size = 8;
16347            let bytes_len = len * envelope_size;
16348            let offset = decoder.out_of_line_offset(bytes_len)?;
16349            // Decode the envelope for each type.
16350            let mut _next_ordinal_to_read = 0;
16351            let mut next_offset = offset;
16352            let end_offset = offset + bytes_len;
16353            _next_ordinal_to_read += 1;
16354            if next_offset >= end_offset {
16355                return Ok(());
16356            }
16357
16358            // Decode unknown envelopes for gaps in ordinals.
16359            while _next_ordinal_to_read < 1 {
16360                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16361                _next_ordinal_to_read += 1;
16362                next_offset += envelope_size;
16363            }
16364
16365            let next_out_of_line = decoder.next_out_of_line();
16366            let handles_before = decoder.remaining_handles();
16367            if let Some((inlined, num_bytes, num_handles)) =
16368                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16369            {
16370                let member_inline_size =
16371                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16372                if inlined != (member_inline_size <= 4) {
16373                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16374                }
16375                let inner_offset;
16376                let mut inner_depth = depth.clone();
16377                if inlined {
16378                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16379                    inner_offset = next_offset;
16380                } else {
16381                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16382                    inner_depth.increment()?;
16383                }
16384                let val_ref = self
16385                    .format_details_version_ordinal
16386                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
16387                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
16388                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16389                {
16390                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16391                }
16392                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16393                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16394                }
16395            }
16396
16397            next_offset += envelope_size;
16398            _next_ordinal_to_read += 1;
16399            if next_offset >= end_offset {
16400                return Ok(());
16401            }
16402
16403            // Decode unknown envelopes for gaps in ordinals.
16404            while _next_ordinal_to_read < 2 {
16405                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16406                _next_ordinal_to_read += 1;
16407                next_offset += envelope_size;
16408            }
16409
16410            let next_out_of_line = decoder.next_out_of_line();
16411            let handles_before = decoder.remaining_handles();
16412            if let Some((inlined, num_bytes, num_handles)) =
16413                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16414            {
16415                let member_inline_size =
16416                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
16417                        decoder.context,
16418                    );
16419                if inlined != (member_inline_size <= 4) {
16420                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16421                }
16422                let inner_offset;
16423                let mut inner_depth = depth.clone();
16424                if inlined {
16425                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16426                    inner_offset = next_offset;
16427                } else {
16428                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16429                    inner_depth.increment()?;
16430                }
16431                let val_ref = self
16432                    .mime_type
16433                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
16434                fidl::decode!(
16435                    fidl::encoding::UnboundedString,
16436                    D,
16437                    val_ref,
16438                    decoder,
16439                    inner_offset,
16440                    inner_depth
16441                )?;
16442                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16443                {
16444                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16445                }
16446                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16447                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16448                }
16449            }
16450
16451            next_offset += envelope_size;
16452            _next_ordinal_to_read += 1;
16453            if next_offset >= end_offset {
16454                return Ok(());
16455            }
16456
16457            // Decode unknown envelopes for gaps in ordinals.
16458            while _next_ordinal_to_read < 3 {
16459                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16460                _next_ordinal_to_read += 1;
16461                next_offset += envelope_size;
16462            }
16463
16464            let next_out_of_line = decoder.next_out_of_line();
16465            let handles_before = decoder.remaining_handles();
16466            if let Some((inlined, num_bytes, num_handles)) =
16467                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16468            {
16469                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16470                if inlined != (member_inline_size <= 4) {
16471                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16472                }
16473                let inner_offset;
16474                let mut inner_depth = depth.clone();
16475                if inlined {
16476                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16477                    inner_offset = next_offset;
16478                } else {
16479                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16480                    inner_depth.increment()?;
16481                }
16482                let val_ref = self.oob_bytes.get_or_insert_with(|| {
16483                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
16484                });
16485                fidl::decode!(
16486                    fidl::encoding::UnboundedVector<u8>,
16487                    D,
16488                    val_ref,
16489                    decoder,
16490                    inner_offset,
16491                    inner_depth
16492                )?;
16493                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16494                {
16495                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16496                }
16497                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16498                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16499                }
16500            }
16501
16502            next_offset += envelope_size;
16503            _next_ordinal_to_read += 1;
16504            if next_offset >= end_offset {
16505                return Ok(());
16506            }
16507
16508            // Decode unknown envelopes for gaps in ordinals.
16509            while _next_ordinal_to_read < 4 {
16510                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16511                _next_ordinal_to_read += 1;
16512                next_offset += envelope_size;
16513            }
16514
16515            let next_out_of_line = decoder.next_out_of_line();
16516            let handles_before = decoder.remaining_handles();
16517            if let Some((inlined, num_bytes, num_handles)) =
16518                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16519            {
16520                let member_inline_size =
16521                    <DomainFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16522                if inlined != (member_inline_size <= 4) {
16523                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16524                }
16525                let inner_offset;
16526                let mut inner_depth = depth.clone();
16527                if inlined {
16528                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16529                    inner_offset = next_offset;
16530                } else {
16531                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16532                    inner_depth.increment()?;
16533                }
16534                let val_ref = self.domain.get_or_insert_with(|| fidl::new_empty!(DomainFormat, D));
16535                fidl::decode!(DomainFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
16536                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16537                {
16538                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16539                }
16540                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16541                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16542                }
16543            }
16544
16545            next_offset += envelope_size;
16546            _next_ordinal_to_read += 1;
16547            if next_offset >= end_offset {
16548                return Ok(());
16549            }
16550
16551            // Decode unknown envelopes for gaps in ordinals.
16552            while _next_ordinal_to_read < 5 {
16553                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16554                _next_ordinal_to_read += 1;
16555                next_offset += envelope_size;
16556            }
16557
16558            let next_out_of_line = decoder.next_out_of_line();
16559            let handles_before = decoder.remaining_handles();
16560            if let Some((inlined, num_bytes, num_handles)) =
16561                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16562            {
16563                let member_inline_size = <fidl::encoding::UnboundedVector<Parameter> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16564                if inlined != (member_inline_size <= 4) {
16565                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16566                }
16567                let inner_offset;
16568                let mut inner_depth = depth.clone();
16569                if inlined {
16570                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16571                    inner_offset = next_offset;
16572                } else {
16573                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16574                    inner_depth.increment()?;
16575                }
16576                let val_ref = self.pass_through_parameters.get_or_insert_with(|| {
16577                    fidl::new_empty!(fidl::encoding::UnboundedVector<Parameter>, D)
16578                });
16579                fidl::decode!(
16580                    fidl::encoding::UnboundedVector<Parameter>,
16581                    D,
16582                    val_ref,
16583                    decoder,
16584                    inner_offset,
16585                    inner_depth
16586                )?;
16587                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16588                {
16589                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16590                }
16591                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16592                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16593                }
16594            }
16595
16596            next_offset += envelope_size;
16597            _next_ordinal_to_read += 1;
16598            if next_offset >= end_offset {
16599                return Ok(());
16600            }
16601
16602            // Decode unknown envelopes for gaps in ordinals.
16603            while _next_ordinal_to_read < 6 {
16604                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16605                _next_ordinal_to_read += 1;
16606                next_offset += envelope_size;
16607            }
16608
16609            let next_out_of_line = decoder.next_out_of_line();
16610            let handles_before = decoder.remaining_handles();
16611            if let Some((inlined, num_bytes, num_handles)) =
16612                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16613            {
16614                let member_inline_size =
16615                    <EncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16616                if inlined != (member_inline_size <= 4) {
16617                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16618                }
16619                let inner_offset;
16620                let mut inner_depth = depth.clone();
16621                if inlined {
16622                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16623                    inner_offset = next_offset;
16624                } else {
16625                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16626                    inner_depth.increment()?;
16627                }
16628                let val_ref = self
16629                    .encoder_settings
16630                    .get_or_insert_with(|| fidl::new_empty!(EncoderSettings, D));
16631                fidl::decode!(EncoderSettings, D, val_ref, decoder, inner_offset, inner_depth)?;
16632                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16633                {
16634                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16635                }
16636                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16637                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16638                }
16639            }
16640
16641            next_offset += envelope_size;
16642            _next_ordinal_to_read += 1;
16643            if next_offset >= end_offset {
16644                return Ok(());
16645            }
16646
16647            // Decode unknown envelopes for gaps in ordinals.
16648            while _next_ordinal_to_read < 7 {
16649                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16650                _next_ordinal_to_read += 1;
16651                next_offset += envelope_size;
16652            }
16653
16654            let next_out_of_line = decoder.next_out_of_line();
16655            let handles_before = decoder.remaining_handles();
16656            if let Some((inlined, num_bytes, num_handles)) =
16657                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16658            {
16659                let member_inline_size =
16660                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16661                if inlined != (member_inline_size <= 4) {
16662                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16663                }
16664                let inner_offset;
16665                let mut inner_depth = depth.clone();
16666                if inlined {
16667                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16668                    inner_offset = next_offset;
16669                } else {
16670                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16671                    inner_depth.increment()?;
16672                }
16673                let val_ref = self.timebase.get_or_insert_with(|| fidl::new_empty!(u64, D));
16674                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
16675                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16676                {
16677                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16678                }
16679                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16680                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16681                }
16682            }
16683
16684            next_offset += envelope_size;
16685            _next_ordinal_to_read += 1;
16686            if next_offset >= end_offset {
16687                return Ok(());
16688            }
16689
16690            // Decode unknown envelopes for gaps in ordinals.
16691            while _next_ordinal_to_read < 8 {
16692                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16693                _next_ordinal_to_read += 1;
16694                next_offset += envelope_size;
16695            }
16696
16697            let next_out_of_line = decoder.next_out_of_line();
16698            let handles_before = decoder.remaining_handles();
16699            if let Some((inlined, num_bytes, num_handles)) =
16700                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16701            {
16702                let member_inline_size =
16703                    <CodecProfile as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16704                if inlined != (member_inline_size <= 4) {
16705                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16706                }
16707                let inner_offset;
16708                let mut inner_depth = depth.clone();
16709                if inlined {
16710                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16711                    inner_offset = next_offset;
16712                } else {
16713                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16714                    inner_depth.increment()?;
16715                }
16716                let val_ref = self.profile.get_or_insert_with(|| fidl::new_empty!(CodecProfile, D));
16717                fidl::decode!(CodecProfile, D, val_ref, decoder, inner_offset, inner_depth)?;
16718                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16719                {
16720                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16721                }
16722                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16723                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16724                }
16725            }
16726
16727            next_offset += envelope_size;
16728
16729            // Decode the remaining unknown envelopes.
16730            while next_offset < end_offset {
16731                _next_ordinal_to_read += 1;
16732                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16733                next_offset += envelope_size;
16734            }
16735
16736            Ok(())
16737        }
16738    }
16739
16740    impl H264EncoderSettings {
16741        #[inline(always)]
16742        fn max_ordinal_present(&self) -> u64 {
16743            if let Some(_) = self.quantization_params {
16744                return 7;
16745            }
16746            if let Some(_) = self.force_key_frame {
16747                return 6;
16748            }
16749            if let Some(_) = self.min_frame_rate {
16750                return 5;
16751            }
16752            if let Some(_) = self.variable_frame_rate {
16753                return 4;
16754            }
16755            if let Some(_) = self.gop_size {
16756                return 3;
16757            }
16758            if let Some(_) = self.frame_rate {
16759                return 2;
16760            }
16761            if let Some(_) = self.bit_rate {
16762                return 1;
16763            }
16764            0
16765        }
16766    }
16767
16768    impl fidl::encoding::ValueTypeMarker for H264EncoderSettings {
16769        type Borrowed<'a> = &'a Self;
16770        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16771            value
16772        }
16773    }
16774
16775    unsafe impl fidl::encoding::TypeMarker for H264EncoderSettings {
16776        type Owned = Self;
16777
16778        #[inline(always)]
16779        fn inline_align(_context: fidl::encoding::Context) -> usize {
16780            8
16781        }
16782
16783        #[inline(always)]
16784        fn inline_size(_context: fidl::encoding::Context) -> usize {
16785            16
16786        }
16787    }
16788
16789    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<H264EncoderSettings, D>
16790        for &H264EncoderSettings
16791    {
16792        unsafe fn encode(
16793            self,
16794            encoder: &mut fidl::encoding::Encoder<'_, D>,
16795            offset: usize,
16796            mut depth: fidl::encoding::Depth,
16797        ) -> fidl::Result<()> {
16798            encoder.debug_check_bounds::<H264EncoderSettings>(offset);
16799            // Vector header
16800            let max_ordinal: u64 = self.max_ordinal_present();
16801            encoder.write_num(max_ordinal, offset);
16802            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16803            // Calling encoder.out_of_line_offset(0) is not allowed.
16804            if max_ordinal == 0 {
16805                return Ok(());
16806            }
16807            depth.increment()?;
16808            let envelope_size = 8;
16809            let bytes_len = max_ordinal as usize * envelope_size;
16810            #[allow(unused_variables)]
16811            let offset = encoder.out_of_line_offset(bytes_len);
16812            let mut _prev_end_offset: usize = 0;
16813            if 1 > max_ordinal {
16814                return Ok(());
16815            }
16816
16817            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16818            // are envelope_size bytes.
16819            let cur_offset: usize = (1 - 1) * envelope_size;
16820
16821            // Zero reserved fields.
16822            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16823
16824            // Safety:
16825            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16826            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16827            //   envelope_size bytes, there is always sufficient room.
16828            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16829                self.bit_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16830                encoder,
16831                offset + cur_offset,
16832                depth,
16833            )?;
16834
16835            _prev_end_offset = cur_offset + envelope_size;
16836            if 2 > max_ordinal {
16837                return Ok(());
16838            }
16839
16840            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16841            // are envelope_size bytes.
16842            let cur_offset: usize = (2 - 1) * envelope_size;
16843
16844            // Zero reserved fields.
16845            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16846
16847            // Safety:
16848            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16849            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16850            //   envelope_size bytes, there is always sufficient room.
16851            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16852                self.frame_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16853                encoder,
16854                offset + cur_offset,
16855                depth,
16856            )?;
16857
16858            _prev_end_offset = cur_offset + envelope_size;
16859            if 3 > max_ordinal {
16860                return Ok(());
16861            }
16862
16863            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16864            // are envelope_size bytes.
16865            let cur_offset: usize = (3 - 1) * envelope_size;
16866
16867            // Zero reserved fields.
16868            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16869
16870            // Safety:
16871            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16872            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16873            //   envelope_size bytes, there is always sufficient room.
16874            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16875                self.gop_size.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16876                encoder,
16877                offset + cur_offset,
16878                depth,
16879            )?;
16880
16881            _prev_end_offset = cur_offset + envelope_size;
16882            if 4 > max_ordinal {
16883                return Ok(());
16884            }
16885
16886            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16887            // are envelope_size bytes.
16888            let cur_offset: usize = (4 - 1) * envelope_size;
16889
16890            // Zero reserved fields.
16891            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16892
16893            // Safety:
16894            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16895            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16896            //   envelope_size bytes, there is always sufficient room.
16897            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16898                self.variable_frame_rate
16899                    .as_ref()
16900                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16901                encoder,
16902                offset + cur_offset,
16903                depth,
16904            )?;
16905
16906            _prev_end_offset = cur_offset + envelope_size;
16907            if 5 > max_ordinal {
16908                return Ok(());
16909            }
16910
16911            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16912            // are envelope_size bytes.
16913            let cur_offset: usize = (5 - 1) * envelope_size;
16914
16915            // Zero reserved fields.
16916            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16917
16918            // Safety:
16919            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16920            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16921            //   envelope_size bytes, there is always sufficient room.
16922            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16923                self.min_frame_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16924                encoder,
16925                offset + cur_offset,
16926                depth,
16927            )?;
16928
16929            _prev_end_offset = cur_offset + envelope_size;
16930            if 6 > max_ordinal {
16931                return Ok(());
16932            }
16933
16934            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16935            // are envelope_size bytes.
16936            let cur_offset: usize = (6 - 1) * envelope_size;
16937
16938            // Zero reserved fields.
16939            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16940
16941            // Safety:
16942            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16943            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16944            //   envelope_size bytes, there is always sufficient room.
16945            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16946                self.force_key_frame
16947                    .as_ref()
16948                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16949                encoder,
16950                offset + cur_offset,
16951                depth,
16952            )?;
16953
16954            _prev_end_offset = cur_offset + envelope_size;
16955            if 7 > max_ordinal {
16956                return Ok(());
16957            }
16958
16959            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16960            // are envelope_size bytes.
16961            let cur_offset: usize = (7 - 1) * envelope_size;
16962
16963            // Zero reserved fields.
16964            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16965
16966            // Safety:
16967            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16968            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16969            //   envelope_size bytes, there is always sufficient room.
16970            fidl::encoding::encode_in_envelope_optional::<H264QuantizationParameters, D>(
16971                self.quantization_params
16972                    .as_ref()
16973                    .map(<H264QuantizationParameters as fidl::encoding::ValueTypeMarker>::borrow),
16974                encoder,
16975                offset + cur_offset,
16976                depth,
16977            )?;
16978
16979            _prev_end_offset = cur_offset + envelope_size;
16980
16981            Ok(())
16982        }
16983    }
16984
16985    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for H264EncoderSettings {
16986        #[inline(always)]
16987        fn new_empty() -> Self {
16988            Self::default()
16989        }
16990
16991        unsafe fn decode(
16992            &mut self,
16993            decoder: &mut fidl::encoding::Decoder<'_, D>,
16994            offset: usize,
16995            mut depth: fidl::encoding::Depth,
16996        ) -> fidl::Result<()> {
16997            decoder.debug_check_bounds::<Self>(offset);
16998            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16999                None => return Err(fidl::Error::NotNullable),
17000                Some(len) => len,
17001            };
17002            // Calling decoder.out_of_line_offset(0) is not allowed.
17003            if len == 0 {
17004                return Ok(());
17005            };
17006            depth.increment()?;
17007            let envelope_size = 8;
17008            let bytes_len = len * envelope_size;
17009            let offset = decoder.out_of_line_offset(bytes_len)?;
17010            // Decode the envelope for each type.
17011            let mut _next_ordinal_to_read = 0;
17012            let mut next_offset = offset;
17013            let end_offset = offset + bytes_len;
17014            _next_ordinal_to_read += 1;
17015            if next_offset >= end_offset {
17016                return Ok(());
17017            }
17018
17019            // Decode unknown envelopes for gaps in ordinals.
17020            while _next_ordinal_to_read < 1 {
17021                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17022                _next_ordinal_to_read += 1;
17023                next_offset += envelope_size;
17024            }
17025
17026            let next_out_of_line = decoder.next_out_of_line();
17027            let handles_before = decoder.remaining_handles();
17028            if let Some((inlined, num_bytes, num_handles)) =
17029                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17030            {
17031                let member_inline_size =
17032                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17033                if inlined != (member_inline_size <= 4) {
17034                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17035                }
17036                let inner_offset;
17037                let mut inner_depth = depth.clone();
17038                if inlined {
17039                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17040                    inner_offset = next_offset;
17041                } else {
17042                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17043                    inner_depth.increment()?;
17044                }
17045                let val_ref = self.bit_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
17046                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17047                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17048                {
17049                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17050                }
17051                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17052                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17053                }
17054            }
17055
17056            next_offset += envelope_size;
17057            _next_ordinal_to_read += 1;
17058            if next_offset >= end_offset {
17059                return Ok(());
17060            }
17061
17062            // Decode unknown envelopes for gaps in ordinals.
17063            while _next_ordinal_to_read < 2 {
17064                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17065                _next_ordinal_to_read += 1;
17066                next_offset += envelope_size;
17067            }
17068
17069            let next_out_of_line = decoder.next_out_of_line();
17070            let handles_before = decoder.remaining_handles();
17071            if let Some((inlined, num_bytes, num_handles)) =
17072                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17073            {
17074                let member_inline_size =
17075                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17076                if inlined != (member_inline_size <= 4) {
17077                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17078                }
17079                let inner_offset;
17080                let mut inner_depth = depth.clone();
17081                if inlined {
17082                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17083                    inner_offset = next_offset;
17084                } else {
17085                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17086                    inner_depth.increment()?;
17087                }
17088                let val_ref = self.frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
17089                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17090                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17091                {
17092                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17093                }
17094                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17095                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17096                }
17097            }
17098
17099            next_offset += envelope_size;
17100            _next_ordinal_to_read += 1;
17101            if next_offset >= end_offset {
17102                return Ok(());
17103            }
17104
17105            // Decode unknown envelopes for gaps in ordinals.
17106            while _next_ordinal_to_read < 3 {
17107                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17108                _next_ordinal_to_read += 1;
17109                next_offset += envelope_size;
17110            }
17111
17112            let next_out_of_line = decoder.next_out_of_line();
17113            let handles_before = decoder.remaining_handles();
17114            if let Some((inlined, num_bytes, num_handles)) =
17115                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17116            {
17117                let member_inline_size =
17118                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17119                if inlined != (member_inline_size <= 4) {
17120                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17121                }
17122                let inner_offset;
17123                let mut inner_depth = depth.clone();
17124                if inlined {
17125                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17126                    inner_offset = next_offset;
17127                } else {
17128                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17129                    inner_depth.increment()?;
17130                }
17131                let val_ref = self.gop_size.get_or_insert_with(|| fidl::new_empty!(u32, D));
17132                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17133                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17134                {
17135                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17136                }
17137                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17138                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17139                }
17140            }
17141
17142            next_offset += envelope_size;
17143            _next_ordinal_to_read += 1;
17144            if next_offset >= end_offset {
17145                return Ok(());
17146            }
17147
17148            // Decode unknown envelopes for gaps in ordinals.
17149            while _next_ordinal_to_read < 4 {
17150                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17151                _next_ordinal_to_read += 1;
17152                next_offset += envelope_size;
17153            }
17154
17155            let next_out_of_line = decoder.next_out_of_line();
17156            let handles_before = decoder.remaining_handles();
17157            if let Some((inlined, num_bytes, num_handles)) =
17158                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17159            {
17160                let member_inline_size =
17161                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17162                if inlined != (member_inline_size <= 4) {
17163                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17164                }
17165                let inner_offset;
17166                let mut inner_depth = depth.clone();
17167                if inlined {
17168                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17169                    inner_offset = next_offset;
17170                } else {
17171                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17172                    inner_depth.increment()?;
17173                }
17174                let val_ref =
17175                    self.variable_frame_rate.get_or_insert_with(|| fidl::new_empty!(bool, D));
17176                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
17177                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17178                {
17179                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17180                }
17181                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17182                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17183                }
17184            }
17185
17186            next_offset += envelope_size;
17187            _next_ordinal_to_read += 1;
17188            if next_offset >= end_offset {
17189                return Ok(());
17190            }
17191
17192            // Decode unknown envelopes for gaps in ordinals.
17193            while _next_ordinal_to_read < 5 {
17194                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17195                _next_ordinal_to_read += 1;
17196                next_offset += envelope_size;
17197            }
17198
17199            let next_out_of_line = decoder.next_out_of_line();
17200            let handles_before = decoder.remaining_handles();
17201            if let Some((inlined, num_bytes, num_handles)) =
17202                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17203            {
17204                let member_inline_size =
17205                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17206                if inlined != (member_inline_size <= 4) {
17207                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17208                }
17209                let inner_offset;
17210                let mut inner_depth = depth.clone();
17211                if inlined {
17212                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17213                    inner_offset = next_offset;
17214                } else {
17215                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17216                    inner_depth.increment()?;
17217                }
17218                let val_ref = self.min_frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
17219                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17220                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17221                {
17222                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17223                }
17224                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17225                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17226                }
17227            }
17228
17229            next_offset += envelope_size;
17230            _next_ordinal_to_read += 1;
17231            if next_offset >= end_offset {
17232                return Ok(());
17233            }
17234
17235            // Decode unknown envelopes for gaps in ordinals.
17236            while _next_ordinal_to_read < 6 {
17237                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17238                _next_ordinal_to_read += 1;
17239                next_offset += envelope_size;
17240            }
17241
17242            let next_out_of_line = decoder.next_out_of_line();
17243            let handles_before = decoder.remaining_handles();
17244            if let Some((inlined, num_bytes, num_handles)) =
17245                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17246            {
17247                let member_inline_size =
17248                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17249                if inlined != (member_inline_size <= 4) {
17250                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17251                }
17252                let inner_offset;
17253                let mut inner_depth = depth.clone();
17254                if inlined {
17255                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17256                    inner_offset = next_offset;
17257                } else {
17258                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17259                    inner_depth.increment()?;
17260                }
17261                let val_ref = self.force_key_frame.get_or_insert_with(|| fidl::new_empty!(bool, D));
17262                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
17263                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17264                {
17265                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17266                }
17267                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17268                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17269                }
17270            }
17271
17272            next_offset += envelope_size;
17273            _next_ordinal_to_read += 1;
17274            if next_offset >= end_offset {
17275                return Ok(());
17276            }
17277
17278            // Decode unknown envelopes for gaps in ordinals.
17279            while _next_ordinal_to_read < 7 {
17280                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17281                _next_ordinal_to_read += 1;
17282                next_offset += envelope_size;
17283            }
17284
17285            let next_out_of_line = decoder.next_out_of_line();
17286            let handles_before = decoder.remaining_handles();
17287            if let Some((inlined, num_bytes, num_handles)) =
17288                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17289            {
17290                let member_inline_size =
17291                    <H264QuantizationParameters as fidl::encoding::TypeMarker>::inline_size(
17292                        decoder.context,
17293                    );
17294                if inlined != (member_inline_size <= 4) {
17295                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17296                }
17297                let inner_offset;
17298                let mut inner_depth = depth.clone();
17299                if inlined {
17300                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17301                    inner_offset = next_offset;
17302                } else {
17303                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17304                    inner_depth.increment()?;
17305                }
17306                let val_ref = self
17307                    .quantization_params
17308                    .get_or_insert_with(|| fidl::new_empty!(H264QuantizationParameters, D));
17309                fidl::decode!(
17310                    H264QuantizationParameters,
17311                    D,
17312                    val_ref,
17313                    decoder,
17314                    inner_offset,
17315                    inner_depth
17316                )?;
17317                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17318                {
17319                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17320                }
17321                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17322                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17323                }
17324            }
17325
17326            next_offset += envelope_size;
17327
17328            // Decode the remaining unknown envelopes.
17329            while next_offset < end_offset {
17330                _next_ordinal_to_read += 1;
17331                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17332                next_offset += envelope_size;
17333            }
17334
17335            Ok(())
17336        }
17337    }
17338
17339    impl H264QuantizationParameters {
17340        #[inline(always)]
17341        fn max_ordinal_present(&self) -> u64 {
17342            if let Some(_) = self.p_max {
17343                return 6;
17344            }
17345            if let Some(_) = self.p_min {
17346                return 5;
17347            }
17348            if let Some(_) = self.p_base {
17349                return 4;
17350            }
17351            if let Some(_) = self.i_max {
17352                return 3;
17353            }
17354            if let Some(_) = self.i_min {
17355                return 2;
17356            }
17357            if let Some(_) = self.i_base {
17358                return 1;
17359            }
17360            0
17361        }
17362    }
17363
17364    impl fidl::encoding::ValueTypeMarker for H264QuantizationParameters {
17365        type Borrowed<'a> = &'a Self;
17366        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17367            value
17368        }
17369    }
17370
17371    unsafe impl fidl::encoding::TypeMarker for H264QuantizationParameters {
17372        type Owned = Self;
17373
17374        #[inline(always)]
17375        fn inline_align(_context: fidl::encoding::Context) -> usize {
17376            8
17377        }
17378
17379        #[inline(always)]
17380        fn inline_size(_context: fidl::encoding::Context) -> usize {
17381            16
17382        }
17383    }
17384
17385    unsafe impl<D: fidl::encoding::ResourceDialect>
17386        fidl::encoding::Encode<H264QuantizationParameters, D> for &H264QuantizationParameters
17387    {
17388        unsafe fn encode(
17389            self,
17390            encoder: &mut fidl::encoding::Encoder<'_, D>,
17391            offset: usize,
17392            mut depth: fidl::encoding::Depth,
17393        ) -> fidl::Result<()> {
17394            encoder.debug_check_bounds::<H264QuantizationParameters>(offset);
17395            // Vector header
17396            let max_ordinal: u64 = self.max_ordinal_present();
17397            encoder.write_num(max_ordinal, offset);
17398            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17399            // Calling encoder.out_of_line_offset(0) is not allowed.
17400            if max_ordinal == 0 {
17401                return Ok(());
17402            }
17403            depth.increment()?;
17404            let envelope_size = 8;
17405            let bytes_len = max_ordinal as usize * envelope_size;
17406            #[allow(unused_variables)]
17407            let offset = encoder.out_of_line_offset(bytes_len);
17408            let mut _prev_end_offset: usize = 0;
17409            if 1 > max_ordinal {
17410                return Ok(());
17411            }
17412
17413            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17414            // are envelope_size bytes.
17415            let cur_offset: usize = (1 - 1) * envelope_size;
17416
17417            // Zero reserved fields.
17418            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17419
17420            // Safety:
17421            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17422            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17423            //   envelope_size bytes, there is always sufficient room.
17424            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17425                self.i_base.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17426                encoder,
17427                offset + cur_offset,
17428                depth,
17429            )?;
17430
17431            _prev_end_offset = cur_offset + envelope_size;
17432            if 2 > max_ordinal {
17433                return Ok(());
17434            }
17435
17436            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17437            // are envelope_size bytes.
17438            let cur_offset: usize = (2 - 1) * envelope_size;
17439
17440            // Zero reserved fields.
17441            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17442
17443            // Safety:
17444            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17445            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17446            //   envelope_size bytes, there is always sufficient room.
17447            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17448                self.i_min.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17449                encoder,
17450                offset + cur_offset,
17451                depth,
17452            )?;
17453
17454            _prev_end_offset = cur_offset + envelope_size;
17455            if 3 > max_ordinal {
17456                return Ok(());
17457            }
17458
17459            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17460            // are envelope_size bytes.
17461            let cur_offset: usize = (3 - 1) * envelope_size;
17462
17463            // Zero reserved fields.
17464            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17465
17466            // Safety:
17467            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17468            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17469            //   envelope_size bytes, there is always sufficient room.
17470            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17471                self.i_max.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17472                encoder,
17473                offset + cur_offset,
17474                depth,
17475            )?;
17476
17477            _prev_end_offset = cur_offset + envelope_size;
17478            if 4 > max_ordinal {
17479                return Ok(());
17480            }
17481
17482            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17483            // are envelope_size bytes.
17484            let cur_offset: usize = (4 - 1) * envelope_size;
17485
17486            // Zero reserved fields.
17487            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17488
17489            // Safety:
17490            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17491            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17492            //   envelope_size bytes, there is always sufficient room.
17493            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17494                self.p_base.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17495                encoder,
17496                offset + cur_offset,
17497                depth,
17498            )?;
17499
17500            _prev_end_offset = cur_offset + envelope_size;
17501            if 5 > max_ordinal {
17502                return Ok(());
17503            }
17504
17505            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17506            // are envelope_size bytes.
17507            let cur_offset: usize = (5 - 1) * envelope_size;
17508
17509            // Zero reserved fields.
17510            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17511
17512            // Safety:
17513            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17514            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17515            //   envelope_size bytes, there is always sufficient room.
17516            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17517                self.p_min.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17518                encoder,
17519                offset + cur_offset,
17520                depth,
17521            )?;
17522
17523            _prev_end_offset = cur_offset + envelope_size;
17524            if 6 > max_ordinal {
17525                return Ok(());
17526            }
17527
17528            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17529            // are envelope_size bytes.
17530            let cur_offset: usize = (6 - 1) * envelope_size;
17531
17532            // Zero reserved fields.
17533            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17534
17535            // Safety:
17536            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17537            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17538            //   envelope_size bytes, there is always sufficient room.
17539            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17540                self.p_max.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17541                encoder,
17542                offset + cur_offset,
17543                depth,
17544            )?;
17545
17546            _prev_end_offset = cur_offset + envelope_size;
17547
17548            Ok(())
17549        }
17550    }
17551
17552    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
17553        for H264QuantizationParameters
17554    {
17555        #[inline(always)]
17556        fn new_empty() -> Self {
17557            Self::default()
17558        }
17559
17560        unsafe fn decode(
17561            &mut self,
17562            decoder: &mut fidl::encoding::Decoder<'_, D>,
17563            offset: usize,
17564            mut depth: fidl::encoding::Depth,
17565        ) -> fidl::Result<()> {
17566            decoder.debug_check_bounds::<Self>(offset);
17567            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17568                None => return Err(fidl::Error::NotNullable),
17569                Some(len) => len,
17570            };
17571            // Calling decoder.out_of_line_offset(0) is not allowed.
17572            if len == 0 {
17573                return Ok(());
17574            };
17575            depth.increment()?;
17576            let envelope_size = 8;
17577            let bytes_len = len * envelope_size;
17578            let offset = decoder.out_of_line_offset(bytes_len)?;
17579            // Decode the envelope for each type.
17580            let mut _next_ordinal_to_read = 0;
17581            let mut next_offset = offset;
17582            let end_offset = offset + bytes_len;
17583            _next_ordinal_to_read += 1;
17584            if next_offset >= end_offset {
17585                return Ok(());
17586            }
17587
17588            // Decode unknown envelopes for gaps in ordinals.
17589            while _next_ordinal_to_read < 1 {
17590                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17591                _next_ordinal_to_read += 1;
17592                next_offset += envelope_size;
17593            }
17594
17595            let next_out_of_line = decoder.next_out_of_line();
17596            let handles_before = decoder.remaining_handles();
17597            if let Some((inlined, num_bytes, num_handles)) =
17598                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17599            {
17600                let member_inline_size =
17601                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17602                if inlined != (member_inline_size <= 4) {
17603                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17604                }
17605                let inner_offset;
17606                let mut inner_depth = depth.clone();
17607                if inlined {
17608                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17609                    inner_offset = next_offset;
17610                } else {
17611                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17612                    inner_depth.increment()?;
17613                }
17614                let val_ref = self.i_base.get_or_insert_with(|| fidl::new_empty!(u32, D));
17615                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17616                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17617                {
17618                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17619                }
17620                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17621                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17622                }
17623            }
17624
17625            next_offset += envelope_size;
17626            _next_ordinal_to_read += 1;
17627            if next_offset >= end_offset {
17628                return Ok(());
17629            }
17630
17631            // Decode unknown envelopes for gaps in ordinals.
17632            while _next_ordinal_to_read < 2 {
17633                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17634                _next_ordinal_to_read += 1;
17635                next_offset += envelope_size;
17636            }
17637
17638            let next_out_of_line = decoder.next_out_of_line();
17639            let handles_before = decoder.remaining_handles();
17640            if let Some((inlined, num_bytes, num_handles)) =
17641                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17642            {
17643                let member_inline_size =
17644                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17645                if inlined != (member_inline_size <= 4) {
17646                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17647                }
17648                let inner_offset;
17649                let mut inner_depth = depth.clone();
17650                if inlined {
17651                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17652                    inner_offset = next_offset;
17653                } else {
17654                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17655                    inner_depth.increment()?;
17656                }
17657                let val_ref = self.i_min.get_or_insert_with(|| fidl::new_empty!(u32, D));
17658                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17659                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17660                {
17661                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17662                }
17663                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17664                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17665                }
17666            }
17667
17668            next_offset += envelope_size;
17669            _next_ordinal_to_read += 1;
17670            if next_offset >= end_offset {
17671                return Ok(());
17672            }
17673
17674            // Decode unknown envelopes for gaps in ordinals.
17675            while _next_ordinal_to_read < 3 {
17676                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17677                _next_ordinal_to_read += 1;
17678                next_offset += envelope_size;
17679            }
17680
17681            let next_out_of_line = decoder.next_out_of_line();
17682            let handles_before = decoder.remaining_handles();
17683            if let Some((inlined, num_bytes, num_handles)) =
17684                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17685            {
17686                let member_inline_size =
17687                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17688                if inlined != (member_inline_size <= 4) {
17689                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17690                }
17691                let inner_offset;
17692                let mut inner_depth = depth.clone();
17693                if inlined {
17694                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17695                    inner_offset = next_offset;
17696                } else {
17697                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17698                    inner_depth.increment()?;
17699                }
17700                let val_ref = self.i_max.get_or_insert_with(|| fidl::new_empty!(u32, D));
17701                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17702                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17703                {
17704                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17705                }
17706                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17707                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17708                }
17709            }
17710
17711            next_offset += envelope_size;
17712            _next_ordinal_to_read += 1;
17713            if next_offset >= end_offset {
17714                return Ok(());
17715            }
17716
17717            // Decode unknown envelopes for gaps in ordinals.
17718            while _next_ordinal_to_read < 4 {
17719                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17720                _next_ordinal_to_read += 1;
17721                next_offset += envelope_size;
17722            }
17723
17724            let next_out_of_line = decoder.next_out_of_line();
17725            let handles_before = decoder.remaining_handles();
17726            if let Some((inlined, num_bytes, num_handles)) =
17727                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17728            {
17729                let member_inline_size =
17730                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17731                if inlined != (member_inline_size <= 4) {
17732                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17733                }
17734                let inner_offset;
17735                let mut inner_depth = depth.clone();
17736                if inlined {
17737                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17738                    inner_offset = next_offset;
17739                } else {
17740                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17741                    inner_depth.increment()?;
17742                }
17743                let val_ref = self.p_base.get_or_insert_with(|| fidl::new_empty!(u32, D));
17744                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17745                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17746                {
17747                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17748                }
17749                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17750                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17751                }
17752            }
17753
17754            next_offset += envelope_size;
17755            _next_ordinal_to_read += 1;
17756            if next_offset >= end_offset {
17757                return Ok(());
17758            }
17759
17760            // Decode unknown envelopes for gaps in ordinals.
17761            while _next_ordinal_to_read < 5 {
17762                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17763                _next_ordinal_to_read += 1;
17764                next_offset += envelope_size;
17765            }
17766
17767            let next_out_of_line = decoder.next_out_of_line();
17768            let handles_before = decoder.remaining_handles();
17769            if let Some((inlined, num_bytes, num_handles)) =
17770                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17771            {
17772                let member_inline_size =
17773                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17774                if inlined != (member_inline_size <= 4) {
17775                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17776                }
17777                let inner_offset;
17778                let mut inner_depth = depth.clone();
17779                if inlined {
17780                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17781                    inner_offset = next_offset;
17782                } else {
17783                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17784                    inner_depth.increment()?;
17785                }
17786                let val_ref = self.p_min.get_or_insert_with(|| fidl::new_empty!(u32, D));
17787                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17789                {
17790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17791                }
17792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17794                }
17795            }
17796
17797            next_offset += envelope_size;
17798            _next_ordinal_to_read += 1;
17799            if next_offset >= end_offset {
17800                return Ok(());
17801            }
17802
17803            // Decode unknown envelopes for gaps in ordinals.
17804            while _next_ordinal_to_read < 6 {
17805                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17806                _next_ordinal_to_read += 1;
17807                next_offset += envelope_size;
17808            }
17809
17810            let next_out_of_line = decoder.next_out_of_line();
17811            let handles_before = decoder.remaining_handles();
17812            if let Some((inlined, num_bytes, num_handles)) =
17813                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17814            {
17815                let member_inline_size =
17816                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17817                if inlined != (member_inline_size <= 4) {
17818                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17819                }
17820                let inner_offset;
17821                let mut inner_depth = depth.clone();
17822                if inlined {
17823                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17824                    inner_offset = next_offset;
17825                } else {
17826                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17827                    inner_depth.increment()?;
17828                }
17829                let val_ref = self.p_max.get_or_insert_with(|| fidl::new_empty!(u32, D));
17830                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17831                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17832                {
17833                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17834                }
17835                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17836                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17837                }
17838            }
17839
17840            next_offset += envelope_size;
17841
17842            // Decode the remaining unknown envelopes.
17843            while next_offset < end_offset {
17844                _next_ordinal_to_read += 1;
17845                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17846                next_offset += envelope_size;
17847            }
17848
17849            Ok(())
17850        }
17851    }
17852
17853    impl HevcEncoderSettings {
17854        #[inline(always)]
17855        fn max_ordinal_present(&self) -> u64 {
17856            if let Some(_) = self.gop_size {
17857                return 3;
17858            }
17859            if let Some(_) = self.frame_rate {
17860                return 2;
17861            }
17862            if let Some(_) = self.bit_rate {
17863                return 1;
17864            }
17865            0
17866        }
17867    }
17868
17869    impl fidl::encoding::ValueTypeMarker for HevcEncoderSettings {
17870        type Borrowed<'a> = &'a Self;
17871        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17872            value
17873        }
17874    }
17875
17876    unsafe impl fidl::encoding::TypeMarker for HevcEncoderSettings {
17877        type Owned = Self;
17878
17879        #[inline(always)]
17880        fn inline_align(_context: fidl::encoding::Context) -> usize {
17881            8
17882        }
17883
17884        #[inline(always)]
17885        fn inline_size(_context: fidl::encoding::Context) -> usize {
17886            16
17887        }
17888    }
17889
17890    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HevcEncoderSettings, D>
17891        for &HevcEncoderSettings
17892    {
17893        unsafe fn encode(
17894            self,
17895            encoder: &mut fidl::encoding::Encoder<'_, D>,
17896            offset: usize,
17897            mut depth: fidl::encoding::Depth,
17898        ) -> fidl::Result<()> {
17899            encoder.debug_check_bounds::<HevcEncoderSettings>(offset);
17900            // Vector header
17901            let max_ordinal: u64 = self.max_ordinal_present();
17902            encoder.write_num(max_ordinal, offset);
17903            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17904            // Calling encoder.out_of_line_offset(0) is not allowed.
17905            if max_ordinal == 0 {
17906                return Ok(());
17907            }
17908            depth.increment()?;
17909            let envelope_size = 8;
17910            let bytes_len = max_ordinal as usize * envelope_size;
17911            #[allow(unused_variables)]
17912            let offset = encoder.out_of_line_offset(bytes_len);
17913            let mut _prev_end_offset: usize = 0;
17914            if 1 > max_ordinal {
17915                return Ok(());
17916            }
17917
17918            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17919            // are envelope_size bytes.
17920            let cur_offset: usize = (1 - 1) * envelope_size;
17921
17922            // Zero reserved fields.
17923            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17924
17925            // Safety:
17926            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17927            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17928            //   envelope_size bytes, there is always sufficient room.
17929            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17930                self.bit_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17931                encoder,
17932                offset + cur_offset,
17933                depth,
17934            )?;
17935
17936            _prev_end_offset = cur_offset + envelope_size;
17937            if 2 > max_ordinal {
17938                return Ok(());
17939            }
17940
17941            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17942            // are envelope_size bytes.
17943            let cur_offset: usize = (2 - 1) * envelope_size;
17944
17945            // Zero reserved fields.
17946            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17947
17948            // Safety:
17949            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17950            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17951            //   envelope_size bytes, there is always sufficient room.
17952            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17953                self.frame_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17954                encoder,
17955                offset + cur_offset,
17956                depth,
17957            )?;
17958
17959            _prev_end_offset = cur_offset + envelope_size;
17960            if 3 > max_ordinal {
17961                return Ok(());
17962            }
17963
17964            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17965            // are envelope_size bytes.
17966            let cur_offset: usize = (3 - 1) * envelope_size;
17967
17968            // Zero reserved fields.
17969            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17970
17971            // Safety:
17972            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17973            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17974            //   envelope_size bytes, there is always sufficient room.
17975            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17976                self.gop_size.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17977                encoder,
17978                offset + cur_offset,
17979                depth,
17980            )?;
17981
17982            _prev_end_offset = cur_offset + envelope_size;
17983
17984            Ok(())
17985        }
17986    }
17987
17988    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HevcEncoderSettings {
17989        #[inline(always)]
17990        fn new_empty() -> Self {
17991            Self::default()
17992        }
17993
17994        unsafe fn decode(
17995            &mut self,
17996            decoder: &mut fidl::encoding::Decoder<'_, D>,
17997            offset: usize,
17998            mut depth: fidl::encoding::Depth,
17999        ) -> fidl::Result<()> {
18000            decoder.debug_check_bounds::<Self>(offset);
18001            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18002                None => return Err(fidl::Error::NotNullable),
18003                Some(len) => len,
18004            };
18005            // Calling decoder.out_of_line_offset(0) is not allowed.
18006            if len == 0 {
18007                return Ok(());
18008            };
18009            depth.increment()?;
18010            let envelope_size = 8;
18011            let bytes_len = len * envelope_size;
18012            let offset = decoder.out_of_line_offset(bytes_len)?;
18013            // Decode the envelope for each type.
18014            let mut _next_ordinal_to_read = 0;
18015            let mut next_offset = offset;
18016            let end_offset = offset + bytes_len;
18017            _next_ordinal_to_read += 1;
18018            if next_offset >= end_offset {
18019                return Ok(());
18020            }
18021
18022            // Decode unknown envelopes for gaps in ordinals.
18023            while _next_ordinal_to_read < 1 {
18024                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18025                _next_ordinal_to_read += 1;
18026                next_offset += envelope_size;
18027            }
18028
18029            let next_out_of_line = decoder.next_out_of_line();
18030            let handles_before = decoder.remaining_handles();
18031            if let Some((inlined, num_bytes, num_handles)) =
18032                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18033            {
18034                let member_inline_size =
18035                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18036                if inlined != (member_inline_size <= 4) {
18037                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18038                }
18039                let inner_offset;
18040                let mut inner_depth = depth.clone();
18041                if inlined {
18042                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18043                    inner_offset = next_offset;
18044                } else {
18045                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18046                    inner_depth.increment()?;
18047                }
18048                let val_ref = self.bit_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
18049                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18050                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18051                {
18052                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18053                }
18054                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18055                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18056                }
18057            }
18058
18059            next_offset += envelope_size;
18060            _next_ordinal_to_read += 1;
18061            if next_offset >= end_offset {
18062                return Ok(());
18063            }
18064
18065            // Decode unknown envelopes for gaps in ordinals.
18066            while _next_ordinal_to_read < 2 {
18067                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18068                _next_ordinal_to_read += 1;
18069                next_offset += envelope_size;
18070            }
18071
18072            let next_out_of_line = decoder.next_out_of_line();
18073            let handles_before = decoder.remaining_handles();
18074            if let Some((inlined, num_bytes, num_handles)) =
18075                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18076            {
18077                let member_inline_size =
18078                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18079                if inlined != (member_inline_size <= 4) {
18080                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18081                }
18082                let inner_offset;
18083                let mut inner_depth = depth.clone();
18084                if inlined {
18085                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18086                    inner_offset = next_offset;
18087                } else {
18088                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18089                    inner_depth.increment()?;
18090                }
18091                let val_ref = self.frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
18092                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18093                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18094                {
18095                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18096                }
18097                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18098                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18099                }
18100            }
18101
18102            next_offset += envelope_size;
18103            _next_ordinal_to_read += 1;
18104            if next_offset >= end_offset {
18105                return Ok(());
18106            }
18107
18108            // Decode unknown envelopes for gaps in ordinals.
18109            while _next_ordinal_to_read < 3 {
18110                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18111                _next_ordinal_to_read += 1;
18112                next_offset += envelope_size;
18113            }
18114
18115            let next_out_of_line = decoder.next_out_of_line();
18116            let handles_before = decoder.remaining_handles();
18117            if let Some((inlined, num_bytes, num_handles)) =
18118                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18119            {
18120                let member_inline_size =
18121                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18122                if inlined != (member_inline_size <= 4) {
18123                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18124                }
18125                let inner_offset;
18126                let mut inner_depth = depth.clone();
18127                if inlined {
18128                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18129                    inner_offset = next_offset;
18130                } else {
18131                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18132                    inner_depth.increment()?;
18133                }
18134                let val_ref = self.gop_size.get_or_insert_with(|| fidl::new_empty!(u32, D));
18135                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18136                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18137                {
18138                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18139                }
18140                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18141                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18142                }
18143            }
18144
18145            next_offset += envelope_size;
18146
18147            // Decode the remaining unknown envelopes.
18148            while next_offset < end_offset {
18149                _next_ordinal_to_read += 1;
18150                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18151                next_offset += envelope_size;
18152            }
18153
18154            Ok(())
18155        }
18156    }
18157
18158    impl InputAudioCapturerConfiguration {
18159        #[inline(always)]
18160        fn max_ordinal_present(&self) -> u64 {
18161            if let Some(_) = self.usage2 {
18162                return 2;
18163            }
18164            if let Some(_) = self.usage {
18165                return 1;
18166            }
18167            0
18168        }
18169    }
18170
18171    impl fidl::encoding::ValueTypeMarker for InputAudioCapturerConfiguration {
18172        type Borrowed<'a> = &'a Self;
18173        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18174            value
18175        }
18176    }
18177
18178    unsafe impl fidl::encoding::TypeMarker for InputAudioCapturerConfiguration {
18179        type Owned = Self;
18180
18181        #[inline(always)]
18182        fn inline_align(_context: fidl::encoding::Context) -> usize {
18183            8
18184        }
18185
18186        #[inline(always)]
18187        fn inline_size(_context: fidl::encoding::Context) -> usize {
18188            16
18189        }
18190    }
18191
18192    unsafe impl<D: fidl::encoding::ResourceDialect>
18193        fidl::encoding::Encode<InputAudioCapturerConfiguration, D>
18194        for &InputAudioCapturerConfiguration
18195    {
18196        unsafe fn encode(
18197            self,
18198            encoder: &mut fidl::encoding::Encoder<'_, D>,
18199            offset: usize,
18200            mut depth: fidl::encoding::Depth,
18201        ) -> fidl::Result<()> {
18202            encoder.debug_check_bounds::<InputAudioCapturerConfiguration>(offset);
18203            // Vector header
18204            let max_ordinal: u64 = self.max_ordinal_present();
18205            encoder.write_num(max_ordinal, offset);
18206            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18207            // Calling encoder.out_of_line_offset(0) is not allowed.
18208            if max_ordinal == 0 {
18209                return Ok(());
18210            }
18211            depth.increment()?;
18212            let envelope_size = 8;
18213            let bytes_len = max_ordinal as usize * envelope_size;
18214            #[allow(unused_variables)]
18215            let offset = encoder.out_of_line_offset(bytes_len);
18216            let mut _prev_end_offset: usize = 0;
18217            if 1 > max_ordinal {
18218                return Ok(());
18219            }
18220
18221            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18222            // are envelope_size bytes.
18223            let cur_offset: usize = (1 - 1) * envelope_size;
18224
18225            // Zero reserved fields.
18226            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18227
18228            // Safety:
18229            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18230            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18231            //   envelope_size bytes, there is always sufficient room.
18232            fidl::encoding::encode_in_envelope_optional::<AudioCaptureUsage, D>(
18233                self.usage
18234                    .as_ref()
18235                    .map(<AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow),
18236                encoder,
18237                offset + cur_offset,
18238                depth,
18239            )?;
18240
18241            _prev_end_offset = cur_offset + envelope_size;
18242            if 2 > max_ordinal {
18243                return Ok(());
18244            }
18245
18246            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18247            // are envelope_size bytes.
18248            let cur_offset: usize = (2 - 1) * envelope_size;
18249
18250            // Zero reserved fields.
18251            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18252
18253            // Safety:
18254            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18255            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18256            //   envelope_size bytes, there is always sufficient room.
18257            fidl::encoding::encode_in_envelope_optional::<AudioCaptureUsage2, D>(
18258                self.usage2
18259                    .as_ref()
18260                    .map(<AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow),
18261                encoder,
18262                offset + cur_offset,
18263                depth,
18264            )?;
18265
18266            _prev_end_offset = cur_offset + envelope_size;
18267
18268            Ok(())
18269        }
18270    }
18271
18272    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
18273        for InputAudioCapturerConfiguration
18274    {
18275        #[inline(always)]
18276        fn new_empty() -> Self {
18277            Self::default()
18278        }
18279
18280        unsafe fn decode(
18281            &mut self,
18282            decoder: &mut fidl::encoding::Decoder<'_, D>,
18283            offset: usize,
18284            mut depth: fidl::encoding::Depth,
18285        ) -> fidl::Result<()> {
18286            decoder.debug_check_bounds::<Self>(offset);
18287            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18288                None => return Err(fidl::Error::NotNullable),
18289                Some(len) => len,
18290            };
18291            // Calling decoder.out_of_line_offset(0) is not allowed.
18292            if len == 0 {
18293                return Ok(());
18294            };
18295            depth.increment()?;
18296            let envelope_size = 8;
18297            let bytes_len = len * envelope_size;
18298            let offset = decoder.out_of_line_offset(bytes_len)?;
18299            // Decode the envelope for each type.
18300            let mut _next_ordinal_to_read = 0;
18301            let mut next_offset = offset;
18302            let end_offset = offset + bytes_len;
18303            _next_ordinal_to_read += 1;
18304            if next_offset >= end_offset {
18305                return Ok(());
18306            }
18307
18308            // Decode unknown envelopes for gaps in ordinals.
18309            while _next_ordinal_to_read < 1 {
18310                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18311                _next_ordinal_to_read += 1;
18312                next_offset += envelope_size;
18313            }
18314
18315            let next_out_of_line = decoder.next_out_of_line();
18316            let handles_before = decoder.remaining_handles();
18317            if let Some((inlined, num_bytes, num_handles)) =
18318                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18319            {
18320                let member_inline_size =
18321                    <AudioCaptureUsage as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18322                if inlined != (member_inline_size <= 4) {
18323                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18324                }
18325                let inner_offset;
18326                let mut inner_depth = depth.clone();
18327                if inlined {
18328                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18329                    inner_offset = next_offset;
18330                } else {
18331                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18332                    inner_depth.increment()?;
18333                }
18334                let val_ref =
18335                    self.usage.get_or_insert_with(|| fidl::new_empty!(AudioCaptureUsage, D));
18336                fidl::decode!(AudioCaptureUsage, D, val_ref, decoder, inner_offset, inner_depth)?;
18337                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18338                {
18339                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18340                }
18341                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18342                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18343                }
18344            }
18345
18346            next_offset += envelope_size;
18347            _next_ordinal_to_read += 1;
18348            if next_offset >= end_offset {
18349                return Ok(());
18350            }
18351
18352            // Decode unknown envelopes for gaps in ordinals.
18353            while _next_ordinal_to_read < 2 {
18354                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18355                _next_ordinal_to_read += 1;
18356                next_offset += envelope_size;
18357            }
18358
18359            let next_out_of_line = decoder.next_out_of_line();
18360            let handles_before = decoder.remaining_handles();
18361            if let Some((inlined, num_bytes, num_handles)) =
18362                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18363            {
18364                let member_inline_size =
18365                    <AudioCaptureUsage2 as fidl::encoding::TypeMarker>::inline_size(
18366                        decoder.context,
18367                    );
18368                if inlined != (member_inline_size <= 4) {
18369                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18370                }
18371                let inner_offset;
18372                let mut inner_depth = depth.clone();
18373                if inlined {
18374                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18375                    inner_offset = next_offset;
18376                } else {
18377                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18378                    inner_depth.increment()?;
18379                }
18380                let val_ref =
18381                    self.usage2.get_or_insert_with(|| fidl::new_empty!(AudioCaptureUsage2, D));
18382                fidl::decode!(AudioCaptureUsage2, D, val_ref, decoder, inner_offset, inner_depth)?;
18383                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18384                {
18385                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18386                }
18387                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18388                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18389                }
18390            }
18391
18392            next_offset += envelope_size;
18393
18394            // Decode the remaining unknown envelopes.
18395            while next_offset < end_offset {
18396                _next_ordinal_to_read += 1;
18397                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18398                next_offset += envelope_size;
18399            }
18400
18401            Ok(())
18402        }
18403    }
18404
18405    impl Lc3EncoderSettings {
18406        #[inline(always)]
18407        fn max_ordinal_present(&self) -> u64 {
18408            if let Some(_) = self.frame_duration {
18409                return 2;
18410            }
18411            if let Some(_) = self.nbytes {
18412                return 1;
18413            }
18414            0
18415        }
18416    }
18417
18418    impl fidl::encoding::ValueTypeMarker for Lc3EncoderSettings {
18419        type Borrowed<'a> = &'a Self;
18420        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18421            value
18422        }
18423    }
18424
18425    unsafe impl fidl::encoding::TypeMarker for Lc3EncoderSettings {
18426        type Owned = Self;
18427
18428        #[inline(always)]
18429        fn inline_align(_context: fidl::encoding::Context) -> usize {
18430            8
18431        }
18432
18433        #[inline(always)]
18434        fn inline_size(_context: fidl::encoding::Context) -> usize {
18435            16
18436        }
18437    }
18438
18439    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Lc3EncoderSettings, D>
18440        for &Lc3EncoderSettings
18441    {
18442        unsafe fn encode(
18443            self,
18444            encoder: &mut fidl::encoding::Encoder<'_, D>,
18445            offset: usize,
18446            mut depth: fidl::encoding::Depth,
18447        ) -> fidl::Result<()> {
18448            encoder.debug_check_bounds::<Lc3EncoderSettings>(offset);
18449            // Vector header
18450            let max_ordinal: u64 = self.max_ordinal_present();
18451            encoder.write_num(max_ordinal, offset);
18452            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18453            // Calling encoder.out_of_line_offset(0) is not allowed.
18454            if max_ordinal == 0 {
18455                return Ok(());
18456            }
18457            depth.increment()?;
18458            let envelope_size = 8;
18459            let bytes_len = max_ordinal as usize * envelope_size;
18460            #[allow(unused_variables)]
18461            let offset = encoder.out_of_line_offset(bytes_len);
18462            let mut _prev_end_offset: usize = 0;
18463            if 1 > max_ordinal {
18464                return Ok(());
18465            }
18466
18467            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18468            // are envelope_size bytes.
18469            let cur_offset: usize = (1 - 1) * envelope_size;
18470
18471            // Zero reserved fields.
18472            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18473
18474            // Safety:
18475            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18476            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18477            //   envelope_size bytes, there is always sufficient room.
18478            fidl::encoding::encode_in_envelope_optional::<u16, D>(
18479                self.nbytes.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
18480                encoder,
18481                offset + cur_offset,
18482                depth,
18483            )?;
18484
18485            _prev_end_offset = cur_offset + envelope_size;
18486            if 2 > max_ordinal {
18487                return Ok(());
18488            }
18489
18490            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18491            // are envelope_size bytes.
18492            let cur_offset: usize = (2 - 1) * envelope_size;
18493
18494            // Zero reserved fields.
18495            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18496
18497            // Safety:
18498            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18499            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18500            //   envelope_size bytes, there is always sufficient room.
18501            fidl::encoding::encode_in_envelope_optional::<Lc3FrameDuration, D>(
18502                self.frame_duration
18503                    .as_ref()
18504                    .map(<Lc3FrameDuration as fidl::encoding::ValueTypeMarker>::borrow),
18505                encoder,
18506                offset + cur_offset,
18507                depth,
18508            )?;
18509
18510            _prev_end_offset = cur_offset + envelope_size;
18511
18512            Ok(())
18513        }
18514    }
18515
18516    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Lc3EncoderSettings {
18517        #[inline(always)]
18518        fn new_empty() -> Self {
18519            Self::default()
18520        }
18521
18522        unsafe fn decode(
18523            &mut self,
18524            decoder: &mut fidl::encoding::Decoder<'_, D>,
18525            offset: usize,
18526            mut depth: fidl::encoding::Depth,
18527        ) -> fidl::Result<()> {
18528            decoder.debug_check_bounds::<Self>(offset);
18529            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18530                None => return Err(fidl::Error::NotNullable),
18531                Some(len) => len,
18532            };
18533            // Calling decoder.out_of_line_offset(0) is not allowed.
18534            if len == 0 {
18535                return Ok(());
18536            };
18537            depth.increment()?;
18538            let envelope_size = 8;
18539            let bytes_len = len * envelope_size;
18540            let offset = decoder.out_of_line_offset(bytes_len)?;
18541            // Decode the envelope for each type.
18542            let mut _next_ordinal_to_read = 0;
18543            let mut next_offset = offset;
18544            let end_offset = offset + bytes_len;
18545            _next_ordinal_to_read += 1;
18546            if next_offset >= end_offset {
18547                return Ok(());
18548            }
18549
18550            // Decode unknown envelopes for gaps in ordinals.
18551            while _next_ordinal_to_read < 1 {
18552                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18553                _next_ordinal_to_read += 1;
18554                next_offset += envelope_size;
18555            }
18556
18557            let next_out_of_line = decoder.next_out_of_line();
18558            let handles_before = decoder.remaining_handles();
18559            if let Some((inlined, num_bytes, num_handles)) =
18560                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18561            {
18562                let member_inline_size =
18563                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18564                if inlined != (member_inline_size <= 4) {
18565                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18566                }
18567                let inner_offset;
18568                let mut inner_depth = depth.clone();
18569                if inlined {
18570                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18571                    inner_offset = next_offset;
18572                } else {
18573                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18574                    inner_depth.increment()?;
18575                }
18576                let val_ref = self.nbytes.get_or_insert_with(|| fidl::new_empty!(u16, D));
18577                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
18578                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18579                {
18580                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18581                }
18582                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18583                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18584                }
18585            }
18586
18587            next_offset += envelope_size;
18588            _next_ordinal_to_read += 1;
18589            if next_offset >= end_offset {
18590                return Ok(());
18591            }
18592
18593            // Decode unknown envelopes for gaps in ordinals.
18594            while _next_ordinal_to_read < 2 {
18595                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18596                _next_ordinal_to_read += 1;
18597                next_offset += envelope_size;
18598            }
18599
18600            let next_out_of_line = decoder.next_out_of_line();
18601            let handles_before = decoder.remaining_handles();
18602            if let Some((inlined, num_bytes, num_handles)) =
18603                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18604            {
18605                let member_inline_size =
18606                    <Lc3FrameDuration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18607                if inlined != (member_inline_size <= 4) {
18608                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18609                }
18610                let inner_offset;
18611                let mut inner_depth = depth.clone();
18612                if inlined {
18613                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18614                    inner_offset = next_offset;
18615                } else {
18616                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18617                    inner_depth.increment()?;
18618                }
18619                let val_ref = self
18620                    .frame_duration
18621                    .get_or_insert_with(|| fidl::new_empty!(Lc3FrameDuration, D));
18622                fidl::decode!(Lc3FrameDuration, D, val_ref, decoder, inner_offset, inner_depth)?;
18623                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18624                {
18625                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18626                }
18627                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18628                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18629                }
18630            }
18631
18632            next_offset += envelope_size;
18633
18634            // Decode the remaining unknown envelopes.
18635            while next_offset < end_offset {
18636                _next_ordinal_to_read += 1;
18637                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18638                next_offset += envelope_size;
18639            }
18640
18641            Ok(())
18642        }
18643    }
18644
18645    impl LoopbackAudioCapturerConfiguration {
18646        #[inline(always)]
18647        fn max_ordinal_present(&self) -> u64 {
18648            0
18649        }
18650    }
18651
18652    impl fidl::encoding::ValueTypeMarker for LoopbackAudioCapturerConfiguration {
18653        type Borrowed<'a> = &'a Self;
18654        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18655            value
18656        }
18657    }
18658
18659    unsafe impl fidl::encoding::TypeMarker for LoopbackAudioCapturerConfiguration {
18660        type Owned = Self;
18661
18662        #[inline(always)]
18663        fn inline_align(_context: fidl::encoding::Context) -> usize {
18664            8
18665        }
18666
18667        #[inline(always)]
18668        fn inline_size(_context: fidl::encoding::Context) -> usize {
18669            16
18670        }
18671    }
18672
18673    unsafe impl<D: fidl::encoding::ResourceDialect>
18674        fidl::encoding::Encode<LoopbackAudioCapturerConfiguration, D>
18675        for &LoopbackAudioCapturerConfiguration
18676    {
18677        unsafe fn encode(
18678            self,
18679            encoder: &mut fidl::encoding::Encoder<'_, D>,
18680            offset: usize,
18681            mut depth: fidl::encoding::Depth,
18682        ) -> fidl::Result<()> {
18683            encoder.debug_check_bounds::<LoopbackAudioCapturerConfiguration>(offset);
18684            // Vector header
18685            let max_ordinal: u64 = self.max_ordinal_present();
18686            encoder.write_num(max_ordinal, offset);
18687            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18688            // Calling encoder.out_of_line_offset(0) is not allowed.
18689            if max_ordinal == 0 {
18690                return Ok(());
18691            }
18692            depth.increment()?;
18693            let envelope_size = 8;
18694            let bytes_len = max_ordinal as usize * envelope_size;
18695            #[allow(unused_variables)]
18696            let offset = encoder.out_of_line_offset(bytes_len);
18697            let mut _prev_end_offset: usize = 0;
18698
18699            Ok(())
18700        }
18701    }
18702
18703    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
18704        for LoopbackAudioCapturerConfiguration
18705    {
18706        #[inline(always)]
18707        fn new_empty() -> Self {
18708            Self::default()
18709        }
18710
18711        unsafe fn decode(
18712            &mut self,
18713            decoder: &mut fidl::encoding::Decoder<'_, D>,
18714            offset: usize,
18715            mut depth: fidl::encoding::Depth,
18716        ) -> fidl::Result<()> {
18717            decoder.debug_check_bounds::<Self>(offset);
18718            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18719                None => return Err(fidl::Error::NotNullable),
18720                Some(len) => len,
18721            };
18722            // Calling decoder.out_of_line_offset(0) is not allowed.
18723            if len == 0 {
18724                return Ok(());
18725            };
18726            depth.increment()?;
18727            let envelope_size = 8;
18728            let bytes_len = len * envelope_size;
18729            let offset = decoder.out_of_line_offset(bytes_len)?;
18730            // Decode the envelope for each type.
18731            let mut _next_ordinal_to_read = 0;
18732            let mut next_offset = offset;
18733            let end_offset = offset + bytes_len;
18734
18735            // Decode the remaining unknown envelopes.
18736            while next_offset < end_offset {
18737                _next_ordinal_to_read += 1;
18738                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18739                next_offset += envelope_size;
18740            }
18741
18742            Ok(())
18743        }
18744    }
18745
18746    impl MSbcEncoderSettings {
18747        #[inline(always)]
18748        fn max_ordinal_present(&self) -> u64 {
18749            0
18750        }
18751    }
18752
18753    impl fidl::encoding::ValueTypeMarker for MSbcEncoderSettings {
18754        type Borrowed<'a> = &'a Self;
18755        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18756            value
18757        }
18758    }
18759
18760    unsafe impl fidl::encoding::TypeMarker for MSbcEncoderSettings {
18761        type Owned = Self;
18762
18763        #[inline(always)]
18764        fn inline_align(_context: fidl::encoding::Context) -> usize {
18765            8
18766        }
18767
18768        #[inline(always)]
18769        fn inline_size(_context: fidl::encoding::Context) -> usize {
18770            16
18771        }
18772    }
18773
18774    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MSbcEncoderSettings, D>
18775        for &MSbcEncoderSettings
18776    {
18777        unsafe fn encode(
18778            self,
18779            encoder: &mut fidl::encoding::Encoder<'_, D>,
18780            offset: usize,
18781            mut depth: fidl::encoding::Depth,
18782        ) -> fidl::Result<()> {
18783            encoder.debug_check_bounds::<MSbcEncoderSettings>(offset);
18784            // Vector header
18785            let max_ordinal: u64 = self.max_ordinal_present();
18786            encoder.write_num(max_ordinal, offset);
18787            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18788            // Calling encoder.out_of_line_offset(0) is not allowed.
18789            if max_ordinal == 0 {
18790                return Ok(());
18791            }
18792            depth.increment()?;
18793            let envelope_size = 8;
18794            let bytes_len = max_ordinal as usize * envelope_size;
18795            #[allow(unused_variables)]
18796            let offset = encoder.out_of_line_offset(bytes_len);
18797            let mut _prev_end_offset: usize = 0;
18798
18799            Ok(())
18800        }
18801    }
18802
18803    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MSbcEncoderSettings {
18804        #[inline(always)]
18805        fn new_empty() -> Self {
18806            Self::default()
18807        }
18808
18809        unsafe fn decode(
18810            &mut self,
18811            decoder: &mut fidl::encoding::Decoder<'_, D>,
18812            offset: usize,
18813            mut depth: fidl::encoding::Depth,
18814        ) -> fidl::Result<()> {
18815            decoder.debug_check_bounds::<Self>(offset);
18816            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18817                None => return Err(fidl::Error::NotNullable),
18818                Some(len) => len,
18819            };
18820            // Calling decoder.out_of_line_offset(0) is not allowed.
18821            if len == 0 {
18822                return Ok(());
18823            };
18824            depth.increment()?;
18825            let envelope_size = 8;
18826            let bytes_len = len * envelope_size;
18827            let offset = decoder.out_of_line_offset(bytes_len)?;
18828            // Decode the envelope for each type.
18829            let mut _next_ordinal_to_read = 0;
18830            let mut next_offset = offset;
18831            let end_offset = offset + bytes_len;
18832
18833            // Decode the remaining unknown envelopes.
18834            while next_offset < end_offset {
18835                _next_ordinal_to_read += 1;
18836                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18837                next_offset += envelope_size;
18838            }
18839
18840            Ok(())
18841        }
18842    }
18843
18844    impl Packet {
18845        #[inline(always)]
18846        fn max_ordinal_present(&self) -> u64 {
18847            if let Some(_) = self.key_frame {
18848                return 9;
18849            }
18850            if let Some(_) = self.known_end_access_unit {
18851                return 8;
18852            }
18853            if let Some(_) = self.start_access_unit {
18854                return 7;
18855            }
18856            if let Some(_) = self.timestamp_ish {
18857                return 6;
18858            }
18859            if let Some(_) = self.valid_length_bytes {
18860                return 5;
18861            }
18862            if let Some(_) = self.start_offset {
18863                return 4;
18864            }
18865            if let Some(_) = self.stream_lifetime_ordinal {
18866                return 3;
18867            }
18868            if let Some(_) = self.buffer_index {
18869                return 2;
18870            }
18871            if let Some(_) = self.header {
18872                return 1;
18873            }
18874            0
18875        }
18876    }
18877
18878    impl fidl::encoding::ValueTypeMarker for Packet {
18879        type Borrowed<'a> = &'a Self;
18880        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18881            value
18882        }
18883    }
18884
18885    unsafe impl fidl::encoding::TypeMarker for Packet {
18886        type Owned = Self;
18887
18888        #[inline(always)]
18889        fn inline_align(_context: fidl::encoding::Context) -> usize {
18890            8
18891        }
18892
18893        #[inline(always)]
18894        fn inline_size(_context: fidl::encoding::Context) -> usize {
18895            16
18896        }
18897    }
18898
18899    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Packet, D> for &Packet {
18900        unsafe fn encode(
18901            self,
18902            encoder: &mut fidl::encoding::Encoder<'_, D>,
18903            offset: usize,
18904            mut depth: fidl::encoding::Depth,
18905        ) -> fidl::Result<()> {
18906            encoder.debug_check_bounds::<Packet>(offset);
18907            // Vector header
18908            let max_ordinal: u64 = self.max_ordinal_present();
18909            encoder.write_num(max_ordinal, offset);
18910            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18911            // Calling encoder.out_of_line_offset(0) is not allowed.
18912            if max_ordinal == 0 {
18913                return Ok(());
18914            }
18915            depth.increment()?;
18916            let envelope_size = 8;
18917            let bytes_len = max_ordinal as usize * envelope_size;
18918            #[allow(unused_variables)]
18919            let offset = encoder.out_of_line_offset(bytes_len);
18920            let mut _prev_end_offset: usize = 0;
18921            if 1 > max_ordinal {
18922                return Ok(());
18923            }
18924
18925            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18926            // are envelope_size bytes.
18927            let cur_offset: usize = (1 - 1) * envelope_size;
18928
18929            // Zero reserved fields.
18930            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18931
18932            // Safety:
18933            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18934            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18935            //   envelope_size bytes, there is always sufficient room.
18936            fidl::encoding::encode_in_envelope_optional::<PacketHeader, D>(
18937                self.header.as_ref().map(<PacketHeader as fidl::encoding::ValueTypeMarker>::borrow),
18938                encoder,
18939                offset + cur_offset,
18940                depth,
18941            )?;
18942
18943            _prev_end_offset = cur_offset + envelope_size;
18944            if 2 > max_ordinal {
18945                return Ok(());
18946            }
18947
18948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18949            // are envelope_size bytes.
18950            let cur_offset: usize = (2 - 1) * envelope_size;
18951
18952            // Zero reserved fields.
18953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18954
18955            // Safety:
18956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18958            //   envelope_size bytes, there is always sufficient room.
18959            fidl::encoding::encode_in_envelope_optional::<u32, D>(
18960                self.buffer_index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
18961                encoder,
18962                offset + cur_offset,
18963                depth,
18964            )?;
18965
18966            _prev_end_offset = cur_offset + envelope_size;
18967            if 3 > max_ordinal {
18968                return Ok(());
18969            }
18970
18971            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18972            // are envelope_size bytes.
18973            let cur_offset: usize = (3 - 1) * envelope_size;
18974
18975            // Zero reserved fields.
18976            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18977
18978            // Safety:
18979            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18980            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18981            //   envelope_size bytes, there is always sufficient room.
18982            fidl::encoding::encode_in_envelope_optional::<u64, D>(
18983                self.stream_lifetime_ordinal
18984                    .as_ref()
18985                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
18986                encoder,
18987                offset + cur_offset,
18988                depth,
18989            )?;
18990
18991            _prev_end_offset = cur_offset + envelope_size;
18992            if 4 > max_ordinal {
18993                return Ok(());
18994            }
18995
18996            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18997            // are envelope_size bytes.
18998            let cur_offset: usize = (4 - 1) * envelope_size;
18999
19000            // Zero reserved fields.
19001            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19002
19003            // Safety:
19004            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19005            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19006            //   envelope_size bytes, there is always sufficient room.
19007            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19008                self.start_offset.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19009                encoder,
19010                offset + cur_offset,
19011                depth,
19012            )?;
19013
19014            _prev_end_offset = cur_offset + envelope_size;
19015            if 5 > max_ordinal {
19016                return Ok(());
19017            }
19018
19019            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19020            // are envelope_size bytes.
19021            let cur_offset: usize = (5 - 1) * envelope_size;
19022
19023            // Zero reserved fields.
19024            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19025
19026            // Safety:
19027            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19028            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19029            //   envelope_size bytes, there is always sufficient room.
19030            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19031                self.valid_length_bytes
19032                    .as_ref()
19033                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19034                encoder,
19035                offset + cur_offset,
19036                depth,
19037            )?;
19038
19039            _prev_end_offset = cur_offset + envelope_size;
19040            if 6 > max_ordinal {
19041                return Ok(());
19042            }
19043
19044            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19045            // are envelope_size bytes.
19046            let cur_offset: usize = (6 - 1) * envelope_size;
19047
19048            // Zero reserved fields.
19049            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19050
19051            // Safety:
19052            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19053            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19054            //   envelope_size bytes, there is always sufficient room.
19055            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19056                self.timestamp_ish.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19057                encoder,
19058                offset + cur_offset,
19059                depth,
19060            )?;
19061
19062            _prev_end_offset = cur_offset + envelope_size;
19063            if 7 > max_ordinal {
19064                return Ok(());
19065            }
19066
19067            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19068            // are envelope_size bytes.
19069            let cur_offset: usize = (7 - 1) * envelope_size;
19070
19071            // Zero reserved fields.
19072            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19073
19074            // Safety:
19075            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19076            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19077            //   envelope_size bytes, there is always sufficient room.
19078            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19079                self.start_access_unit
19080                    .as_ref()
19081                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19082                encoder,
19083                offset + cur_offset,
19084                depth,
19085            )?;
19086
19087            _prev_end_offset = cur_offset + envelope_size;
19088            if 8 > max_ordinal {
19089                return Ok(());
19090            }
19091
19092            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19093            // are envelope_size bytes.
19094            let cur_offset: usize = (8 - 1) * envelope_size;
19095
19096            // Zero reserved fields.
19097            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19098
19099            // Safety:
19100            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19101            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19102            //   envelope_size bytes, there is always sufficient room.
19103            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19104                self.known_end_access_unit
19105                    .as_ref()
19106                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19107                encoder,
19108                offset + cur_offset,
19109                depth,
19110            )?;
19111
19112            _prev_end_offset = cur_offset + envelope_size;
19113            if 9 > max_ordinal {
19114                return Ok(());
19115            }
19116
19117            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19118            // are envelope_size bytes.
19119            let cur_offset: usize = (9 - 1) * envelope_size;
19120
19121            // Zero reserved fields.
19122            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19123
19124            // Safety:
19125            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19126            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19127            //   envelope_size bytes, there is always sufficient room.
19128            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19129                self.key_frame.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19130                encoder,
19131                offset + cur_offset,
19132                depth,
19133            )?;
19134
19135            _prev_end_offset = cur_offset + envelope_size;
19136
19137            Ok(())
19138        }
19139    }
19140
19141    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Packet {
19142        #[inline(always)]
19143        fn new_empty() -> Self {
19144            Self::default()
19145        }
19146
19147        unsafe fn decode(
19148            &mut self,
19149            decoder: &mut fidl::encoding::Decoder<'_, D>,
19150            offset: usize,
19151            mut depth: fidl::encoding::Depth,
19152        ) -> fidl::Result<()> {
19153            decoder.debug_check_bounds::<Self>(offset);
19154            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19155                None => return Err(fidl::Error::NotNullable),
19156                Some(len) => len,
19157            };
19158            // Calling decoder.out_of_line_offset(0) is not allowed.
19159            if len == 0 {
19160                return Ok(());
19161            };
19162            depth.increment()?;
19163            let envelope_size = 8;
19164            let bytes_len = len * envelope_size;
19165            let offset = decoder.out_of_line_offset(bytes_len)?;
19166            // Decode the envelope for each type.
19167            let mut _next_ordinal_to_read = 0;
19168            let mut next_offset = offset;
19169            let end_offset = offset + bytes_len;
19170            _next_ordinal_to_read += 1;
19171            if next_offset >= end_offset {
19172                return Ok(());
19173            }
19174
19175            // Decode unknown envelopes for gaps in ordinals.
19176            while _next_ordinal_to_read < 1 {
19177                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19178                _next_ordinal_to_read += 1;
19179                next_offset += envelope_size;
19180            }
19181
19182            let next_out_of_line = decoder.next_out_of_line();
19183            let handles_before = decoder.remaining_handles();
19184            if let Some((inlined, num_bytes, num_handles)) =
19185                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19186            {
19187                let member_inline_size =
19188                    <PacketHeader as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19189                if inlined != (member_inline_size <= 4) {
19190                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19191                }
19192                let inner_offset;
19193                let mut inner_depth = depth.clone();
19194                if inlined {
19195                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19196                    inner_offset = next_offset;
19197                } else {
19198                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19199                    inner_depth.increment()?;
19200                }
19201                let val_ref = self.header.get_or_insert_with(|| fidl::new_empty!(PacketHeader, D));
19202                fidl::decode!(PacketHeader, D, val_ref, decoder, inner_offset, inner_depth)?;
19203                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19204                {
19205                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19206                }
19207                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19208                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19209                }
19210            }
19211
19212            next_offset += envelope_size;
19213            _next_ordinal_to_read += 1;
19214            if next_offset >= end_offset {
19215                return Ok(());
19216            }
19217
19218            // Decode unknown envelopes for gaps in ordinals.
19219            while _next_ordinal_to_read < 2 {
19220                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19221                _next_ordinal_to_read += 1;
19222                next_offset += envelope_size;
19223            }
19224
19225            let next_out_of_line = decoder.next_out_of_line();
19226            let handles_before = decoder.remaining_handles();
19227            if let Some((inlined, num_bytes, num_handles)) =
19228                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19229            {
19230                let member_inline_size =
19231                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19232                if inlined != (member_inline_size <= 4) {
19233                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19234                }
19235                let inner_offset;
19236                let mut inner_depth = depth.clone();
19237                if inlined {
19238                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19239                    inner_offset = next_offset;
19240                } else {
19241                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19242                    inner_depth.increment()?;
19243                }
19244                let val_ref = self.buffer_index.get_or_insert_with(|| fidl::new_empty!(u32, D));
19245                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19246                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19247                {
19248                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19249                }
19250                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19251                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19252                }
19253            }
19254
19255            next_offset += envelope_size;
19256            _next_ordinal_to_read += 1;
19257            if next_offset >= end_offset {
19258                return Ok(());
19259            }
19260
19261            // Decode unknown envelopes for gaps in ordinals.
19262            while _next_ordinal_to_read < 3 {
19263                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19264                _next_ordinal_to_read += 1;
19265                next_offset += envelope_size;
19266            }
19267
19268            let next_out_of_line = decoder.next_out_of_line();
19269            let handles_before = decoder.remaining_handles();
19270            if let Some((inlined, num_bytes, num_handles)) =
19271                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19272            {
19273                let member_inline_size =
19274                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19275                if inlined != (member_inline_size <= 4) {
19276                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19277                }
19278                let inner_offset;
19279                let mut inner_depth = depth.clone();
19280                if inlined {
19281                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19282                    inner_offset = next_offset;
19283                } else {
19284                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19285                    inner_depth.increment()?;
19286                }
19287                let val_ref =
19288                    self.stream_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
19289                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19290                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19291                {
19292                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19293                }
19294                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19295                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19296                }
19297            }
19298
19299            next_offset += envelope_size;
19300            _next_ordinal_to_read += 1;
19301            if next_offset >= end_offset {
19302                return Ok(());
19303            }
19304
19305            // Decode unknown envelopes for gaps in ordinals.
19306            while _next_ordinal_to_read < 4 {
19307                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19308                _next_ordinal_to_read += 1;
19309                next_offset += envelope_size;
19310            }
19311
19312            let next_out_of_line = decoder.next_out_of_line();
19313            let handles_before = decoder.remaining_handles();
19314            if let Some((inlined, num_bytes, num_handles)) =
19315                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19316            {
19317                let member_inline_size =
19318                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19319                if inlined != (member_inline_size <= 4) {
19320                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19321                }
19322                let inner_offset;
19323                let mut inner_depth = depth.clone();
19324                if inlined {
19325                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19326                    inner_offset = next_offset;
19327                } else {
19328                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19329                    inner_depth.increment()?;
19330                }
19331                let val_ref = self.start_offset.get_or_insert_with(|| fidl::new_empty!(u32, D));
19332                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19333                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19334                {
19335                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19336                }
19337                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19338                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19339                }
19340            }
19341
19342            next_offset += envelope_size;
19343            _next_ordinal_to_read += 1;
19344            if next_offset >= end_offset {
19345                return Ok(());
19346            }
19347
19348            // Decode unknown envelopes for gaps in ordinals.
19349            while _next_ordinal_to_read < 5 {
19350                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19351                _next_ordinal_to_read += 1;
19352                next_offset += envelope_size;
19353            }
19354
19355            let next_out_of_line = decoder.next_out_of_line();
19356            let handles_before = decoder.remaining_handles();
19357            if let Some((inlined, num_bytes, num_handles)) =
19358                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19359            {
19360                let member_inline_size =
19361                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19362                if inlined != (member_inline_size <= 4) {
19363                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19364                }
19365                let inner_offset;
19366                let mut inner_depth = depth.clone();
19367                if inlined {
19368                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19369                    inner_offset = next_offset;
19370                } else {
19371                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19372                    inner_depth.increment()?;
19373                }
19374                let val_ref =
19375                    self.valid_length_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
19376                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19377                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19378                {
19379                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19380                }
19381                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19382                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19383                }
19384            }
19385
19386            next_offset += envelope_size;
19387            _next_ordinal_to_read += 1;
19388            if next_offset >= end_offset {
19389                return Ok(());
19390            }
19391
19392            // Decode unknown envelopes for gaps in ordinals.
19393            while _next_ordinal_to_read < 6 {
19394                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19395                _next_ordinal_to_read += 1;
19396                next_offset += envelope_size;
19397            }
19398
19399            let next_out_of_line = decoder.next_out_of_line();
19400            let handles_before = decoder.remaining_handles();
19401            if let Some((inlined, num_bytes, num_handles)) =
19402                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19403            {
19404                let member_inline_size =
19405                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19406                if inlined != (member_inline_size <= 4) {
19407                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19408                }
19409                let inner_offset;
19410                let mut inner_depth = depth.clone();
19411                if inlined {
19412                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19413                    inner_offset = next_offset;
19414                } else {
19415                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19416                    inner_depth.increment()?;
19417                }
19418                let val_ref = self.timestamp_ish.get_or_insert_with(|| fidl::new_empty!(u64, D));
19419                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19420                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19421                {
19422                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19423                }
19424                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19425                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19426                }
19427            }
19428
19429            next_offset += envelope_size;
19430            _next_ordinal_to_read += 1;
19431            if next_offset >= end_offset {
19432                return Ok(());
19433            }
19434
19435            // Decode unknown envelopes for gaps in ordinals.
19436            while _next_ordinal_to_read < 7 {
19437                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19438                _next_ordinal_to_read += 1;
19439                next_offset += envelope_size;
19440            }
19441
19442            let next_out_of_line = decoder.next_out_of_line();
19443            let handles_before = decoder.remaining_handles();
19444            if let Some((inlined, num_bytes, num_handles)) =
19445                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19446            {
19447                let member_inline_size =
19448                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19449                if inlined != (member_inline_size <= 4) {
19450                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19451                }
19452                let inner_offset;
19453                let mut inner_depth = depth.clone();
19454                if inlined {
19455                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19456                    inner_offset = next_offset;
19457                } else {
19458                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19459                    inner_depth.increment()?;
19460                }
19461                let val_ref =
19462                    self.start_access_unit.get_or_insert_with(|| fidl::new_empty!(bool, D));
19463                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19464                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19465                {
19466                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19467                }
19468                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19469                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19470                }
19471            }
19472
19473            next_offset += envelope_size;
19474            _next_ordinal_to_read += 1;
19475            if next_offset >= end_offset {
19476                return Ok(());
19477            }
19478
19479            // Decode unknown envelopes for gaps in ordinals.
19480            while _next_ordinal_to_read < 8 {
19481                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19482                _next_ordinal_to_read += 1;
19483                next_offset += envelope_size;
19484            }
19485
19486            let next_out_of_line = decoder.next_out_of_line();
19487            let handles_before = decoder.remaining_handles();
19488            if let Some((inlined, num_bytes, num_handles)) =
19489                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19490            {
19491                let member_inline_size =
19492                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19493                if inlined != (member_inline_size <= 4) {
19494                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19495                }
19496                let inner_offset;
19497                let mut inner_depth = depth.clone();
19498                if inlined {
19499                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19500                    inner_offset = next_offset;
19501                } else {
19502                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19503                    inner_depth.increment()?;
19504                }
19505                let val_ref =
19506                    self.known_end_access_unit.get_or_insert_with(|| fidl::new_empty!(bool, D));
19507                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19508                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19509                {
19510                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19511                }
19512                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19513                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19514                }
19515            }
19516
19517            next_offset += envelope_size;
19518            _next_ordinal_to_read += 1;
19519            if next_offset >= end_offset {
19520                return Ok(());
19521            }
19522
19523            // Decode unknown envelopes for gaps in ordinals.
19524            while _next_ordinal_to_read < 9 {
19525                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19526                _next_ordinal_to_read += 1;
19527                next_offset += envelope_size;
19528            }
19529
19530            let next_out_of_line = decoder.next_out_of_line();
19531            let handles_before = decoder.remaining_handles();
19532            if let Some((inlined, num_bytes, num_handles)) =
19533                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19534            {
19535                let member_inline_size =
19536                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19537                if inlined != (member_inline_size <= 4) {
19538                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19539                }
19540                let inner_offset;
19541                let mut inner_depth = depth.clone();
19542                if inlined {
19543                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19544                    inner_offset = next_offset;
19545                } else {
19546                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19547                    inner_depth.increment()?;
19548                }
19549                let val_ref = self.key_frame.get_or_insert_with(|| fidl::new_empty!(bool, D));
19550                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19551                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19552                {
19553                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19554                }
19555                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19556                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19557                }
19558            }
19559
19560            next_offset += envelope_size;
19561
19562            // Decode the remaining unknown envelopes.
19563            while next_offset < end_offset {
19564                _next_ordinal_to_read += 1;
19565                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19566                next_offset += envelope_size;
19567            }
19568
19569            Ok(())
19570        }
19571    }
19572
19573    impl PacketHeader {
19574        #[inline(always)]
19575        fn max_ordinal_present(&self) -> u64 {
19576            if let Some(_) = self.packet_index {
19577                return 2;
19578            }
19579            if let Some(_) = self.buffer_lifetime_ordinal {
19580                return 1;
19581            }
19582            0
19583        }
19584    }
19585
19586    impl fidl::encoding::ValueTypeMarker for PacketHeader {
19587        type Borrowed<'a> = &'a Self;
19588        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19589            value
19590        }
19591    }
19592
19593    unsafe impl fidl::encoding::TypeMarker for PacketHeader {
19594        type Owned = Self;
19595
19596        #[inline(always)]
19597        fn inline_align(_context: fidl::encoding::Context) -> usize {
19598            8
19599        }
19600
19601        #[inline(always)]
19602        fn inline_size(_context: fidl::encoding::Context) -> usize {
19603            16
19604        }
19605    }
19606
19607    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PacketHeader, D>
19608        for &PacketHeader
19609    {
19610        unsafe fn encode(
19611            self,
19612            encoder: &mut fidl::encoding::Encoder<'_, D>,
19613            offset: usize,
19614            mut depth: fidl::encoding::Depth,
19615        ) -> fidl::Result<()> {
19616            encoder.debug_check_bounds::<PacketHeader>(offset);
19617            // Vector header
19618            let max_ordinal: u64 = self.max_ordinal_present();
19619            encoder.write_num(max_ordinal, offset);
19620            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19621            // Calling encoder.out_of_line_offset(0) is not allowed.
19622            if max_ordinal == 0 {
19623                return Ok(());
19624            }
19625            depth.increment()?;
19626            let envelope_size = 8;
19627            let bytes_len = max_ordinal as usize * envelope_size;
19628            #[allow(unused_variables)]
19629            let offset = encoder.out_of_line_offset(bytes_len);
19630            let mut _prev_end_offset: usize = 0;
19631            if 1 > max_ordinal {
19632                return Ok(());
19633            }
19634
19635            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19636            // are envelope_size bytes.
19637            let cur_offset: usize = (1 - 1) * envelope_size;
19638
19639            // Zero reserved fields.
19640            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19641
19642            // Safety:
19643            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19644            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19645            //   envelope_size bytes, there is always sufficient room.
19646            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19647                self.buffer_lifetime_ordinal
19648                    .as_ref()
19649                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19650                encoder,
19651                offset + cur_offset,
19652                depth,
19653            )?;
19654
19655            _prev_end_offset = cur_offset + envelope_size;
19656            if 2 > max_ordinal {
19657                return Ok(());
19658            }
19659
19660            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19661            // are envelope_size bytes.
19662            let cur_offset: usize = (2 - 1) * envelope_size;
19663
19664            // Zero reserved fields.
19665            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19666
19667            // Safety:
19668            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19669            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19670            //   envelope_size bytes, there is always sufficient room.
19671            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19672                self.packet_index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19673                encoder,
19674                offset + cur_offset,
19675                depth,
19676            )?;
19677
19678            _prev_end_offset = cur_offset + envelope_size;
19679
19680            Ok(())
19681        }
19682    }
19683
19684    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PacketHeader {
19685        #[inline(always)]
19686        fn new_empty() -> Self {
19687            Self::default()
19688        }
19689
19690        unsafe fn decode(
19691            &mut self,
19692            decoder: &mut fidl::encoding::Decoder<'_, D>,
19693            offset: usize,
19694            mut depth: fidl::encoding::Depth,
19695        ) -> fidl::Result<()> {
19696            decoder.debug_check_bounds::<Self>(offset);
19697            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19698                None => return Err(fidl::Error::NotNullable),
19699                Some(len) => len,
19700            };
19701            // Calling decoder.out_of_line_offset(0) is not allowed.
19702            if len == 0 {
19703                return Ok(());
19704            };
19705            depth.increment()?;
19706            let envelope_size = 8;
19707            let bytes_len = len * envelope_size;
19708            let offset = decoder.out_of_line_offset(bytes_len)?;
19709            // Decode the envelope for each type.
19710            let mut _next_ordinal_to_read = 0;
19711            let mut next_offset = offset;
19712            let end_offset = offset + bytes_len;
19713            _next_ordinal_to_read += 1;
19714            if next_offset >= end_offset {
19715                return Ok(());
19716            }
19717
19718            // Decode unknown envelopes for gaps in ordinals.
19719            while _next_ordinal_to_read < 1 {
19720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19721                _next_ordinal_to_read += 1;
19722                next_offset += envelope_size;
19723            }
19724
19725            let next_out_of_line = decoder.next_out_of_line();
19726            let handles_before = decoder.remaining_handles();
19727            if let Some((inlined, num_bytes, num_handles)) =
19728                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19729            {
19730                let member_inline_size =
19731                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19732                if inlined != (member_inline_size <= 4) {
19733                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19734                }
19735                let inner_offset;
19736                let mut inner_depth = depth.clone();
19737                if inlined {
19738                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19739                    inner_offset = next_offset;
19740                } else {
19741                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19742                    inner_depth.increment()?;
19743                }
19744                let val_ref =
19745                    self.buffer_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
19746                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19747                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19748                {
19749                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19750                }
19751                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19752                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19753                }
19754            }
19755
19756            next_offset += envelope_size;
19757            _next_ordinal_to_read += 1;
19758            if next_offset >= end_offset {
19759                return Ok(());
19760            }
19761
19762            // Decode unknown envelopes for gaps in ordinals.
19763            while _next_ordinal_to_read < 2 {
19764                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19765                _next_ordinal_to_read += 1;
19766                next_offset += envelope_size;
19767            }
19768
19769            let next_out_of_line = decoder.next_out_of_line();
19770            let handles_before = decoder.remaining_handles();
19771            if let Some((inlined, num_bytes, num_handles)) =
19772                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19773            {
19774                let member_inline_size =
19775                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19776                if inlined != (member_inline_size <= 4) {
19777                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19778                }
19779                let inner_offset;
19780                let mut inner_depth = depth.clone();
19781                if inlined {
19782                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19783                    inner_offset = next_offset;
19784                } else {
19785                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19786                    inner_depth.increment()?;
19787                }
19788                let val_ref = self.packet_index.get_or_insert_with(|| fidl::new_empty!(u32, D));
19789                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19790                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19791                {
19792                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19793                }
19794                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19795                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19796                }
19797            }
19798
19799            next_offset += envelope_size;
19800
19801            // Decode the remaining unknown envelopes.
19802            while next_offset < end_offset {
19803                _next_ordinal_to_read += 1;
19804                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19805                next_offset += envelope_size;
19806            }
19807
19808            Ok(())
19809        }
19810    }
19811
19812    impl StreamBufferConstraints {
19813        #[inline(always)]
19814        fn max_ordinal_present(&self) -> u64 {
19815            if let Some(_) = self.is_physically_contiguous_required {
19816                return 13;
19817            }
19818            if let Some(_) = self.single_buffer_mode_allowed {
19819                return 12;
19820            }
19821            if let Some(_) = self.packet_count_for_client_max {
19822                return 11;
19823            }
19824            if let Some(_) = self.packet_count_for_client_min {
19825                return 10;
19826            }
19827            if let Some(_) = self.packet_count_for_server_max {
19828                return 9;
19829            }
19830            if let Some(_) = self.packet_count_for_server_recommended_max {
19831                return 8;
19832            }
19833            if let Some(_) = self.packet_count_for_server_recommended {
19834                return 7;
19835            }
19836            if let Some(_) = self.packet_count_for_server_min {
19837                return 6;
19838            }
19839            if let Some(_) = self.per_packet_buffer_bytes_max {
19840                return 5;
19841            }
19842            if let Some(_) = self.per_packet_buffer_bytes_recommended {
19843                return 4;
19844            }
19845            if let Some(_) = self.per_packet_buffer_bytes_min {
19846                return 3;
19847            }
19848            if let Some(_) = self.default_settings {
19849                return 2;
19850            }
19851            if let Some(_) = self.buffer_constraints_version_ordinal {
19852                return 1;
19853            }
19854            0
19855        }
19856    }
19857
19858    impl fidl::encoding::ValueTypeMarker for StreamBufferConstraints {
19859        type Borrowed<'a> = &'a Self;
19860        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19861            value
19862        }
19863    }
19864
19865    unsafe impl fidl::encoding::TypeMarker for StreamBufferConstraints {
19866        type Owned = Self;
19867
19868        #[inline(always)]
19869        fn inline_align(_context: fidl::encoding::Context) -> usize {
19870            8
19871        }
19872
19873        #[inline(always)]
19874        fn inline_size(_context: fidl::encoding::Context) -> usize {
19875            16
19876        }
19877    }
19878
19879    unsafe impl<D: fidl::encoding::ResourceDialect>
19880        fidl::encoding::Encode<StreamBufferConstraints, D> for &StreamBufferConstraints
19881    {
19882        unsafe fn encode(
19883            self,
19884            encoder: &mut fidl::encoding::Encoder<'_, D>,
19885            offset: usize,
19886            mut depth: fidl::encoding::Depth,
19887        ) -> fidl::Result<()> {
19888            encoder.debug_check_bounds::<StreamBufferConstraints>(offset);
19889            // Vector header
19890            let max_ordinal: u64 = self.max_ordinal_present();
19891            encoder.write_num(max_ordinal, offset);
19892            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19893            // Calling encoder.out_of_line_offset(0) is not allowed.
19894            if max_ordinal == 0 {
19895                return Ok(());
19896            }
19897            depth.increment()?;
19898            let envelope_size = 8;
19899            let bytes_len = max_ordinal as usize * envelope_size;
19900            #[allow(unused_variables)]
19901            let offset = encoder.out_of_line_offset(bytes_len);
19902            let mut _prev_end_offset: usize = 0;
19903            if 1 > max_ordinal {
19904                return Ok(());
19905            }
19906
19907            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19908            // are envelope_size bytes.
19909            let cur_offset: usize = (1 - 1) * envelope_size;
19910
19911            // Zero reserved fields.
19912            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19913
19914            // Safety:
19915            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19916            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19917            //   envelope_size bytes, there is always sufficient room.
19918            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19919                self.buffer_constraints_version_ordinal
19920                    .as_ref()
19921                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19922                encoder,
19923                offset + cur_offset,
19924                depth,
19925            )?;
19926
19927            _prev_end_offset = cur_offset + envelope_size;
19928            if 2 > max_ordinal {
19929                return Ok(());
19930            }
19931
19932            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19933            // are envelope_size bytes.
19934            let cur_offset: usize = (2 - 1) * envelope_size;
19935
19936            // Zero reserved fields.
19937            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19938
19939            // Safety:
19940            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19941            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19942            //   envelope_size bytes, there is always sufficient room.
19943            fidl::encoding::encode_in_envelope_optional::<StreamBufferSettings, D>(
19944                self.default_settings
19945                    .as_ref()
19946                    .map(<StreamBufferSettings as fidl::encoding::ValueTypeMarker>::borrow),
19947                encoder,
19948                offset + cur_offset,
19949                depth,
19950            )?;
19951
19952            _prev_end_offset = cur_offset + envelope_size;
19953            if 3 > max_ordinal {
19954                return Ok(());
19955            }
19956
19957            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19958            // are envelope_size bytes.
19959            let cur_offset: usize = (3 - 1) * envelope_size;
19960
19961            // Zero reserved fields.
19962            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19963
19964            // Safety:
19965            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19966            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19967            //   envelope_size bytes, there is always sufficient room.
19968            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19969                self.per_packet_buffer_bytes_min
19970                    .as_ref()
19971                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19972                encoder,
19973                offset + cur_offset,
19974                depth,
19975            )?;
19976
19977            _prev_end_offset = cur_offset + envelope_size;
19978            if 4 > max_ordinal {
19979                return Ok(());
19980            }
19981
19982            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19983            // are envelope_size bytes.
19984            let cur_offset: usize = (4 - 1) * envelope_size;
19985
19986            // Zero reserved fields.
19987            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19988
19989            // Safety:
19990            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19991            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19992            //   envelope_size bytes, there is always sufficient room.
19993            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19994                self.per_packet_buffer_bytes_recommended
19995                    .as_ref()
19996                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19997                encoder,
19998                offset + cur_offset,
19999                depth,
20000            )?;
20001
20002            _prev_end_offset = cur_offset + envelope_size;
20003            if 5 > max_ordinal {
20004                return Ok(());
20005            }
20006
20007            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20008            // are envelope_size bytes.
20009            let cur_offset: usize = (5 - 1) * envelope_size;
20010
20011            // Zero reserved fields.
20012            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20013
20014            // Safety:
20015            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20016            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20017            //   envelope_size bytes, there is always sufficient room.
20018            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20019                self.per_packet_buffer_bytes_max
20020                    .as_ref()
20021                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20022                encoder,
20023                offset + cur_offset,
20024                depth,
20025            )?;
20026
20027            _prev_end_offset = cur_offset + envelope_size;
20028            if 6 > max_ordinal {
20029                return Ok(());
20030            }
20031
20032            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20033            // are envelope_size bytes.
20034            let cur_offset: usize = (6 - 1) * envelope_size;
20035
20036            // Zero reserved fields.
20037            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20038
20039            // Safety:
20040            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20041            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20042            //   envelope_size bytes, there is always sufficient room.
20043            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20044                self.packet_count_for_server_min
20045                    .as_ref()
20046                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20047                encoder,
20048                offset + cur_offset,
20049                depth,
20050            )?;
20051
20052            _prev_end_offset = cur_offset + envelope_size;
20053            if 7 > max_ordinal {
20054                return Ok(());
20055            }
20056
20057            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20058            // are envelope_size bytes.
20059            let cur_offset: usize = (7 - 1) * envelope_size;
20060
20061            // Zero reserved fields.
20062            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20063
20064            // Safety:
20065            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20066            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20067            //   envelope_size bytes, there is always sufficient room.
20068            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20069                self.packet_count_for_server_recommended
20070                    .as_ref()
20071                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20072                encoder,
20073                offset + cur_offset,
20074                depth,
20075            )?;
20076
20077            _prev_end_offset = cur_offset + envelope_size;
20078            if 8 > max_ordinal {
20079                return Ok(());
20080            }
20081
20082            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20083            // are envelope_size bytes.
20084            let cur_offset: usize = (8 - 1) * envelope_size;
20085
20086            // Zero reserved fields.
20087            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20088
20089            // Safety:
20090            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20091            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20092            //   envelope_size bytes, there is always sufficient room.
20093            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20094                self.packet_count_for_server_recommended_max
20095                    .as_ref()
20096                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20097                encoder,
20098                offset + cur_offset,
20099                depth,
20100            )?;
20101
20102            _prev_end_offset = cur_offset + envelope_size;
20103            if 9 > max_ordinal {
20104                return Ok(());
20105            }
20106
20107            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20108            // are envelope_size bytes.
20109            let cur_offset: usize = (9 - 1) * envelope_size;
20110
20111            // Zero reserved fields.
20112            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20113
20114            // Safety:
20115            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20116            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20117            //   envelope_size bytes, there is always sufficient room.
20118            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20119                self.packet_count_for_server_max
20120                    .as_ref()
20121                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20122                encoder,
20123                offset + cur_offset,
20124                depth,
20125            )?;
20126
20127            _prev_end_offset = cur_offset + envelope_size;
20128            if 10 > max_ordinal {
20129                return Ok(());
20130            }
20131
20132            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20133            // are envelope_size bytes.
20134            let cur_offset: usize = (10 - 1) * envelope_size;
20135
20136            // Zero reserved fields.
20137            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20138
20139            // Safety:
20140            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20141            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20142            //   envelope_size bytes, there is always sufficient room.
20143            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20144                self.packet_count_for_client_min
20145                    .as_ref()
20146                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20147                encoder,
20148                offset + cur_offset,
20149                depth,
20150            )?;
20151
20152            _prev_end_offset = cur_offset + envelope_size;
20153            if 11 > max_ordinal {
20154                return Ok(());
20155            }
20156
20157            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20158            // are envelope_size bytes.
20159            let cur_offset: usize = (11 - 1) * envelope_size;
20160
20161            // Zero reserved fields.
20162            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20163
20164            // Safety:
20165            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20166            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20167            //   envelope_size bytes, there is always sufficient room.
20168            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20169                self.packet_count_for_client_max
20170                    .as_ref()
20171                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20172                encoder,
20173                offset + cur_offset,
20174                depth,
20175            )?;
20176
20177            _prev_end_offset = cur_offset + envelope_size;
20178            if 12 > max_ordinal {
20179                return Ok(());
20180            }
20181
20182            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20183            // are envelope_size bytes.
20184            let cur_offset: usize = (12 - 1) * envelope_size;
20185
20186            // Zero reserved fields.
20187            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20188
20189            // Safety:
20190            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20191            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20192            //   envelope_size bytes, there is always sufficient room.
20193            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20194                self.single_buffer_mode_allowed
20195                    .as_ref()
20196                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20197                encoder,
20198                offset + cur_offset,
20199                depth,
20200            )?;
20201
20202            _prev_end_offset = cur_offset + envelope_size;
20203            if 13 > max_ordinal {
20204                return Ok(());
20205            }
20206
20207            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20208            // are envelope_size bytes.
20209            let cur_offset: usize = (13 - 1) * envelope_size;
20210
20211            // Zero reserved fields.
20212            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20213
20214            // Safety:
20215            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20216            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20217            //   envelope_size bytes, there is always sufficient room.
20218            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20219                self.is_physically_contiguous_required
20220                    .as_ref()
20221                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20222                encoder,
20223                offset + cur_offset,
20224                depth,
20225            )?;
20226
20227            _prev_end_offset = cur_offset + envelope_size;
20228
20229            Ok(())
20230        }
20231    }
20232
20233    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
20234        for StreamBufferConstraints
20235    {
20236        #[inline(always)]
20237        fn new_empty() -> Self {
20238            Self::default()
20239        }
20240
20241        unsafe fn decode(
20242            &mut self,
20243            decoder: &mut fidl::encoding::Decoder<'_, D>,
20244            offset: usize,
20245            mut depth: fidl::encoding::Depth,
20246        ) -> fidl::Result<()> {
20247            decoder.debug_check_bounds::<Self>(offset);
20248            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20249                None => return Err(fidl::Error::NotNullable),
20250                Some(len) => len,
20251            };
20252            // Calling decoder.out_of_line_offset(0) is not allowed.
20253            if len == 0 {
20254                return Ok(());
20255            };
20256            depth.increment()?;
20257            let envelope_size = 8;
20258            let bytes_len = len * envelope_size;
20259            let offset = decoder.out_of_line_offset(bytes_len)?;
20260            // Decode the envelope for each type.
20261            let mut _next_ordinal_to_read = 0;
20262            let mut next_offset = offset;
20263            let end_offset = offset + bytes_len;
20264            _next_ordinal_to_read += 1;
20265            if next_offset >= end_offset {
20266                return Ok(());
20267            }
20268
20269            // Decode unknown envelopes for gaps in ordinals.
20270            while _next_ordinal_to_read < 1 {
20271                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20272                _next_ordinal_to_read += 1;
20273                next_offset += envelope_size;
20274            }
20275
20276            let next_out_of_line = decoder.next_out_of_line();
20277            let handles_before = decoder.remaining_handles();
20278            if let Some((inlined, num_bytes, num_handles)) =
20279                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20280            {
20281                let member_inline_size =
20282                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20283                if inlined != (member_inline_size <= 4) {
20284                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20285                }
20286                let inner_offset;
20287                let mut inner_depth = depth.clone();
20288                if inlined {
20289                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20290                    inner_offset = next_offset;
20291                } else {
20292                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20293                    inner_depth.increment()?;
20294                }
20295                let val_ref = self
20296                    .buffer_constraints_version_ordinal
20297                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
20298                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
20299                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20300                {
20301                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20302                }
20303                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20304                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20305                }
20306            }
20307
20308            next_offset += envelope_size;
20309            _next_ordinal_to_read += 1;
20310            if next_offset >= end_offset {
20311                return Ok(());
20312            }
20313
20314            // Decode unknown envelopes for gaps in ordinals.
20315            while _next_ordinal_to_read < 2 {
20316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20317                _next_ordinal_to_read += 1;
20318                next_offset += envelope_size;
20319            }
20320
20321            let next_out_of_line = decoder.next_out_of_line();
20322            let handles_before = decoder.remaining_handles();
20323            if let Some((inlined, num_bytes, num_handles)) =
20324                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20325            {
20326                let member_inline_size =
20327                    <StreamBufferSettings as fidl::encoding::TypeMarker>::inline_size(
20328                        decoder.context,
20329                    );
20330                if inlined != (member_inline_size <= 4) {
20331                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20332                }
20333                let inner_offset;
20334                let mut inner_depth = depth.clone();
20335                if inlined {
20336                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20337                    inner_offset = next_offset;
20338                } else {
20339                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20340                    inner_depth.increment()?;
20341                }
20342                let val_ref = self
20343                    .default_settings
20344                    .get_or_insert_with(|| fidl::new_empty!(StreamBufferSettings, D));
20345                fidl::decode!(
20346                    StreamBufferSettings,
20347                    D,
20348                    val_ref,
20349                    decoder,
20350                    inner_offset,
20351                    inner_depth
20352                )?;
20353                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20354                {
20355                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20356                }
20357                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20358                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20359                }
20360            }
20361
20362            next_offset += envelope_size;
20363            _next_ordinal_to_read += 1;
20364            if next_offset >= end_offset {
20365                return Ok(());
20366            }
20367
20368            // Decode unknown envelopes for gaps in ordinals.
20369            while _next_ordinal_to_read < 3 {
20370                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20371                _next_ordinal_to_read += 1;
20372                next_offset += envelope_size;
20373            }
20374
20375            let next_out_of_line = decoder.next_out_of_line();
20376            let handles_before = decoder.remaining_handles();
20377            if let Some((inlined, num_bytes, num_handles)) =
20378                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20379            {
20380                let member_inline_size =
20381                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20382                if inlined != (member_inline_size <= 4) {
20383                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20384                }
20385                let inner_offset;
20386                let mut inner_depth = depth.clone();
20387                if inlined {
20388                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20389                    inner_offset = next_offset;
20390                } else {
20391                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20392                    inner_depth.increment()?;
20393                }
20394                let val_ref = self
20395                    .per_packet_buffer_bytes_min
20396                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20397                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20398                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20399                {
20400                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20401                }
20402                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20403                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20404                }
20405            }
20406
20407            next_offset += envelope_size;
20408            _next_ordinal_to_read += 1;
20409            if next_offset >= end_offset {
20410                return Ok(());
20411            }
20412
20413            // Decode unknown envelopes for gaps in ordinals.
20414            while _next_ordinal_to_read < 4 {
20415                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20416                _next_ordinal_to_read += 1;
20417                next_offset += envelope_size;
20418            }
20419
20420            let next_out_of_line = decoder.next_out_of_line();
20421            let handles_before = decoder.remaining_handles();
20422            if let Some((inlined, num_bytes, num_handles)) =
20423                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20424            {
20425                let member_inline_size =
20426                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20427                if inlined != (member_inline_size <= 4) {
20428                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20429                }
20430                let inner_offset;
20431                let mut inner_depth = depth.clone();
20432                if inlined {
20433                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20434                    inner_offset = next_offset;
20435                } else {
20436                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20437                    inner_depth.increment()?;
20438                }
20439                let val_ref = self
20440                    .per_packet_buffer_bytes_recommended
20441                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20442                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20443                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20444                {
20445                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20446                }
20447                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20448                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20449                }
20450            }
20451
20452            next_offset += envelope_size;
20453            _next_ordinal_to_read += 1;
20454            if next_offset >= end_offset {
20455                return Ok(());
20456            }
20457
20458            // Decode unknown envelopes for gaps in ordinals.
20459            while _next_ordinal_to_read < 5 {
20460                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20461                _next_ordinal_to_read += 1;
20462                next_offset += envelope_size;
20463            }
20464
20465            let next_out_of_line = decoder.next_out_of_line();
20466            let handles_before = decoder.remaining_handles();
20467            if let Some((inlined, num_bytes, num_handles)) =
20468                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20469            {
20470                let member_inline_size =
20471                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20472                if inlined != (member_inline_size <= 4) {
20473                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20474                }
20475                let inner_offset;
20476                let mut inner_depth = depth.clone();
20477                if inlined {
20478                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20479                    inner_offset = next_offset;
20480                } else {
20481                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20482                    inner_depth.increment()?;
20483                }
20484                let val_ref = self
20485                    .per_packet_buffer_bytes_max
20486                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20487                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20488                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20489                {
20490                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20491                }
20492                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20493                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20494                }
20495            }
20496
20497            next_offset += envelope_size;
20498            _next_ordinal_to_read += 1;
20499            if next_offset >= end_offset {
20500                return Ok(());
20501            }
20502
20503            // Decode unknown envelopes for gaps in ordinals.
20504            while _next_ordinal_to_read < 6 {
20505                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20506                _next_ordinal_to_read += 1;
20507                next_offset += envelope_size;
20508            }
20509
20510            let next_out_of_line = decoder.next_out_of_line();
20511            let handles_before = decoder.remaining_handles();
20512            if let Some((inlined, num_bytes, num_handles)) =
20513                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20514            {
20515                let member_inline_size =
20516                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20517                if inlined != (member_inline_size <= 4) {
20518                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20519                }
20520                let inner_offset;
20521                let mut inner_depth = depth.clone();
20522                if inlined {
20523                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20524                    inner_offset = next_offset;
20525                } else {
20526                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20527                    inner_depth.increment()?;
20528                }
20529                let val_ref = self
20530                    .packet_count_for_server_min
20531                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20532                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20533                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20534                {
20535                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20536                }
20537                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20538                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20539                }
20540            }
20541
20542            next_offset += envelope_size;
20543            _next_ordinal_to_read += 1;
20544            if next_offset >= end_offset {
20545                return Ok(());
20546            }
20547
20548            // Decode unknown envelopes for gaps in ordinals.
20549            while _next_ordinal_to_read < 7 {
20550                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20551                _next_ordinal_to_read += 1;
20552                next_offset += envelope_size;
20553            }
20554
20555            let next_out_of_line = decoder.next_out_of_line();
20556            let handles_before = decoder.remaining_handles();
20557            if let Some((inlined, num_bytes, num_handles)) =
20558                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20559            {
20560                let member_inline_size =
20561                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20562                if inlined != (member_inline_size <= 4) {
20563                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20564                }
20565                let inner_offset;
20566                let mut inner_depth = depth.clone();
20567                if inlined {
20568                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20569                    inner_offset = next_offset;
20570                } else {
20571                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20572                    inner_depth.increment()?;
20573                }
20574                let val_ref = self
20575                    .packet_count_for_server_recommended
20576                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20577                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20578                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20579                {
20580                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20581                }
20582                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20583                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20584                }
20585            }
20586
20587            next_offset += envelope_size;
20588            _next_ordinal_to_read += 1;
20589            if next_offset >= end_offset {
20590                return Ok(());
20591            }
20592
20593            // Decode unknown envelopes for gaps in ordinals.
20594            while _next_ordinal_to_read < 8 {
20595                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20596                _next_ordinal_to_read += 1;
20597                next_offset += envelope_size;
20598            }
20599
20600            let next_out_of_line = decoder.next_out_of_line();
20601            let handles_before = decoder.remaining_handles();
20602            if let Some((inlined, num_bytes, num_handles)) =
20603                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20604            {
20605                let member_inline_size =
20606                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20607                if inlined != (member_inline_size <= 4) {
20608                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20609                }
20610                let inner_offset;
20611                let mut inner_depth = depth.clone();
20612                if inlined {
20613                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20614                    inner_offset = next_offset;
20615                } else {
20616                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20617                    inner_depth.increment()?;
20618                }
20619                let val_ref = self
20620                    .packet_count_for_server_recommended_max
20621                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20622                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20623                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20624                {
20625                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20626                }
20627                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20628                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20629                }
20630            }
20631
20632            next_offset += envelope_size;
20633            _next_ordinal_to_read += 1;
20634            if next_offset >= end_offset {
20635                return Ok(());
20636            }
20637
20638            // Decode unknown envelopes for gaps in ordinals.
20639            while _next_ordinal_to_read < 9 {
20640                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20641                _next_ordinal_to_read += 1;
20642                next_offset += envelope_size;
20643            }
20644
20645            let next_out_of_line = decoder.next_out_of_line();
20646            let handles_before = decoder.remaining_handles();
20647            if let Some((inlined, num_bytes, num_handles)) =
20648                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20649            {
20650                let member_inline_size =
20651                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20652                if inlined != (member_inline_size <= 4) {
20653                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20654                }
20655                let inner_offset;
20656                let mut inner_depth = depth.clone();
20657                if inlined {
20658                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20659                    inner_offset = next_offset;
20660                } else {
20661                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20662                    inner_depth.increment()?;
20663                }
20664                let val_ref = self
20665                    .packet_count_for_server_max
20666                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20667                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20668                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20669                {
20670                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20671                }
20672                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20673                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20674                }
20675            }
20676
20677            next_offset += envelope_size;
20678            _next_ordinal_to_read += 1;
20679            if next_offset >= end_offset {
20680                return Ok(());
20681            }
20682
20683            // Decode unknown envelopes for gaps in ordinals.
20684            while _next_ordinal_to_read < 10 {
20685                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20686                _next_ordinal_to_read += 1;
20687                next_offset += envelope_size;
20688            }
20689
20690            let next_out_of_line = decoder.next_out_of_line();
20691            let handles_before = decoder.remaining_handles();
20692            if let Some((inlined, num_bytes, num_handles)) =
20693                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20694            {
20695                let member_inline_size =
20696                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20697                if inlined != (member_inline_size <= 4) {
20698                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20699                }
20700                let inner_offset;
20701                let mut inner_depth = depth.clone();
20702                if inlined {
20703                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20704                    inner_offset = next_offset;
20705                } else {
20706                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20707                    inner_depth.increment()?;
20708                }
20709                let val_ref = self
20710                    .packet_count_for_client_min
20711                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20712                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20713                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20714                {
20715                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20716                }
20717                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20718                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20719                }
20720            }
20721
20722            next_offset += envelope_size;
20723            _next_ordinal_to_read += 1;
20724            if next_offset >= end_offset {
20725                return Ok(());
20726            }
20727
20728            // Decode unknown envelopes for gaps in ordinals.
20729            while _next_ordinal_to_read < 11 {
20730                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20731                _next_ordinal_to_read += 1;
20732                next_offset += envelope_size;
20733            }
20734
20735            let next_out_of_line = decoder.next_out_of_line();
20736            let handles_before = decoder.remaining_handles();
20737            if let Some((inlined, num_bytes, num_handles)) =
20738                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20739            {
20740                let member_inline_size =
20741                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20742                if inlined != (member_inline_size <= 4) {
20743                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20744                }
20745                let inner_offset;
20746                let mut inner_depth = depth.clone();
20747                if inlined {
20748                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20749                    inner_offset = next_offset;
20750                } else {
20751                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20752                    inner_depth.increment()?;
20753                }
20754                let val_ref = self
20755                    .packet_count_for_client_max
20756                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20757                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20758                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20759                {
20760                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20761                }
20762                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20763                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20764                }
20765            }
20766
20767            next_offset += envelope_size;
20768            _next_ordinal_to_read += 1;
20769            if next_offset >= end_offset {
20770                return Ok(());
20771            }
20772
20773            // Decode unknown envelopes for gaps in ordinals.
20774            while _next_ordinal_to_read < 12 {
20775                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20776                _next_ordinal_to_read += 1;
20777                next_offset += envelope_size;
20778            }
20779
20780            let next_out_of_line = decoder.next_out_of_line();
20781            let handles_before = decoder.remaining_handles();
20782            if let Some((inlined, num_bytes, num_handles)) =
20783                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20784            {
20785                let member_inline_size =
20786                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20787                if inlined != (member_inline_size <= 4) {
20788                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20789                }
20790                let inner_offset;
20791                let mut inner_depth = depth.clone();
20792                if inlined {
20793                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20794                    inner_offset = next_offset;
20795                } else {
20796                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20797                    inner_depth.increment()?;
20798                }
20799                let val_ref = self
20800                    .single_buffer_mode_allowed
20801                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
20802                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
20803                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20804                {
20805                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20806                }
20807                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20808                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20809                }
20810            }
20811
20812            next_offset += envelope_size;
20813            _next_ordinal_to_read += 1;
20814            if next_offset >= end_offset {
20815                return Ok(());
20816            }
20817
20818            // Decode unknown envelopes for gaps in ordinals.
20819            while _next_ordinal_to_read < 13 {
20820                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20821                _next_ordinal_to_read += 1;
20822                next_offset += envelope_size;
20823            }
20824
20825            let next_out_of_line = decoder.next_out_of_line();
20826            let handles_before = decoder.remaining_handles();
20827            if let Some((inlined, num_bytes, num_handles)) =
20828                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20829            {
20830                let member_inline_size =
20831                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20832                if inlined != (member_inline_size <= 4) {
20833                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20834                }
20835                let inner_offset;
20836                let mut inner_depth = depth.clone();
20837                if inlined {
20838                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20839                    inner_offset = next_offset;
20840                } else {
20841                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20842                    inner_depth.increment()?;
20843                }
20844                let val_ref = self
20845                    .is_physically_contiguous_required
20846                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
20847                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
20848                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20849                {
20850                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20851                }
20852                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20853                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20854                }
20855            }
20856
20857            next_offset += envelope_size;
20858
20859            // Decode the remaining unknown envelopes.
20860            while next_offset < end_offset {
20861                _next_ordinal_to_read += 1;
20862                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20863                next_offset += envelope_size;
20864            }
20865
20866            Ok(())
20867        }
20868    }
20869
20870    impl StreamBufferSettings {
20871        #[inline(always)]
20872        fn max_ordinal_present(&self) -> u64 {
20873            if let Some(_) = self.single_buffer_mode {
20874                return 6;
20875            }
20876            if let Some(_) = self.per_packet_buffer_bytes {
20877                return 5;
20878            }
20879            if let Some(_) = self.packet_count_for_client {
20880                return 4;
20881            }
20882            if let Some(_) = self.packet_count_for_server {
20883                return 3;
20884            }
20885            if let Some(_) = self.buffer_constraints_version_ordinal {
20886                return 2;
20887            }
20888            if let Some(_) = self.buffer_lifetime_ordinal {
20889                return 1;
20890            }
20891            0
20892        }
20893    }
20894
20895    impl fidl::encoding::ValueTypeMarker for StreamBufferSettings {
20896        type Borrowed<'a> = &'a Self;
20897        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20898            value
20899        }
20900    }
20901
20902    unsafe impl fidl::encoding::TypeMarker for StreamBufferSettings {
20903        type Owned = Self;
20904
20905        #[inline(always)]
20906        fn inline_align(_context: fidl::encoding::Context) -> usize {
20907            8
20908        }
20909
20910        #[inline(always)]
20911        fn inline_size(_context: fidl::encoding::Context) -> usize {
20912            16
20913        }
20914    }
20915
20916    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamBufferSettings, D>
20917        for &StreamBufferSettings
20918    {
20919        unsafe fn encode(
20920            self,
20921            encoder: &mut fidl::encoding::Encoder<'_, D>,
20922            offset: usize,
20923            mut depth: fidl::encoding::Depth,
20924        ) -> fidl::Result<()> {
20925            encoder.debug_check_bounds::<StreamBufferSettings>(offset);
20926            // Vector header
20927            let max_ordinal: u64 = self.max_ordinal_present();
20928            encoder.write_num(max_ordinal, offset);
20929            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
20930            // Calling encoder.out_of_line_offset(0) is not allowed.
20931            if max_ordinal == 0 {
20932                return Ok(());
20933            }
20934            depth.increment()?;
20935            let envelope_size = 8;
20936            let bytes_len = max_ordinal as usize * envelope_size;
20937            #[allow(unused_variables)]
20938            let offset = encoder.out_of_line_offset(bytes_len);
20939            let mut _prev_end_offset: usize = 0;
20940            if 1 > max_ordinal {
20941                return Ok(());
20942            }
20943
20944            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20945            // are envelope_size bytes.
20946            let cur_offset: usize = (1 - 1) * envelope_size;
20947
20948            // Zero reserved fields.
20949            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20950
20951            // Safety:
20952            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20953            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20954            //   envelope_size bytes, there is always sufficient room.
20955            fidl::encoding::encode_in_envelope_optional::<u64, D>(
20956                self.buffer_lifetime_ordinal
20957                    .as_ref()
20958                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
20959                encoder,
20960                offset + cur_offset,
20961                depth,
20962            )?;
20963
20964            _prev_end_offset = cur_offset + envelope_size;
20965            if 2 > max_ordinal {
20966                return Ok(());
20967            }
20968
20969            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20970            // are envelope_size bytes.
20971            let cur_offset: usize = (2 - 1) * envelope_size;
20972
20973            // Zero reserved fields.
20974            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20975
20976            // Safety:
20977            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20978            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20979            //   envelope_size bytes, there is always sufficient room.
20980            fidl::encoding::encode_in_envelope_optional::<u64, D>(
20981                self.buffer_constraints_version_ordinal
20982                    .as_ref()
20983                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
20984                encoder,
20985                offset + cur_offset,
20986                depth,
20987            )?;
20988
20989            _prev_end_offset = cur_offset + envelope_size;
20990            if 3 > max_ordinal {
20991                return Ok(());
20992            }
20993
20994            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20995            // are envelope_size bytes.
20996            let cur_offset: usize = (3 - 1) * envelope_size;
20997
20998            // Zero reserved fields.
20999            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21000
21001            // Safety:
21002            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21003            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21004            //   envelope_size bytes, there is always sufficient room.
21005            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21006                self.packet_count_for_server
21007                    .as_ref()
21008                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21009                encoder,
21010                offset + cur_offset,
21011                depth,
21012            )?;
21013
21014            _prev_end_offset = cur_offset + envelope_size;
21015            if 4 > max_ordinal {
21016                return Ok(());
21017            }
21018
21019            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21020            // are envelope_size bytes.
21021            let cur_offset: usize = (4 - 1) * envelope_size;
21022
21023            // Zero reserved fields.
21024            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21025
21026            // Safety:
21027            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21028            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21029            //   envelope_size bytes, there is always sufficient room.
21030            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21031                self.packet_count_for_client
21032                    .as_ref()
21033                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21034                encoder,
21035                offset + cur_offset,
21036                depth,
21037            )?;
21038
21039            _prev_end_offset = cur_offset + envelope_size;
21040            if 5 > max_ordinal {
21041                return Ok(());
21042            }
21043
21044            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21045            // are envelope_size bytes.
21046            let cur_offset: usize = (5 - 1) * envelope_size;
21047
21048            // Zero reserved fields.
21049            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21050
21051            // Safety:
21052            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21053            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21054            //   envelope_size bytes, there is always sufficient room.
21055            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21056                self.per_packet_buffer_bytes
21057                    .as_ref()
21058                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21059                encoder,
21060                offset + cur_offset,
21061                depth,
21062            )?;
21063
21064            _prev_end_offset = cur_offset + envelope_size;
21065            if 6 > max_ordinal {
21066                return Ok(());
21067            }
21068
21069            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21070            // are envelope_size bytes.
21071            let cur_offset: usize = (6 - 1) * envelope_size;
21072
21073            // Zero reserved fields.
21074            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21075
21076            // Safety:
21077            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21078            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21079            //   envelope_size bytes, there is always sufficient room.
21080            fidl::encoding::encode_in_envelope_optional::<bool, D>(
21081                self.single_buffer_mode
21082                    .as_ref()
21083                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
21084                encoder,
21085                offset + cur_offset,
21086                depth,
21087            )?;
21088
21089            _prev_end_offset = cur_offset + envelope_size;
21090
21091            Ok(())
21092        }
21093    }
21094
21095    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamBufferSettings {
21096        #[inline(always)]
21097        fn new_empty() -> Self {
21098            Self::default()
21099        }
21100
21101        unsafe fn decode(
21102            &mut self,
21103            decoder: &mut fidl::encoding::Decoder<'_, D>,
21104            offset: usize,
21105            mut depth: fidl::encoding::Depth,
21106        ) -> fidl::Result<()> {
21107            decoder.debug_check_bounds::<Self>(offset);
21108            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21109                None => return Err(fidl::Error::NotNullable),
21110                Some(len) => len,
21111            };
21112            // Calling decoder.out_of_line_offset(0) is not allowed.
21113            if len == 0 {
21114                return Ok(());
21115            };
21116            depth.increment()?;
21117            let envelope_size = 8;
21118            let bytes_len = len * envelope_size;
21119            let offset = decoder.out_of_line_offset(bytes_len)?;
21120            // Decode the envelope for each type.
21121            let mut _next_ordinal_to_read = 0;
21122            let mut next_offset = offset;
21123            let end_offset = offset + bytes_len;
21124            _next_ordinal_to_read += 1;
21125            if next_offset >= end_offset {
21126                return Ok(());
21127            }
21128
21129            // Decode unknown envelopes for gaps in ordinals.
21130            while _next_ordinal_to_read < 1 {
21131                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21132                _next_ordinal_to_read += 1;
21133                next_offset += envelope_size;
21134            }
21135
21136            let next_out_of_line = decoder.next_out_of_line();
21137            let handles_before = decoder.remaining_handles();
21138            if let Some((inlined, num_bytes, num_handles)) =
21139                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21140            {
21141                let member_inline_size =
21142                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21143                if inlined != (member_inline_size <= 4) {
21144                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21145                }
21146                let inner_offset;
21147                let mut inner_depth = depth.clone();
21148                if inlined {
21149                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21150                    inner_offset = next_offset;
21151                } else {
21152                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21153                    inner_depth.increment()?;
21154                }
21155                let val_ref =
21156                    self.buffer_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
21157                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21158                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21159                {
21160                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21161                }
21162                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21163                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21164                }
21165            }
21166
21167            next_offset += envelope_size;
21168            _next_ordinal_to_read += 1;
21169            if next_offset >= end_offset {
21170                return Ok(());
21171            }
21172
21173            // Decode unknown envelopes for gaps in ordinals.
21174            while _next_ordinal_to_read < 2 {
21175                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21176                _next_ordinal_to_read += 1;
21177                next_offset += envelope_size;
21178            }
21179
21180            let next_out_of_line = decoder.next_out_of_line();
21181            let handles_before = decoder.remaining_handles();
21182            if let Some((inlined, num_bytes, num_handles)) =
21183                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21184            {
21185                let member_inline_size =
21186                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21187                if inlined != (member_inline_size <= 4) {
21188                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21189                }
21190                let inner_offset;
21191                let mut inner_depth = depth.clone();
21192                if inlined {
21193                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21194                    inner_offset = next_offset;
21195                } else {
21196                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21197                    inner_depth.increment()?;
21198                }
21199                let val_ref = self
21200                    .buffer_constraints_version_ordinal
21201                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
21202                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21203                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21204                {
21205                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21206                }
21207                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21208                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21209                }
21210            }
21211
21212            next_offset += envelope_size;
21213            _next_ordinal_to_read += 1;
21214            if next_offset >= end_offset {
21215                return Ok(());
21216            }
21217
21218            // Decode unknown envelopes for gaps in ordinals.
21219            while _next_ordinal_to_read < 3 {
21220                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21221                _next_ordinal_to_read += 1;
21222                next_offset += envelope_size;
21223            }
21224
21225            let next_out_of_line = decoder.next_out_of_line();
21226            let handles_before = decoder.remaining_handles();
21227            if let Some((inlined, num_bytes, num_handles)) =
21228                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21229            {
21230                let member_inline_size =
21231                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21232                if inlined != (member_inline_size <= 4) {
21233                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21234                }
21235                let inner_offset;
21236                let mut inner_depth = depth.clone();
21237                if inlined {
21238                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21239                    inner_offset = next_offset;
21240                } else {
21241                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21242                    inner_depth.increment()?;
21243                }
21244                let val_ref =
21245                    self.packet_count_for_server.get_or_insert_with(|| fidl::new_empty!(u32, D));
21246                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21247                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21248                {
21249                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21250                }
21251                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21252                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21253                }
21254            }
21255
21256            next_offset += envelope_size;
21257            _next_ordinal_to_read += 1;
21258            if next_offset >= end_offset {
21259                return Ok(());
21260            }
21261
21262            // Decode unknown envelopes for gaps in ordinals.
21263            while _next_ordinal_to_read < 4 {
21264                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21265                _next_ordinal_to_read += 1;
21266                next_offset += envelope_size;
21267            }
21268
21269            let next_out_of_line = decoder.next_out_of_line();
21270            let handles_before = decoder.remaining_handles();
21271            if let Some((inlined, num_bytes, num_handles)) =
21272                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21273            {
21274                let member_inline_size =
21275                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21276                if inlined != (member_inline_size <= 4) {
21277                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21278                }
21279                let inner_offset;
21280                let mut inner_depth = depth.clone();
21281                if inlined {
21282                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21283                    inner_offset = next_offset;
21284                } else {
21285                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21286                    inner_depth.increment()?;
21287                }
21288                let val_ref =
21289                    self.packet_count_for_client.get_or_insert_with(|| fidl::new_empty!(u32, D));
21290                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21291                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21292                {
21293                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21294                }
21295                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21296                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21297                }
21298            }
21299
21300            next_offset += envelope_size;
21301            _next_ordinal_to_read += 1;
21302            if next_offset >= end_offset {
21303                return Ok(());
21304            }
21305
21306            // Decode unknown envelopes for gaps in ordinals.
21307            while _next_ordinal_to_read < 5 {
21308                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21309                _next_ordinal_to_read += 1;
21310                next_offset += envelope_size;
21311            }
21312
21313            let next_out_of_line = decoder.next_out_of_line();
21314            let handles_before = decoder.remaining_handles();
21315            if let Some((inlined, num_bytes, num_handles)) =
21316                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21317            {
21318                let member_inline_size =
21319                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21320                if inlined != (member_inline_size <= 4) {
21321                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21322                }
21323                let inner_offset;
21324                let mut inner_depth = depth.clone();
21325                if inlined {
21326                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21327                    inner_offset = next_offset;
21328                } else {
21329                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21330                    inner_depth.increment()?;
21331                }
21332                let val_ref =
21333                    self.per_packet_buffer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
21334                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21335                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21336                {
21337                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21338                }
21339                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21340                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21341                }
21342            }
21343
21344            next_offset += envelope_size;
21345            _next_ordinal_to_read += 1;
21346            if next_offset >= end_offset {
21347                return Ok(());
21348            }
21349
21350            // Decode unknown envelopes for gaps in ordinals.
21351            while _next_ordinal_to_read < 6 {
21352                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21353                _next_ordinal_to_read += 1;
21354                next_offset += envelope_size;
21355            }
21356
21357            let next_out_of_line = decoder.next_out_of_line();
21358            let handles_before = decoder.remaining_handles();
21359            if let Some((inlined, num_bytes, num_handles)) =
21360                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21361            {
21362                let member_inline_size =
21363                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21364                if inlined != (member_inline_size <= 4) {
21365                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21366                }
21367                let inner_offset;
21368                let mut inner_depth = depth.clone();
21369                if inlined {
21370                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21371                    inner_offset = next_offset;
21372                } else {
21373                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21374                    inner_depth.increment()?;
21375                }
21376                let val_ref =
21377                    self.single_buffer_mode.get_or_insert_with(|| fidl::new_empty!(bool, D));
21378                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21379                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21380                {
21381                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21382                }
21383                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21384                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21385                }
21386            }
21387
21388            next_offset += envelope_size;
21389
21390            // Decode the remaining unknown envelopes.
21391            while next_offset < end_offset {
21392                _next_ordinal_to_read += 1;
21393                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21394                next_offset += envelope_size;
21395            }
21396
21397            Ok(())
21398        }
21399    }
21400
21401    impl StreamOutputConstraints {
21402        #[inline(always)]
21403        fn max_ordinal_present(&self) -> u64 {
21404            if let Some(_) = self.buffer_constraints {
21405                return 3;
21406            }
21407            if let Some(_) = self.buffer_constraints_action_required {
21408                return 2;
21409            }
21410            if let Some(_) = self.stream_lifetime_ordinal {
21411                return 1;
21412            }
21413            0
21414        }
21415    }
21416
21417    impl fidl::encoding::ValueTypeMarker for StreamOutputConstraints {
21418        type Borrowed<'a> = &'a Self;
21419        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21420            value
21421        }
21422    }
21423
21424    unsafe impl fidl::encoding::TypeMarker for StreamOutputConstraints {
21425        type Owned = Self;
21426
21427        #[inline(always)]
21428        fn inline_align(_context: fidl::encoding::Context) -> usize {
21429            8
21430        }
21431
21432        #[inline(always)]
21433        fn inline_size(_context: fidl::encoding::Context) -> usize {
21434            16
21435        }
21436    }
21437
21438    unsafe impl<D: fidl::encoding::ResourceDialect>
21439        fidl::encoding::Encode<StreamOutputConstraints, D> for &StreamOutputConstraints
21440    {
21441        unsafe fn encode(
21442            self,
21443            encoder: &mut fidl::encoding::Encoder<'_, D>,
21444            offset: usize,
21445            mut depth: fidl::encoding::Depth,
21446        ) -> fidl::Result<()> {
21447            encoder.debug_check_bounds::<StreamOutputConstraints>(offset);
21448            // Vector header
21449            let max_ordinal: u64 = self.max_ordinal_present();
21450            encoder.write_num(max_ordinal, offset);
21451            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21452            // Calling encoder.out_of_line_offset(0) is not allowed.
21453            if max_ordinal == 0 {
21454                return Ok(());
21455            }
21456            depth.increment()?;
21457            let envelope_size = 8;
21458            let bytes_len = max_ordinal as usize * envelope_size;
21459            #[allow(unused_variables)]
21460            let offset = encoder.out_of_line_offset(bytes_len);
21461            let mut _prev_end_offset: usize = 0;
21462            if 1 > max_ordinal {
21463                return Ok(());
21464            }
21465
21466            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21467            // are envelope_size bytes.
21468            let cur_offset: usize = (1 - 1) * envelope_size;
21469
21470            // Zero reserved fields.
21471            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21472
21473            // Safety:
21474            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21475            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21476            //   envelope_size bytes, there is always sufficient room.
21477            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21478                self.stream_lifetime_ordinal
21479                    .as_ref()
21480                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21481                encoder,
21482                offset + cur_offset,
21483                depth,
21484            )?;
21485
21486            _prev_end_offset = cur_offset + envelope_size;
21487            if 2 > max_ordinal {
21488                return Ok(());
21489            }
21490
21491            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21492            // are envelope_size bytes.
21493            let cur_offset: usize = (2 - 1) * envelope_size;
21494
21495            // Zero reserved fields.
21496            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21497
21498            // Safety:
21499            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21500            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21501            //   envelope_size bytes, there is always sufficient room.
21502            fidl::encoding::encode_in_envelope_optional::<bool, D>(
21503                self.buffer_constraints_action_required
21504                    .as_ref()
21505                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
21506                encoder,
21507                offset + cur_offset,
21508                depth,
21509            )?;
21510
21511            _prev_end_offset = cur_offset + envelope_size;
21512            if 3 > max_ordinal {
21513                return Ok(());
21514            }
21515
21516            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21517            // are envelope_size bytes.
21518            let cur_offset: usize = (3 - 1) * envelope_size;
21519
21520            // Zero reserved fields.
21521            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21522
21523            // Safety:
21524            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21525            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21526            //   envelope_size bytes, there is always sufficient room.
21527            fidl::encoding::encode_in_envelope_optional::<StreamBufferConstraints, D>(
21528                self.buffer_constraints
21529                    .as_ref()
21530                    .map(<StreamBufferConstraints as fidl::encoding::ValueTypeMarker>::borrow),
21531                encoder,
21532                offset + cur_offset,
21533                depth,
21534            )?;
21535
21536            _prev_end_offset = cur_offset + envelope_size;
21537
21538            Ok(())
21539        }
21540    }
21541
21542    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
21543        for StreamOutputConstraints
21544    {
21545        #[inline(always)]
21546        fn new_empty() -> Self {
21547            Self::default()
21548        }
21549
21550        unsafe fn decode(
21551            &mut self,
21552            decoder: &mut fidl::encoding::Decoder<'_, D>,
21553            offset: usize,
21554            mut depth: fidl::encoding::Depth,
21555        ) -> fidl::Result<()> {
21556            decoder.debug_check_bounds::<Self>(offset);
21557            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21558                None => return Err(fidl::Error::NotNullable),
21559                Some(len) => len,
21560            };
21561            // Calling decoder.out_of_line_offset(0) is not allowed.
21562            if len == 0 {
21563                return Ok(());
21564            };
21565            depth.increment()?;
21566            let envelope_size = 8;
21567            let bytes_len = len * envelope_size;
21568            let offset = decoder.out_of_line_offset(bytes_len)?;
21569            // Decode the envelope for each type.
21570            let mut _next_ordinal_to_read = 0;
21571            let mut next_offset = offset;
21572            let end_offset = offset + bytes_len;
21573            _next_ordinal_to_read += 1;
21574            if next_offset >= end_offset {
21575                return Ok(());
21576            }
21577
21578            // Decode unknown envelopes for gaps in ordinals.
21579            while _next_ordinal_to_read < 1 {
21580                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21581                _next_ordinal_to_read += 1;
21582                next_offset += envelope_size;
21583            }
21584
21585            let next_out_of_line = decoder.next_out_of_line();
21586            let handles_before = decoder.remaining_handles();
21587            if let Some((inlined, num_bytes, num_handles)) =
21588                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21589            {
21590                let member_inline_size =
21591                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21592                if inlined != (member_inline_size <= 4) {
21593                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21594                }
21595                let inner_offset;
21596                let mut inner_depth = depth.clone();
21597                if inlined {
21598                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21599                    inner_offset = next_offset;
21600                } else {
21601                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21602                    inner_depth.increment()?;
21603                }
21604                let val_ref =
21605                    self.stream_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
21606                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21607                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21608                {
21609                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21610                }
21611                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21612                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21613                }
21614            }
21615
21616            next_offset += envelope_size;
21617            _next_ordinal_to_read += 1;
21618            if next_offset >= end_offset {
21619                return Ok(());
21620            }
21621
21622            // Decode unknown envelopes for gaps in ordinals.
21623            while _next_ordinal_to_read < 2 {
21624                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21625                _next_ordinal_to_read += 1;
21626                next_offset += envelope_size;
21627            }
21628
21629            let next_out_of_line = decoder.next_out_of_line();
21630            let handles_before = decoder.remaining_handles();
21631            if let Some((inlined, num_bytes, num_handles)) =
21632                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21633            {
21634                let member_inline_size =
21635                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21636                if inlined != (member_inline_size <= 4) {
21637                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21638                }
21639                let inner_offset;
21640                let mut inner_depth = depth.clone();
21641                if inlined {
21642                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21643                    inner_offset = next_offset;
21644                } else {
21645                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21646                    inner_depth.increment()?;
21647                }
21648                let val_ref = self
21649                    .buffer_constraints_action_required
21650                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
21651                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21652                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21653                {
21654                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21655                }
21656                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21657                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21658                }
21659            }
21660
21661            next_offset += envelope_size;
21662            _next_ordinal_to_read += 1;
21663            if next_offset >= end_offset {
21664                return Ok(());
21665            }
21666
21667            // Decode unknown envelopes for gaps in ordinals.
21668            while _next_ordinal_to_read < 3 {
21669                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21670                _next_ordinal_to_read += 1;
21671                next_offset += envelope_size;
21672            }
21673
21674            let next_out_of_line = decoder.next_out_of_line();
21675            let handles_before = decoder.remaining_handles();
21676            if let Some((inlined, num_bytes, num_handles)) =
21677                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21678            {
21679                let member_inline_size =
21680                    <StreamBufferConstraints as fidl::encoding::TypeMarker>::inline_size(
21681                        decoder.context,
21682                    );
21683                if inlined != (member_inline_size <= 4) {
21684                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21685                }
21686                let inner_offset;
21687                let mut inner_depth = depth.clone();
21688                if inlined {
21689                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21690                    inner_offset = next_offset;
21691                } else {
21692                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21693                    inner_depth.increment()?;
21694                }
21695                let val_ref = self
21696                    .buffer_constraints
21697                    .get_or_insert_with(|| fidl::new_empty!(StreamBufferConstraints, D));
21698                fidl::decode!(
21699                    StreamBufferConstraints,
21700                    D,
21701                    val_ref,
21702                    decoder,
21703                    inner_offset,
21704                    inner_depth
21705                )?;
21706                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21707                {
21708                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21709                }
21710                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21711                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21712                }
21713            }
21714
21715            next_offset += envelope_size;
21716
21717            // Decode the remaining unknown envelopes.
21718            while next_offset < end_offset {
21719                _next_ordinal_to_read += 1;
21720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21721                next_offset += envelope_size;
21722            }
21723
21724            Ok(())
21725        }
21726    }
21727
21728    impl StreamOutputFormat {
21729        #[inline(always)]
21730        fn max_ordinal_present(&self) -> u64 {
21731            if let Some(_) = self.format_details {
21732                return 2;
21733            }
21734            if let Some(_) = self.stream_lifetime_ordinal {
21735                return 1;
21736            }
21737            0
21738        }
21739    }
21740
21741    impl fidl::encoding::ValueTypeMarker for StreamOutputFormat {
21742        type Borrowed<'a> = &'a Self;
21743        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21744            value
21745        }
21746    }
21747
21748    unsafe impl fidl::encoding::TypeMarker for StreamOutputFormat {
21749        type Owned = Self;
21750
21751        #[inline(always)]
21752        fn inline_align(_context: fidl::encoding::Context) -> usize {
21753            8
21754        }
21755
21756        #[inline(always)]
21757        fn inline_size(_context: fidl::encoding::Context) -> usize {
21758            16
21759        }
21760    }
21761
21762    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamOutputFormat, D>
21763        for &StreamOutputFormat
21764    {
21765        unsafe fn encode(
21766            self,
21767            encoder: &mut fidl::encoding::Encoder<'_, D>,
21768            offset: usize,
21769            mut depth: fidl::encoding::Depth,
21770        ) -> fidl::Result<()> {
21771            encoder.debug_check_bounds::<StreamOutputFormat>(offset);
21772            // Vector header
21773            let max_ordinal: u64 = self.max_ordinal_present();
21774            encoder.write_num(max_ordinal, offset);
21775            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21776            // Calling encoder.out_of_line_offset(0) is not allowed.
21777            if max_ordinal == 0 {
21778                return Ok(());
21779            }
21780            depth.increment()?;
21781            let envelope_size = 8;
21782            let bytes_len = max_ordinal as usize * envelope_size;
21783            #[allow(unused_variables)]
21784            let offset = encoder.out_of_line_offset(bytes_len);
21785            let mut _prev_end_offset: usize = 0;
21786            if 1 > max_ordinal {
21787                return Ok(());
21788            }
21789
21790            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21791            // are envelope_size bytes.
21792            let cur_offset: usize = (1 - 1) * envelope_size;
21793
21794            // Zero reserved fields.
21795            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21796
21797            // Safety:
21798            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21799            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21800            //   envelope_size bytes, there is always sufficient room.
21801            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21802                self.stream_lifetime_ordinal
21803                    .as_ref()
21804                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21805                encoder,
21806                offset + cur_offset,
21807                depth,
21808            )?;
21809
21810            _prev_end_offset = cur_offset + envelope_size;
21811            if 2 > max_ordinal {
21812                return Ok(());
21813            }
21814
21815            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21816            // are envelope_size bytes.
21817            let cur_offset: usize = (2 - 1) * envelope_size;
21818
21819            // Zero reserved fields.
21820            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21821
21822            // Safety:
21823            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21824            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21825            //   envelope_size bytes, there is always sufficient room.
21826            fidl::encoding::encode_in_envelope_optional::<FormatDetails, D>(
21827                self.format_details
21828                    .as_ref()
21829                    .map(<FormatDetails as fidl::encoding::ValueTypeMarker>::borrow),
21830                encoder,
21831                offset + cur_offset,
21832                depth,
21833            )?;
21834
21835            _prev_end_offset = cur_offset + envelope_size;
21836
21837            Ok(())
21838        }
21839    }
21840
21841    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamOutputFormat {
21842        #[inline(always)]
21843        fn new_empty() -> Self {
21844            Self::default()
21845        }
21846
21847        unsafe fn decode(
21848            &mut self,
21849            decoder: &mut fidl::encoding::Decoder<'_, D>,
21850            offset: usize,
21851            mut depth: fidl::encoding::Depth,
21852        ) -> fidl::Result<()> {
21853            decoder.debug_check_bounds::<Self>(offset);
21854            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21855                None => return Err(fidl::Error::NotNullable),
21856                Some(len) => len,
21857            };
21858            // Calling decoder.out_of_line_offset(0) is not allowed.
21859            if len == 0 {
21860                return Ok(());
21861            };
21862            depth.increment()?;
21863            let envelope_size = 8;
21864            let bytes_len = len * envelope_size;
21865            let offset = decoder.out_of_line_offset(bytes_len)?;
21866            // Decode the envelope for each type.
21867            let mut _next_ordinal_to_read = 0;
21868            let mut next_offset = offset;
21869            let end_offset = offset + bytes_len;
21870            _next_ordinal_to_read += 1;
21871            if next_offset >= end_offset {
21872                return Ok(());
21873            }
21874
21875            // Decode unknown envelopes for gaps in ordinals.
21876            while _next_ordinal_to_read < 1 {
21877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21878                _next_ordinal_to_read += 1;
21879                next_offset += envelope_size;
21880            }
21881
21882            let next_out_of_line = decoder.next_out_of_line();
21883            let handles_before = decoder.remaining_handles();
21884            if let Some((inlined, num_bytes, num_handles)) =
21885                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21886            {
21887                let member_inline_size =
21888                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21889                if inlined != (member_inline_size <= 4) {
21890                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21891                }
21892                let inner_offset;
21893                let mut inner_depth = depth.clone();
21894                if inlined {
21895                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21896                    inner_offset = next_offset;
21897                } else {
21898                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21899                    inner_depth.increment()?;
21900                }
21901                let val_ref =
21902                    self.stream_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
21903                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21904                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21905                {
21906                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21907                }
21908                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21909                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21910                }
21911            }
21912
21913            next_offset += envelope_size;
21914            _next_ordinal_to_read += 1;
21915            if next_offset >= end_offset {
21916                return Ok(());
21917            }
21918
21919            // Decode unknown envelopes for gaps in ordinals.
21920            while _next_ordinal_to_read < 2 {
21921                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21922                _next_ordinal_to_read += 1;
21923                next_offset += envelope_size;
21924            }
21925
21926            let next_out_of_line = decoder.next_out_of_line();
21927            let handles_before = decoder.remaining_handles();
21928            if let Some((inlined, num_bytes, num_handles)) =
21929                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21930            {
21931                let member_inline_size =
21932                    <FormatDetails as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21933                if inlined != (member_inline_size <= 4) {
21934                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21935                }
21936                let inner_offset;
21937                let mut inner_depth = depth.clone();
21938                if inlined {
21939                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21940                    inner_offset = next_offset;
21941                } else {
21942                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21943                    inner_depth.increment()?;
21944                }
21945                let val_ref =
21946                    self.format_details.get_or_insert_with(|| fidl::new_empty!(FormatDetails, D));
21947                fidl::decode!(FormatDetails, D, val_ref, decoder, inner_offset, inner_depth)?;
21948                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21949                {
21950                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21951                }
21952                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21953                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21954                }
21955            }
21956
21957            next_offset += envelope_size;
21958
21959            // Decode the remaining unknown envelopes.
21960            while next_offset < end_offset {
21961                _next_ordinal_to_read += 1;
21962                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21963                next_offset += envelope_size;
21964            }
21965
21966            Ok(())
21967        }
21968    }
21969
21970    impl UsageStateDucked {
21971        #[inline(always)]
21972        fn max_ordinal_present(&self) -> u64 {
21973            0
21974        }
21975    }
21976
21977    impl fidl::encoding::ValueTypeMarker for UsageStateDucked {
21978        type Borrowed<'a> = &'a Self;
21979        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21980            value
21981        }
21982    }
21983
21984    unsafe impl fidl::encoding::TypeMarker for UsageStateDucked {
21985        type Owned = Self;
21986
21987        #[inline(always)]
21988        fn inline_align(_context: fidl::encoding::Context) -> usize {
21989            8
21990        }
21991
21992        #[inline(always)]
21993        fn inline_size(_context: fidl::encoding::Context) -> usize {
21994            16
21995        }
21996    }
21997
21998    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageStateDucked, D>
21999        for &UsageStateDucked
22000    {
22001        unsafe fn encode(
22002            self,
22003            encoder: &mut fidl::encoding::Encoder<'_, D>,
22004            offset: usize,
22005            mut depth: fidl::encoding::Depth,
22006        ) -> fidl::Result<()> {
22007            encoder.debug_check_bounds::<UsageStateDucked>(offset);
22008            // Vector header
22009            let max_ordinal: u64 = self.max_ordinal_present();
22010            encoder.write_num(max_ordinal, offset);
22011            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22012            // Calling encoder.out_of_line_offset(0) is not allowed.
22013            if max_ordinal == 0 {
22014                return Ok(());
22015            }
22016            depth.increment()?;
22017            let envelope_size = 8;
22018            let bytes_len = max_ordinal as usize * envelope_size;
22019            #[allow(unused_variables)]
22020            let offset = encoder.out_of_line_offset(bytes_len);
22021            let mut _prev_end_offset: usize = 0;
22022
22023            Ok(())
22024        }
22025    }
22026
22027    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageStateDucked {
22028        #[inline(always)]
22029        fn new_empty() -> Self {
22030            Self::default()
22031        }
22032
22033        unsafe fn decode(
22034            &mut self,
22035            decoder: &mut fidl::encoding::Decoder<'_, D>,
22036            offset: usize,
22037            mut depth: fidl::encoding::Depth,
22038        ) -> fidl::Result<()> {
22039            decoder.debug_check_bounds::<Self>(offset);
22040            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22041                None => return Err(fidl::Error::NotNullable),
22042                Some(len) => len,
22043            };
22044            // Calling decoder.out_of_line_offset(0) is not allowed.
22045            if len == 0 {
22046                return Ok(());
22047            };
22048            depth.increment()?;
22049            let envelope_size = 8;
22050            let bytes_len = len * envelope_size;
22051            let offset = decoder.out_of_line_offset(bytes_len)?;
22052            // Decode the envelope for each type.
22053            let mut _next_ordinal_to_read = 0;
22054            let mut next_offset = offset;
22055            let end_offset = offset + bytes_len;
22056
22057            // Decode the remaining unknown envelopes.
22058            while next_offset < end_offset {
22059                _next_ordinal_to_read += 1;
22060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22061                next_offset += envelope_size;
22062            }
22063
22064            Ok(())
22065        }
22066    }
22067
22068    impl UsageStateMuted {
22069        #[inline(always)]
22070        fn max_ordinal_present(&self) -> u64 {
22071            0
22072        }
22073    }
22074
22075    impl fidl::encoding::ValueTypeMarker for UsageStateMuted {
22076        type Borrowed<'a> = &'a Self;
22077        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22078            value
22079        }
22080    }
22081
22082    unsafe impl fidl::encoding::TypeMarker for UsageStateMuted {
22083        type Owned = Self;
22084
22085        #[inline(always)]
22086        fn inline_align(_context: fidl::encoding::Context) -> usize {
22087            8
22088        }
22089
22090        #[inline(always)]
22091        fn inline_size(_context: fidl::encoding::Context) -> usize {
22092            16
22093        }
22094    }
22095
22096    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageStateMuted, D>
22097        for &UsageStateMuted
22098    {
22099        unsafe fn encode(
22100            self,
22101            encoder: &mut fidl::encoding::Encoder<'_, D>,
22102            offset: usize,
22103            mut depth: fidl::encoding::Depth,
22104        ) -> fidl::Result<()> {
22105            encoder.debug_check_bounds::<UsageStateMuted>(offset);
22106            // Vector header
22107            let max_ordinal: u64 = self.max_ordinal_present();
22108            encoder.write_num(max_ordinal, offset);
22109            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22110            // Calling encoder.out_of_line_offset(0) is not allowed.
22111            if max_ordinal == 0 {
22112                return Ok(());
22113            }
22114            depth.increment()?;
22115            let envelope_size = 8;
22116            let bytes_len = max_ordinal as usize * envelope_size;
22117            #[allow(unused_variables)]
22118            let offset = encoder.out_of_line_offset(bytes_len);
22119            let mut _prev_end_offset: usize = 0;
22120
22121            Ok(())
22122        }
22123    }
22124
22125    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageStateMuted {
22126        #[inline(always)]
22127        fn new_empty() -> Self {
22128            Self::default()
22129        }
22130
22131        unsafe fn decode(
22132            &mut self,
22133            decoder: &mut fidl::encoding::Decoder<'_, D>,
22134            offset: usize,
22135            mut depth: fidl::encoding::Depth,
22136        ) -> fidl::Result<()> {
22137            decoder.debug_check_bounds::<Self>(offset);
22138            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22139                None => return Err(fidl::Error::NotNullable),
22140                Some(len) => len,
22141            };
22142            // Calling decoder.out_of_line_offset(0) is not allowed.
22143            if len == 0 {
22144                return Ok(());
22145            };
22146            depth.increment()?;
22147            let envelope_size = 8;
22148            let bytes_len = len * envelope_size;
22149            let offset = decoder.out_of_line_offset(bytes_len)?;
22150            // Decode the envelope for each type.
22151            let mut _next_ordinal_to_read = 0;
22152            let mut next_offset = offset;
22153            let end_offset = offset + bytes_len;
22154
22155            // Decode the remaining unknown envelopes.
22156            while next_offset < end_offset {
22157                _next_ordinal_to_read += 1;
22158                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22159                next_offset += envelope_size;
22160            }
22161
22162            Ok(())
22163        }
22164    }
22165
22166    impl UsageStateUnadjusted {
22167        #[inline(always)]
22168        fn max_ordinal_present(&self) -> u64 {
22169            0
22170        }
22171    }
22172
22173    impl fidl::encoding::ValueTypeMarker for UsageStateUnadjusted {
22174        type Borrowed<'a> = &'a Self;
22175        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22176            value
22177        }
22178    }
22179
22180    unsafe impl fidl::encoding::TypeMarker for UsageStateUnadjusted {
22181        type Owned = Self;
22182
22183        #[inline(always)]
22184        fn inline_align(_context: fidl::encoding::Context) -> usize {
22185            8
22186        }
22187
22188        #[inline(always)]
22189        fn inline_size(_context: fidl::encoding::Context) -> usize {
22190            16
22191        }
22192    }
22193
22194    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageStateUnadjusted, D>
22195        for &UsageStateUnadjusted
22196    {
22197        unsafe fn encode(
22198            self,
22199            encoder: &mut fidl::encoding::Encoder<'_, D>,
22200            offset: usize,
22201            mut depth: fidl::encoding::Depth,
22202        ) -> fidl::Result<()> {
22203            encoder.debug_check_bounds::<UsageStateUnadjusted>(offset);
22204            // Vector header
22205            let max_ordinal: u64 = self.max_ordinal_present();
22206            encoder.write_num(max_ordinal, offset);
22207            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22208            // Calling encoder.out_of_line_offset(0) is not allowed.
22209            if max_ordinal == 0 {
22210                return Ok(());
22211            }
22212            depth.increment()?;
22213            let envelope_size = 8;
22214            let bytes_len = max_ordinal as usize * envelope_size;
22215            #[allow(unused_variables)]
22216            let offset = encoder.out_of_line_offset(bytes_len);
22217            let mut _prev_end_offset: usize = 0;
22218
22219            Ok(())
22220        }
22221    }
22222
22223    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageStateUnadjusted {
22224        #[inline(always)]
22225        fn new_empty() -> Self {
22226            Self::default()
22227        }
22228
22229        unsafe fn decode(
22230            &mut self,
22231            decoder: &mut fidl::encoding::Decoder<'_, D>,
22232            offset: usize,
22233            mut depth: fidl::encoding::Depth,
22234        ) -> fidl::Result<()> {
22235            decoder.debug_check_bounds::<Self>(offset);
22236            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22237                None => return Err(fidl::Error::NotNullable),
22238                Some(len) => len,
22239            };
22240            // Calling decoder.out_of_line_offset(0) is not allowed.
22241            if len == 0 {
22242                return Ok(());
22243            };
22244            depth.increment()?;
22245            let envelope_size = 8;
22246            let bytes_len = len * envelope_size;
22247            let offset = decoder.out_of_line_offset(bytes_len)?;
22248            // Decode the envelope for each type.
22249            let mut _next_ordinal_to_read = 0;
22250            let mut next_offset = offset;
22251            let end_offset = offset + bytes_len;
22252
22253            // Decode the remaining unknown envelopes.
22254            while next_offset < end_offset {
22255                _next_ordinal_to_read += 1;
22256                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22257                next_offset += envelope_size;
22258            }
22259
22260            Ok(())
22261        }
22262    }
22263
22264    impl fidl::encoding::ValueTypeMarker for AacBitRate {
22265        type Borrowed<'a> = &'a Self;
22266        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22267            value
22268        }
22269    }
22270
22271    unsafe impl fidl::encoding::TypeMarker for AacBitRate {
22272        type Owned = Self;
22273
22274        #[inline(always)]
22275        fn inline_align(_context: fidl::encoding::Context) -> usize {
22276            8
22277        }
22278
22279        #[inline(always)]
22280        fn inline_size(_context: fidl::encoding::Context) -> usize {
22281            16
22282        }
22283    }
22284
22285    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacBitRate, D>
22286        for &AacBitRate
22287    {
22288        #[inline]
22289        unsafe fn encode(
22290            self,
22291            encoder: &mut fidl::encoding::Encoder<'_, D>,
22292            offset: usize,
22293            _depth: fidl::encoding::Depth,
22294        ) -> fidl::Result<()> {
22295            encoder.debug_check_bounds::<AacBitRate>(offset);
22296            encoder.write_num::<u64>(self.ordinal(), offset);
22297            match self {
22298                AacBitRate::Constant(ref val) => {
22299                    fidl::encoding::encode_in_envelope::<AacConstantBitRate, D>(
22300                        <AacConstantBitRate as fidl::encoding::ValueTypeMarker>::borrow(val),
22301                        encoder,
22302                        offset + 8,
22303                        _depth,
22304                    )
22305                }
22306                AacBitRate::Variable(ref val) => {
22307                    fidl::encoding::encode_in_envelope::<AacVariableBitRate, D>(
22308                        <AacVariableBitRate as fidl::encoding::ValueTypeMarker>::borrow(val),
22309                        encoder,
22310                        offset + 8,
22311                        _depth,
22312                    )
22313                }
22314            }
22315        }
22316    }
22317
22318    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacBitRate {
22319        #[inline(always)]
22320        fn new_empty() -> Self {
22321            Self::Constant(fidl::new_empty!(AacConstantBitRate, D))
22322        }
22323
22324        #[inline]
22325        unsafe fn decode(
22326            &mut self,
22327            decoder: &mut fidl::encoding::Decoder<'_, D>,
22328            offset: usize,
22329            mut depth: fidl::encoding::Depth,
22330        ) -> fidl::Result<()> {
22331            decoder.debug_check_bounds::<Self>(offset);
22332            #[allow(unused_variables)]
22333            let next_out_of_line = decoder.next_out_of_line();
22334            let handles_before = decoder.remaining_handles();
22335            let (ordinal, inlined, num_bytes, num_handles) =
22336                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22337
22338            let member_inline_size = match ordinal {
22339                1 => {
22340                    <AacConstantBitRate as fidl::encoding::TypeMarker>::inline_size(decoder.context)
22341                }
22342                2 => {
22343                    <AacVariableBitRate as fidl::encoding::TypeMarker>::inline_size(decoder.context)
22344                }
22345                _ => return Err(fidl::Error::UnknownUnionTag),
22346            };
22347
22348            if inlined != (member_inline_size <= 4) {
22349                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22350            }
22351            let _inner_offset;
22352            if inlined {
22353                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22354                _inner_offset = offset + 8;
22355            } else {
22356                depth.increment()?;
22357                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22358            }
22359            match ordinal {
22360                1 => {
22361                    #[allow(irrefutable_let_patterns)]
22362                    if let AacBitRate::Constant(_) = self {
22363                        // Do nothing, read the value into the object
22364                    } else {
22365                        // Initialize `self` to the right variant
22366                        *self = AacBitRate::Constant(fidl::new_empty!(AacConstantBitRate, D));
22367                    }
22368                    #[allow(irrefutable_let_patterns)]
22369                    if let AacBitRate::Constant(ref mut val) = self {
22370                        fidl::decode!(AacConstantBitRate, D, val, decoder, _inner_offset, depth)?;
22371                    } else {
22372                        unreachable!()
22373                    }
22374                }
22375                2 => {
22376                    #[allow(irrefutable_let_patterns)]
22377                    if let AacBitRate::Variable(_) = self {
22378                        // Do nothing, read the value into the object
22379                    } else {
22380                        // Initialize `self` to the right variant
22381                        *self = AacBitRate::Variable(fidl::new_empty!(AacVariableBitRate, D));
22382                    }
22383                    #[allow(irrefutable_let_patterns)]
22384                    if let AacBitRate::Variable(ref mut val) = self {
22385                        fidl::decode!(AacVariableBitRate, D, val, decoder, _inner_offset, depth)?;
22386                    } else {
22387                        unreachable!()
22388                    }
22389                }
22390                ordinal => panic!("unexpected ordinal {:?}", ordinal),
22391            }
22392            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22393                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22394            }
22395            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22396                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22397            }
22398            Ok(())
22399        }
22400    }
22401
22402    impl fidl::encoding::ValueTypeMarker for AacTransport {
22403        type Borrowed<'a> = &'a Self;
22404        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22405            value
22406        }
22407    }
22408
22409    unsafe impl fidl::encoding::TypeMarker for AacTransport {
22410        type Owned = Self;
22411
22412        #[inline(always)]
22413        fn inline_align(_context: fidl::encoding::Context) -> usize {
22414            8
22415        }
22416
22417        #[inline(always)]
22418        fn inline_size(_context: fidl::encoding::Context) -> usize {
22419            16
22420        }
22421    }
22422
22423    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransport, D>
22424        for &AacTransport
22425    {
22426        #[inline]
22427        unsafe fn encode(
22428            self,
22429            encoder: &mut fidl::encoding::Encoder<'_, D>,
22430            offset: usize,
22431            _depth: fidl::encoding::Depth,
22432        ) -> fidl::Result<()> {
22433            encoder.debug_check_bounds::<AacTransport>(offset);
22434            encoder.write_num::<u64>(self.ordinal(), offset);
22435            match self {
22436                AacTransport::Raw(ref val) => {
22437                    fidl::encoding::encode_in_envelope::<AacTransportRaw, D>(
22438                        <AacTransportRaw as fidl::encoding::ValueTypeMarker>::borrow(val),
22439                        encoder,
22440                        offset + 8,
22441                        _depth,
22442                    )
22443                }
22444                AacTransport::Latm(ref val) => {
22445                    fidl::encoding::encode_in_envelope::<AacTransportLatm, D>(
22446                        <AacTransportLatm as fidl::encoding::ValueTypeMarker>::borrow(val),
22447                        encoder,
22448                        offset + 8,
22449                        _depth,
22450                    )
22451                }
22452                AacTransport::Adts(ref val) => {
22453                    fidl::encoding::encode_in_envelope::<AacTransportAdts, D>(
22454                        <AacTransportAdts as fidl::encoding::ValueTypeMarker>::borrow(val),
22455                        encoder,
22456                        offset + 8,
22457                        _depth,
22458                    )
22459                }
22460                AacTransport::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
22461            }
22462        }
22463    }
22464
22465    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransport {
22466        #[inline(always)]
22467        fn new_empty() -> Self {
22468            Self::__SourceBreaking { unknown_ordinal: 0 }
22469        }
22470
22471        #[inline]
22472        unsafe fn decode(
22473            &mut self,
22474            decoder: &mut fidl::encoding::Decoder<'_, D>,
22475            offset: usize,
22476            mut depth: fidl::encoding::Depth,
22477        ) -> fidl::Result<()> {
22478            decoder.debug_check_bounds::<Self>(offset);
22479            #[allow(unused_variables)]
22480            let next_out_of_line = decoder.next_out_of_line();
22481            let handles_before = decoder.remaining_handles();
22482            let (ordinal, inlined, num_bytes, num_handles) =
22483                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22484
22485            let member_inline_size = match ordinal {
22486                1 => <AacTransportRaw as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22487                2 => <AacTransportLatm as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22488                3 => <AacTransportAdts as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22489                0 => return Err(fidl::Error::UnknownUnionTag),
22490                _ => num_bytes as usize,
22491            };
22492
22493            if inlined != (member_inline_size <= 4) {
22494                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22495            }
22496            let _inner_offset;
22497            if inlined {
22498                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22499                _inner_offset = offset + 8;
22500            } else {
22501                depth.increment()?;
22502                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22503            }
22504            match ordinal {
22505                1 => {
22506                    #[allow(irrefutable_let_patterns)]
22507                    if let AacTransport::Raw(_) = self {
22508                        // Do nothing, read the value into the object
22509                    } else {
22510                        // Initialize `self` to the right variant
22511                        *self = AacTransport::Raw(fidl::new_empty!(AacTransportRaw, D));
22512                    }
22513                    #[allow(irrefutable_let_patterns)]
22514                    if let AacTransport::Raw(ref mut val) = self {
22515                        fidl::decode!(AacTransportRaw, D, val, decoder, _inner_offset, depth)?;
22516                    } else {
22517                        unreachable!()
22518                    }
22519                }
22520                2 => {
22521                    #[allow(irrefutable_let_patterns)]
22522                    if let AacTransport::Latm(_) = self {
22523                        // Do nothing, read the value into the object
22524                    } else {
22525                        // Initialize `self` to the right variant
22526                        *self = AacTransport::Latm(fidl::new_empty!(AacTransportLatm, D));
22527                    }
22528                    #[allow(irrefutable_let_patterns)]
22529                    if let AacTransport::Latm(ref mut val) = self {
22530                        fidl::decode!(AacTransportLatm, D, val, decoder, _inner_offset, depth)?;
22531                    } else {
22532                        unreachable!()
22533                    }
22534                }
22535                3 => {
22536                    #[allow(irrefutable_let_patterns)]
22537                    if let AacTransport::Adts(_) = self {
22538                        // Do nothing, read the value into the object
22539                    } else {
22540                        // Initialize `self` to the right variant
22541                        *self = AacTransport::Adts(fidl::new_empty!(AacTransportAdts, D));
22542                    }
22543                    #[allow(irrefutable_let_patterns)]
22544                    if let AacTransport::Adts(ref mut val) = self {
22545                        fidl::decode!(AacTransportAdts, D, val, decoder, _inner_offset, depth)?;
22546                    } else {
22547                        unreachable!()
22548                    }
22549                }
22550                #[allow(deprecated)]
22551                ordinal => {
22552                    for _ in 0..num_handles {
22553                        decoder.drop_next_handle()?;
22554                    }
22555                    *self = AacTransport::__SourceBreaking { unknown_ordinal: ordinal };
22556                }
22557            }
22558            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22559                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22560            }
22561            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22562                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22563            }
22564            Ok(())
22565        }
22566    }
22567
22568    impl fidl::encoding::ValueTypeMarker for AudioCapturerConfiguration {
22569        type Borrowed<'a> = &'a Self;
22570        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22571            value
22572        }
22573    }
22574
22575    unsafe impl fidl::encoding::TypeMarker for AudioCapturerConfiguration {
22576        type Owned = Self;
22577
22578        #[inline(always)]
22579        fn inline_align(_context: fidl::encoding::Context) -> usize {
22580            8
22581        }
22582
22583        #[inline(always)]
22584        fn inline_size(_context: fidl::encoding::Context) -> usize {
22585            16
22586        }
22587    }
22588
22589    unsafe impl<D: fidl::encoding::ResourceDialect>
22590        fidl::encoding::Encode<AudioCapturerConfiguration, D> for &AudioCapturerConfiguration
22591    {
22592        #[inline]
22593        unsafe fn encode(
22594            self,
22595            encoder: &mut fidl::encoding::Encoder<'_, D>,
22596            offset: usize,
22597            _depth: fidl::encoding::Depth,
22598        ) -> fidl::Result<()> {
22599            encoder.debug_check_bounds::<AudioCapturerConfiguration>(offset);
22600            encoder.write_num::<u64>(self.ordinal(), offset);
22601            match self {
22602                AudioCapturerConfiguration::Loopback(ref val) => fidl::encoding::encode_in_envelope::<
22603                    LoopbackAudioCapturerConfiguration,
22604                    D,
22605                >(
22606                    <LoopbackAudioCapturerConfiguration as fidl::encoding::ValueTypeMarker>::borrow(
22607                        val,
22608                    ),
22609                    encoder,
22610                    offset + 8,
22611                    _depth,
22612                ),
22613                AudioCapturerConfiguration::Input(ref val) => fidl::encoding::encode_in_envelope::<
22614                    InputAudioCapturerConfiguration,
22615                    D,
22616                >(
22617                    <InputAudioCapturerConfiguration as fidl::encoding::ValueTypeMarker>::borrow(
22618                        val,
22619                    ),
22620                    encoder,
22621                    offset + 8,
22622                    _depth,
22623                ),
22624            }
22625        }
22626    }
22627
22628    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
22629        for AudioCapturerConfiguration
22630    {
22631        #[inline(always)]
22632        fn new_empty() -> Self {
22633            Self::Loopback(fidl::new_empty!(LoopbackAudioCapturerConfiguration, D))
22634        }
22635
22636        #[inline]
22637        unsafe fn decode(
22638            &mut self,
22639            decoder: &mut fidl::encoding::Decoder<'_, D>,
22640            offset: usize,
22641            mut depth: fidl::encoding::Depth,
22642        ) -> fidl::Result<()> {
22643            decoder.debug_check_bounds::<Self>(offset);
22644            #[allow(unused_variables)]
22645            let next_out_of_line = decoder.next_out_of_line();
22646            let handles_before = decoder.remaining_handles();
22647            let (ordinal, inlined, num_bytes, num_handles) =
22648                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22649
22650            let member_inline_size = match ordinal {
22651                1 => {
22652                    <LoopbackAudioCapturerConfiguration as fidl::encoding::TypeMarker>::inline_size(
22653                        decoder.context,
22654                    )
22655                }
22656                2 => <InputAudioCapturerConfiguration as fidl::encoding::TypeMarker>::inline_size(
22657                    decoder.context,
22658                ),
22659                _ => return Err(fidl::Error::UnknownUnionTag),
22660            };
22661
22662            if inlined != (member_inline_size <= 4) {
22663                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22664            }
22665            let _inner_offset;
22666            if inlined {
22667                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22668                _inner_offset = offset + 8;
22669            } else {
22670                depth.increment()?;
22671                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22672            }
22673            match ordinal {
22674                1 => {
22675                    #[allow(irrefutable_let_patterns)]
22676                    if let AudioCapturerConfiguration::Loopback(_) = self {
22677                        // Do nothing, read the value into the object
22678                    } else {
22679                        // Initialize `self` to the right variant
22680                        *self = AudioCapturerConfiguration::Loopback(fidl::new_empty!(
22681                            LoopbackAudioCapturerConfiguration,
22682                            D
22683                        ));
22684                    }
22685                    #[allow(irrefutable_let_patterns)]
22686                    if let AudioCapturerConfiguration::Loopback(ref mut val) = self {
22687                        fidl::decode!(
22688                            LoopbackAudioCapturerConfiguration,
22689                            D,
22690                            val,
22691                            decoder,
22692                            _inner_offset,
22693                            depth
22694                        )?;
22695                    } else {
22696                        unreachable!()
22697                    }
22698                }
22699                2 => {
22700                    #[allow(irrefutable_let_patterns)]
22701                    if let AudioCapturerConfiguration::Input(_) = self {
22702                        // Do nothing, read the value into the object
22703                    } else {
22704                        // Initialize `self` to the right variant
22705                        *self = AudioCapturerConfiguration::Input(fidl::new_empty!(
22706                            InputAudioCapturerConfiguration,
22707                            D
22708                        ));
22709                    }
22710                    #[allow(irrefutable_let_patterns)]
22711                    if let AudioCapturerConfiguration::Input(ref mut val) = self {
22712                        fidl::decode!(
22713                            InputAudioCapturerConfiguration,
22714                            D,
22715                            val,
22716                            decoder,
22717                            _inner_offset,
22718                            depth
22719                        )?;
22720                    } else {
22721                        unreachable!()
22722                    }
22723                }
22724                ordinal => panic!("unexpected ordinal {:?}", ordinal),
22725            }
22726            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22727                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22728            }
22729            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22730                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22731            }
22732            Ok(())
22733        }
22734    }
22735
22736    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormat {
22737        type Borrowed<'a> = &'a Self;
22738        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22739            value
22740        }
22741    }
22742
22743    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormat {
22744        type Owned = Self;
22745
22746        #[inline(always)]
22747        fn inline_align(_context: fidl::encoding::Context) -> usize {
22748            8
22749        }
22750
22751        #[inline(always)]
22752        fn inline_size(_context: fidl::encoding::Context) -> usize {
22753            16
22754        }
22755    }
22756
22757    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioCompressedFormat, D>
22758        for &AudioCompressedFormat
22759    {
22760        #[inline]
22761        unsafe fn encode(
22762            self,
22763            encoder: &mut fidl::encoding::Encoder<'_, D>,
22764            offset: usize,
22765            _depth: fidl::encoding::Depth,
22766        ) -> fidl::Result<()> {
22767            encoder.debug_check_bounds::<AudioCompressedFormat>(offset);
22768            encoder.write_num::<u64>(self.ordinal(), offset);
22769            match self {
22770                AudioCompressedFormat::Aac(ref val) => {
22771                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatAac, D>(
22772                        <AudioCompressedFormatAac as fidl::encoding::ValueTypeMarker>::borrow(val),
22773                        encoder,
22774                        offset + 8,
22775                        _depth,
22776                    )
22777                }
22778                AudioCompressedFormat::Sbc(ref val) => {
22779                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatSbc, D>(
22780                        <AudioCompressedFormatSbc as fidl::encoding::ValueTypeMarker>::borrow(val),
22781                        encoder,
22782                        offset + 8,
22783                        _depth,
22784                    )
22785                }
22786                AudioCompressedFormat::Cvsd(ref val) => {
22787                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatCvsd, D>(
22788                        <AudioCompressedFormatCvsd as fidl::encoding::ValueTypeMarker>::borrow(val),
22789                        encoder,
22790                        offset + 8,
22791                        _depth,
22792                    )
22793                }
22794                AudioCompressedFormat::Lc3(ref val) => {
22795                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatLc3, D>(
22796                        <AudioCompressedFormatLc3 as fidl::encoding::ValueTypeMarker>::borrow(val),
22797                        encoder,
22798                        offset + 8,
22799                        _depth,
22800                    )
22801                }
22802                AudioCompressedFormat::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
22803            }
22804        }
22805    }
22806
22807    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioCompressedFormat {
22808        #[inline(always)]
22809        fn new_empty() -> Self {
22810            Self::__SourceBreaking { unknown_ordinal: 0 }
22811        }
22812
22813        #[inline]
22814        unsafe fn decode(
22815            &mut self,
22816            decoder: &mut fidl::encoding::Decoder<'_, D>,
22817            offset: usize,
22818            mut depth: fidl::encoding::Depth,
22819        ) -> fidl::Result<()> {
22820            decoder.debug_check_bounds::<Self>(offset);
22821            #[allow(unused_variables)]
22822            let next_out_of_line = decoder.next_out_of_line();
22823            let handles_before = decoder.remaining_handles();
22824            let (ordinal, inlined, num_bytes, num_handles) =
22825                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22826
22827            let member_inline_size = match ordinal {
22828                1 => <AudioCompressedFormatAac as fidl::encoding::TypeMarker>::inline_size(
22829                    decoder.context,
22830                ),
22831                2 => <AudioCompressedFormatSbc as fidl::encoding::TypeMarker>::inline_size(
22832                    decoder.context,
22833                ),
22834                3 => <AudioCompressedFormatCvsd as fidl::encoding::TypeMarker>::inline_size(
22835                    decoder.context,
22836                ),
22837                4 => <AudioCompressedFormatLc3 as fidl::encoding::TypeMarker>::inline_size(
22838                    decoder.context,
22839                ),
22840                0 => return Err(fidl::Error::UnknownUnionTag),
22841                _ => num_bytes as usize,
22842            };
22843
22844            if inlined != (member_inline_size <= 4) {
22845                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22846            }
22847            let _inner_offset;
22848            if inlined {
22849                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22850                _inner_offset = offset + 8;
22851            } else {
22852                depth.increment()?;
22853                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22854            }
22855            match ordinal {
22856                1 => {
22857                    #[allow(irrefutable_let_patterns)]
22858                    if let AudioCompressedFormat::Aac(_) = self {
22859                        // Do nothing, read the value into the object
22860                    } else {
22861                        // Initialize `self` to the right variant
22862                        *self = AudioCompressedFormat::Aac(fidl::new_empty!(
22863                            AudioCompressedFormatAac,
22864                            D
22865                        ));
22866                    }
22867                    #[allow(irrefutable_let_patterns)]
22868                    if let AudioCompressedFormat::Aac(ref mut val) = self {
22869                        fidl::decode!(
22870                            AudioCompressedFormatAac,
22871                            D,
22872                            val,
22873                            decoder,
22874                            _inner_offset,
22875                            depth
22876                        )?;
22877                    } else {
22878                        unreachable!()
22879                    }
22880                }
22881                2 => {
22882                    #[allow(irrefutable_let_patterns)]
22883                    if let AudioCompressedFormat::Sbc(_) = self {
22884                        // Do nothing, read the value into the object
22885                    } else {
22886                        // Initialize `self` to the right variant
22887                        *self = AudioCompressedFormat::Sbc(fidl::new_empty!(
22888                            AudioCompressedFormatSbc,
22889                            D
22890                        ));
22891                    }
22892                    #[allow(irrefutable_let_patterns)]
22893                    if let AudioCompressedFormat::Sbc(ref mut val) = self {
22894                        fidl::decode!(
22895                            AudioCompressedFormatSbc,
22896                            D,
22897                            val,
22898                            decoder,
22899                            _inner_offset,
22900                            depth
22901                        )?;
22902                    } else {
22903                        unreachable!()
22904                    }
22905                }
22906                3 => {
22907                    #[allow(irrefutable_let_patterns)]
22908                    if let AudioCompressedFormat::Cvsd(_) = self {
22909                        // Do nothing, read the value into the object
22910                    } else {
22911                        // Initialize `self` to the right variant
22912                        *self = AudioCompressedFormat::Cvsd(fidl::new_empty!(
22913                            AudioCompressedFormatCvsd,
22914                            D
22915                        ));
22916                    }
22917                    #[allow(irrefutable_let_patterns)]
22918                    if let AudioCompressedFormat::Cvsd(ref mut val) = self {
22919                        fidl::decode!(
22920                            AudioCompressedFormatCvsd,
22921                            D,
22922                            val,
22923                            decoder,
22924                            _inner_offset,
22925                            depth
22926                        )?;
22927                    } else {
22928                        unreachable!()
22929                    }
22930                }
22931                4 => {
22932                    #[allow(irrefutable_let_patterns)]
22933                    if let AudioCompressedFormat::Lc3(_) = self {
22934                        // Do nothing, read the value into the object
22935                    } else {
22936                        // Initialize `self` to the right variant
22937                        *self = AudioCompressedFormat::Lc3(fidl::new_empty!(
22938                            AudioCompressedFormatLc3,
22939                            D
22940                        ));
22941                    }
22942                    #[allow(irrefutable_let_patterns)]
22943                    if let AudioCompressedFormat::Lc3(ref mut val) = self {
22944                        fidl::decode!(
22945                            AudioCompressedFormatLc3,
22946                            D,
22947                            val,
22948                            decoder,
22949                            _inner_offset,
22950                            depth
22951                        )?;
22952                    } else {
22953                        unreachable!()
22954                    }
22955                }
22956                #[allow(deprecated)]
22957                ordinal => {
22958                    for _ in 0..num_handles {
22959                        decoder.drop_next_handle()?;
22960                    }
22961                    *self = AudioCompressedFormat::__SourceBreaking { unknown_ordinal: ordinal };
22962                }
22963            }
22964            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22965                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22966            }
22967            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22968                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22969            }
22970            Ok(())
22971        }
22972    }
22973
22974    impl fidl::encoding::ValueTypeMarker for AudioConsumerError {
22975        type Borrowed<'a> = &'a Self;
22976        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22977            value
22978        }
22979    }
22980
22981    unsafe impl fidl::encoding::TypeMarker for AudioConsumerError {
22982        type Owned = Self;
22983
22984        #[inline(always)]
22985        fn inline_align(_context: fidl::encoding::Context) -> usize {
22986            8
22987        }
22988
22989        #[inline(always)]
22990        fn inline_size(_context: fidl::encoding::Context) -> usize {
22991            16
22992        }
22993    }
22994
22995    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioConsumerError, D>
22996        for &AudioConsumerError
22997    {
22998        #[inline]
22999        unsafe fn encode(
23000            self,
23001            encoder: &mut fidl::encoding::Encoder<'_, D>,
23002            offset: usize,
23003            _depth: fidl::encoding::Depth,
23004        ) -> fidl::Result<()> {
23005            encoder.debug_check_bounds::<AudioConsumerError>(offset);
23006            encoder.write_num::<u64>(self.ordinal(), offset);
23007            match self {
23008                AudioConsumerError::PlaceHolder(ref val) => {
23009                    fidl::encoding::encode_in_envelope::<Void, D>(
23010                        <Void as fidl::encoding::ValueTypeMarker>::borrow(val),
23011                        encoder,
23012                        offset + 8,
23013                        _depth,
23014                    )
23015                }
23016            }
23017        }
23018    }
23019
23020    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioConsumerError {
23021        #[inline(always)]
23022        fn new_empty() -> Self {
23023            Self::PlaceHolder(fidl::new_empty!(Void, D))
23024        }
23025
23026        #[inline]
23027        unsafe fn decode(
23028            &mut self,
23029            decoder: &mut fidl::encoding::Decoder<'_, D>,
23030            offset: usize,
23031            mut depth: fidl::encoding::Depth,
23032        ) -> fidl::Result<()> {
23033            decoder.debug_check_bounds::<Self>(offset);
23034            #[allow(unused_variables)]
23035            let next_out_of_line = decoder.next_out_of_line();
23036            let handles_before = decoder.remaining_handles();
23037            let (ordinal, inlined, num_bytes, num_handles) =
23038                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23039
23040            let member_inline_size = match ordinal {
23041                1 => <Void as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23042                _ => return Err(fidl::Error::UnknownUnionTag),
23043            };
23044
23045            if inlined != (member_inline_size <= 4) {
23046                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23047            }
23048            let _inner_offset;
23049            if inlined {
23050                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23051                _inner_offset = offset + 8;
23052            } else {
23053                depth.increment()?;
23054                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23055            }
23056            match ordinal {
23057                1 => {
23058                    #[allow(irrefutable_let_patterns)]
23059                    if let AudioConsumerError::PlaceHolder(_) = self {
23060                        // Do nothing, read the value into the object
23061                    } else {
23062                        // Initialize `self` to the right variant
23063                        *self = AudioConsumerError::PlaceHolder(fidl::new_empty!(Void, D));
23064                    }
23065                    #[allow(irrefutable_let_patterns)]
23066                    if let AudioConsumerError::PlaceHolder(ref mut val) = self {
23067                        fidl::decode!(Void, D, val, decoder, _inner_offset, depth)?;
23068                    } else {
23069                        unreachable!()
23070                    }
23071                }
23072                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23073            }
23074            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23075                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23076            }
23077            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23078                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23079            }
23080            Ok(())
23081        }
23082    }
23083
23084    impl fidl::encoding::ValueTypeMarker for AudioFormat {
23085        type Borrowed<'a> = &'a Self;
23086        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23087            value
23088        }
23089    }
23090
23091    unsafe impl fidl::encoding::TypeMarker for AudioFormat {
23092        type Owned = Self;
23093
23094        #[inline(always)]
23095        fn inline_align(_context: fidl::encoding::Context) -> usize {
23096            8
23097        }
23098
23099        #[inline(always)]
23100        fn inline_size(_context: fidl::encoding::Context) -> usize {
23101            16
23102        }
23103    }
23104
23105    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioFormat, D>
23106        for &AudioFormat
23107    {
23108        #[inline]
23109        unsafe fn encode(
23110            self,
23111            encoder: &mut fidl::encoding::Encoder<'_, D>,
23112            offset: usize,
23113            _depth: fidl::encoding::Depth,
23114        ) -> fidl::Result<()> {
23115            encoder.debug_check_bounds::<AudioFormat>(offset);
23116            encoder.write_num::<u64>(self.ordinal(), offset);
23117            match self {
23118                AudioFormat::Compressed(ref val) => {
23119                    fidl::encoding::encode_in_envelope::<AudioCompressedFormat, D>(
23120                        <AudioCompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23121                        encoder,
23122                        offset + 8,
23123                        _depth,
23124                    )
23125                }
23126                AudioFormat::Uncompressed(ref val) => {
23127                    fidl::encoding::encode_in_envelope::<AudioUncompressedFormat, D>(
23128                        <AudioUncompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23129                        encoder,
23130                        offset + 8,
23131                        _depth,
23132                    )
23133                }
23134            }
23135        }
23136    }
23137
23138    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioFormat {
23139        #[inline(always)]
23140        fn new_empty() -> Self {
23141            Self::Compressed(fidl::new_empty!(AudioCompressedFormat, D))
23142        }
23143
23144        #[inline]
23145        unsafe fn decode(
23146            &mut self,
23147            decoder: &mut fidl::encoding::Decoder<'_, D>,
23148            offset: usize,
23149            mut depth: fidl::encoding::Depth,
23150        ) -> fidl::Result<()> {
23151            decoder.debug_check_bounds::<Self>(offset);
23152            #[allow(unused_variables)]
23153            let next_out_of_line = decoder.next_out_of_line();
23154            let handles_before = decoder.remaining_handles();
23155            let (ordinal, inlined, num_bytes, num_handles) =
23156                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23157
23158            let member_inline_size = match ordinal {
23159                1 => <AudioCompressedFormat as fidl::encoding::TypeMarker>::inline_size(
23160                    decoder.context,
23161                ),
23162                2 => <AudioUncompressedFormat as fidl::encoding::TypeMarker>::inline_size(
23163                    decoder.context,
23164                ),
23165                _ => return Err(fidl::Error::UnknownUnionTag),
23166            };
23167
23168            if inlined != (member_inline_size <= 4) {
23169                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23170            }
23171            let _inner_offset;
23172            if inlined {
23173                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23174                _inner_offset = offset + 8;
23175            } else {
23176                depth.increment()?;
23177                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23178            }
23179            match ordinal {
23180                1 => {
23181                    #[allow(irrefutable_let_patterns)]
23182                    if let AudioFormat::Compressed(_) = self {
23183                        // Do nothing, read the value into the object
23184                    } else {
23185                        // Initialize `self` to the right variant
23186                        *self = AudioFormat::Compressed(fidl::new_empty!(AudioCompressedFormat, D));
23187                    }
23188                    #[allow(irrefutable_let_patterns)]
23189                    if let AudioFormat::Compressed(ref mut val) = self {
23190                        fidl::decode!(
23191                            AudioCompressedFormat,
23192                            D,
23193                            val,
23194                            decoder,
23195                            _inner_offset,
23196                            depth
23197                        )?;
23198                    } else {
23199                        unreachable!()
23200                    }
23201                }
23202                2 => {
23203                    #[allow(irrefutable_let_patterns)]
23204                    if let AudioFormat::Uncompressed(_) = self {
23205                        // Do nothing, read the value into the object
23206                    } else {
23207                        // Initialize `self` to the right variant
23208                        *self =
23209                            AudioFormat::Uncompressed(fidl::new_empty!(AudioUncompressedFormat, D));
23210                    }
23211                    #[allow(irrefutable_let_patterns)]
23212                    if let AudioFormat::Uncompressed(ref mut val) = self {
23213                        fidl::decode!(
23214                            AudioUncompressedFormat,
23215                            D,
23216                            val,
23217                            decoder,
23218                            _inner_offset,
23219                            depth
23220                        )?;
23221                    } else {
23222                        unreachable!()
23223                    }
23224                }
23225                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23226            }
23227            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23228                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23229            }
23230            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23231                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23232            }
23233            Ok(())
23234        }
23235    }
23236
23237    impl fidl::encoding::ValueTypeMarker for AudioUncompressedFormat {
23238        type Borrowed<'a> = &'a Self;
23239        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23240            value
23241        }
23242    }
23243
23244    unsafe impl fidl::encoding::TypeMarker for AudioUncompressedFormat {
23245        type Owned = Self;
23246
23247        #[inline(always)]
23248        fn inline_align(_context: fidl::encoding::Context) -> usize {
23249            8
23250        }
23251
23252        #[inline(always)]
23253        fn inline_size(_context: fidl::encoding::Context) -> usize {
23254            16
23255        }
23256    }
23257
23258    unsafe impl<D: fidl::encoding::ResourceDialect>
23259        fidl::encoding::Encode<AudioUncompressedFormat, D> for &AudioUncompressedFormat
23260    {
23261        #[inline]
23262        unsafe fn encode(
23263            self,
23264            encoder: &mut fidl::encoding::Encoder<'_, D>,
23265            offset: usize,
23266            _depth: fidl::encoding::Depth,
23267        ) -> fidl::Result<()> {
23268            encoder.debug_check_bounds::<AudioUncompressedFormat>(offset);
23269            encoder.write_num::<u64>(self.ordinal(), offset);
23270            match self {
23271                AudioUncompressedFormat::Pcm(ref val) => {
23272                    fidl::encoding::encode_in_envelope::<PcmFormat, D>(
23273                        <PcmFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23274                        encoder,
23275                        offset + 8,
23276                        _depth,
23277                    )
23278                }
23279            }
23280        }
23281    }
23282
23283    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
23284        for AudioUncompressedFormat
23285    {
23286        #[inline(always)]
23287        fn new_empty() -> Self {
23288            Self::Pcm(fidl::new_empty!(PcmFormat, D))
23289        }
23290
23291        #[inline]
23292        unsafe fn decode(
23293            &mut self,
23294            decoder: &mut fidl::encoding::Decoder<'_, D>,
23295            offset: usize,
23296            mut depth: fidl::encoding::Depth,
23297        ) -> fidl::Result<()> {
23298            decoder.debug_check_bounds::<Self>(offset);
23299            #[allow(unused_variables)]
23300            let next_out_of_line = decoder.next_out_of_line();
23301            let handles_before = decoder.remaining_handles();
23302            let (ordinal, inlined, num_bytes, num_handles) =
23303                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23304
23305            let member_inline_size = match ordinal {
23306                1 => <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23307                _ => return Err(fidl::Error::UnknownUnionTag),
23308            };
23309
23310            if inlined != (member_inline_size <= 4) {
23311                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23312            }
23313            let _inner_offset;
23314            if inlined {
23315                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23316                _inner_offset = offset + 8;
23317            } else {
23318                depth.increment()?;
23319                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23320            }
23321            match ordinal {
23322                1 => {
23323                    #[allow(irrefutable_let_patterns)]
23324                    if let AudioUncompressedFormat::Pcm(_) = self {
23325                        // Do nothing, read the value into the object
23326                    } else {
23327                        // Initialize `self` to the right variant
23328                        *self = AudioUncompressedFormat::Pcm(fidl::new_empty!(PcmFormat, D));
23329                    }
23330                    #[allow(irrefutable_let_patterns)]
23331                    if let AudioUncompressedFormat::Pcm(ref mut val) = self {
23332                        fidl::decode!(PcmFormat, D, val, decoder, _inner_offset, depth)?;
23333                    } else {
23334                        unreachable!()
23335                    }
23336                }
23337                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23338            }
23339            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23340                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23341            }
23342            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23343                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23344            }
23345            Ok(())
23346        }
23347    }
23348
23349    impl fidl::encoding::ValueTypeMarker for CryptoFormat {
23350        type Borrowed<'a> = &'a Self;
23351        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23352            value
23353        }
23354    }
23355
23356    unsafe impl fidl::encoding::TypeMarker for CryptoFormat {
23357        type Owned = Self;
23358
23359        #[inline(always)]
23360        fn inline_align(_context: fidl::encoding::Context) -> usize {
23361            8
23362        }
23363
23364        #[inline(always)]
23365        fn inline_size(_context: fidl::encoding::Context) -> usize {
23366            16
23367        }
23368    }
23369
23370    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CryptoFormat, D>
23371        for &CryptoFormat
23372    {
23373        #[inline]
23374        unsafe fn encode(
23375            self,
23376            encoder: &mut fidl::encoding::Encoder<'_, D>,
23377            offset: usize,
23378            _depth: fidl::encoding::Depth,
23379        ) -> fidl::Result<()> {
23380            encoder.debug_check_bounds::<CryptoFormat>(offset);
23381            encoder.write_num::<u64>(self.ordinal(), offset);
23382            match self {
23383                CryptoFormat::Encrypted(ref val) => {
23384                    fidl::encoding::encode_in_envelope::<EncryptedFormat, D>(
23385                        <EncryptedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23386                        encoder,
23387                        offset + 8,
23388                        _depth,
23389                    )
23390                }
23391                CryptoFormat::Decrypted(ref val) => {
23392                    fidl::encoding::encode_in_envelope::<DecryptedFormat, D>(
23393                        <DecryptedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23394                        encoder,
23395                        offset + 8,
23396                        _depth,
23397                    )
23398                }
23399                CryptoFormat::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
23400            }
23401        }
23402    }
23403
23404    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CryptoFormat {
23405        #[inline(always)]
23406        fn new_empty() -> Self {
23407            Self::__SourceBreaking { unknown_ordinal: 0 }
23408        }
23409
23410        #[inline]
23411        unsafe fn decode(
23412            &mut self,
23413            decoder: &mut fidl::encoding::Decoder<'_, D>,
23414            offset: usize,
23415            mut depth: fidl::encoding::Depth,
23416        ) -> fidl::Result<()> {
23417            decoder.debug_check_bounds::<Self>(offset);
23418            #[allow(unused_variables)]
23419            let next_out_of_line = decoder.next_out_of_line();
23420            let handles_before = decoder.remaining_handles();
23421            let (ordinal, inlined, num_bytes, num_handles) =
23422                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23423
23424            let member_inline_size = match ordinal {
23425                1 => <EncryptedFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23426                2 => <DecryptedFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23427                0 => return Err(fidl::Error::UnknownUnionTag),
23428                _ => num_bytes as usize,
23429            };
23430
23431            if inlined != (member_inline_size <= 4) {
23432                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23433            }
23434            let _inner_offset;
23435            if inlined {
23436                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23437                _inner_offset = offset + 8;
23438            } else {
23439                depth.increment()?;
23440                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23441            }
23442            match ordinal {
23443                1 => {
23444                    #[allow(irrefutable_let_patterns)]
23445                    if let CryptoFormat::Encrypted(_) = self {
23446                        // Do nothing, read the value into the object
23447                    } else {
23448                        // Initialize `self` to the right variant
23449                        *self = CryptoFormat::Encrypted(fidl::new_empty!(EncryptedFormat, D));
23450                    }
23451                    #[allow(irrefutable_let_patterns)]
23452                    if let CryptoFormat::Encrypted(ref mut val) = self {
23453                        fidl::decode!(EncryptedFormat, D, val, decoder, _inner_offset, depth)?;
23454                    } else {
23455                        unreachable!()
23456                    }
23457                }
23458                2 => {
23459                    #[allow(irrefutable_let_patterns)]
23460                    if let CryptoFormat::Decrypted(_) = self {
23461                        // Do nothing, read the value into the object
23462                    } else {
23463                        // Initialize `self` to the right variant
23464                        *self = CryptoFormat::Decrypted(fidl::new_empty!(DecryptedFormat, D));
23465                    }
23466                    #[allow(irrefutable_let_patterns)]
23467                    if let CryptoFormat::Decrypted(ref mut val) = self {
23468                        fidl::decode!(DecryptedFormat, D, val, decoder, _inner_offset, depth)?;
23469                    } else {
23470                        unreachable!()
23471                    }
23472                }
23473                #[allow(deprecated)]
23474                ordinal => {
23475                    for _ in 0..num_handles {
23476                        decoder.drop_next_handle()?;
23477                    }
23478                    *self = CryptoFormat::__SourceBreaking { unknown_ordinal: ordinal };
23479                }
23480            }
23481            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23482                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23483            }
23484            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23485                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23486            }
23487            Ok(())
23488        }
23489    }
23490
23491    impl fidl::encoding::ValueTypeMarker for DomainFormat {
23492        type Borrowed<'a> = &'a Self;
23493        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23494            value
23495        }
23496    }
23497
23498    unsafe impl fidl::encoding::TypeMarker for DomainFormat {
23499        type Owned = Self;
23500
23501        #[inline(always)]
23502        fn inline_align(_context: fidl::encoding::Context) -> usize {
23503            8
23504        }
23505
23506        #[inline(always)]
23507        fn inline_size(_context: fidl::encoding::Context) -> usize {
23508            16
23509        }
23510    }
23511
23512    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DomainFormat, D>
23513        for &DomainFormat
23514    {
23515        #[inline]
23516        unsafe fn encode(
23517            self,
23518            encoder: &mut fidl::encoding::Encoder<'_, D>,
23519            offset: usize,
23520            _depth: fidl::encoding::Depth,
23521        ) -> fidl::Result<()> {
23522            encoder.debug_check_bounds::<DomainFormat>(offset);
23523            encoder.write_num::<u64>(self.ordinal(), offset);
23524            match self {
23525                DomainFormat::Audio(ref val) => {
23526                    fidl::encoding::encode_in_envelope::<AudioFormat, D>(
23527                        <AudioFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23528                        encoder,
23529                        offset + 8,
23530                        _depth,
23531                    )
23532                }
23533                DomainFormat::Video(ref val) => {
23534                    fidl::encoding::encode_in_envelope::<VideoFormat, D>(
23535                        <VideoFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23536                        encoder,
23537                        offset + 8,
23538                        _depth,
23539                    )
23540                }
23541                DomainFormat::Crypto(ref val) => {
23542                    fidl::encoding::encode_in_envelope::<CryptoFormat, D>(
23543                        <CryptoFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23544                        encoder,
23545                        offset + 8,
23546                        _depth,
23547                    )
23548                }
23549            }
23550        }
23551    }
23552
23553    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DomainFormat {
23554        #[inline(always)]
23555        fn new_empty() -> Self {
23556            Self::Audio(fidl::new_empty!(AudioFormat, D))
23557        }
23558
23559        #[inline]
23560        unsafe fn decode(
23561            &mut self,
23562            decoder: &mut fidl::encoding::Decoder<'_, D>,
23563            offset: usize,
23564            mut depth: fidl::encoding::Depth,
23565        ) -> fidl::Result<()> {
23566            decoder.debug_check_bounds::<Self>(offset);
23567            #[allow(unused_variables)]
23568            let next_out_of_line = decoder.next_out_of_line();
23569            let handles_before = decoder.remaining_handles();
23570            let (ordinal, inlined, num_bytes, num_handles) =
23571                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23572
23573            let member_inline_size = match ordinal {
23574                1 => <AudioFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23575                2 => <VideoFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23576                3 => <CryptoFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23577                _ => return Err(fidl::Error::UnknownUnionTag),
23578            };
23579
23580            if inlined != (member_inline_size <= 4) {
23581                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23582            }
23583            let _inner_offset;
23584            if inlined {
23585                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23586                _inner_offset = offset + 8;
23587            } else {
23588                depth.increment()?;
23589                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23590            }
23591            match ordinal {
23592                1 => {
23593                    #[allow(irrefutable_let_patterns)]
23594                    if let DomainFormat::Audio(_) = self {
23595                        // Do nothing, read the value into the object
23596                    } else {
23597                        // Initialize `self` to the right variant
23598                        *self = DomainFormat::Audio(fidl::new_empty!(AudioFormat, D));
23599                    }
23600                    #[allow(irrefutable_let_patterns)]
23601                    if let DomainFormat::Audio(ref mut val) = self {
23602                        fidl::decode!(AudioFormat, D, val, decoder, _inner_offset, depth)?;
23603                    } else {
23604                        unreachable!()
23605                    }
23606                }
23607                2 => {
23608                    #[allow(irrefutable_let_patterns)]
23609                    if let DomainFormat::Video(_) = self {
23610                        // Do nothing, read the value into the object
23611                    } else {
23612                        // Initialize `self` to the right variant
23613                        *self = DomainFormat::Video(fidl::new_empty!(VideoFormat, D));
23614                    }
23615                    #[allow(irrefutable_let_patterns)]
23616                    if let DomainFormat::Video(ref mut val) = self {
23617                        fidl::decode!(VideoFormat, D, val, decoder, _inner_offset, depth)?;
23618                    } else {
23619                        unreachable!()
23620                    }
23621                }
23622                3 => {
23623                    #[allow(irrefutable_let_patterns)]
23624                    if let DomainFormat::Crypto(_) = self {
23625                        // Do nothing, read the value into the object
23626                    } else {
23627                        // Initialize `self` to the right variant
23628                        *self = DomainFormat::Crypto(fidl::new_empty!(CryptoFormat, D));
23629                    }
23630                    #[allow(irrefutable_let_patterns)]
23631                    if let DomainFormat::Crypto(ref mut val) = self {
23632                        fidl::decode!(CryptoFormat, D, val, decoder, _inner_offset, depth)?;
23633                    } else {
23634                        unreachable!()
23635                    }
23636                }
23637                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23638            }
23639            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23640                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23641            }
23642            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23643                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23644            }
23645            Ok(())
23646        }
23647    }
23648
23649    impl fidl::encoding::ValueTypeMarker for EncoderSettings {
23650        type Borrowed<'a> = &'a Self;
23651        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23652            value
23653        }
23654    }
23655
23656    unsafe impl fidl::encoding::TypeMarker for EncoderSettings {
23657        type Owned = Self;
23658
23659        #[inline(always)]
23660        fn inline_align(_context: fidl::encoding::Context) -> usize {
23661            8
23662        }
23663
23664        #[inline(always)]
23665        fn inline_size(_context: fidl::encoding::Context) -> usize {
23666            16
23667        }
23668    }
23669
23670    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncoderSettings, D>
23671        for &EncoderSettings
23672    {
23673        #[inline]
23674        unsafe fn encode(
23675            self,
23676            encoder: &mut fidl::encoding::Encoder<'_, D>,
23677            offset: usize,
23678            _depth: fidl::encoding::Depth,
23679        ) -> fidl::Result<()> {
23680            encoder.debug_check_bounds::<EncoderSettings>(offset);
23681            encoder.write_num::<u64>(self.ordinal(), offset);
23682            match self {
23683                EncoderSettings::Sbc(ref val) => {
23684                    fidl::encoding::encode_in_envelope::<SbcEncoderSettings, D>(
23685                        <SbcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23686                        encoder,
23687                        offset + 8,
23688                        _depth,
23689                    )
23690                }
23691                EncoderSettings::Aac(ref val) => {
23692                    fidl::encoding::encode_in_envelope::<AacEncoderSettings, D>(
23693                        <AacEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23694                        encoder,
23695                        offset + 8,
23696                        _depth,
23697                    )
23698                }
23699                EncoderSettings::H264(ref val) => {
23700                    fidl::encoding::encode_in_envelope::<H264EncoderSettings, D>(
23701                        <H264EncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23702                        encoder,
23703                        offset + 8,
23704                        _depth,
23705                    )
23706                }
23707                EncoderSettings::Hevc(ref val) => {
23708                    fidl::encoding::encode_in_envelope::<HevcEncoderSettings, D>(
23709                        <HevcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23710                        encoder,
23711                        offset + 8,
23712                        _depth,
23713                    )
23714                }
23715                EncoderSettings::Cvsd(ref val) => {
23716                    fidl::encoding::encode_in_envelope::<CvsdEncoderSettings, D>(
23717                        <CvsdEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23718                        encoder,
23719                        offset + 8,
23720                        _depth,
23721                    )
23722                }
23723                EncoderSettings::Lc3(ref val) => {
23724                    fidl::encoding::encode_in_envelope::<Lc3EncoderSettings, D>(
23725                        <Lc3EncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23726                        encoder,
23727                        offset + 8,
23728                        _depth,
23729                    )
23730                }
23731                EncoderSettings::Msbc(ref val) => {
23732                    fidl::encoding::encode_in_envelope::<MSbcEncoderSettings, D>(
23733                        <MSbcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23734                        encoder,
23735                        offset + 8,
23736                        _depth,
23737                    )
23738                }
23739                EncoderSettings::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
23740            }
23741        }
23742    }
23743
23744    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncoderSettings {
23745        #[inline(always)]
23746        fn new_empty() -> Self {
23747            Self::__SourceBreaking { unknown_ordinal: 0 }
23748        }
23749
23750        #[inline]
23751        unsafe fn decode(
23752            &mut self,
23753            decoder: &mut fidl::encoding::Decoder<'_, D>,
23754            offset: usize,
23755            mut depth: fidl::encoding::Depth,
23756        ) -> fidl::Result<()> {
23757            decoder.debug_check_bounds::<Self>(offset);
23758            #[allow(unused_variables)]
23759            let next_out_of_line = decoder.next_out_of_line();
23760            let handles_before = decoder.remaining_handles();
23761            let (ordinal, inlined, num_bytes, num_handles) =
23762                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23763
23764            let member_inline_size = match ordinal {
23765                1 => {
23766                    <SbcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
23767                }
23768                2 => {
23769                    <AacEncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
23770                }
23771                3 => <H264EncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23772                    decoder.context,
23773                ),
23774                4 => <HevcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23775                    decoder.context,
23776                ),
23777                5 => <CvsdEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23778                    decoder.context,
23779                ),
23780                6 => {
23781                    <Lc3EncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
23782                }
23783                7 => <MSbcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23784                    decoder.context,
23785                ),
23786                0 => return Err(fidl::Error::UnknownUnionTag),
23787                _ => num_bytes as usize,
23788            };
23789
23790            if inlined != (member_inline_size <= 4) {
23791                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23792            }
23793            let _inner_offset;
23794            if inlined {
23795                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23796                _inner_offset = offset + 8;
23797            } else {
23798                depth.increment()?;
23799                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23800            }
23801            match ordinal {
23802                1 => {
23803                    #[allow(irrefutable_let_patterns)]
23804                    if let EncoderSettings::Sbc(_) = self {
23805                        // Do nothing, read the value into the object
23806                    } else {
23807                        // Initialize `self` to the right variant
23808                        *self = EncoderSettings::Sbc(fidl::new_empty!(SbcEncoderSettings, D));
23809                    }
23810                    #[allow(irrefutable_let_patterns)]
23811                    if let EncoderSettings::Sbc(ref mut val) = self {
23812                        fidl::decode!(SbcEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23813                    } else {
23814                        unreachable!()
23815                    }
23816                }
23817                2 => {
23818                    #[allow(irrefutable_let_patterns)]
23819                    if let EncoderSettings::Aac(_) = self {
23820                        // Do nothing, read the value into the object
23821                    } else {
23822                        // Initialize `self` to the right variant
23823                        *self = EncoderSettings::Aac(fidl::new_empty!(AacEncoderSettings, D));
23824                    }
23825                    #[allow(irrefutable_let_patterns)]
23826                    if let EncoderSettings::Aac(ref mut val) = self {
23827                        fidl::decode!(AacEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23828                    } else {
23829                        unreachable!()
23830                    }
23831                }
23832                3 => {
23833                    #[allow(irrefutable_let_patterns)]
23834                    if let EncoderSettings::H264(_) = self {
23835                        // Do nothing, read the value into the object
23836                    } else {
23837                        // Initialize `self` to the right variant
23838                        *self = EncoderSettings::H264(fidl::new_empty!(H264EncoderSettings, D));
23839                    }
23840                    #[allow(irrefutable_let_patterns)]
23841                    if let EncoderSettings::H264(ref mut val) = self {
23842                        fidl::decode!(H264EncoderSettings, D, val, decoder, _inner_offset, depth)?;
23843                    } else {
23844                        unreachable!()
23845                    }
23846                }
23847                4 => {
23848                    #[allow(irrefutable_let_patterns)]
23849                    if let EncoderSettings::Hevc(_) = self {
23850                        // Do nothing, read the value into the object
23851                    } else {
23852                        // Initialize `self` to the right variant
23853                        *self = EncoderSettings::Hevc(fidl::new_empty!(HevcEncoderSettings, D));
23854                    }
23855                    #[allow(irrefutable_let_patterns)]
23856                    if let EncoderSettings::Hevc(ref mut val) = self {
23857                        fidl::decode!(HevcEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23858                    } else {
23859                        unreachable!()
23860                    }
23861                }
23862                5 => {
23863                    #[allow(irrefutable_let_patterns)]
23864                    if let EncoderSettings::Cvsd(_) = self {
23865                        // Do nothing, read the value into the object
23866                    } else {
23867                        // Initialize `self` to the right variant
23868                        *self = EncoderSettings::Cvsd(fidl::new_empty!(CvsdEncoderSettings, D));
23869                    }
23870                    #[allow(irrefutable_let_patterns)]
23871                    if let EncoderSettings::Cvsd(ref mut val) = self {
23872                        fidl::decode!(CvsdEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23873                    } else {
23874                        unreachable!()
23875                    }
23876                }
23877                6 => {
23878                    #[allow(irrefutable_let_patterns)]
23879                    if let EncoderSettings::Lc3(_) = self {
23880                        // Do nothing, read the value into the object
23881                    } else {
23882                        // Initialize `self` to the right variant
23883                        *self = EncoderSettings::Lc3(fidl::new_empty!(Lc3EncoderSettings, D));
23884                    }
23885                    #[allow(irrefutable_let_patterns)]
23886                    if let EncoderSettings::Lc3(ref mut val) = self {
23887                        fidl::decode!(Lc3EncoderSettings, D, val, decoder, _inner_offset, depth)?;
23888                    } else {
23889                        unreachable!()
23890                    }
23891                }
23892                7 => {
23893                    #[allow(irrefutable_let_patterns)]
23894                    if let EncoderSettings::Msbc(_) = self {
23895                        // Do nothing, read the value into the object
23896                    } else {
23897                        // Initialize `self` to the right variant
23898                        *self = EncoderSettings::Msbc(fidl::new_empty!(MSbcEncoderSettings, D));
23899                    }
23900                    #[allow(irrefutable_let_patterns)]
23901                    if let EncoderSettings::Msbc(ref mut val) = self {
23902                        fidl::decode!(MSbcEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23903                    } else {
23904                        unreachable!()
23905                    }
23906                }
23907                #[allow(deprecated)]
23908                ordinal => {
23909                    for _ in 0..num_handles {
23910                        decoder.drop_next_handle()?;
23911                    }
23912                    *self = EncoderSettings::__SourceBreaking { unknown_ordinal: ordinal };
23913                }
23914            }
23915            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23916                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23917            }
23918            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23919                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23920            }
23921            Ok(())
23922        }
23923    }
23924
23925    impl fidl::encoding::ValueTypeMarker for MediumSpecificStreamType {
23926        type Borrowed<'a> = &'a Self;
23927        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23928            value
23929        }
23930    }
23931
23932    unsafe impl fidl::encoding::TypeMarker for MediumSpecificStreamType {
23933        type Owned = Self;
23934
23935        #[inline(always)]
23936        fn inline_align(_context: fidl::encoding::Context) -> usize {
23937            8
23938        }
23939
23940        #[inline(always)]
23941        fn inline_size(_context: fidl::encoding::Context) -> usize {
23942            16
23943        }
23944    }
23945
23946    unsafe impl<D: fidl::encoding::ResourceDialect>
23947        fidl::encoding::Encode<MediumSpecificStreamType, D> for &MediumSpecificStreamType
23948    {
23949        #[inline]
23950        unsafe fn encode(
23951            self,
23952            encoder: &mut fidl::encoding::Encoder<'_, D>,
23953            offset: usize,
23954            _depth: fidl::encoding::Depth,
23955        ) -> fidl::Result<()> {
23956            encoder.debug_check_bounds::<MediumSpecificStreamType>(offset);
23957            encoder.write_num::<u64>(self.ordinal(), offset);
23958            match self {
23959                MediumSpecificStreamType::Audio(ref val) => {
23960                    fidl::encoding::encode_in_envelope::<AudioStreamType, D>(
23961                        <AudioStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
23962                        encoder,
23963                        offset + 8,
23964                        _depth,
23965                    )
23966                }
23967                MediumSpecificStreamType::Video(ref val) => {
23968                    fidl::encoding::encode_in_envelope::<VideoStreamType, D>(
23969                        <VideoStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
23970                        encoder,
23971                        offset + 8,
23972                        _depth,
23973                    )
23974                }
23975                MediumSpecificStreamType::Text(ref val) => {
23976                    fidl::encoding::encode_in_envelope::<TextStreamType, D>(
23977                        <TextStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
23978                        encoder,
23979                        offset + 8,
23980                        _depth,
23981                    )
23982                }
23983                MediumSpecificStreamType::Subpicture(ref val) => {
23984                    fidl::encoding::encode_in_envelope::<SubpictureStreamType, D>(
23985                        <SubpictureStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
23986                        encoder,
23987                        offset + 8,
23988                        _depth,
23989                    )
23990                }
23991            }
23992        }
23993    }
23994
23995    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
23996        for MediumSpecificStreamType
23997    {
23998        #[inline(always)]
23999        fn new_empty() -> Self {
24000            Self::Audio(fidl::new_empty!(AudioStreamType, D))
24001        }
24002
24003        #[inline]
24004        unsafe fn decode(
24005            &mut self,
24006            decoder: &mut fidl::encoding::Decoder<'_, D>,
24007            offset: usize,
24008            mut depth: fidl::encoding::Depth,
24009        ) -> fidl::Result<()> {
24010            decoder.debug_check_bounds::<Self>(offset);
24011            #[allow(unused_variables)]
24012            let next_out_of_line = decoder.next_out_of_line();
24013            let handles_before = decoder.remaining_handles();
24014            let (ordinal, inlined, num_bytes, num_handles) =
24015                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24016
24017            let member_inline_size = match ordinal {
24018                1 => <AudioStreamType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24019                2 => <VideoStreamType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24020                3 => <TextStreamType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24021                4 => <SubpictureStreamType as fidl::encoding::TypeMarker>::inline_size(
24022                    decoder.context,
24023                ),
24024                _ => return Err(fidl::Error::UnknownUnionTag),
24025            };
24026
24027            if inlined != (member_inline_size <= 4) {
24028                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24029            }
24030            let _inner_offset;
24031            if inlined {
24032                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24033                _inner_offset = offset + 8;
24034            } else {
24035                depth.increment()?;
24036                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24037            }
24038            match ordinal {
24039                1 => {
24040                    #[allow(irrefutable_let_patterns)]
24041                    if let MediumSpecificStreamType::Audio(_) = self {
24042                        // Do nothing, read the value into the object
24043                    } else {
24044                        // Initialize `self` to the right variant
24045                        *self =
24046                            MediumSpecificStreamType::Audio(fidl::new_empty!(AudioStreamType, D));
24047                    }
24048                    #[allow(irrefutable_let_patterns)]
24049                    if let MediumSpecificStreamType::Audio(ref mut val) = self {
24050                        fidl::decode!(AudioStreamType, D, val, decoder, _inner_offset, depth)?;
24051                    } else {
24052                        unreachable!()
24053                    }
24054                }
24055                2 => {
24056                    #[allow(irrefutable_let_patterns)]
24057                    if let MediumSpecificStreamType::Video(_) = self {
24058                        // Do nothing, read the value into the object
24059                    } else {
24060                        // Initialize `self` to the right variant
24061                        *self =
24062                            MediumSpecificStreamType::Video(fidl::new_empty!(VideoStreamType, D));
24063                    }
24064                    #[allow(irrefutable_let_patterns)]
24065                    if let MediumSpecificStreamType::Video(ref mut val) = self {
24066                        fidl::decode!(VideoStreamType, D, val, decoder, _inner_offset, depth)?;
24067                    } else {
24068                        unreachable!()
24069                    }
24070                }
24071                3 => {
24072                    #[allow(irrefutable_let_patterns)]
24073                    if let MediumSpecificStreamType::Text(_) = self {
24074                        // Do nothing, read the value into the object
24075                    } else {
24076                        // Initialize `self` to the right variant
24077                        *self = MediumSpecificStreamType::Text(fidl::new_empty!(TextStreamType, D));
24078                    }
24079                    #[allow(irrefutable_let_patterns)]
24080                    if let MediumSpecificStreamType::Text(ref mut val) = self {
24081                        fidl::decode!(TextStreamType, D, val, decoder, _inner_offset, depth)?;
24082                    } else {
24083                        unreachable!()
24084                    }
24085                }
24086                4 => {
24087                    #[allow(irrefutable_let_patterns)]
24088                    if let MediumSpecificStreamType::Subpicture(_) = self {
24089                        // Do nothing, read the value into the object
24090                    } else {
24091                        // Initialize `self` to the right variant
24092                        *self = MediumSpecificStreamType::Subpicture(fidl::new_empty!(
24093                            SubpictureStreamType,
24094                            D
24095                        ));
24096                    }
24097                    #[allow(irrefutable_let_patterns)]
24098                    if let MediumSpecificStreamType::Subpicture(ref mut val) = self {
24099                        fidl::decode!(SubpictureStreamType, D, val, decoder, _inner_offset, depth)?;
24100                    } else {
24101                        unreachable!()
24102                    }
24103                }
24104                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24105            }
24106            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24107                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24108            }
24109            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24110                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24111            }
24112            Ok(())
24113        }
24114    }
24115
24116    impl fidl::encoding::ValueTypeMarker for Usage {
24117        type Borrowed<'a> = &'a Self;
24118        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24119            value
24120        }
24121    }
24122
24123    unsafe impl fidl::encoding::TypeMarker for Usage {
24124        type Owned = Self;
24125
24126        #[inline(always)]
24127        fn inline_align(_context: fidl::encoding::Context) -> usize {
24128            8
24129        }
24130
24131        #[inline(always)]
24132        fn inline_size(_context: fidl::encoding::Context) -> usize {
24133            16
24134        }
24135    }
24136
24137    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Usage, D> for &Usage {
24138        #[inline]
24139        unsafe fn encode(
24140            self,
24141            encoder: &mut fidl::encoding::Encoder<'_, D>,
24142            offset: usize,
24143            _depth: fidl::encoding::Depth,
24144        ) -> fidl::Result<()> {
24145            encoder.debug_check_bounds::<Usage>(offset);
24146            encoder.write_num::<u64>(self.ordinal(), offset);
24147            match self {
24148                Usage::RenderUsage(ref val) => {
24149                    fidl::encoding::encode_in_envelope::<AudioRenderUsage, D>(
24150                        <AudioRenderUsage as fidl::encoding::ValueTypeMarker>::borrow(val),
24151                        encoder,
24152                        offset + 8,
24153                        _depth,
24154                    )
24155                }
24156                Usage::CaptureUsage(ref val) => {
24157                    fidl::encoding::encode_in_envelope::<AudioCaptureUsage, D>(
24158                        <AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow(val),
24159                        encoder,
24160                        offset + 8,
24161                        _depth,
24162                    )
24163                }
24164            }
24165        }
24166    }
24167
24168    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Usage {
24169        #[inline(always)]
24170        fn new_empty() -> Self {
24171            Self::RenderUsage(fidl::new_empty!(AudioRenderUsage, D))
24172        }
24173
24174        #[inline]
24175        unsafe fn decode(
24176            &mut self,
24177            decoder: &mut fidl::encoding::Decoder<'_, D>,
24178            offset: usize,
24179            mut depth: fidl::encoding::Depth,
24180        ) -> fidl::Result<()> {
24181            decoder.debug_check_bounds::<Self>(offset);
24182            #[allow(unused_variables)]
24183            let next_out_of_line = decoder.next_out_of_line();
24184            let handles_before = decoder.remaining_handles();
24185            let (ordinal, inlined, num_bytes, num_handles) =
24186                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24187
24188            let member_inline_size = match ordinal {
24189                1 => <AudioRenderUsage as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24190                2 => {
24191                    <AudioCaptureUsage as fidl::encoding::TypeMarker>::inline_size(decoder.context)
24192                }
24193                _ => return Err(fidl::Error::UnknownUnionTag),
24194            };
24195
24196            if inlined != (member_inline_size <= 4) {
24197                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24198            }
24199            let _inner_offset;
24200            if inlined {
24201                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24202                _inner_offset = offset + 8;
24203            } else {
24204                depth.increment()?;
24205                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24206            }
24207            match ordinal {
24208                1 => {
24209                    #[allow(irrefutable_let_patterns)]
24210                    if let Usage::RenderUsage(_) = self {
24211                        // Do nothing, read the value into the object
24212                    } else {
24213                        // Initialize `self` to the right variant
24214                        *self = Usage::RenderUsage(fidl::new_empty!(AudioRenderUsage, D));
24215                    }
24216                    #[allow(irrefutable_let_patterns)]
24217                    if let Usage::RenderUsage(ref mut val) = self {
24218                        fidl::decode!(AudioRenderUsage, D, val, decoder, _inner_offset, depth)?;
24219                    } else {
24220                        unreachable!()
24221                    }
24222                }
24223                2 => {
24224                    #[allow(irrefutable_let_patterns)]
24225                    if let Usage::CaptureUsage(_) = self {
24226                        // Do nothing, read the value into the object
24227                    } else {
24228                        // Initialize `self` to the right variant
24229                        *self = Usage::CaptureUsage(fidl::new_empty!(AudioCaptureUsage, D));
24230                    }
24231                    #[allow(irrefutable_let_patterns)]
24232                    if let Usage::CaptureUsage(ref mut val) = self {
24233                        fidl::decode!(AudioCaptureUsage, D, val, decoder, _inner_offset, depth)?;
24234                    } else {
24235                        unreachable!()
24236                    }
24237                }
24238                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24239            }
24240            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24241                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24242            }
24243            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24244                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24245            }
24246            Ok(())
24247        }
24248    }
24249
24250    impl fidl::encoding::ValueTypeMarker for Usage2 {
24251        type Borrowed<'a> = &'a Self;
24252        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24253            value
24254        }
24255    }
24256
24257    unsafe impl fidl::encoding::TypeMarker for Usage2 {
24258        type Owned = Self;
24259
24260        #[inline(always)]
24261        fn inline_align(_context: fidl::encoding::Context) -> usize {
24262            8
24263        }
24264
24265        #[inline(always)]
24266        fn inline_size(_context: fidl::encoding::Context) -> usize {
24267            16
24268        }
24269    }
24270
24271    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Usage2, D> for &Usage2 {
24272        #[inline]
24273        unsafe fn encode(
24274            self,
24275            encoder: &mut fidl::encoding::Encoder<'_, D>,
24276            offset: usize,
24277            _depth: fidl::encoding::Depth,
24278        ) -> fidl::Result<()> {
24279            encoder.debug_check_bounds::<Usage2>(offset);
24280            encoder.write_num::<u64>(self.ordinal(), offset);
24281            match self {
24282                Usage2::RenderUsage(ref val) => {
24283                    fidl::encoding::encode_in_envelope::<AudioRenderUsage2, D>(
24284                        <AudioRenderUsage2 as fidl::encoding::ValueTypeMarker>::borrow(val),
24285                        encoder,
24286                        offset + 8,
24287                        _depth,
24288                    )
24289                }
24290                Usage2::CaptureUsage(ref val) => {
24291                    fidl::encoding::encode_in_envelope::<AudioCaptureUsage2, D>(
24292                        <AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow(val),
24293                        encoder,
24294                        offset + 8,
24295                        _depth,
24296                    )
24297                }
24298                Usage2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
24299            }
24300        }
24301    }
24302
24303    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Usage2 {
24304        #[inline(always)]
24305        fn new_empty() -> Self {
24306            Self::__SourceBreaking { unknown_ordinal: 0 }
24307        }
24308
24309        #[inline]
24310        unsafe fn decode(
24311            &mut self,
24312            decoder: &mut fidl::encoding::Decoder<'_, D>,
24313            offset: usize,
24314            mut depth: fidl::encoding::Depth,
24315        ) -> fidl::Result<()> {
24316            decoder.debug_check_bounds::<Self>(offset);
24317            #[allow(unused_variables)]
24318            let next_out_of_line = decoder.next_out_of_line();
24319            let handles_before = decoder.remaining_handles();
24320            let (ordinal, inlined, num_bytes, num_handles) =
24321                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24322
24323            let member_inline_size = match ordinal {
24324                1 => {
24325                    <AudioRenderUsage2 as fidl::encoding::TypeMarker>::inline_size(decoder.context)
24326                }
24327                2 => {
24328                    <AudioCaptureUsage2 as fidl::encoding::TypeMarker>::inline_size(decoder.context)
24329                }
24330                0 => return Err(fidl::Error::UnknownUnionTag),
24331                _ => num_bytes as usize,
24332            };
24333
24334            if inlined != (member_inline_size <= 4) {
24335                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24336            }
24337            let _inner_offset;
24338            if inlined {
24339                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24340                _inner_offset = offset + 8;
24341            } else {
24342                depth.increment()?;
24343                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24344            }
24345            match ordinal {
24346                1 => {
24347                    #[allow(irrefutable_let_patterns)]
24348                    if let Usage2::RenderUsage(_) = self {
24349                        // Do nothing, read the value into the object
24350                    } else {
24351                        // Initialize `self` to the right variant
24352                        *self = Usage2::RenderUsage(fidl::new_empty!(AudioRenderUsage2, D));
24353                    }
24354                    #[allow(irrefutable_let_patterns)]
24355                    if let Usage2::RenderUsage(ref mut val) = self {
24356                        fidl::decode!(AudioRenderUsage2, D, val, decoder, _inner_offset, depth)?;
24357                    } else {
24358                        unreachable!()
24359                    }
24360                }
24361                2 => {
24362                    #[allow(irrefutable_let_patterns)]
24363                    if let Usage2::CaptureUsage(_) = self {
24364                        // Do nothing, read the value into the object
24365                    } else {
24366                        // Initialize `self` to the right variant
24367                        *self = Usage2::CaptureUsage(fidl::new_empty!(AudioCaptureUsage2, D));
24368                    }
24369                    #[allow(irrefutable_let_patterns)]
24370                    if let Usage2::CaptureUsage(ref mut val) = self {
24371                        fidl::decode!(AudioCaptureUsage2, D, val, decoder, _inner_offset, depth)?;
24372                    } else {
24373                        unreachable!()
24374                    }
24375                }
24376                #[allow(deprecated)]
24377                ordinal => {
24378                    for _ in 0..num_handles {
24379                        decoder.drop_next_handle()?;
24380                    }
24381                    *self = Usage2::__SourceBreaking { unknown_ordinal: ordinal };
24382                }
24383            }
24384            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24385                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24386            }
24387            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24388                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24389            }
24390            Ok(())
24391        }
24392    }
24393
24394    impl fidl::encoding::ValueTypeMarker for UsageState {
24395        type Borrowed<'a> = &'a Self;
24396        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24397            value
24398        }
24399    }
24400
24401    unsafe impl fidl::encoding::TypeMarker for UsageState {
24402        type Owned = Self;
24403
24404        #[inline(always)]
24405        fn inline_align(_context: fidl::encoding::Context) -> usize {
24406            8
24407        }
24408
24409        #[inline(always)]
24410        fn inline_size(_context: fidl::encoding::Context) -> usize {
24411            16
24412        }
24413    }
24414
24415    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageState, D>
24416        for &UsageState
24417    {
24418        #[inline]
24419        unsafe fn encode(
24420            self,
24421            encoder: &mut fidl::encoding::Encoder<'_, D>,
24422            offset: usize,
24423            _depth: fidl::encoding::Depth,
24424        ) -> fidl::Result<()> {
24425            encoder.debug_check_bounds::<UsageState>(offset);
24426            encoder.write_num::<u64>(self.ordinal(), offset);
24427            match self {
24428                UsageState::Unadjusted(ref val) => {
24429                    fidl::encoding::encode_in_envelope::<UsageStateUnadjusted, D>(
24430                        <UsageStateUnadjusted as fidl::encoding::ValueTypeMarker>::borrow(val),
24431                        encoder,
24432                        offset + 8,
24433                        _depth,
24434                    )
24435                }
24436                UsageState::Ducked(ref val) => {
24437                    fidl::encoding::encode_in_envelope::<UsageStateDucked, D>(
24438                        <UsageStateDucked as fidl::encoding::ValueTypeMarker>::borrow(val),
24439                        encoder,
24440                        offset + 8,
24441                        _depth,
24442                    )
24443                }
24444                UsageState::Muted(ref val) => {
24445                    fidl::encoding::encode_in_envelope::<UsageStateMuted, D>(
24446                        <UsageStateMuted as fidl::encoding::ValueTypeMarker>::borrow(val),
24447                        encoder,
24448                        offset + 8,
24449                        _depth,
24450                    )
24451                }
24452                UsageState::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
24453            }
24454        }
24455    }
24456
24457    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageState {
24458        #[inline(always)]
24459        fn new_empty() -> Self {
24460            Self::__SourceBreaking { unknown_ordinal: 0 }
24461        }
24462
24463        #[inline]
24464        unsafe fn decode(
24465            &mut self,
24466            decoder: &mut fidl::encoding::Decoder<'_, D>,
24467            offset: usize,
24468            mut depth: fidl::encoding::Depth,
24469        ) -> fidl::Result<()> {
24470            decoder.debug_check_bounds::<Self>(offset);
24471            #[allow(unused_variables)]
24472            let next_out_of_line = decoder.next_out_of_line();
24473            let handles_before = decoder.remaining_handles();
24474            let (ordinal, inlined, num_bytes, num_handles) =
24475                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24476
24477            let member_inline_size = match ordinal {
24478                1 => <UsageStateUnadjusted as fidl::encoding::TypeMarker>::inline_size(
24479                    decoder.context,
24480                ),
24481                2 => <UsageStateDucked as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24482                3 => <UsageStateMuted as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24483                0 => return Err(fidl::Error::UnknownUnionTag),
24484                _ => num_bytes as usize,
24485            };
24486
24487            if inlined != (member_inline_size <= 4) {
24488                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24489            }
24490            let _inner_offset;
24491            if inlined {
24492                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24493                _inner_offset = offset + 8;
24494            } else {
24495                depth.increment()?;
24496                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24497            }
24498            match ordinal {
24499                1 => {
24500                    #[allow(irrefutable_let_patterns)]
24501                    if let UsageState::Unadjusted(_) = self {
24502                        // Do nothing, read the value into the object
24503                    } else {
24504                        // Initialize `self` to the right variant
24505                        *self = UsageState::Unadjusted(fidl::new_empty!(UsageStateUnadjusted, D));
24506                    }
24507                    #[allow(irrefutable_let_patterns)]
24508                    if let UsageState::Unadjusted(ref mut val) = self {
24509                        fidl::decode!(UsageStateUnadjusted, D, val, decoder, _inner_offset, depth)?;
24510                    } else {
24511                        unreachable!()
24512                    }
24513                }
24514                2 => {
24515                    #[allow(irrefutable_let_patterns)]
24516                    if let UsageState::Ducked(_) = self {
24517                        // Do nothing, read the value into the object
24518                    } else {
24519                        // Initialize `self` to the right variant
24520                        *self = UsageState::Ducked(fidl::new_empty!(UsageStateDucked, D));
24521                    }
24522                    #[allow(irrefutable_let_patterns)]
24523                    if let UsageState::Ducked(ref mut val) = self {
24524                        fidl::decode!(UsageStateDucked, D, val, decoder, _inner_offset, depth)?;
24525                    } else {
24526                        unreachable!()
24527                    }
24528                }
24529                3 => {
24530                    #[allow(irrefutable_let_patterns)]
24531                    if let UsageState::Muted(_) = self {
24532                        // Do nothing, read the value into the object
24533                    } else {
24534                        // Initialize `self` to the right variant
24535                        *self = UsageState::Muted(fidl::new_empty!(UsageStateMuted, D));
24536                    }
24537                    #[allow(irrefutable_let_patterns)]
24538                    if let UsageState::Muted(ref mut val) = self {
24539                        fidl::decode!(UsageStateMuted, D, val, decoder, _inner_offset, depth)?;
24540                    } else {
24541                        unreachable!()
24542                    }
24543                }
24544                #[allow(deprecated)]
24545                ordinal => {
24546                    for _ in 0..num_handles {
24547                        decoder.drop_next_handle()?;
24548                    }
24549                    *self = UsageState::__SourceBreaking { unknown_ordinal: ordinal };
24550                }
24551            }
24552            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24553                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24554            }
24555            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24556                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24557            }
24558            Ok(())
24559        }
24560    }
24561
24562    impl fidl::encoding::ValueTypeMarker for Value {
24563        type Borrowed<'a> = &'a Self;
24564        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24565            value
24566        }
24567    }
24568
24569    unsafe impl fidl::encoding::TypeMarker for Value {
24570        type Owned = Self;
24571
24572        #[inline(always)]
24573        fn inline_align(_context: fidl::encoding::Context) -> usize {
24574            8
24575        }
24576
24577        #[inline(always)]
24578        fn inline_size(_context: fidl::encoding::Context) -> usize {
24579            16
24580        }
24581    }
24582
24583    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Value, D> for &Value {
24584        #[inline]
24585        unsafe fn encode(
24586            self,
24587            encoder: &mut fidl::encoding::Encoder<'_, D>,
24588            offset: usize,
24589            _depth: fidl::encoding::Depth,
24590        ) -> fidl::Result<()> {
24591            encoder.debug_check_bounds::<Value>(offset);
24592            encoder.write_num::<u64>(self.ordinal(), offset);
24593            match self {
24594            Value::BoolValue(ref val) => {
24595                fidl::encoding::encode_in_envelope::<bool, D>(
24596                    <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
24597                    encoder, offset + 8, _depth
24598                )
24599            }
24600            Value::Uint64Value(ref val) => {
24601                fidl::encoding::encode_in_envelope::<u64, D>(
24602                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
24603                    encoder, offset + 8, _depth
24604                )
24605            }
24606            Value::Int64Value(ref val) => {
24607                fidl::encoding::encode_in_envelope::<i64, D>(
24608                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
24609                    encoder, offset + 8, _depth
24610                )
24611            }
24612            Value::StringValue(ref val) => {
24613                fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedString, D>(
24614                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(val),
24615                    encoder, offset + 8, _depth
24616                )
24617            }
24618            Value::BytesValue(ref val) => {
24619                fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedVector<u8>, D>(
24620                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(val),
24621                    encoder, offset + 8, _depth
24622                )
24623            }
24624        }
24625        }
24626    }
24627
24628    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Value {
24629        #[inline(always)]
24630        fn new_empty() -> Self {
24631            Self::BoolValue(fidl::new_empty!(bool, D))
24632        }
24633
24634        #[inline]
24635        unsafe fn decode(
24636            &mut self,
24637            decoder: &mut fidl::encoding::Decoder<'_, D>,
24638            offset: usize,
24639            mut depth: fidl::encoding::Depth,
24640        ) -> fidl::Result<()> {
24641            decoder.debug_check_bounds::<Self>(offset);
24642            #[allow(unused_variables)]
24643            let next_out_of_line = decoder.next_out_of_line();
24644            let handles_before = decoder.remaining_handles();
24645            let (ordinal, inlined, num_bytes, num_handles) =
24646                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24647
24648            let member_inline_size = match ordinal {
24649                1 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24650                2 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24651                3 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24652                4 => <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
24653                    decoder.context,
24654                ),
24655                5 => {
24656                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(
24657                        decoder.context,
24658                    )
24659                }
24660                _ => return Err(fidl::Error::UnknownUnionTag),
24661            };
24662
24663            if inlined != (member_inline_size <= 4) {
24664                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24665            }
24666            let _inner_offset;
24667            if inlined {
24668                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24669                _inner_offset = offset + 8;
24670            } else {
24671                depth.increment()?;
24672                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24673            }
24674            match ordinal {
24675                1 => {
24676                    #[allow(irrefutable_let_patterns)]
24677                    if let Value::BoolValue(_) = self {
24678                        // Do nothing, read the value into the object
24679                    } else {
24680                        // Initialize `self` to the right variant
24681                        *self = Value::BoolValue(fidl::new_empty!(bool, D));
24682                    }
24683                    #[allow(irrefutable_let_patterns)]
24684                    if let Value::BoolValue(ref mut val) = self {
24685                        fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
24686                    } else {
24687                        unreachable!()
24688                    }
24689                }
24690                2 => {
24691                    #[allow(irrefutable_let_patterns)]
24692                    if let Value::Uint64Value(_) = self {
24693                        // Do nothing, read the value into the object
24694                    } else {
24695                        // Initialize `self` to the right variant
24696                        *self = Value::Uint64Value(fidl::new_empty!(u64, D));
24697                    }
24698                    #[allow(irrefutable_let_patterns)]
24699                    if let Value::Uint64Value(ref mut val) = self {
24700                        fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
24701                    } else {
24702                        unreachable!()
24703                    }
24704                }
24705                3 => {
24706                    #[allow(irrefutable_let_patterns)]
24707                    if let Value::Int64Value(_) = self {
24708                        // Do nothing, read the value into the object
24709                    } else {
24710                        // Initialize `self` to the right variant
24711                        *self = Value::Int64Value(fidl::new_empty!(i64, D));
24712                    }
24713                    #[allow(irrefutable_let_patterns)]
24714                    if let Value::Int64Value(ref mut val) = self {
24715                        fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
24716                    } else {
24717                        unreachable!()
24718                    }
24719                }
24720                4 => {
24721                    #[allow(irrefutable_let_patterns)]
24722                    if let Value::StringValue(_) = self {
24723                        // Do nothing, read the value into the object
24724                    } else {
24725                        // Initialize `self` to the right variant
24726                        *self = Value::StringValue(fidl::new_empty!(
24727                            fidl::encoding::UnboundedString,
24728                            D
24729                        ));
24730                    }
24731                    #[allow(irrefutable_let_patterns)]
24732                    if let Value::StringValue(ref mut val) = self {
24733                        fidl::decode!(
24734                            fidl::encoding::UnboundedString,
24735                            D,
24736                            val,
24737                            decoder,
24738                            _inner_offset,
24739                            depth
24740                        )?;
24741                    } else {
24742                        unreachable!()
24743                    }
24744                }
24745                5 => {
24746                    #[allow(irrefutable_let_patterns)]
24747                    if let Value::BytesValue(_) = self {
24748                        // Do nothing, read the value into the object
24749                    } else {
24750                        // Initialize `self` to the right variant
24751                        *self = Value::BytesValue(fidl::new_empty!(
24752                            fidl::encoding::UnboundedVector<u8>,
24753                            D
24754                        ));
24755                    }
24756                    #[allow(irrefutable_let_patterns)]
24757                    if let Value::BytesValue(ref mut val) = self {
24758                        fidl::decode!(
24759                            fidl::encoding::UnboundedVector<u8>,
24760                            D,
24761                            val,
24762                            decoder,
24763                            _inner_offset,
24764                            depth
24765                        )?;
24766                    } else {
24767                        unreachable!()
24768                    }
24769                }
24770                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24771            }
24772            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24773                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24774            }
24775            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24776                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24777            }
24778            Ok(())
24779        }
24780    }
24781
24782    impl fidl::encoding::ValueTypeMarker for VideoCompressedFormat {
24783        type Borrowed<'a> = &'a Self;
24784        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24785            value
24786        }
24787    }
24788
24789    unsafe impl fidl::encoding::TypeMarker for VideoCompressedFormat {
24790        type Owned = Self;
24791
24792        #[inline(always)]
24793        fn inline_align(_context: fidl::encoding::Context) -> usize {
24794            8
24795        }
24796
24797        #[inline(always)]
24798        fn inline_size(_context: fidl::encoding::Context) -> usize {
24799            16
24800        }
24801    }
24802
24803    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VideoCompressedFormat, D>
24804        for &VideoCompressedFormat
24805    {
24806        #[inline]
24807        unsafe fn encode(
24808            self,
24809            encoder: &mut fidl::encoding::Encoder<'_, D>,
24810            offset: usize,
24811            _depth: fidl::encoding::Depth,
24812        ) -> fidl::Result<()> {
24813            encoder.debug_check_bounds::<VideoCompressedFormat>(offset);
24814            encoder.write_num::<u64>(self.ordinal(), offset);
24815            match self {
24816                VideoCompressedFormat::TempFieldTodoRemove(ref val) => {
24817                    fidl::encoding::encode_in_envelope::<u32, D>(
24818                        <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
24819                        encoder,
24820                        offset + 8,
24821                        _depth,
24822                    )
24823                }
24824            }
24825        }
24826    }
24827
24828    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoCompressedFormat {
24829        #[inline(always)]
24830        fn new_empty() -> Self {
24831            Self::TempFieldTodoRemove(fidl::new_empty!(u32, D))
24832        }
24833
24834        #[inline]
24835        unsafe fn decode(
24836            &mut self,
24837            decoder: &mut fidl::encoding::Decoder<'_, D>,
24838            offset: usize,
24839            mut depth: fidl::encoding::Depth,
24840        ) -> fidl::Result<()> {
24841            decoder.debug_check_bounds::<Self>(offset);
24842            #[allow(unused_variables)]
24843            let next_out_of_line = decoder.next_out_of_line();
24844            let handles_before = decoder.remaining_handles();
24845            let (ordinal, inlined, num_bytes, num_handles) =
24846                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24847
24848            let member_inline_size = match ordinal {
24849                1 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24850                _ => return Err(fidl::Error::UnknownUnionTag),
24851            };
24852
24853            if inlined != (member_inline_size <= 4) {
24854                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24855            }
24856            let _inner_offset;
24857            if inlined {
24858                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24859                _inner_offset = offset + 8;
24860            } else {
24861                depth.increment()?;
24862                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24863            }
24864            match ordinal {
24865                1 => {
24866                    #[allow(irrefutable_let_patterns)]
24867                    if let VideoCompressedFormat::TempFieldTodoRemove(_) = self {
24868                        // Do nothing, read the value into the object
24869                    } else {
24870                        // Initialize `self` to the right variant
24871                        *self =
24872                            VideoCompressedFormat::TempFieldTodoRemove(fidl::new_empty!(u32, D));
24873                    }
24874                    #[allow(irrefutable_let_patterns)]
24875                    if let VideoCompressedFormat::TempFieldTodoRemove(ref mut val) = self {
24876                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
24877                    } else {
24878                        unreachable!()
24879                    }
24880                }
24881                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24882            }
24883            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24884                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24885            }
24886            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24887                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24888            }
24889            Ok(())
24890        }
24891    }
24892
24893    impl fidl::encoding::ValueTypeMarker for VideoFormat {
24894        type Borrowed<'a> = &'a Self;
24895        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24896            value
24897        }
24898    }
24899
24900    unsafe impl fidl::encoding::TypeMarker for VideoFormat {
24901        type Owned = Self;
24902
24903        #[inline(always)]
24904        fn inline_align(_context: fidl::encoding::Context) -> usize {
24905            8
24906        }
24907
24908        #[inline(always)]
24909        fn inline_size(_context: fidl::encoding::Context) -> usize {
24910            16
24911        }
24912    }
24913
24914    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VideoFormat, D>
24915        for &VideoFormat
24916    {
24917        #[inline]
24918        unsafe fn encode(
24919            self,
24920            encoder: &mut fidl::encoding::Encoder<'_, D>,
24921            offset: usize,
24922            _depth: fidl::encoding::Depth,
24923        ) -> fidl::Result<()> {
24924            encoder.debug_check_bounds::<VideoFormat>(offset);
24925            encoder.write_num::<u64>(self.ordinal(), offset);
24926            match self {
24927                VideoFormat::Compressed(ref val) => {
24928                    fidl::encoding::encode_in_envelope::<VideoCompressedFormat, D>(
24929                        <VideoCompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
24930                        encoder,
24931                        offset + 8,
24932                        _depth,
24933                    )
24934                }
24935                VideoFormat::Uncompressed(ref val) => {
24936                    fidl::encoding::encode_in_envelope::<VideoUncompressedFormat, D>(
24937                        <VideoUncompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
24938                        encoder,
24939                        offset + 8,
24940                        _depth,
24941                    )
24942                }
24943            }
24944        }
24945    }
24946
24947    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoFormat {
24948        #[inline(always)]
24949        fn new_empty() -> Self {
24950            Self::Compressed(fidl::new_empty!(VideoCompressedFormat, D))
24951        }
24952
24953        #[inline]
24954        unsafe fn decode(
24955            &mut self,
24956            decoder: &mut fidl::encoding::Decoder<'_, D>,
24957            offset: usize,
24958            mut depth: fidl::encoding::Depth,
24959        ) -> fidl::Result<()> {
24960            decoder.debug_check_bounds::<Self>(offset);
24961            #[allow(unused_variables)]
24962            let next_out_of_line = decoder.next_out_of_line();
24963            let handles_before = decoder.remaining_handles();
24964            let (ordinal, inlined, num_bytes, num_handles) =
24965                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24966
24967            let member_inline_size = match ordinal {
24968                1 => <VideoCompressedFormat as fidl::encoding::TypeMarker>::inline_size(
24969                    decoder.context,
24970                ),
24971                2 => <VideoUncompressedFormat as fidl::encoding::TypeMarker>::inline_size(
24972                    decoder.context,
24973                ),
24974                _ => return Err(fidl::Error::UnknownUnionTag),
24975            };
24976
24977            if inlined != (member_inline_size <= 4) {
24978                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24979            }
24980            let _inner_offset;
24981            if inlined {
24982                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24983                _inner_offset = offset + 8;
24984            } else {
24985                depth.increment()?;
24986                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24987            }
24988            match ordinal {
24989                1 => {
24990                    #[allow(irrefutable_let_patterns)]
24991                    if let VideoFormat::Compressed(_) = self {
24992                        // Do nothing, read the value into the object
24993                    } else {
24994                        // Initialize `self` to the right variant
24995                        *self = VideoFormat::Compressed(fidl::new_empty!(VideoCompressedFormat, D));
24996                    }
24997                    #[allow(irrefutable_let_patterns)]
24998                    if let VideoFormat::Compressed(ref mut val) = self {
24999                        fidl::decode!(
25000                            VideoCompressedFormat,
25001                            D,
25002                            val,
25003                            decoder,
25004                            _inner_offset,
25005                            depth
25006                        )?;
25007                    } else {
25008                        unreachable!()
25009                    }
25010                }
25011                2 => {
25012                    #[allow(irrefutable_let_patterns)]
25013                    if let VideoFormat::Uncompressed(_) = self {
25014                        // Do nothing, read the value into the object
25015                    } else {
25016                        // Initialize `self` to the right variant
25017                        *self =
25018                            VideoFormat::Uncompressed(fidl::new_empty!(VideoUncompressedFormat, D));
25019                    }
25020                    #[allow(irrefutable_let_patterns)]
25021                    if let VideoFormat::Uncompressed(ref mut val) = self {
25022                        fidl::decode!(
25023                            VideoUncompressedFormat,
25024                            D,
25025                            val,
25026                            decoder,
25027                            _inner_offset,
25028                            depth
25029                        )?;
25030                    } else {
25031                        unreachable!()
25032                    }
25033                }
25034                ordinal => panic!("unexpected ordinal {:?}", ordinal),
25035            }
25036            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
25037                return Err(fidl::Error::InvalidNumBytesInEnvelope);
25038            }
25039            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25040                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25041            }
25042            Ok(())
25043        }
25044    }
25045}