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/// The behaviors applied to streams when multiple are active.
692#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
693pub enum Behavior {
694    /// Mix the streams.
695    None,
696    /// Apply a gain to duck the volume of one of the streams. (-14.0db)
697    Duck,
698    /// Apply a gain to mute one of the streams. (-160.0db)
699    Mute,
700    #[doc(hidden)]
701    __SourceBreaking { unknown_ordinal: u32 },
702}
703
704/// Pattern that matches an unknown `Behavior` member.
705#[macro_export]
706macro_rules! BehaviorUnknown {
707    () => {
708        _
709    };
710}
711
712impl Behavior {
713    #[inline]
714    pub fn from_primitive(prim: u32) -> Option<Self> {
715        match prim {
716            0 => Some(Self::None),
717            1 => Some(Self::Duck),
718            2 => Some(Self::Mute),
719            _ => None,
720        }
721    }
722
723    #[inline]
724    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
725        match prim {
726            0 => Self::None,
727            1 => Self::Duck,
728            2 => Self::Mute,
729            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
730        }
731    }
732
733    #[inline]
734    pub fn unknown() -> Self {
735        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
736    }
737
738    #[inline]
739    pub const fn into_primitive(self) -> u32 {
740        match self {
741            Self::None => 0,
742            Self::Duck => 1,
743            Self::Mute => 2,
744            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
745        }
746    }
747
748    #[inline]
749    pub fn is_unknown(&self) -> bool {
750        match self {
751            Self::__SourceBreaking { unknown_ordinal: _ } => true,
752            _ => false,
753        }
754    }
755}
756
757/// A list of permitted codec profiles. This list should be flexible since codecs can and will be added
758/// in the future. This can contain both video and audio profiles if needed.
759#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
760pub enum CodecProfile {
761    H264ProfileBaseline,
762    H264ProfileMain,
763    H264ProfileExtended,
764    H264ProfileHigh,
765    H264ProfileHigh10Profile,
766    H264ProfileHigh422Profile,
767    H264ProfileHigh444Predictiveprofile,
768    H264ProfileScalablebaseline,
769    H264ProfileScalablehigh,
770    H264ProfileStereohigh,
771    H264ProfileMultiviewhigh,
772    Vp8ProfileAny,
773    Vp9ProfileProfile0,
774    Vp9ProfileProfile1,
775    Vp9ProfileProfile2,
776    Vp9ProfileProfile3,
777    HevcprofileMain,
778    HevcprofileMain10,
779    HevcprofileMainStillPicture,
780    MjpegBaseline,
781    #[doc(hidden)]
782    __SourceBreaking {
783        unknown_ordinal: u32,
784    },
785}
786
787/// Pattern that matches an unknown `CodecProfile` member.
788#[macro_export]
789macro_rules! CodecProfileUnknown {
790    () => {
791        _
792    };
793}
794
795impl CodecProfile {
796    #[inline]
797    pub fn from_primitive(prim: u32) -> Option<Self> {
798        match prim {
799            0 => Some(Self::H264ProfileBaseline),
800            1 => Some(Self::H264ProfileMain),
801            2 => Some(Self::H264ProfileExtended),
802            3 => Some(Self::H264ProfileHigh),
803            4 => Some(Self::H264ProfileHigh10Profile),
804            5 => Some(Self::H264ProfileHigh422Profile),
805            6 => Some(Self::H264ProfileHigh444Predictiveprofile),
806            7 => Some(Self::H264ProfileScalablebaseline),
807            8 => Some(Self::H264ProfileScalablehigh),
808            9 => Some(Self::H264ProfileStereohigh),
809            10 => Some(Self::H264ProfileMultiviewhigh),
810            11 => Some(Self::Vp8ProfileAny),
811            12 => Some(Self::Vp9ProfileProfile0),
812            13 => Some(Self::Vp9ProfileProfile1),
813            14 => Some(Self::Vp9ProfileProfile2),
814            15 => Some(Self::Vp9ProfileProfile3),
815            16 => Some(Self::HevcprofileMain),
816            17 => Some(Self::HevcprofileMain10),
817            18 => Some(Self::HevcprofileMainStillPicture),
818            19 => Some(Self::MjpegBaseline),
819            _ => None,
820        }
821    }
822
823    #[inline]
824    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
825        match prim {
826            0 => Self::H264ProfileBaseline,
827            1 => Self::H264ProfileMain,
828            2 => Self::H264ProfileExtended,
829            3 => Self::H264ProfileHigh,
830            4 => Self::H264ProfileHigh10Profile,
831            5 => Self::H264ProfileHigh422Profile,
832            6 => Self::H264ProfileHigh444Predictiveprofile,
833            7 => Self::H264ProfileScalablebaseline,
834            8 => Self::H264ProfileScalablehigh,
835            9 => Self::H264ProfileStereohigh,
836            10 => Self::H264ProfileMultiviewhigh,
837            11 => Self::Vp8ProfileAny,
838            12 => Self::Vp9ProfileProfile0,
839            13 => Self::Vp9ProfileProfile1,
840            14 => Self::Vp9ProfileProfile2,
841            15 => Self::Vp9ProfileProfile3,
842            16 => Self::HevcprofileMain,
843            17 => Self::HevcprofileMain10,
844            18 => Self::HevcprofileMainStillPicture,
845            19 => Self::MjpegBaseline,
846            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
847        }
848    }
849
850    #[inline]
851    pub fn unknown() -> Self {
852        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
853    }
854
855    #[inline]
856    pub const fn into_primitive(self) -> u32 {
857        match self {
858            Self::H264ProfileBaseline => 0,
859            Self::H264ProfileMain => 1,
860            Self::H264ProfileExtended => 2,
861            Self::H264ProfileHigh => 3,
862            Self::H264ProfileHigh10Profile => 4,
863            Self::H264ProfileHigh422Profile => 5,
864            Self::H264ProfileHigh444Predictiveprofile => 6,
865            Self::H264ProfileScalablebaseline => 7,
866            Self::H264ProfileScalablehigh => 8,
867            Self::H264ProfileStereohigh => 9,
868            Self::H264ProfileMultiviewhigh => 10,
869            Self::Vp8ProfileAny => 11,
870            Self::Vp9ProfileProfile0 => 12,
871            Self::Vp9ProfileProfile1 => 13,
872            Self::Vp9ProfileProfile2 => 14,
873            Self::Vp9ProfileProfile3 => 15,
874            Self::HevcprofileMain => 16,
875            Self::HevcprofileMain10 => 17,
876            Self::HevcprofileMainStillPicture => 18,
877            Self::MjpegBaseline => 19,
878            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
879        }
880    }
881
882    #[inline]
883    pub fn is_unknown(&self) -> bool {
884        match self {
885            Self::__SourceBreaking { unknown_ordinal: _ } => true,
886            _ => false,
887        }
888    }
889}
890
891#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
892#[repr(u32)]
893pub enum ColorSpace {
894    Unknown = 0,
895    NotApplicable = 1,
896    Jpeg = 2,
897    HdRec709 = 3,
898    SdRec601 = 4,
899}
900
901impl ColorSpace {
902    #[inline]
903    pub fn from_primitive(prim: u32) -> Option<Self> {
904        match prim {
905            0 => Some(Self::Unknown),
906            1 => Some(Self::NotApplicable),
907            2 => Some(Self::Jpeg),
908            3 => Some(Self::HdRec709),
909            4 => Some(Self::SdRec601),
910            _ => None,
911        }
912    }
913
914    #[inline]
915    pub const fn into_primitive(self) -> u32 {
916        self as u32
917    }
918}
919
920#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
921pub enum Lc3FrameDuration {
922    D10Ms,
923    D7P5Ms,
924    #[doc(hidden)]
925    __SourceBreaking {
926        unknown_ordinal: u32,
927    },
928}
929
930/// Pattern that matches an unknown `Lc3FrameDuration` member.
931#[macro_export]
932macro_rules! Lc3FrameDurationUnknown {
933    () => {
934        _
935    };
936}
937
938impl Lc3FrameDuration {
939    #[inline]
940    pub fn from_primitive(prim: u32) -> Option<Self> {
941        match prim {
942            1 => Some(Self::D10Ms),
943            2 => Some(Self::D7P5Ms),
944            _ => None,
945        }
946    }
947
948    #[inline]
949    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
950        match prim {
951            1 => Self::D10Ms,
952            2 => Self::D7P5Ms,
953            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
954        }
955    }
956
957    #[inline]
958    pub fn unknown() -> Self {
959        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
960    }
961
962    #[inline]
963    pub const fn into_primitive(self) -> u32 {
964        match self {
965            Self::D10Ms => 1,
966            Self::D7P5Ms => 2,
967            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
968        }
969    }
970
971    #[inline]
972    pub fn is_unknown(&self) -> bool {
973        match self {
974            Self::__SourceBreaking { unknown_ordinal: _ } => true,
975            _ => false,
976        }
977    }
978}
979
980#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
981#[repr(u32)]
982pub enum SbcAllocation {
983    AllocLoudness = 0,
984    AllocSnr = 1,
985}
986
987impl SbcAllocation {
988    #[inline]
989    pub fn from_primitive(prim: u32) -> Option<Self> {
990        match prim {
991            0 => Some(Self::AllocLoudness),
992            1 => Some(Self::AllocSnr),
993            _ => None,
994        }
995    }
996
997    #[inline]
998    pub const fn into_primitive(self) -> u32 {
999        self as u32
1000    }
1001}
1002
1003#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1004#[repr(u32)]
1005pub enum SbcBlockCount {
1006    BlockCount4 = 4,
1007    BlockCount8 = 8,
1008    BlockCount12 = 12,
1009    BlockCount16 = 16,
1010}
1011
1012impl SbcBlockCount {
1013    #[inline]
1014    pub fn from_primitive(prim: u32) -> Option<Self> {
1015        match prim {
1016            4 => Some(Self::BlockCount4),
1017            8 => Some(Self::BlockCount8),
1018            12 => Some(Self::BlockCount12),
1019            16 => Some(Self::BlockCount16),
1020            _ => None,
1021        }
1022    }
1023
1024    #[inline]
1025    pub const fn into_primitive(self) -> u32 {
1026        self as u32
1027    }
1028}
1029
1030#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1031#[repr(u32)]
1032pub enum SbcChannelMode {
1033    Mono = 0,
1034    Dual = 1,
1035    Stereo = 2,
1036    JointStereo = 3,
1037}
1038
1039impl SbcChannelMode {
1040    #[inline]
1041    pub fn from_primitive(prim: u32) -> Option<Self> {
1042        match prim {
1043            0 => Some(Self::Mono),
1044            1 => Some(Self::Dual),
1045            2 => Some(Self::Stereo),
1046            3 => Some(Self::JointStereo),
1047            _ => None,
1048        }
1049    }
1050
1051    #[inline]
1052    pub const fn into_primitive(self) -> u32 {
1053        self as u32
1054    }
1055}
1056
1057#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1058#[repr(u32)]
1059pub enum SbcSubBands {
1060    SubBands4 = 4,
1061    SubBands8 = 8,
1062}
1063
1064impl SbcSubBands {
1065    #[inline]
1066    pub fn from_primitive(prim: u32) -> Option<Self> {
1067        match prim {
1068            4 => Some(Self::SubBands4),
1069            8 => Some(Self::SubBands8),
1070            _ => None,
1071        }
1072    }
1073
1074    #[inline]
1075    pub const fn into_primitive(self) -> u32 {
1076        self as u32
1077    }
1078}
1079
1080/// StreamError
1081///
1082/// This error code encapsulates various errors that might emanate from a
1083/// StreamProcessor server. It can be sent either as an OnStreamFailed event or
1084/// as an epitaph for the channel.
1085#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1086#[repr(u32)]
1087pub enum StreamError {
1088    /// An internal error with an unspecified reason.
1089    Unknown = 1,
1090    /// The client provided invalid input format details.
1091    InvalidInputFormatDetails = 2,
1092    /// The server received buffers that are not suitable for the operation to
1093    /// be performed. An example of this would be if a Decoder received output
1094    /// buffers that are too small to decode a frame into.
1095    IncompatibleBuffersProvided = 3,
1096    /// Processing of input EOS (end of stream) failed, so the stream failed.
1097    /// Currently this can occur if a core codec watchdog fires while processing
1098    /// EOS.
1099    EosProcessing = 4,
1100    /// An internal decoder error with an unspecified reason.
1101    DecoderUnknown = 16777217,
1102    /// Input data that can't be parsed.  Only some parsing problems/errors are
1103    /// reported this way.  Corrupt input data may be reported as other
1104    /// StreamError, or may not cause a StreamError.
1105    DecoderDataParsing = 16777218,
1106    /// An internal encoder error with an unspecified reason.
1107    EncoderUnknown = 33554433,
1108    /// An internal decryptor error with an unspecified reason.
1109    DecryptorUnknown = 50331649,
1110    /// The requested KeyId is not available for use by the Decryptor. The
1111    /// client may try again later if that key becomes available.
1112    DecryptorNoKey = 50331650,
1113}
1114
1115impl StreamError {
1116    #[inline]
1117    pub fn from_primitive(prim: u32) -> Option<Self> {
1118        match prim {
1119            1 => Some(Self::Unknown),
1120            2 => Some(Self::InvalidInputFormatDetails),
1121            3 => Some(Self::IncompatibleBuffersProvided),
1122            4 => Some(Self::EosProcessing),
1123            16777217 => Some(Self::DecoderUnknown),
1124            16777218 => Some(Self::DecoderDataParsing),
1125            33554433 => Some(Self::EncoderUnknown),
1126            50331649 => Some(Self::DecryptorUnknown),
1127            50331650 => Some(Self::DecryptorNoKey),
1128            _ => None,
1129        }
1130    }
1131
1132    #[inline]
1133    pub const fn into_primitive(self) -> u32 {
1134        self as u32
1135    }
1136}
1137
1138#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1139#[repr(u32)]
1140pub enum VideoColorSpace {
1141    Invalid = 0,
1142}
1143
1144impl VideoColorSpace {
1145    #[inline]
1146    pub fn from_primitive(prim: u32) -> Option<Self> {
1147        match prim {
1148            0 => Some(Self::Invalid),
1149            _ => None,
1150        }
1151    }
1152
1153    #[inline]
1154    pub const fn into_primitive(self) -> u32 {
1155        self as u32
1156    }
1157}
1158
1159#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1160#[repr(C)]
1161pub struct AacConstantBitRate {
1162    /// Bits per second
1163    pub bit_rate: u32,
1164}
1165
1166impl fidl::Persistable for AacConstantBitRate {}
1167
1168#[derive(Clone, Debug, PartialEq)]
1169pub struct AacEncoderSettings {
1170    pub transport: AacTransport,
1171    pub channel_mode: AacChannelMode,
1172    pub bit_rate: AacBitRate,
1173    pub aot: AacAudioObjectType,
1174}
1175
1176impl fidl::Persistable for AacEncoderSettings {}
1177
1178/// AAC inside ADTS
1179#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1180pub struct AacTransportAdts;
1181
1182impl fidl::Persistable for AacTransportAdts {}
1183
1184/// AAC inside LATM
1185#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1186pub struct AacTransportLatm {
1187    /// Whether MuxConfiguration stream element is present
1188    pub mux_config_present: bool,
1189}
1190
1191impl fidl::Persistable for AacTransportLatm {}
1192
1193/// Raw AAC access units.
1194#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1195pub struct AacTransportRaw;
1196
1197impl fidl::Persistable for AacTransportRaw {}
1198
1199#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1200pub struct ActivityReporterWatchCaptureActivityResponse {
1201    pub active_usages: Vec<AudioCaptureUsage>,
1202}
1203
1204impl fidl::Persistable for ActivityReporterWatchCaptureActivityResponse {}
1205
1206#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1207pub struct ActivityReporterWatchRenderActivityResponse {
1208    pub active_usages: Vec<AudioRenderUsage>,
1209}
1210
1211impl fidl::Persistable for ActivityReporterWatchRenderActivityResponse {}
1212
1213#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1214pub struct ActivityReporterWatchCaptureActivity2Response {
1215    pub active_usages: Vec<AudioCaptureUsage2>,
1216}
1217
1218impl fidl::Persistable for ActivityReporterWatchCaptureActivity2Response {}
1219
1220#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1221pub struct ActivityReporterWatchRenderActivity2Response {
1222    pub active_usages: Vec<AudioRenderUsage2>,
1223}
1224
1225impl fidl::Persistable for ActivityReporterWatchRenderActivity2Response {}
1226
1227#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1228#[repr(C)]
1229pub struct AudioCapturerCaptureAtRequest {
1230    pub payload_buffer_id: u32,
1231    pub payload_offset: u32,
1232    pub frames: u32,
1233}
1234
1235impl fidl::Persistable for AudioCapturerCaptureAtRequest {}
1236
1237#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1238#[repr(C)]
1239pub struct AudioCapturerCaptureAtResponse {
1240    pub captured_packet: StreamPacket,
1241}
1242
1243impl fidl::Persistable for AudioCapturerCaptureAtResponse {}
1244
1245#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1246pub struct AudioCapturerGetStreamTypeResponse {
1247    pub stream_type: StreamType,
1248}
1249
1250impl fidl::Persistable for AudioCapturerGetStreamTypeResponse {}
1251
1252#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1253pub struct AudioCapturerSetPcmStreamTypeRequest {
1254    pub stream_type: AudioStreamType,
1255}
1256
1257impl fidl::Persistable for AudioCapturerSetPcmStreamTypeRequest {}
1258
1259#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1260pub struct AudioCapturerSetUsage2Request {
1261    pub usage: AudioCaptureUsage2,
1262}
1263
1264impl fidl::Persistable for AudioCapturerSetUsage2Request {}
1265
1266#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1267pub struct AudioCapturerSetUsageRequest {
1268    pub usage: AudioCaptureUsage,
1269}
1270
1271impl fidl::Persistable for AudioCapturerSetUsageRequest {}
1272
1273#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1274#[repr(C)]
1275pub struct AudioCapturerStartAsyncCaptureRequest {
1276    pub frames_per_packet: u32,
1277}
1278
1279impl fidl::Persistable for AudioCapturerStartAsyncCaptureRequest {}
1280
1281#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1282pub struct AudioCompressedFormatAac;
1283
1284impl fidl::Persistable for AudioCompressedFormatAac {}
1285
1286#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1287pub struct AudioCompressedFormatSbc;
1288
1289impl fidl::Persistable for AudioCompressedFormatSbc {}
1290
1291#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1292pub struct AudioConsumerSetRateRequest {
1293    pub rate: f32,
1294}
1295
1296impl fidl::Persistable for AudioConsumerSetRateRequest {}
1297
1298#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1299pub struct AudioConsumerStartRequest {
1300    pub flags: AudioConsumerStartFlags,
1301    pub reference_time: i64,
1302    pub media_time: i64,
1303}
1304
1305impl fidl::Persistable for AudioConsumerStartRequest {}
1306
1307#[derive(Clone, Debug, PartialEq)]
1308pub struct AudioConsumerWatchStatusResponse {
1309    pub status: AudioConsumerStatus,
1310}
1311
1312impl fidl::Persistable for AudioConsumerWatchStatusResponse {}
1313
1314#[derive(Clone, Debug, PartialEq)]
1315pub struct AudioCoreGetDbFromVolume2Request {
1316    pub usage: Usage2,
1317    pub volume: f32,
1318}
1319
1320impl fidl::Persistable for AudioCoreGetDbFromVolume2Request {}
1321
1322#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1323pub struct AudioCoreGetDbFromVolumeRequest {
1324    pub usage: Usage,
1325    pub volume: f32,
1326}
1327
1328impl fidl::Persistable for AudioCoreGetDbFromVolumeRequest {}
1329
1330#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1331pub struct AudioCoreGetDbFromVolumeResponse {
1332    pub gain_db: f32,
1333}
1334
1335impl fidl::Persistable for AudioCoreGetDbFromVolumeResponse {}
1336
1337#[derive(Clone, Debug, PartialEq)]
1338pub struct AudioCoreGetVolumeFromDb2Request {
1339    pub usage: Usage2,
1340    pub gain_db: f32,
1341}
1342
1343impl fidl::Persistable for AudioCoreGetVolumeFromDb2Request {}
1344
1345#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1346pub struct AudioCoreGetVolumeFromDbRequest {
1347    pub usage: Usage,
1348    pub gain_db: f32,
1349}
1350
1351impl fidl::Persistable for AudioCoreGetVolumeFromDbRequest {}
1352
1353#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1354pub struct AudioCoreGetVolumeFromDbResponse {
1355    pub volume: f32,
1356}
1357
1358impl fidl::Persistable for AudioCoreGetVolumeFromDbResponse {}
1359
1360#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1361pub struct AudioCoreSetCaptureUsageGain2Request {
1362    pub usage: AudioCaptureUsage2,
1363    pub gain_db: f32,
1364}
1365
1366impl fidl::Persistable for AudioCoreSetCaptureUsageGain2Request {}
1367
1368#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1369pub struct AudioCoreSetCaptureUsageGainRequest {
1370    pub usage: AudioCaptureUsage,
1371    pub gain_db: f32,
1372}
1373
1374impl fidl::Persistable for AudioCoreSetCaptureUsageGainRequest {}
1375
1376#[derive(Clone, Debug, PartialEq)]
1377pub struct AudioCoreSetInteraction2Request {
1378    pub active: Usage2,
1379    pub affected: Usage2,
1380    pub behavior: Behavior,
1381}
1382
1383impl fidl::Persistable for AudioCoreSetInteraction2Request {}
1384
1385#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1386pub struct AudioCoreSetInteractionRequest {
1387    pub active: Usage,
1388    pub affected: Usage,
1389    pub behavior: Behavior,
1390}
1391
1392impl fidl::Persistable for AudioCoreSetInteractionRequest {}
1393
1394#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1395pub struct AudioCoreSetRenderUsageGain2Request {
1396    pub usage: AudioRenderUsage2,
1397    pub gain_db: f32,
1398}
1399
1400impl fidl::Persistable for AudioCoreSetRenderUsageGain2Request {}
1401
1402#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1403pub struct AudioCoreSetRenderUsageGainRequest {
1404    pub usage: AudioRenderUsage,
1405    pub gain_db: f32,
1406}
1407
1408impl fidl::Persistable for AudioCoreSetRenderUsageGainRequest {}
1409
1410#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1411pub struct AudioCoreGetDbFromVolume2Response {
1412    pub gain_db: f32,
1413}
1414
1415impl fidl::Persistable for AudioCoreGetDbFromVolume2Response {}
1416
1417#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1418pub struct AudioCoreGetVolumeFromDb2Response {
1419    pub volume: f32,
1420}
1421
1422impl fidl::Persistable for AudioCoreGetVolumeFromDb2Response {}
1423
1424#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1425#[repr(C)]
1426pub struct AudioDeviceEnumeratorGetDeviceGainRequest {
1427    pub device_token: u64,
1428}
1429
1430impl fidl::Persistable for AudioDeviceEnumeratorGetDeviceGainRequest {}
1431
1432#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1433pub struct AudioDeviceEnumeratorGetDeviceGainResponse {
1434    pub device_token: u64,
1435    pub gain_info: AudioGainInfo,
1436}
1437
1438impl fidl::Persistable for AudioDeviceEnumeratorGetDeviceGainResponse {}
1439
1440#[derive(Clone, Debug, PartialEq, PartialOrd)]
1441pub struct AudioDeviceEnumeratorGetDevicesResponse {
1442    pub devices: Vec<AudioDeviceInfo>,
1443}
1444
1445impl fidl::Persistable for AudioDeviceEnumeratorGetDevicesResponse {}
1446
1447#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1448#[repr(C)]
1449pub struct AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {
1450    pub old_default_token: u64,
1451    pub new_default_token: u64,
1452}
1453
1454impl fidl::Persistable for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {}
1455
1456#[derive(Clone, Debug, PartialEq, PartialOrd)]
1457pub struct AudioDeviceEnumeratorOnDeviceAddedRequest {
1458    pub device: AudioDeviceInfo,
1459}
1460
1461impl fidl::Persistable for AudioDeviceEnumeratorOnDeviceAddedRequest {}
1462
1463#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1464pub struct AudioDeviceEnumeratorOnDeviceGainChangedRequest {
1465    pub device_token: u64,
1466    pub gain_info: AudioGainInfo,
1467}
1468
1469impl fidl::Persistable for AudioDeviceEnumeratorOnDeviceGainChangedRequest {}
1470
1471#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1472#[repr(C)]
1473pub struct AudioDeviceEnumeratorOnDeviceRemovedRequest {
1474    pub device_token: u64,
1475}
1476
1477impl fidl::Persistable for AudioDeviceEnumeratorOnDeviceRemovedRequest {}
1478
1479#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1480pub struct AudioDeviceEnumeratorSetDeviceGainRequest {
1481    pub device_token: u64,
1482    pub gain_info: AudioGainInfo,
1483    pub valid_flags: AudioGainValidFlags,
1484}
1485
1486impl fidl::Persistable for AudioDeviceEnumeratorSetDeviceGainRequest {}
1487
1488#[derive(Clone, Debug, PartialEq, PartialOrd)]
1489pub struct AudioDeviceInfo {
1490    pub name: String,
1491    pub unique_id: String,
1492    pub token_id: u64,
1493    pub is_input: bool,
1494    pub gain_info: AudioGainInfo,
1495    pub is_default: bool,
1496}
1497
1498impl fidl::Persistable for AudioDeviceInfo {}
1499
1500#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1501pub struct AudioGainInfo {
1502    pub gain_db: f32,
1503    pub flags: AudioGainInfoFlags,
1504}
1505
1506impl fidl::Persistable for AudioGainInfo {}
1507
1508#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1509pub struct AudioRendererEnableMinLeadTimeEventsRequest {
1510    pub enabled: bool,
1511}
1512
1513impl fidl::Persistable for AudioRendererEnableMinLeadTimeEventsRequest {}
1514
1515#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1516#[repr(C)]
1517pub struct AudioRendererGetMinLeadTimeResponse {
1518    pub min_lead_time_nsec: i64,
1519}
1520
1521impl fidl::Persistable for AudioRendererGetMinLeadTimeResponse {}
1522
1523#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1524#[repr(C)]
1525pub struct AudioRendererOnMinLeadTimeChangedRequest {
1526    pub min_lead_time_nsec: i64,
1527}
1528
1529impl fidl::Persistable for AudioRendererOnMinLeadTimeChangedRequest {}
1530
1531#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1532#[repr(C)]
1533pub struct AudioRendererPauseResponse {
1534    pub reference_time: i64,
1535    pub media_time: i64,
1536}
1537
1538impl fidl::Persistable for AudioRendererPauseResponse {}
1539
1540#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1541#[repr(C)]
1542pub struct AudioRendererPlayNoReplyRequest {
1543    pub reference_time: i64,
1544    pub media_time: i64,
1545}
1546
1547impl fidl::Persistable for AudioRendererPlayNoReplyRequest {}
1548
1549#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1550#[repr(C)]
1551pub struct AudioRendererPlayRequest {
1552    pub reference_time: i64,
1553    pub media_time: i64,
1554}
1555
1556impl fidl::Persistable for AudioRendererPlayRequest {}
1557
1558#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1559#[repr(C)]
1560pub struct AudioRendererPlayResponse {
1561    pub reference_time: i64,
1562    pub media_time: i64,
1563}
1564
1565impl fidl::Persistable for AudioRendererPlayResponse {}
1566
1567#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1568pub struct AudioRendererSetPcmStreamTypeRequest {
1569    pub type_: AudioStreamType,
1570}
1571
1572impl fidl::Persistable for AudioRendererSetPcmStreamTypeRequest {}
1573
1574#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1575pub struct AudioRendererSetPtsContinuityThresholdRequest {
1576    pub threshold_seconds: f32,
1577}
1578
1579impl fidl::Persistable for AudioRendererSetPtsContinuityThresholdRequest {}
1580
1581#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1582#[repr(C)]
1583pub struct AudioRendererSetPtsUnitsRequest {
1584    pub tick_per_second_numerator: u32,
1585    pub tick_per_second_denominator: u32,
1586}
1587
1588impl fidl::Persistable for AudioRendererSetPtsUnitsRequest {}
1589
1590#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1591pub struct AudioRendererSetUsage2Request {
1592    pub usage2: AudioRenderUsage2,
1593}
1594
1595impl fidl::Persistable for AudioRendererSetUsage2Request {}
1596
1597#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1598pub struct AudioRendererSetUsageRequest {
1599    pub usage: AudioRenderUsage,
1600}
1601
1602impl fidl::Persistable for AudioRendererSetUsageRequest {}
1603
1604/// Describes the type of an audio elementary stream.
1605#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1606pub struct AudioStreamType {
1607    pub sample_format: AudioSampleFormat,
1608    pub channels: u32,
1609    pub frames_per_second: u32,
1610}
1611
1612impl fidl::Persistable for AudioStreamType {}
1613
1614/// Describes the compression applied to a stream. This type can be used in conjunction with
1615/// `AudioStreamType` or `VideoStreamType` to represent a medium-specific compressed type.
1616#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1617pub struct Compression {
1618    /// The type of compression applied to the stream. This is generally one of the *_ENCODING_*
1619    /// values, though `AUDIO_ENCODING_LPCM` and `VIDEO_ENCODING_UNCOMPRESSED` must not be used,
1620    /// because those encodings are regarded as uncompressed.
1621    pub type_: String,
1622    /// Type-specific, opaque 'out-of-band' parameters describing the compression of the stream.
1623    pub parameters: Option<Vec<u8>>,
1624}
1625
1626impl fidl::Persistable for Compression {}
1627
1628/// EncryptionPattern
1629///
1630/// Pattern encryption utilizes a pattern of encrypted and clear 16 byte blocks
1631/// over the protected range of a subsample (the encrypted_bytes of a
1632/// `SubsampleEntry`). This structure specifies the number of encrypted data
1633/// blocks followed by the number of clear data blocks.
1634#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1635#[repr(C)]
1636pub struct EncryptionPattern {
1637    pub clear_blocks: u32,
1638    pub encrypted_blocks: u32,
1639}
1640
1641impl fidl::Persistable for EncryptionPattern {}
1642
1643#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1644pub struct Metadata {
1645    pub properties: Vec<Property>,
1646}
1647
1648impl fidl::Persistable for Metadata {}
1649
1650/// Parameter
1651///
1652/// Generic parameter.
1653///
1654/// We want to minimize use of this generic "Parameter" structure by natively
1655/// defining as many stream-specific parameter semantics as we can.
1656#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1657pub struct Parameter {
1658    pub scope: String,
1659    pub name: String,
1660    pub value: Value,
1661}
1662
1663impl fidl::Persistable for Parameter {}
1664
1665/// PcmFormat
1666///
1667/// PCM audio format details.
1668#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1669pub struct PcmFormat {
1670    pub pcm_mode: AudioPcmMode,
1671    pub bits_per_sample: u32,
1672    pub frames_per_second: u32,
1673    pub channel_map: Vec<AudioChannelId>,
1674}
1675
1676impl fidl::Persistable for PcmFormat {}
1677
1678#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1679#[repr(C)]
1680pub struct ProfileProviderRegisterHandlerWithCapacityResponse {
1681    pub period: i64,
1682    pub capacity: i64,
1683}
1684
1685impl fidl::Persistable for ProfileProviderRegisterHandlerWithCapacityResponse {}
1686
1687#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1688pub struct Property {
1689    pub label: String,
1690    pub value: String,
1691}
1692
1693impl fidl::Persistable for Property {}
1694
1695/// Settings for an SBC Encoder.
1696///
1697/// SBC Encoders take signed little endian 16 bit linear PCM samples and
1698/// return encoded SBC frames. SBC encoder PCM data in batches of
1699/// `sub_bands * block_count` PCM frames. This encoder will accept PCM data on
1700/// arbitrary frame boundaries, but the output flushed when EOS is queued may be
1701/// zero-padded to make a full batch for encoding.
1702#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1703pub struct SbcEncoderSettings {
1704    pub sub_bands: SbcSubBands,
1705    pub allocation: SbcAllocation,
1706    pub block_count: SbcBlockCount,
1707    pub channel_mode: SbcChannelMode,
1708    /// SBC bit pool value.
1709    pub bit_pool: u64,
1710}
1711
1712impl fidl::Persistable for SbcEncoderSettings {}
1713
1714#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1715#[repr(C)]
1716pub struct StreamBufferSetRemovePayloadBufferRequest {
1717    pub id: u32,
1718}
1719
1720impl fidl::Persistable for StreamBufferSetRemovePayloadBufferRequest {}
1721
1722/// Describes a packet consumed by `StreamSink` or produced by `StreamSource`.
1723#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1724#[repr(C)]
1725pub struct StreamPacket {
1726    /// Time at which the packet is to be presented, according to the
1727    /// presentation clock.
1728    pub pts: i64,
1729    /// ID of the payload buffer used for this packet.
1730    ///
1731    /// When this struct is used with `StreamBufferSet`, this field is the ID of
1732    /// a payload buffer provided via `StreamBufferSet.AddPayloadBuffer`. In
1733    /// that case, this value must identify a payload buffer in the current set.
1734    /// Other interfaces may define different semantics for this field.
1735    pub payload_buffer_id: u32,
1736    /// Offset of the packet payload in the payload buffer.
1737    ///
1738    /// This value plus the `payload_size` value must be less than or equal to
1739    /// the size of the referenced payload buffer.
1740    pub payload_offset: u64,
1741    /// Size in bytes of the payload.
1742    ///
1743    /// This value plus the `payload_offest` value must be less than or equal to
1744    /// the size of the referenced payload buffer.
1745    pub payload_size: u64,
1746    /// An bitwise-or'ed set of flags (see constants below) describing
1747    /// properties of this packet.
1748    pub flags: u32,
1749    /// The buffer configuration associated with this packet. The semantics of
1750    /// this field depend on the interface with which this struct is used.
1751    /// In many contexts, this field is not used. This field is intended for
1752    /// situations in which buffer configurations (i.e. sets of payload buffers)
1753    /// are explicitly identified. In such cases, the `payload_buffer_id` refers
1754    /// to a payload buffer in the buffer configuration identified by this
1755    /// field.
1756    pub buffer_config: u64,
1757    /// The stream segment associated with this packet. The semantics of this
1758    /// field depend on the interface with which this struct is used. In many
1759    /// contexts, this field is not used. This field is intended to distinguish
1760    /// contiguous segments of the stream where stream properties (e.g.
1761    /// encoding) may differ from segment to segment.
1762    pub stream_segment_id: u64,
1763}
1764
1765impl fidl::Persistable for StreamPacket {}
1766
1767#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1768pub struct StreamProcessorCloseCurrentStreamRequest {
1769    pub stream_lifetime_ordinal: u64,
1770    pub release_input_buffers: bool,
1771    pub release_output_buffers: bool,
1772}
1773
1774impl fidl::Persistable for StreamProcessorCloseCurrentStreamRequest {}
1775
1776#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1777#[repr(C)]
1778pub struct StreamProcessorCompleteOutputBufferPartialSettingsRequest {
1779    pub buffer_lifetime_ordinal: u64,
1780}
1781
1782impl fidl::Persistable for StreamProcessorCompleteOutputBufferPartialSettingsRequest {}
1783
1784#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1785#[repr(C)]
1786pub struct StreamProcessorFlushEndOfStreamAndCloseStreamRequest {
1787    pub stream_lifetime_ordinal: u64,
1788}
1789
1790impl fidl::Persistable for StreamProcessorFlushEndOfStreamAndCloseStreamRequest {}
1791
1792#[derive(Clone, Debug, PartialEq)]
1793pub struct StreamProcessorOnFreeInputPacketRequest {
1794    pub free_input_packet: PacketHeader,
1795}
1796
1797impl fidl::Persistable for StreamProcessorOnFreeInputPacketRequest {}
1798
1799#[derive(Clone, Debug, PartialEq)]
1800pub struct StreamProcessorOnInputConstraintsRequest {
1801    pub input_constraints: StreamBufferConstraints,
1802}
1803
1804impl fidl::Persistable for StreamProcessorOnInputConstraintsRequest {}
1805
1806#[derive(Clone, Debug, PartialEq)]
1807pub struct StreamProcessorOnOutputConstraintsRequest {
1808    pub output_config: StreamOutputConstraints,
1809}
1810
1811impl fidl::Persistable for StreamProcessorOnOutputConstraintsRequest {}
1812
1813#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1814pub struct StreamProcessorOnOutputEndOfStreamRequest {
1815    pub stream_lifetime_ordinal: u64,
1816    pub error_detected_before: bool,
1817}
1818
1819impl fidl::Persistable for StreamProcessorOnOutputEndOfStreamRequest {}
1820
1821#[derive(Clone, Debug, PartialEq)]
1822pub struct StreamProcessorOnOutputFormatRequest {
1823    pub output_format: StreamOutputFormat,
1824}
1825
1826impl fidl::Persistable for StreamProcessorOnOutputFormatRequest {}
1827
1828#[derive(Clone, Debug, PartialEq)]
1829pub struct StreamProcessorOnOutputPacketRequest {
1830    pub output_packet: Packet,
1831    pub error_detected_before: bool,
1832    pub error_detected_during: bool,
1833}
1834
1835impl fidl::Persistable for StreamProcessorOnOutputPacketRequest {}
1836
1837#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1838pub struct StreamProcessorOnStreamFailedRequest {
1839    pub stream_lifetime_ordinal: u64,
1840    pub error: StreamError,
1841}
1842
1843impl fidl::Persistable for StreamProcessorOnStreamFailedRequest {}
1844
1845#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1846#[repr(C)]
1847pub struct StreamProcessorQueueInputEndOfStreamRequest {
1848    pub stream_lifetime_ordinal: u64,
1849}
1850
1851impl fidl::Persistable for StreamProcessorQueueInputEndOfStreamRequest {}
1852
1853#[derive(Clone, Debug, PartialEq)]
1854pub struct StreamProcessorQueueInputFormatDetailsRequest {
1855    pub stream_lifetime_ordinal: u64,
1856    pub format_details: FormatDetails,
1857}
1858
1859impl fidl::Persistable for StreamProcessorQueueInputFormatDetailsRequest {}
1860
1861#[derive(Clone, Debug, PartialEq)]
1862pub struct StreamProcessorQueueInputPacketRequest {
1863    pub packet: Packet,
1864}
1865
1866impl fidl::Persistable for StreamProcessorQueueInputPacketRequest {}
1867
1868#[derive(Clone, Debug, PartialEq)]
1869pub struct StreamProcessorRecycleOutputPacketRequest {
1870    pub available_output_packet: PacketHeader,
1871}
1872
1873impl fidl::Persistable for StreamProcessorRecycleOutputPacketRequest {}
1874
1875#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1876#[repr(C)]
1877pub struct StreamSinkSendPacketNoReplyRequest {
1878    pub packet: StreamPacket,
1879}
1880
1881impl fidl::Persistable for StreamSinkSendPacketNoReplyRequest {}
1882
1883#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1884#[repr(C)]
1885pub struct StreamSinkSendPacketRequest {
1886    pub packet: StreamPacket,
1887}
1888
1889impl fidl::Persistable for StreamSinkSendPacketRequest {}
1890
1891#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1892#[repr(C)]
1893pub struct StreamSourceOnPacketProducedRequest {
1894    pub packet: StreamPacket,
1895}
1896
1897impl fidl::Persistable for StreamSourceOnPacketProducedRequest {}
1898
1899#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1900#[repr(C)]
1901pub struct StreamSourceReleasePacketRequest {
1902    pub packet: StreamPacket,
1903}
1904
1905impl fidl::Persistable for StreamSourceReleasePacketRequest {}
1906
1907/// Describes the type of an elementary stream.
1908#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1909pub struct StreamType {
1910    /// Medium-specific type information.
1911    pub medium_specific: MediumSpecificStreamType,
1912    /// Encoding (see constants below). This value is represented as a string
1913    /// so that new encodings can be introduced without modifying this file.
1914    pub encoding: String,
1915    /// Encoding-specific parameters, sometimes referred to as 'out-of-band
1916    /// data'. Typically, this data is associated with a compressed stream and
1917    /// provides parameters required to decompress the stream. This data is
1918    /// generally opaque to all parties except the producer and consumer of the
1919    /// stream.
1920    pub encoding_parameters: Option<Vec<u8>>,
1921}
1922
1923impl fidl::Persistable for StreamType {}
1924
1925/// Describes the type of a subpicture elementary stream.
1926#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1927pub struct SubpictureStreamType;
1928
1929impl fidl::Persistable for SubpictureStreamType {}
1930
1931/// SubsampleEntry
1932///
1933/// A subsample is a byte range within a sample consisting of a clear byte range
1934/// followed by an encrypted byte range. This structure specifies the size of
1935/// each range in the subsample.
1936#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1937#[repr(C)]
1938pub struct SubsampleEntry {
1939    pub clear_bytes: u32,
1940    pub encrypted_bytes: u32,
1941}
1942
1943impl fidl::Persistable for SubsampleEntry {}
1944
1945/// Describes the type of a text elementary stream.
1946#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1947pub struct TextStreamType;
1948
1949impl fidl::Persistable for TextStreamType {}
1950
1951/// A TimelineFunction represents a relationship between a subject timeline and a
1952/// reference timeline with a linear relation.
1953///
1954/// For example, consider a common use case in which reference time is the
1955/// monotonic clock of a system and subject time is intended presentation time
1956/// for some media such as a video.
1957///
1958/// `reference_time` is the value of the monotonic clock at the beginning of
1959/// playback. `subject_time` is 0 assuming playback starts at the beginning of
1960/// the media. We then choose a `reference_delta` and `subject_delta` so that
1961/// `subject_delta` / `reference_delta` represents the desired playback rate,
1962/// e.g. 0/1 for paused and 1/1 for normal playback.
1963///
1964/// ## Formulas
1965///
1966/// With a function we can determine the subject timeline value `s` in terms of
1967/// reference timeline value `r` with this formula (where `reference_delta` > 0):
1968///
1969///   s = (r - reference_time) * (subject_delta / reference_delta) + subject_time
1970///
1971/// And similarly we can find the reference timeline value `r` in terms of
1972/// subject timeline value `s` with this formula (where `subject_delta` > 0):
1973///
1974///   r = (s - subject_time) * (reference_delta / subject_delta) + referenc_time
1975///
1976/// ## Choosing time values
1977///
1978/// Time values can be arbitrary and our linear relation will of course be the
1979/// same, but we can use them to represent the bounds of pieces in a piecewise
1980/// linear relation.
1981///
1982/// For example, if a user performs skip-chapter, we might want to describe
1983/// this with a TimelineFunction whose `subject_time` is the time to skip to,
1984/// `reference_time` is now plus some epsilon, and delta ratio is 1/1 for normal
1985/// playback rate.
1986#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1987#[repr(C)]
1988pub struct TimelineFunction {
1989    /// A value from the subject timeline that correlates to reference_time.
1990    pub subject_time: i64,
1991    /// A value from the reference timeline that correlates to subject_time.
1992    pub reference_time: i64,
1993    /// The change in the subject timeline corresponding to reference_delta.
1994    pub subject_delta: u32,
1995    /// The change in the reference timeline corresponding to subject_delta.
1996    /// Cannot be zero.
1997    pub reference_delta: u32,
1998}
1999
2000impl fidl::Persistable for TimelineFunction {}
2001
2002#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
2003pub struct UsageGainListenerOnGainMuteChangedRequest {
2004    pub muted: bool,
2005    pub gain_dbfs: f32,
2006}
2007
2008impl fidl::Persistable for UsageGainListenerOnGainMuteChangedRequest {}
2009
2010#[derive(Clone, Debug, PartialEq)]
2011pub struct UsageWatcher2OnStateChangedRequest {
2012    pub usage: Usage2,
2013    pub state: UsageState,
2014}
2015
2016impl fidl::Persistable for UsageWatcher2OnStateChangedRequest {}
2017
2018#[derive(Clone, Debug, PartialEq)]
2019pub struct UsageWatcherOnStateChangedRequest {
2020    pub usage: Usage,
2021    pub state: UsageState,
2022}
2023
2024impl fidl::Persistable for UsageWatcherOnStateChangedRequest {}
2025
2026/// Describes the type of a video elementary stream.
2027#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2028pub struct VideoStreamType {
2029    pub pixel_format: fidl_fuchsia_images__common::PixelFormat,
2030    pub color_space: ColorSpace,
2031    /// Dimensions of the video frames as displayed in pixels.
2032    pub width: u32,
2033    pub height: u32,
2034    /// Dimensions of the video frames as encoded in pixels. These values must
2035    /// be equal to or greater than the respective width/height values.
2036    pub coded_width: u32,
2037    pub coded_height: u32,
2038    /// The aspect ratio of a single pixel as frames are intended to be
2039    /// displayed.
2040    pub pixel_aspect_ratio_width: u32,
2041    pub pixel_aspect_ratio_height: u32,
2042    /// The number of bytes per 'coded' row in the primary video plane.
2043    pub stride: u32,
2044}
2045
2046impl fidl::Persistable for VideoStreamType {}
2047
2048/// VideoUncompressedFormat
2049///
2050/// Uncompressed video format details.
2051#[derive(Clone, Debug, PartialEq)]
2052pub struct VideoUncompressedFormat {
2053    pub image_format: fidl_fuchsia_sysmem__common::ImageFormat2,
2054    pub fourcc: u32,
2055    pub primary_width_pixels: u32,
2056    pub primary_height_pixels: u32,
2057    pub secondary_width_pixels: u32,
2058    pub secondary_height_pixels: u32,
2059    pub planar: bool,
2060    pub swizzled: bool,
2061    pub primary_line_stride_bytes: u32,
2062    pub secondary_line_stride_bytes: u32,
2063    pub primary_start_offset: u32,
2064    pub secondary_start_offset: u32,
2065    pub tertiary_start_offset: u32,
2066    pub primary_pixel_stride: u32,
2067    pub secondary_pixel_stride: u32,
2068    pub primary_display_width_pixels: u32,
2069    pub primary_display_height_pixels: u32,
2070    pub has_pixel_aspect_ratio: bool,
2071    pub pixel_aspect_ratio_width: u32,
2072    pub pixel_aspect_ratio_height: u32,
2073}
2074
2075impl fidl::Persistable for VideoUncompressedFormat {}
2076
2077#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2078pub struct Void;
2079
2080impl fidl::Persistable for Void {}
2081
2082/// AudioCompressedFormatCvsd contains no fields for now since we will be
2083/// using the parameter values recommended by Bluetooth Core Spec v5.3
2084/// section 9.2.
2085#[derive(Clone, Debug, Default, PartialEq)]
2086pub struct AudioCompressedFormatCvsd {
2087    #[doc(hidden)]
2088    pub __source_breaking: fidl::marker::SourceBreaking,
2089}
2090
2091impl fidl::Persistable for AudioCompressedFormatCvsd {}
2092
2093/// AudioCompressedFormatLc3 contains no fields. The required parameters
2094/// for setting up the decoder would be embedded as Codec_Specific_Configuration
2095/// (Assigned Numbers section 6.12.5) in `FormatDetails.oob_bytes`.
2096#[derive(Clone, Debug, Default, PartialEq)]
2097pub struct AudioCompressedFormatLc3 {
2098    #[doc(hidden)]
2099    pub __source_breaking: fidl::marker::SourceBreaking,
2100}
2101
2102impl fidl::Persistable for AudioCompressedFormatLc3 {}
2103
2104/// Represents the status of the consumer. In the initial status, `error` and
2105/// `presentation_timeline` are absent. The lead time fields are always present.
2106#[derive(Clone, Debug, Default, PartialEq)]
2107pub struct AudioConsumerStatus {
2108    /// If present, indicates an error condition currently in effect. Absent if no error.
2109    pub error: Option<AudioConsumerError>,
2110    /// If present, indicates the current relationship between the presentation timeline
2111    /// and local monotonic clock, both in nanosecond units. If not present,
2112    /// indicates there is no relationship. Absent initially.
2113    ///
2114    /// 'Presentation timeline' refers to the `pts` (presentation timestamp) values on the packets.
2115    /// This timeline function can be used to determine the local monotonic clock time that a
2116    /// packet will be presented based on that packet's `pts` value.
2117    pub presentation_timeline: Option<TimelineFunction>,
2118    /// Indicates the minimum lead time in nanoseconds supported by this
2119    /// `AudioConsumer`.  Or in other words, how small of a gap between the
2120    /// `media_time` provided to `AudioConsumer.Start` and the pts on the first
2121    /// packet can be. Values outside this range will be clipped.
2122    pub min_lead_time: Option<u64>,
2123    /// Indicates the maximum lead time in nanoseconds supported by this
2124    /// `AudioConsumer`.  Or in other words, how large of a gap between the
2125    /// `media_time` provided to `AudioConsumer.Start` and the pts on the first
2126    /// packet can be. Values outside this range will be clipped.
2127    pub max_lead_time: Option<u64>,
2128    #[doc(hidden)]
2129    pub __source_breaking: fidl::marker::SourceBreaking,
2130}
2131
2132impl fidl::Persistable for AudioConsumerStatus {}
2133
2134/// Settings for CVSD Encoders. It contains no fields for now since we will be
2135/// using the parameter values recommended by Bluetooth Core Spec v5.3
2136/// section 9.2.
2137#[derive(Clone, Debug, Default, PartialEq)]
2138pub struct CvsdEncoderSettings {
2139    #[doc(hidden)]
2140    pub __source_breaking: fidl::marker::SourceBreaking,
2141}
2142
2143impl fidl::Persistable for CvsdEncoderSettings {}
2144
2145/// DecryptedFormat
2146///
2147/// This describes the format of the decrypted content. It is required to be
2148/// sent by the StreamProcessor server prior to the delivery of output packets.
2149/// Currently, there is no additional format details for decrypted output.
2150#[derive(Clone, Debug, Default, PartialEq)]
2151pub struct DecryptedFormat {
2152    pub ignore_this_field: Option<bool>,
2153    #[doc(hidden)]
2154    pub __source_breaking: fidl::marker::SourceBreaking,
2155}
2156
2157impl fidl::Persistable for DecryptedFormat {}
2158
2159/// EncryptedFormat
2160///
2161/// The stream format details payload of a decrypting stream processor. This is
2162/// a sparsely populated table to specify parameters necessary for decryption
2163/// other than the data stream. It is only necessary to update fields if they
2164/// changed, but not an error if the same value is repeated.
2165#[derive(Clone, Debug, Default, PartialEq)]
2166pub struct EncryptedFormat {
2167    /// `init_vector` is used in combination with a key and a block of content
2168    /// to create the first cipher block in a chain and derive subsequent cipher
2169    /// blocks in a cipher block chain.
2170    /// Usage:
2171    ///  - It is required to be set prior to the delivery of input packets to a
2172    ///    decryptor.
2173    ///  - This may be changed multiple times during a data stream.
2174    pub init_vector: Option<Vec<u8>>,
2175    /// `subsamples` is used to identify the clear and encrypted portions of a
2176    /// subsample.
2177    /// Usage:
2178    ///  - For whole sample encryption, this parameter should not be sent.
2179    ///  - This may be changed multiple times during a data stream.
2180    pub subsamples: Option<Vec<SubsampleEntry>>,
2181    /// `pattern` is used to identify the clear and encrypted blocks for pattern
2182    /// based encryption.
2183    /// Usage:
2184    /// - This is not allowed for CENC and CBC1 and required for CENS and CBCS.
2185    /// - If required, it must be set prior to the delivery of input packets to
2186    ///   a decryptor.
2187    /// - This may be changed multiple times during a data stream.
2188    pub pattern: Option<EncryptionPattern>,
2189    /// `scheme` specifies which encryption scheme to use, such as
2190    /// `fuchsia.media.ENCRYPTION_SCHEME_CENC`.
2191    /// Usage:
2192    ///  - It is required to be set prior to delivery of input packets.
2193    ///  - Changing the scheme mid-stream is only permitted in some scenarios.
2194    ///    Once an encrypted scheme is selected for a stream, the scheme may
2195    ///    only be set to `fuchsia.media.ENCRYPTION_SCHEME_UNENCRYPTED` or that
2196    ///    same initial encrypted scheme. The scheme may be set to
2197    ///    `fuchsia.media.ENCRYPTION_SCHEME_UNENCRYPTED` at any point.
2198    pub scheme: Option<String>,
2199    /// `key_id` identifies the key that should be used for decrypting
2200    /// subsequent data.
2201    /// Usage:
2202    ///  - It is required to be set prior to delivery of input packets to a
2203    ///    decryptor.
2204    ///  - This may be changed multiple times during a data stream.
2205    pub key_id: Option<Vec<u8>>,
2206    #[doc(hidden)]
2207    pub __source_breaking: fidl::marker::SourceBreaking,
2208}
2209
2210impl fidl::Persistable for EncryptedFormat {}
2211
2212/// FormatDetails
2213///
2214/// This describes/details the format on input or output of a StreamProcessor
2215/// (separate instances for input vs. output).
2216#[derive(Clone, Debug, Default, PartialEq)]
2217pub struct FormatDetails {
2218    pub format_details_version_ordinal: Option<u64>,
2219    pub mime_type: Option<String>,
2220    pub oob_bytes: Option<Vec<u8>>,
2221    pub domain: Option<DomainFormat>,
2222    pub pass_through_parameters: Option<Vec<Parameter>>,
2223    /// Instructs an encoder on how to encode raw data.
2224    ///
2225    /// Decoders may ignore this field but are entitled to rejected requests with
2226    /// this field set because it doesn't make sense.
2227    pub encoder_settings: Option<EncoderSettings>,
2228    /// The number of ticks of the timebase of input packet timestamp_ish values
2229    /// per second.
2230    ///
2231    /// The timebase is only used used for optional extrapolation of timestamp_ish
2232    /// values when an input timestamp which applies to byte 0 of the valid portion
2233    /// of the input packet does not correspond directly to byte 0 of the valid
2234    /// portion of any output packet.
2235    ///
2236    /// Leave unset if timestamp extrapolation is not needed, either due to lack of
2237    /// timestamps on input, or due to input being provided in increments of the
2238    /// encoder's input chunk size (based on the encoder settings and calculated
2239    /// independently by the client).  Set if timestamp extrapolation is known to be
2240    /// needed or known to be acceptable to the client.
2241    pub timebase: Option<u64>,
2242    /// The codec profile for the given encoder or decoder.
2243    ///
2244    /// For encoders: This value is completely optional. A client may want to specify the codec
2245    /// profile used for protocol compatibility reasons (i.e. WebRTC). However if the value is not
2246    /// set then the the encoder is free to choose any supported codec profile.
2247    ///
2248    /// For decoders: This value is optional but providing it is best practice (at least of
2249    /// unencrypted streams). Container formats include the encoded profile and this should be
2250    /// provided to the decoder. Certain formats like VP9 and AV1 include the encoded profile in
2251    /// their elementary bitstream so it is possible for those decoders to figure out the profile
2252    /// the stream is encoded in. Regardless, clients should provide the encoded profile if
2253    /// possible.
2254    pub profile: Option<CodecProfile>,
2255    #[doc(hidden)]
2256    pub __source_breaking: fidl::marker::SourceBreaking,
2257}
2258
2259impl fidl::Persistable for FormatDetails {}
2260
2261/// Settings for H264 Encoders.
2262#[derive(Clone, Debug, Default, PartialEq)]
2263pub struct H264EncoderSettings {
2264    /// Target bits per second for encoded stream.
2265    /// If omitted, interpreted as 200,000.
2266    pub bit_rate: Option<u32>,
2267    /// Target frames per second for encoded stream.
2268    /// If omitted, interpreted as 30.
2269    pub frame_rate: Option<u32>,
2270    /// Number of pictures per keyframe.  Setting to 0 will disable key frame
2271    /// encoding, except for if force_key_frame is set to true.
2272    /// If omitted, interpreted as 8.
2273    pub gop_size: Option<u32>,
2274    /// Whether to enable frame rate adjustments in order to meet target bitrate.
2275    /// If omitted, interpreted as false.
2276    pub variable_frame_rate: Option<bool>,
2277    /// Lowest frame rate allowed if `variable_frame_rate` is enabled. If
2278    /// omitted, interpreted as 10.
2279    pub min_frame_rate: Option<u32>,
2280    /// If true, next frame encoded will be a key frame. If omitted, interpreted
2281    /// as false.
2282    pub force_key_frame: Option<bool>,
2283    /// Allow customization of quantization parameters for encoding. Each frame
2284    /// submitted after setting this will use the new values. If omitted, no
2285    /// change from encoder defaults is made.
2286    pub quantization_params: Option<H264QuantizationParameters>,
2287    #[doc(hidden)]
2288    pub __source_breaking: fidl::marker::SourceBreaking,
2289}
2290
2291impl fidl::Persistable for H264EncoderSettings {}
2292
2293/// Customization of h264 encoder parameters for macroblock quantization. The values
2294/// can range from 0 to 51, with lower numbers indicating higher
2295/// quality/bitrate. While encoders should support these fields if feasible,
2296/// some encoders may ignore these fields. It's ok to not set this table, or
2297/// not set some of the fields in this table, as encoders can determine their
2298/// own defaults. If the targeted bitrate can't be achieved with the specified values,
2299/// then the user should expect the resulting encoded stream bitrate to differ from
2300/// the requested bitrate.
2301#[derive(Clone, Debug, Default, PartialEq)]
2302pub struct H264QuantizationParameters {
2303    /// Starting value for quantization of key frames.
2304    pub i_base: Option<u32>,
2305    /// Smallest allowed value for quantization of key frames.
2306    pub i_min: Option<u32>,
2307    /// Largest allowed value for quantization of key frames.
2308    pub i_max: Option<u32>,
2309    /// Starting value for quantization of predicted frames.
2310    pub p_base: Option<u32>,
2311    /// Smallest allowed value for quantization of predicted frames.
2312    pub p_min: Option<u32>,
2313    /// Largest allowed value for quantization of predicted frames.
2314    pub p_max: Option<u32>,
2315    #[doc(hidden)]
2316    pub __source_breaking: fidl::marker::SourceBreaking,
2317}
2318
2319impl fidl::Persistable for H264QuantizationParameters {}
2320
2321/// Settings for HEVC/H265 Encoders.
2322#[derive(Clone, Debug, Default, PartialEq)]
2323pub struct HevcEncoderSettings {
2324    /// Target bits per second for encoded stream. Defaults to 200,000 if
2325    /// omitted.
2326    pub bit_rate: Option<u32>,
2327    /// Target frames per second for encoded stream. Defaults to 30 if omitted.
2328    pub frame_rate: Option<u32>,
2329    /// Number of pictures per keyframe. Defaults to 8 if omitted.
2330    pub gop_size: Option<u32>,
2331    #[doc(hidden)]
2332    pub __source_breaking: fidl::marker::SourceBreaking,
2333}
2334
2335impl fidl::Persistable for HevcEncoderSettings {}
2336
2337/// Configuration for a capturer which will receive a stream from an
2338/// input device.
2339#[derive(Clone, Debug, Default, PartialEq)]
2340pub struct InputAudioCapturerConfiguration {
2341    pub usage: Option<AudioCaptureUsage>,
2342    pub usage2: Option<AudioCaptureUsage2>,
2343    #[doc(hidden)]
2344    pub __source_breaking: fidl::marker::SourceBreaking,
2345}
2346
2347impl fidl::Persistable for InputAudioCapturerConfiguration {}
2348
2349/// Settings for LC3 Encoders. Contains parameters stated in LC3 Specification v1.0.
2350/// Contains fields that are not represented by PcmFormat.
2351#[derive(Clone, Debug, Default, PartialEq)]
2352pub struct Lc3EncoderSettings {
2353    /// External byte count values to be used for the frame encoding of audio.
2354    /// According to the LC3 Specification v1.0, each audio channel could have different
2355    /// output byte size value, but for Fuchsia use case, we use the same `nbytes` value
2356    /// for all channels.
2357    pub nbytes: Option<u16>,
2358    /// Frame duration is used together with sampling frequency to determine the
2359    /// frame size.
2360    pub frame_duration: Option<Lc3FrameDuration>,
2361    #[doc(hidden)]
2362    pub __source_breaking: fidl::marker::SourceBreaking,
2363}
2364
2365impl fidl::Persistable for Lc3EncoderSettings {}
2366
2367/// Configuration for a capturer which will receive a loopback stream
2368/// a system output.
2369#[derive(Clone, Debug, Default, PartialEq)]
2370pub struct LoopbackAudioCapturerConfiguration {
2371    #[doc(hidden)]
2372    pub __source_breaking: fidl::marker::SourceBreaking,
2373}
2374
2375impl fidl::Persistable for LoopbackAudioCapturerConfiguration {}
2376
2377/// Settings for the mSBC encoder. There are no settings as the mSBC encoder uses the values
2378/// required by HFP Spec v1.8.
2379#[derive(Clone, Debug, Default, PartialEq)]
2380pub struct MSbcEncoderSettings {
2381    #[doc(hidden)]
2382    pub __source_breaking: fidl::marker::SourceBreaking,
2383}
2384
2385impl fidl::Persistable for MSbcEncoderSettings {}
2386
2387/// A Packet represents a chunk of input or output data to or from a stream
2388/// processor.
2389///
2390/// stream processor output:
2391///
2392/// While the Packet is outstanding with the client via OnOutputPacket(), the
2393/// stream processor will avoid modifying the referenced output data.  After the
2394/// client calls RecycleOutputPacket(packet_index), the stream processor is
2395/// notified that the client is again ok with the referenced data changing.
2396///
2397/// stream processor input:
2398///
2399/// The client initially has all packet_index(es) available to fill, and later
2400/// gets packet_index(s) that are again ready to fill via OnFreeInputPacket().
2401/// The client must not modify the referenced data in between QueueInputPacket()
2402/// and OnFreeInputPacket().
2403#[derive(Clone, Debug, Default, PartialEq)]
2404pub struct Packet {
2405    pub header: Option<PacketHeader>,
2406    /// Which buffer this packet refers to.  For single-buffer mode this will
2407    /// always be 0, but for multi-buffer mode, a given in-flight interval of a
2408    /// packet can refer to any buffer.  The packet has an associated buffer only
2409    /// while the packet is in-flight, not while the packet is free.
2410    ///
2411    /// The default value makes accidental inappropriate use of index 0 less
2412    /// likely (will tend to complain in an obvious way if not filled out
2413    /// instead of a non-obvious data corruption when decoding buffer 0
2414    /// repeatedly instead of the correct buffers).
2415    ///
2416    /// TODO(dustingreen): Try to make FIDL table defaults have meaning, and not
2417    /// complain about !has when accessing the field.  For now the default
2418    /// specified here does nothing.
2419    pub buffer_index: Option<u32>,
2420    /// The value 1 is the lowest permitted value after stream processor
2421    /// creation.  Values sent by the client must be odd.  Values must only
2422    /// increase.
2423    ///
2424    /// A stream_lifetime_ordinal represents the lifetime of a stream.  All
2425    /// messages that are specific to a stream have the stream_lifetime_ordinal
2426    /// value and the value is the same for all messages relating to a given
2427    /// stream.
2428    pub stream_lifetime_ordinal: Option<u64>,
2429    /// Which part of the relevant buffer is this packet using.  These are valid
2430    /// for input data that's in-flight to the stream processor, and are valid
2431    /// for output data from the stream processor.
2432    ///
2433    /// For compressed formats and uncompressed audio, the data in
2434    /// [start_offset, start_offset + valid_length_bytes) is the contiguously
2435    /// valid data referred to by this packet.
2436    ///
2437    /// For uncompressed video frames, FormatDetails is the primary means of
2438    /// determining which bytes are relevant.  The offsets in FormatDetails
2439    /// are relative to the start_offset here.  The valid_length_bytes must be
2440    /// large enough to include the full last line of pixel data, including the
2441    /// full line stride of the last line (not just the width in pixels of the
2442    /// last line).
2443    ///
2444    /// Despite these being filled out, some uncompressed video buffers are of
2445    /// types that are not readable by the CPU.  These fields being here don't
2446    /// imply there's any way for the CPU to read an uncompressed frame.
2447    pub start_offset: Option<u32>,
2448    /// This must be > 0.
2449    ///
2450    /// The semantics for valid data per packet vary depending on data type as
2451    /// follows.
2452    ///
2453    /// uncompressed video - A video frame can't be split across packets.  Each
2454    /// packet is one video frame.
2455    ///
2456    /// uncompressed audio - Regardless of float or int, linear or uLaw, or
2457    /// number of channels, a packet must contain an non-negative number of
2458    /// complete audio frames, where a single audio frame consists of data for
2459    /// all the channels for the same single point in time.  Any
2460    /// stream-processor-specific internal details re. lower rate sampling for
2461    /// LFE channel or the like should be hidden by the StreamProcessor server
2462    /// implementation.
2463    ///
2464    /// compressed data input - A packet must contain at least one byte of data.
2465    /// See also stream_input_bytes_min.  Splitting AUs at arbitrary byte
2466    /// boundaries is permitted, including at boundaries that are in AU headers.
2467    ///
2468    /// compressed data output - The stream processor is not required to fully
2469    /// fill each output packet's buffer.
2470    pub valid_length_bytes: Option<u32>,
2471    /// This value is not strictly speaking a timestamp.  It is an arbitrary
2472    /// unsigned 64-bit number that, under some circumstances, will be passed by
2473    /// a stream processor unmodified from an input packet to the
2474    /// exactly-corresponding output packet.
2475    ///
2476    /// For timestamp_ish values to be propagated from input to output the
2477    /// following conditions must be true:
2478    ///  * promise_separate_access_units_on_input must be true
2479    ///  * has_timestamp_ish must be true for a given input packet, to have that
2480    ///    timestamp_ish value (potentially) propagate through to an output
2481    ///  * the StreamProcessor instance itself decides (async) that the input
2482    ///    packet generates an output packet - if a given input never generates
2483    ///    an output packet then the timestamp_ish value on the input will never
2484    ///    show up on any output packet - depending on the characteristics of the
2485    ///    input and output formats, and whether a decoder is willing to join
2486    ///    mid-stream, etc this can be more or less likely to occur, but clients
2487    ///    should be written to accommodate timestamp_ish values that are fed on
2488    ///    input but never show up on output, at least to a reasonable degree
2489    ///    (not crashing, not treating as an error).
2490    pub timestamp_ish: Option<u64>,
2491    /// If promise_separate_access_units_on_input (TODO(dustingreen): or any
2492    /// similar mode for output) is true, this bool must be set appropriately
2493    /// depending on whether byte 0 _is_ or _is not_ the start of an access
2494    /// unit. The client is required to know, and required to set this boolean
2495    /// properly. The server is allowed to infer that when this boolean is
2496    /// false, byte 0 is the first byte of a continuation of a
2497    /// previously-started AU.  (The byte at start_offset is "byte 0".)
2498    ///
2499    /// If promise_separate_access_units_on_input is false, this boolean is
2500    /// ignored.
2501    pub start_access_unit: Option<bool>,
2502    /// A client is never required to set this boolean to true.
2503    ///
2504    /// If promise_separate_access_units_on_input is true, for input data, this
2505    /// boolean must be false if the last byte of this packet is not the last
2506    /// byte of an AU, and this boolean _may_ be true if the last byte of this
2507    /// packet is the last byte of an AU.  A client delivering one AU at a time
2508    /// that's interested in the lowest possible latency via the decoder should
2509    /// set this boolean to true when it can be set to true.
2510    ///
2511    /// If promise_separate_access_units_on_input is false, this boolean is
2512    /// ignored.
2513    pub known_end_access_unit: Option<bool>,
2514    /// Used for compressed video packets. If not present should be assumed to
2515    /// be unknown. If false, indicates the packet is not part of a key frame. If
2516    /// true, indicates the packet is part of a key frame.
2517    pub key_frame: Option<bool>,
2518    #[doc(hidden)]
2519    pub __source_breaking: fidl::marker::SourceBreaking,
2520}
2521
2522impl fidl::Persistable for Packet {}
2523
2524/// PacketHeader
2525///
2526/// When referring to a free packet, we use PacketHeader alone instead of
2527/// Packet, since while a packet is free it doesn't really have meaningful
2528/// offset or length etc.
2529///
2530/// A populated Packet also has a PacketHeader.
2531#[derive(Clone, Debug, Default, PartialEq)]
2532pub struct PacketHeader {
2533    /// This is which buffer configuration lifetime this header is referring to.
2534    ///
2535    /// A packet_index is only really meaningful with respect to a particular
2536    /// buffer_lifetime_ordinal.
2537    ///
2538    /// See StreamBufferPartialSettings.buffer_lifetime_ordinal.
2539    ///
2540    /// For QueueInputPacket(), a server receiving a buffer_lifetime_ordinal that
2541    /// isn't the current input buffer_lifetime_ordinal will close the channel.
2542    ///
2543    /// For OnFreeInputPacket() and RecycleOutputPacket(), the receiver (client
2544    /// or server) must ignore a message with stale buffer_lifetime_ordinal.
2545    pub buffer_lifetime_ordinal: Option<u64>,
2546    /// The overall set of packet_index values is densely packed from 0..count-1
2547    /// for input and output separately.  They can be queued in any order.
2548    ///
2549    /// Both the client and server should validate the packet_index against the
2550    /// known bound and disconnect if it's out of bounds.
2551    ///
2552    /// When running in single-buffer mode, the buffer index is always 0.
2553    ///
2554    /// The packet_index values don't imply anything about order of use of
2555    /// packets. The client should not expect the ordering to remain the same
2556    /// over time - the stream processor is free to hold on to an input or
2557    /// output packet for a while during which other packet_index values may be
2558    /// used multiple times.
2559    ///
2560    /// For a given properly-functioning StreamProcessor instance, packet_index
2561    /// values will be unique among concurrently-outstanding packets.  Servers
2562    /// should validate that a client isn't double-using a packet and clients
2563    /// should validate as necessary to avoid undefined or unexpected client
2564    /// behavior.
2565    pub packet_index: Option<u32>,
2566    #[doc(hidden)]
2567    pub __source_breaking: fidl::marker::SourceBreaking,
2568}
2569
2570impl fidl::Persistable for PacketHeader {}
2571
2572/// This struct conveys the buffer_constraints_version_ordinal.
2573///
2574/// Historically this table conveyed more fields than it currently does, but
2575/// those fields are all deprecated in favor of using sysmem instead.
2576///
2577/// There are separate instances of this struct for stream input and stream
2578/// output.
2579///
2580/// Notes about fields:
2581///
2582/// For uncompressed video, separate and complete frames in their
2583/// separate buffers (buffer-per-packet mode) are always a requirement.
2584#[derive(Clone, Debug, Default, PartialEq)]
2585pub struct StreamBufferConstraints {
2586    /// This is a version number the server sets on the constraints to allow the
2587    /// server to determine when the client has caught up with the latest
2588    /// constraints sent by the server.  The server won't emit output data until
2589    /// the client has configured output settings and buffers with a
2590    /// buffer_constraints_version_ordinal >= the latest
2591    /// buffer_constraints_version_ordinal that had
2592    /// buffer_constraints_action_required true.  See
2593    /// buffer_constraints_action_required comments for more.
2594    ///
2595    /// A buffer_constraints_version_ordinal of 0 is not permitted, to simplify
2596    /// initial state handling.  Other than 0, both odd and even version ordinals
2597    /// are allowed (in contrast to the stream_lifetime_ordinal, neither the
2598    /// client nor server ever has a reason to consider the latest version to be
2599    /// stale, so there would be no benefit to disallowing even values).
2600    pub buffer_constraints_version_ordinal: Option<u64>,
2601    pub default_settings: Option<StreamBufferSettings>,
2602    pub per_packet_buffer_bytes_min: Option<u32>,
2603    pub per_packet_buffer_bytes_recommended: Option<u32>,
2604    pub per_packet_buffer_bytes_max: Option<u32>,
2605    pub packet_count_for_server_min: Option<u32>,
2606    pub packet_count_for_server_recommended: Option<u32>,
2607    pub packet_count_for_server_recommended_max: Option<u32>,
2608    pub packet_count_for_server_max: Option<u32>,
2609    pub packet_count_for_client_min: Option<u32>,
2610    pub packet_count_for_client_max: Option<u32>,
2611    pub single_buffer_mode_allowed: Option<bool>,
2612    pub is_physically_contiguous_required: Option<bool>,
2613    #[doc(hidden)]
2614    pub __source_breaking: fidl::marker::SourceBreaking,
2615}
2616
2617impl fidl::Persistable for StreamBufferConstraints {}
2618
2619/// Deprecated.  Use SetStreamBufferPartialSettings() and
2620/// StreamBufferPartialSettings instead.
2621#[derive(Clone, Debug, Default, PartialEq)]
2622pub struct StreamBufferSettings {
2623    pub buffer_lifetime_ordinal: Option<u64>,
2624    pub buffer_constraints_version_ordinal: Option<u64>,
2625    pub packet_count_for_server: Option<u32>,
2626    pub packet_count_for_client: Option<u32>,
2627    pub per_packet_buffer_bytes: Option<u32>,
2628    pub single_buffer_mode: Option<bool>,
2629    #[doc(hidden)]
2630    pub __source_breaking: fidl::marker::SourceBreaking,
2631}
2632
2633impl fidl::Persistable for StreamBufferSettings {}
2634
2635/// The stream-processor-controlled output configuration, including both
2636/// StreamBufferConstraints for the output and FormatDetails for the output.
2637#[derive(Clone, Debug, Default, PartialEq)]
2638pub struct StreamOutputConstraints {
2639    /// A client which always immediately re-configures output buffers on
2640    /// receipt of OnOutputConstraints() with buffer_constraints_action_required
2641    /// true can safely ignore this field.
2642    ///
2643    /// A client is permitted to ignore an OnOutputConstraints() message even with
2644    /// buffer_constraints_action_required true if the client knows the server
2645    /// has already been told to discard the remainder of the stream with the
2646    /// same stream_lifetime_ordinal or if this stream_lifetime_ordinal field is
2647    /// set to 0.  The server is required to re-send needed output config via
2648    /// OnOutputConstraints() with new stream_lifetime_ordinal and
2649    /// buffer_constraints_action_required true, if the most recent completed
2650    /// server-side output config isn't what the server wants/needs yet for the
2651    /// new stream.
2652    pub stream_lifetime_ordinal: Option<u64>,
2653    /// When the buffer constraints are delivered, they indicate whether action
2654    /// is required.  A false value here permits delivery of constraints which
2655    /// are fresher without forcing a buffer reconfiguration.  If this is false,
2656    /// a client cannot assume that it's safe to immediately re-configure output
2657    /// buffers.  If this is true, the client can assume it's safe to
2658    /// immediately configure output buffers once.
2659    ///
2660    /// A client is permitted to ignore buffer constraint versions which have
2661    /// buffer_constraints_action_required false.  The server is not permitted
2662    /// to change buffer_constraints_action_required from false to true for the
2663    /// same buffer_constraints_version_ordinal.
2664    ///
2665    /// For each configuration, a client must use new buffers, never buffers
2666    /// that were previously used for anything else, and never buffers
2667    /// previously used for any other StreamProcessor purposes.  This rule
2668    /// exists for multiple good reasons, relevant to both mid-stream changes,
2669    /// and changes on stream boundaries. A client should just use new buffers
2670    /// each time.
2671    ///
2672    /// When this is true, the server has already de-refed as many low-level
2673    /// output buffers as the server can while still performing efficient
2674    /// transition to the new buffers and will de-ref the rest asap.  A Sync()
2675    /// is not necessary to achieve non-overlap of resource usage to the extent
2676    /// efficiently permitted by the formats involved.
2677    ///
2678    /// If buffer_constraints_action_required is true, the server _must_ not
2679    /// deliver more output data until after output buffers have been configured
2680    /// (or re-configured) by the client.
2681    pub buffer_constraints_action_required: Option<bool>,
2682    pub buffer_constraints: Option<StreamBufferConstraints>,
2683    #[doc(hidden)]
2684    pub __source_breaking: fidl::marker::SourceBreaking,
2685}
2686
2687impl fidl::Persistable for StreamOutputConstraints {}
2688
2689#[derive(Clone, Debug, Default, PartialEq)]
2690pub struct StreamOutputFormat {
2691    /// A client is permitted to ignore an OnOutputFormat() message even with
2692    /// buffer_constraints_action_required true if the client knows the server
2693    /// has already been told to discard the remainder of the stream with the
2694    /// same stream_lifetime_ordinal or if this stream_lifetime_ordinal field is
2695    /// set to 0.  The server is required to re-send needed output config via
2696    /// OnOutputConstraints() with new stream_lifetime_ordinal and
2697    /// buffer_constraints_action_required true, if the most recent completed
2698    /// server-side output config isn't what the server wants/needs yet for the
2699    /// new stream.
2700    ///
2701    /// The server is required to send an OnOutputFormat() before the first
2702    /// output packet of a stream.
2703    pub stream_lifetime_ordinal: Option<u64>,
2704    /// If format_details.format_details_version_ordinal changes, the client
2705    /// should inspect the new format details and determine if it must adjust to
2706    /// the new format. The server guarantees that if the format has changed, then
2707    /// format_details.format_details_version_ordinal will change, but a change
2708    /// to format_details.format_details_version_ordinal does not guarantee that
2709    /// the format details actually changed.  Servers are strongly encouraged to
2710    /// not change format_details.format_details_version_ordinal other than
2711    /// before the first output data of a stream unless there is a real
2712    /// mid-stream format change in the stream.  Unnecessary mid-stream format
2713    /// changes can cause simpler clients that have no need to handle mid-stream
2714    /// format changes to just close the channel.  Format changes before the
2715    /// first output data of a stream are not "mid-stream" in this context -
2716    /// those can be useful for stream format detection / setup reasons.
2717    ///
2718    /// Note that in case output buffers don't really need to be re-configured
2719    /// despite a format change, a server is encouraged, but not required, to
2720    /// set buffer_constraints_action_required false on the message that conveys
2721    /// the new format details.  Simpler servers may just treat the whole output
2722    /// situation as one big thing and demand output buffer reconfiguration on
2723    /// any change in the output situation.
2724    ///
2725    /// A client may or may not actually handle a new buffer_constraints with
2726    /// buffer_constraints_action_required false, but the client should always
2727    /// track the latest format_details.
2728    ///
2729    /// An updated format_details is ordered with respect to emitted output
2730    /// packets, and applies to all subsequent packets until the next
2731    /// format_details with larger version_ordinal.  A simple client that does
2732    /// not intend to handle mid-stream format changes should still keep track
2733    /// of the most recently received format_details until the first output
2734    /// packet arrives, then lock down the format details, handle those format
2735    /// details, and verify that any
2736    /// format_details.format_details_version_ordinal received from the server
2737    /// is the same as the locked-down format_details, until the client is done
2738    /// with the stream.  Even such a simple client must tolerate
2739    /// format_details.format_details_version_ordinal changing multiple times
2740    /// before the start of data output from a stream (any stream - the first
2741    /// stream or a subsequent stream).  This allows a stream processor to
2742    /// request that output buffers and output format be configured
2743    /// speculatively, and for the output config to be optionally adjusted by
2744    /// the server before the first data output from a stream after the server
2745    /// knows everything it needs to know to fully establish the initial output
2746    /// format details.  This simplifies stream processor server implementation,
2747    /// and allows a clever stream processor server to guess it's output config
2748    /// for lower latency before any input data, while still being able to fix
2749    /// the output config (including format details) if the guess turns out to
2750    /// be wrong.
2751    ///
2752    /// Whether the format_details.format_details_version_ordinal will actually
2753    /// change mid-stream is a per-stream-processor and per-stream detail that
2754    /// is not specified in comments here, and in most cases also depends on
2755    /// whether the format changes on the input to the stream processor.
2756    /// Probably it'll be fairly common for a client to use a format which
2757    /// technically supports mid-stream format change, but the client happens to
2758    /// know that none of the streams the client intends to process will ever
2759    /// have a mid-stream format change.
2760    pub format_details: Option<FormatDetails>,
2761    #[doc(hidden)]
2762    pub __source_breaking: fidl::marker::SourceBreaking,
2763}
2764
2765impl fidl::Persistable for StreamOutputFormat {}
2766
2767/// A state of audio usages in which a policy decision has been made to temporarily
2768/// lower the volume of all streams with this usage.
2769#[derive(Clone, Debug, Default, PartialEq)]
2770pub struct UsageStateDucked {
2771    #[doc(hidden)]
2772    pub __source_breaking: fidl::marker::SourceBreaking,
2773}
2774
2775impl fidl::Persistable for UsageStateDucked {}
2776
2777/// A state of audio usages in which a policy decision has been made to temporarily
2778/// mute the volume of all streams with this usage.
2779#[derive(Clone, Debug, Default, PartialEq)]
2780pub struct UsageStateMuted {
2781    #[doc(hidden)]
2782    pub __source_breaking: fidl::marker::SourceBreaking,
2783}
2784
2785impl fidl::Persistable for UsageStateMuted {}
2786
2787/// A state of audio usages in which no policy actions are taken on any streams with the usage.
2788#[derive(Clone, Debug, Default, PartialEq)]
2789pub struct UsageStateUnadjusted {
2790    #[doc(hidden)]
2791    pub __source_breaking: fidl::marker::SourceBreaking,
2792}
2793
2794impl fidl::Persistable for UsageStateUnadjusted {}
2795
2796#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2797pub enum AacBitRate {
2798    Constant(AacConstantBitRate),
2799    Variable(AacVariableBitRate),
2800}
2801
2802impl AacBitRate {
2803    #[inline]
2804    pub fn ordinal(&self) -> u64 {
2805        match *self {
2806            Self::Constant(_) => 1,
2807            Self::Variable(_) => 2,
2808        }
2809    }
2810}
2811
2812impl fidl::Persistable for AacBitRate {}
2813
2814#[derive(Clone, Debug)]
2815pub enum AacTransport {
2816    Raw(AacTransportRaw),
2817    Latm(AacTransportLatm),
2818    Adts(AacTransportAdts),
2819    #[doc(hidden)]
2820    __SourceBreaking {
2821        unknown_ordinal: u64,
2822    },
2823}
2824
2825/// Pattern that matches an unknown `AacTransport` member.
2826#[macro_export]
2827macro_rules! AacTransportUnknown {
2828    () => {
2829        _
2830    };
2831}
2832
2833// Custom PartialEq so that unknown variants are not equal to themselves.
2834impl PartialEq for AacTransport {
2835    fn eq(&self, other: &Self) -> bool {
2836        match (self, other) {
2837            (Self::Raw(x), Self::Raw(y)) => *x == *y,
2838            (Self::Latm(x), Self::Latm(y)) => *x == *y,
2839            (Self::Adts(x), Self::Adts(y)) => *x == *y,
2840            _ => false,
2841        }
2842    }
2843}
2844
2845impl AacTransport {
2846    #[inline]
2847    pub fn ordinal(&self) -> u64 {
2848        match *self {
2849            Self::Raw(_) => 1,
2850            Self::Latm(_) => 2,
2851            Self::Adts(_) => 3,
2852            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2853        }
2854    }
2855
2856    #[inline]
2857    pub fn unknown_variant_for_testing() -> Self {
2858        Self::__SourceBreaking { unknown_ordinal: 0 }
2859    }
2860
2861    #[inline]
2862    pub fn is_unknown(&self) -> bool {
2863        match self {
2864            Self::__SourceBreaking { .. } => true,
2865            _ => false,
2866        }
2867    }
2868}
2869
2870impl fidl::Persistable for AacTransport {}
2871
2872/// Configuration for an audio Capturer.
2873#[derive(Clone, Debug, PartialEq)]
2874pub enum AudioCapturerConfiguration {
2875    Loopback(LoopbackAudioCapturerConfiguration),
2876    Input(InputAudioCapturerConfiguration),
2877}
2878
2879impl AudioCapturerConfiguration {
2880    #[inline]
2881    pub fn ordinal(&self) -> u64 {
2882        match *self {
2883            Self::Loopback(_) => 1,
2884            Self::Input(_) => 2,
2885        }
2886    }
2887}
2888
2889impl fidl::Persistable for AudioCapturerConfiguration {}
2890
2891#[derive(Clone, Debug)]
2892pub enum AudioCompressedFormat {
2893    Aac(AudioCompressedFormatAac),
2894    Sbc(AudioCompressedFormatSbc),
2895    Cvsd(AudioCompressedFormatCvsd),
2896    Lc3(AudioCompressedFormatLc3),
2897    #[doc(hidden)]
2898    __SourceBreaking {
2899        unknown_ordinal: u64,
2900    },
2901}
2902
2903/// Pattern that matches an unknown `AudioCompressedFormat` member.
2904#[macro_export]
2905macro_rules! AudioCompressedFormatUnknown {
2906    () => {
2907        _
2908    };
2909}
2910
2911// Custom PartialEq so that unknown variants are not equal to themselves.
2912impl PartialEq for AudioCompressedFormat {
2913    fn eq(&self, other: &Self) -> bool {
2914        match (self, other) {
2915            (Self::Aac(x), Self::Aac(y)) => *x == *y,
2916            (Self::Sbc(x), Self::Sbc(y)) => *x == *y,
2917            (Self::Cvsd(x), Self::Cvsd(y)) => *x == *y,
2918            (Self::Lc3(x), Self::Lc3(y)) => *x == *y,
2919            _ => false,
2920        }
2921    }
2922}
2923
2924impl AudioCompressedFormat {
2925    #[inline]
2926    pub fn ordinal(&self) -> u64 {
2927        match *self {
2928            Self::Aac(_) => 1,
2929            Self::Sbc(_) => 2,
2930            Self::Cvsd(_) => 3,
2931            Self::Lc3(_) => 4,
2932            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2933        }
2934    }
2935
2936    #[inline]
2937    pub fn unknown_variant_for_testing() -> Self {
2938        Self::__SourceBreaking { unknown_ordinal: 0 }
2939    }
2940
2941    #[inline]
2942    pub fn is_unknown(&self) -> bool {
2943        match self {
2944            Self::__SourceBreaking { .. } => true,
2945            _ => false,
2946        }
2947    }
2948}
2949
2950impl fidl::Persistable for AudioCompressedFormat {}
2951
2952/// Represents a `AudioConsumer` error condition.
2953#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2954pub enum AudioConsumerError {
2955    PlaceHolder(Void),
2956}
2957
2958impl AudioConsumerError {
2959    #[inline]
2960    pub fn ordinal(&self) -> u64 {
2961        match *self {
2962            Self::PlaceHolder(_) => 1,
2963        }
2964    }
2965}
2966
2967impl fidl::Persistable for AudioConsumerError {}
2968
2969/// AudioFormat
2970#[derive(Clone, Debug, PartialEq)]
2971pub enum AudioFormat {
2972    Compressed(AudioCompressedFormat),
2973    Uncompressed(AudioUncompressedFormat),
2974}
2975
2976impl AudioFormat {
2977    #[inline]
2978    pub fn ordinal(&self) -> u64 {
2979        match *self {
2980            Self::Compressed(_) => 1,
2981            Self::Uncompressed(_) => 2,
2982        }
2983    }
2984}
2985
2986impl fidl::Persistable for AudioFormat {}
2987
2988/// AudioUncompressedFormat
2989#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2990pub enum AudioUncompressedFormat {
2991    Pcm(PcmFormat),
2992}
2993
2994impl AudioUncompressedFormat {
2995    #[inline]
2996    pub fn ordinal(&self) -> u64 {
2997        match *self {
2998            Self::Pcm(_) => 1,
2999        }
3000    }
3001}
3002
3003impl fidl::Persistable for AudioUncompressedFormat {}
3004
3005/// CryptoFormat
3006///
3007/// Crypto (encrypted or decrypted) format details.
3008#[derive(Clone, Debug)]
3009pub enum CryptoFormat {
3010    Encrypted(EncryptedFormat),
3011    Decrypted(DecryptedFormat),
3012    #[doc(hidden)]
3013    __SourceBreaking {
3014        unknown_ordinal: u64,
3015    },
3016}
3017
3018/// Pattern that matches an unknown `CryptoFormat` member.
3019#[macro_export]
3020macro_rules! CryptoFormatUnknown {
3021    () => {
3022        _
3023    };
3024}
3025
3026// Custom PartialEq so that unknown variants are not equal to themselves.
3027impl PartialEq for CryptoFormat {
3028    fn eq(&self, other: &Self) -> bool {
3029        match (self, other) {
3030            (Self::Encrypted(x), Self::Encrypted(y)) => *x == *y,
3031            (Self::Decrypted(x), Self::Decrypted(y)) => *x == *y,
3032            _ => false,
3033        }
3034    }
3035}
3036
3037impl CryptoFormat {
3038    #[inline]
3039    pub fn ordinal(&self) -> u64 {
3040        match *self {
3041            Self::Encrypted(_) => 1,
3042            Self::Decrypted(_) => 2,
3043            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3044        }
3045    }
3046
3047    #[inline]
3048    pub fn unknown_variant_for_testing() -> Self {
3049        Self::__SourceBreaking { unknown_ordinal: 0 }
3050    }
3051
3052    #[inline]
3053    pub fn is_unknown(&self) -> bool {
3054        match self {
3055            Self::__SourceBreaking { .. } => true,
3056            _ => false,
3057        }
3058    }
3059}
3060
3061impl fidl::Persistable for CryptoFormat {}
3062
3063/// DomainFormat
3064#[derive(Clone, Debug, PartialEq)]
3065pub enum DomainFormat {
3066    Audio(AudioFormat),
3067    Video(VideoFormat),
3068    Crypto(CryptoFormat),
3069}
3070
3071impl DomainFormat {
3072    #[inline]
3073    pub fn ordinal(&self) -> u64 {
3074        match *self {
3075            Self::Audio(_) => 1,
3076            Self::Video(_) => 2,
3077            Self::Crypto(_) => 3,
3078        }
3079    }
3080}
3081
3082impl fidl::Persistable for DomainFormat {}
3083
3084/// Settings for encoders that tell them how to encode raw
3085/// formats.
3086#[derive(Clone, Debug)]
3087pub enum EncoderSettings {
3088    Sbc(SbcEncoderSettings),
3089    Aac(AacEncoderSettings),
3090    H264(H264EncoderSettings),
3091    Hevc(HevcEncoderSettings),
3092    Cvsd(CvsdEncoderSettings),
3093    Lc3(Lc3EncoderSettings),
3094    Msbc(MSbcEncoderSettings),
3095    #[doc(hidden)]
3096    __SourceBreaking {
3097        unknown_ordinal: u64,
3098    },
3099}
3100
3101/// Pattern that matches an unknown `EncoderSettings` member.
3102#[macro_export]
3103macro_rules! EncoderSettingsUnknown {
3104    () => {
3105        _
3106    };
3107}
3108
3109// Custom PartialEq so that unknown variants are not equal to themselves.
3110impl PartialEq for EncoderSettings {
3111    fn eq(&self, other: &Self) -> bool {
3112        match (self, other) {
3113            (Self::Sbc(x), Self::Sbc(y)) => *x == *y,
3114            (Self::Aac(x), Self::Aac(y)) => *x == *y,
3115            (Self::H264(x), Self::H264(y)) => *x == *y,
3116            (Self::Hevc(x), Self::Hevc(y)) => *x == *y,
3117            (Self::Cvsd(x), Self::Cvsd(y)) => *x == *y,
3118            (Self::Lc3(x), Self::Lc3(y)) => *x == *y,
3119            (Self::Msbc(x), Self::Msbc(y)) => *x == *y,
3120            _ => false,
3121        }
3122    }
3123}
3124
3125impl EncoderSettings {
3126    #[inline]
3127    pub fn ordinal(&self) -> u64 {
3128        match *self {
3129            Self::Sbc(_) => 1,
3130            Self::Aac(_) => 2,
3131            Self::H264(_) => 3,
3132            Self::Hevc(_) => 4,
3133            Self::Cvsd(_) => 5,
3134            Self::Lc3(_) => 6,
3135            Self::Msbc(_) => 7,
3136            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3137        }
3138    }
3139
3140    #[inline]
3141    pub fn unknown_variant_for_testing() -> Self {
3142        Self::__SourceBreaking { unknown_ordinal: 0 }
3143    }
3144
3145    #[inline]
3146    pub fn is_unknown(&self) -> bool {
3147        match self {
3148            Self::__SourceBreaking { .. } => true,
3149            _ => false,
3150        }
3151    }
3152}
3153
3154impl fidl::Persistable for EncoderSettings {}
3155
3156/// A union of all medium-specific stream type structs.
3157#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3158pub enum MediumSpecificStreamType {
3159    Audio(AudioStreamType),
3160    Video(VideoStreamType),
3161    Text(TextStreamType),
3162    Subpicture(SubpictureStreamType),
3163}
3164
3165impl MediumSpecificStreamType {
3166    #[inline]
3167    pub fn ordinal(&self) -> u64 {
3168        match *self {
3169            Self::Audio(_) => 1,
3170            Self::Video(_) => 2,
3171            Self::Text(_) => 3,
3172            Self::Subpicture(_) => 4,
3173        }
3174    }
3175}
3176
3177impl fidl::Persistable for MediumSpecificStreamType {}
3178
3179#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3180pub enum Usage {
3181    RenderUsage(AudioRenderUsage),
3182    CaptureUsage(AudioCaptureUsage),
3183}
3184
3185impl Usage {
3186    #[inline]
3187    pub fn ordinal(&self) -> u64 {
3188        match *self {
3189            Self::RenderUsage(_) => 1,
3190            Self::CaptureUsage(_) => 2,
3191        }
3192    }
3193}
3194
3195impl fidl::Persistable for Usage {}
3196
3197#[derive(Clone, Debug)]
3198pub enum Usage2 {
3199    RenderUsage(AudioRenderUsage2),
3200    CaptureUsage(AudioCaptureUsage2),
3201    #[doc(hidden)]
3202    __SourceBreaking {
3203        unknown_ordinal: u64,
3204    },
3205}
3206
3207/// Pattern that matches an unknown `Usage2` member.
3208#[macro_export]
3209macro_rules! Usage2Unknown {
3210    () => {
3211        _
3212    };
3213}
3214
3215// Custom PartialEq so that unknown variants are not equal to themselves.
3216impl PartialEq for Usage2 {
3217    fn eq(&self, other: &Self) -> bool {
3218        match (self, other) {
3219            (Self::RenderUsage(x), Self::RenderUsage(y)) => *x == *y,
3220            (Self::CaptureUsage(x), Self::CaptureUsage(y)) => *x == *y,
3221            _ => false,
3222        }
3223    }
3224}
3225
3226impl Usage2 {
3227    #[inline]
3228    pub fn ordinal(&self) -> u64 {
3229        match *self {
3230            Self::RenderUsage(_) => 1,
3231            Self::CaptureUsage(_) => 2,
3232            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3233        }
3234    }
3235
3236    #[inline]
3237    pub fn unknown_variant_for_testing() -> Self {
3238        Self::__SourceBreaking { unknown_ordinal: 0 }
3239    }
3240
3241    #[inline]
3242    pub fn is_unknown(&self) -> bool {
3243        match self {
3244            Self::__SourceBreaking { .. } => true,
3245            _ => false,
3246        }
3247    }
3248}
3249
3250impl fidl::Persistable for Usage2 {}
3251
3252/// The state of audio policy enforcement on a stream or set of streams.
3253#[derive(Clone, Debug)]
3254pub enum UsageState {
3255    Unadjusted(UsageStateUnadjusted),
3256    Ducked(UsageStateDucked),
3257    Muted(UsageStateMuted),
3258    #[doc(hidden)]
3259    __SourceBreaking {
3260        unknown_ordinal: u64,
3261    },
3262}
3263
3264/// Pattern that matches an unknown `UsageState` member.
3265#[macro_export]
3266macro_rules! UsageStateUnknown {
3267    () => {
3268        _
3269    };
3270}
3271
3272// Custom PartialEq so that unknown variants are not equal to themselves.
3273impl PartialEq for UsageState {
3274    fn eq(&self, other: &Self) -> bool {
3275        match (self, other) {
3276            (Self::Unadjusted(x), Self::Unadjusted(y)) => *x == *y,
3277            (Self::Ducked(x), Self::Ducked(y)) => *x == *y,
3278            (Self::Muted(x), Self::Muted(y)) => *x == *y,
3279            _ => false,
3280        }
3281    }
3282}
3283
3284impl UsageState {
3285    #[inline]
3286    pub fn ordinal(&self) -> u64 {
3287        match *self {
3288            Self::Unadjusted(_) => 1,
3289            Self::Ducked(_) => 2,
3290            Self::Muted(_) => 3,
3291            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3292        }
3293    }
3294
3295    #[inline]
3296    pub fn unknown_variant_for_testing() -> Self {
3297        Self::__SourceBreaking { unknown_ordinal: 0 }
3298    }
3299
3300    #[inline]
3301    pub fn is_unknown(&self) -> bool {
3302        match self {
3303            Self::__SourceBreaking { .. } => true,
3304            _ => false,
3305        }
3306    }
3307}
3308
3309impl fidl::Persistable for UsageState {}
3310
3311/// Value
3312///
3313/// Generic "value" for use within generic "Parameter" struct.
3314#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3315pub enum Value {
3316    BoolValue(bool),
3317    Uint64Value(u64),
3318    Int64Value(i64),
3319    StringValue(String),
3320    BytesValue(Vec<u8>),
3321}
3322
3323impl Value {
3324    #[inline]
3325    pub fn ordinal(&self) -> u64 {
3326        match *self {
3327            Self::BoolValue(_) => 1,
3328            Self::Uint64Value(_) => 2,
3329            Self::Int64Value(_) => 3,
3330            Self::StringValue(_) => 4,
3331            Self::BytesValue(_) => 5,
3332        }
3333    }
3334}
3335
3336impl fidl::Persistable for Value {}
3337
3338/// VideoCompressedFormat
3339///
3340/// Compressed video format details.
3341#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3342pub enum VideoCompressedFormat {
3343    TempFieldTodoRemove(u32),
3344}
3345
3346impl VideoCompressedFormat {
3347    #[inline]
3348    pub fn ordinal(&self) -> u64 {
3349        match *self {
3350            Self::TempFieldTodoRemove(_) => 1,
3351        }
3352    }
3353}
3354
3355impl fidl::Persistable for VideoCompressedFormat {}
3356
3357/// VideoFormat
3358///
3359/// Video (compress or uncompressed) format details.  In this context,
3360/// "uncompressed" can include block-based image compression formats that still
3361/// permit fairly fast random access to image data.
3362#[derive(Clone, Debug, PartialEq)]
3363pub enum VideoFormat {
3364    Compressed(VideoCompressedFormat),
3365    Uncompressed(VideoUncompressedFormat),
3366}
3367
3368impl VideoFormat {
3369    #[inline]
3370    pub fn ordinal(&self) -> u64 {
3371        match *self {
3372            Self::Compressed(_) => 1,
3373            Self::Uncompressed(_) => 2,
3374        }
3375    }
3376}
3377
3378impl fidl::Persistable for VideoFormat {}
3379
3380pub mod activity_reporter_ordinals {
3381    pub const WATCH_RENDER_ACTIVITY: u64 = 0x2974e9f5880b2f1f;
3382    pub const WATCH_RENDER_ACTIVITY2: u64 = 0x484236fc11b363e6;
3383    pub const WATCH_CAPTURE_ACTIVITY: u64 = 0x70e7038e9658e128;
3384    pub const WATCH_CAPTURE_ACTIVITY2: u64 = 0x3d137e0364f9d550;
3385}
3386
3387pub mod audio_ordinals {
3388    pub const CREATE_AUDIO_RENDERER: u64 = 0x572f413566fd58f1;
3389    pub const CREATE_AUDIO_CAPTURER: u64 = 0x44660fc63a6202f;
3390}
3391
3392pub mod audio_capturer_ordinals {
3393    pub const ADD_PAYLOAD_BUFFER: u64 = 0x3b3a37fc34fe5b56;
3394    pub const REMOVE_PAYLOAD_BUFFER: u64 = 0x5d1e4f74c3658262;
3395    pub const ON_PACKET_PRODUCED: u64 = 0x6bbe69746a3c8bd9;
3396    pub const ON_END_OF_STREAM: u64 = 0x550e69b41d03e2c2;
3397    pub const RELEASE_PACKET: u64 = 0x7a7b57f0f7d9e4bb;
3398    pub const DISCARD_ALL_PACKETS: u64 = 0x27afd605e97b09d2;
3399    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x35f9d721e905b831;
3400    pub const SET_PCM_STREAM_TYPE: u64 = 0x1531ea9ea2c852cd;
3401    pub const CAPTURE_AT: u64 = 0x784e25df72cea780;
3402    pub const START_ASYNC_CAPTURE: u64 = 0x7768adbb1ccfd7a6;
3403    pub const STOP_ASYNC_CAPTURE: u64 = 0x5bfc8790a8cef8cb;
3404    pub const STOP_ASYNC_CAPTURE_NO_REPLY: u64 = 0x33223cb2962c95e3;
3405    pub const BIND_GAIN_CONTROL: u64 = 0x658a6a17ddb3a8e0;
3406    pub const GET_REFERENCE_CLOCK: u64 = 0x50d037aa5a4b4d71;
3407    pub const SET_REFERENCE_CLOCK: u64 = 0x732b2c496d521bcf;
3408    pub const SET_USAGE: u64 = 0x42a16f392bd21b25;
3409    pub const SET_USAGE2: u64 = 0x7a73e251b8d2382b;
3410    pub const GET_STREAM_TYPE: u64 = 0x5dcaaa670b433088;
3411}
3412
3413pub mod audio_consumer_ordinals {
3414    pub const CREATE_STREAM_SINK: u64 = 0x525b3b97fdf7d884;
3415    pub const ON_END_OF_STREAM: u64 = 0x53a64e6d0e8f8a20;
3416    pub const START: u64 = 0x4fdbd44b3f2a3a3c;
3417    pub const STOP: u64 = 0x3d46c3741686c40d;
3418    pub const SET_RATE: u64 = 0x45342b73968bfafe;
3419    pub const BIND_VOLUME_CONTROL: u64 = 0x6f1b01fd887f5748;
3420    pub const WATCH_STATUS: u64 = 0x35cf702c721e2cc6;
3421}
3422
3423pub mod audio_core_ordinals {
3424    pub const CREATE_AUDIO_RENDERER: u64 = 0x2ac9beba47f83435;
3425    pub const CREATE_AUDIO_CAPTURER_WITH_CONFIGURATION: u64 = 0x459de383b0d76d97;
3426    pub const CREATE_AUDIO_CAPTURER: u64 = 0x787db169df99aed0;
3427    pub const SET_RENDER_USAGE_GAIN: u64 = 0x48097f45f6e2b8e7;
3428    pub const SET_RENDER_USAGE_GAIN2: u64 = 0x779b1531dc9e64f4;
3429    pub const SET_CAPTURE_USAGE_GAIN: u64 = 0x457d29217d4ea248;
3430    pub const SET_CAPTURE_USAGE_GAIN2: u64 = 0x15065ee308f44af0;
3431    pub const BIND_USAGE_VOLUME_CONTROL: u64 = 0x7225be116aadc137;
3432    pub const BIND_USAGE_VOLUME_CONTROL2: u64 = 0x729dff93019d055;
3433    pub const GET_VOLUME_FROM_DB: u64 = 0x50e3ca45509770bf;
3434    pub const GET_VOLUME_FROM_DB2: u64 = 0x165c811091ef99da;
3435    pub const GET_DB_FROM_VOLUME: u64 = 0x3e8eec27dd5a8bda;
3436    pub const GET_DB_FROM_VOLUME2: u64 = 0x5f421a8ebf265bf3;
3437    pub const SET_INTERACTION: u64 = 0x7bfed14345ece7b7;
3438    pub const SET_INTERACTION2: u64 = 0x7226c7c6e6edc62f;
3439    pub const RESET_INTERACTIONS: u64 = 0x65bd94d9d0a28b5e;
3440    pub const LOAD_DEFAULTS: u64 = 0x54a0bebca85f6b31;
3441}
3442
3443pub mod audio_device_enumerator_ordinals {
3444    pub const GET_DEVICES: u64 = 0x4ce1aa218aeb12a6;
3445    pub const ON_DEVICE_ADDED: u64 = 0xe0fbe40057c4b44;
3446    pub const ON_DEVICE_REMOVED: u64 = 0x6f3b7574463d9ff8;
3447    pub const ON_DEVICE_GAIN_CHANGED: u64 = 0x14aefcbbb076b0e9;
3448    pub const ON_DEFAULT_DEVICE_CHANGED: u64 = 0x16357b42d4c16e11;
3449    pub const GET_DEVICE_GAIN: u64 = 0x25dd4723403c414b;
3450    pub const SET_DEVICE_GAIN: u64 = 0x5bdabc8ebe83591;
3451    pub const ADD_DEVICE_BY_CHANNEL: u64 = 0x72cdbada4d70ed67;
3452}
3453
3454pub mod audio_renderer_ordinals {
3455    pub const ADD_PAYLOAD_BUFFER: u64 = 0x3b3a37fc34fe5b56;
3456    pub const REMOVE_PAYLOAD_BUFFER: u64 = 0x5d1e4f74c3658262;
3457    pub const SEND_PACKET: u64 = 0x67cddd607442775f;
3458    pub const SEND_PACKET_NO_REPLY: u64 = 0x8d9b8b413ceba9d;
3459    pub const END_OF_STREAM: u64 = 0x6180fd6f7e793b71;
3460    pub const DISCARD_ALL_PACKETS: u64 = 0x6f4dad7af2917665;
3461    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x50d36d0d23081bc4;
3462    pub const BIND_GAIN_CONTROL: u64 = 0x293f5c7f8fba2bdc;
3463    pub const SET_PTS_UNITS: u64 = 0xf68cd108785a27c;
3464    pub const SET_PTS_CONTINUITY_THRESHOLD: u64 = 0x2849ba571d1971ba;
3465    pub const GET_REFERENCE_CLOCK: u64 = 0x2f7a7f011a172f7e;
3466    pub const SET_REFERENCE_CLOCK: u64 = 0x39acd05d832b5fed;
3467    pub const SET_USAGE: u64 = 0x3994bd23b55a733e;
3468    pub const SET_USAGE2: u64 = 0x2904035c7132b103;
3469    pub const SET_PCM_STREAM_TYPE: u64 = 0x27aa715d8901fa19;
3470    pub const ENABLE_MIN_LEAD_TIME_EVENTS: u64 = 0x62808dfad72bf890;
3471    pub const ON_MIN_LEAD_TIME_CHANGED: u64 = 0x4feff7d278978c4e;
3472    pub const GET_MIN_LEAD_TIME: u64 = 0x1cf3c3ecd8fec26b;
3473    pub const PLAY: u64 = 0x3c0162db084f74a3;
3474    pub const PLAY_NO_REPLY: u64 = 0x1b7fe832b68c22ef;
3475    pub const PAUSE: u64 = 0x41d557588d93d153;
3476    pub const PAUSE_NO_REPLY: u64 = 0x24cc45d4f3855ab;
3477}
3478
3479pub mod profile_provider_ordinals {
3480    pub const REGISTER_HANDLER_WITH_CAPACITY: u64 = 0x60459ecef7458176;
3481    pub const UNREGISTER_HANDLER: u64 = 0x724d9d5fd8ef544c;
3482    pub const REGISTER_MEMORY_RANGE: u64 = 0x2f509d3523e9562d;
3483    pub const UNREGISTER_MEMORY_RANGE: u64 = 0x2dc313d6aa81ad27;
3484}
3485
3486pub mod session_audio_consumer_factory_ordinals {
3487    pub const CREATE_AUDIO_CONSUMER: u64 = 0x6fab96f988e7d7fb;
3488}
3489
3490pub mod simple_stream_sink_ordinals {
3491    pub const ADD_PAYLOAD_BUFFER: u64 = 0x3b3a37fc34fe5b56;
3492    pub const REMOVE_PAYLOAD_BUFFER: u64 = 0x5d1e4f74c3658262;
3493    pub const SEND_PACKET: u64 = 0x67cddd607442775f;
3494    pub const SEND_PACKET_NO_REPLY: u64 = 0x8d9b8b413ceba9d;
3495    pub const END_OF_STREAM: u64 = 0x6180fd6f7e793b71;
3496    pub const DISCARD_ALL_PACKETS: u64 = 0x6f4dad7af2917665;
3497    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x50d36d0d23081bc4;
3498}
3499
3500pub mod stream_buffer_set_ordinals {
3501    pub const ADD_PAYLOAD_BUFFER: u64 = 0x3b3a37fc34fe5b56;
3502    pub const REMOVE_PAYLOAD_BUFFER: u64 = 0x5d1e4f74c3658262;
3503}
3504
3505pub mod stream_processor_ordinals {
3506    pub const ENABLE_ON_STREAM_FAILED: u64 = 0x3940929617dbf02b;
3507    pub const ON_STREAM_FAILED: u64 = 0x77ccf70bb061cf8e;
3508    pub const ON_INPUT_CONSTRAINTS: u64 = 0x211da9966a8ca0;
3509    pub const SET_INPUT_BUFFER_PARTIAL_SETTINGS: u64 = 0xb02e0663a40e4c4;
3510    pub const ON_OUTPUT_CONSTRAINTS: u64 = 0x40d8234504c170f3;
3511    pub const ON_OUTPUT_FORMAT: u64 = 0x131b77ae120360bc;
3512    pub const SET_OUTPUT_BUFFER_PARTIAL_SETTINGS: u64 = 0x118bb8c819a7bbbb;
3513    pub const COMPLETE_OUTPUT_BUFFER_PARTIAL_SETTINGS: u64 = 0x50529e5c680ae3ab;
3514    pub const FLUSH_END_OF_STREAM_AND_CLOSE_STREAM: u64 = 0x2b62c3e26d0667e6;
3515    pub const CLOSE_CURRENT_STREAM: u64 = 0x1d8a67522170ca07;
3516    pub const SYNC: u64 = 0x4b3e44300b0ec6aa;
3517    pub const ON_OUTPUT_PACKET: u64 = 0x5c2029be1090ce93;
3518    pub const RECYCLE_OUTPUT_PACKET: u64 = 0x32763632b94e0bd5;
3519    pub const ON_OUTPUT_END_OF_STREAM: u64 = 0x3bb65d237cfa50e6;
3520    pub const QUEUE_INPUT_FORMAT_DETAILS: u64 = 0x170dc0979d52231;
3521    pub const QUEUE_INPUT_PACKET: u64 = 0x47173d2652d9df3b;
3522    pub const ON_FREE_INPUT_PACKET: u64 = 0xeef799b28708bbd;
3523    pub const QUEUE_INPUT_END_OF_STREAM: u64 = 0x2051b6ad00f20b37;
3524}
3525
3526pub mod stream_sink_ordinals {
3527    pub const SEND_PACKET: u64 = 0x67cddd607442775f;
3528    pub const SEND_PACKET_NO_REPLY: u64 = 0x8d9b8b413ceba9d;
3529    pub const END_OF_STREAM: u64 = 0x6180fd6f7e793b71;
3530    pub const DISCARD_ALL_PACKETS: u64 = 0x6f4dad7af2917665;
3531    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x50d36d0d23081bc4;
3532}
3533
3534pub mod stream_source_ordinals {
3535    pub const ON_PACKET_PRODUCED: u64 = 0x6bbe69746a3c8bd9;
3536    pub const ON_END_OF_STREAM: u64 = 0x550e69b41d03e2c2;
3537    pub const RELEASE_PACKET: u64 = 0x7a7b57f0f7d9e4bb;
3538    pub const DISCARD_ALL_PACKETS: u64 = 0x27afd605e97b09d2;
3539    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x35f9d721e905b831;
3540}
3541
3542pub mod usage2_audio_consumer_factory_ordinals {
3543    pub const CREATE_AUDIO_CONSUMER: u64 = 0x767722302a171873;
3544}
3545
3546pub mod usage_audio_consumer_factory_ordinals {
3547    pub const CREATE_AUDIO_CONSUMER: u64 = 0x4d975ca9b8f625a3;
3548}
3549
3550pub mod usage_gain_listener_ordinals {
3551    pub const ON_GAIN_MUTE_CHANGED: u64 = 0x681570258eac3a8d;
3552}
3553
3554pub mod usage_gain_reporter_ordinals {
3555    pub const REGISTER_LISTENER: u64 = 0x767107c168c226af;
3556    pub const REGISTER_LISTENER2: u64 = 0x760a8e1c5873629c;
3557}
3558
3559pub mod usage_reporter_ordinals {
3560    pub const WATCH: u64 = 0x769e6fb17075c959;
3561    pub const WATCH2: u64 = 0x4a43c4c82f5d8ce8;
3562}
3563
3564pub mod usage_watcher_ordinals {
3565    pub const ON_STATE_CHANGED: u64 = 0x5b955c5768ec75c5;
3566}
3567
3568pub mod usage_watcher2_ordinals {
3569    pub const ON_STATE_CHANGED: u64 = 0xca31a8b13c324d4;
3570}
3571
3572mod internal {
3573    use super::*;
3574    unsafe impl fidl::encoding::TypeMarker for AudioConsumerStartFlags {
3575        type Owned = Self;
3576
3577        #[inline(always)]
3578        fn inline_align(_context: fidl::encoding::Context) -> usize {
3579            4
3580        }
3581
3582        #[inline(always)]
3583        fn inline_size(_context: fidl::encoding::Context) -> usize {
3584            4
3585        }
3586    }
3587
3588    impl fidl::encoding::ValueTypeMarker for AudioConsumerStartFlags {
3589        type Borrowed<'a> = Self;
3590        #[inline(always)]
3591        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3592            *value
3593        }
3594    }
3595
3596    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3597        for AudioConsumerStartFlags
3598    {
3599        #[inline]
3600        unsafe fn encode(
3601            self,
3602            encoder: &mut fidl::encoding::Encoder<'_, D>,
3603            offset: usize,
3604            _depth: fidl::encoding::Depth,
3605        ) -> fidl::Result<()> {
3606            encoder.debug_check_bounds::<Self>(offset);
3607            if self.bits() & Self::all().bits() != self.bits() {
3608                return Err(fidl::Error::InvalidBitsValue);
3609            }
3610            encoder.write_num(self.bits(), offset);
3611            Ok(())
3612        }
3613    }
3614
3615    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3616        for AudioConsumerStartFlags
3617    {
3618        #[inline(always)]
3619        fn new_empty() -> Self {
3620            Self::empty()
3621        }
3622
3623        #[inline]
3624        unsafe fn decode(
3625            &mut self,
3626            decoder: &mut fidl::encoding::Decoder<'_, D>,
3627            offset: usize,
3628            _depth: fidl::encoding::Depth,
3629        ) -> fidl::Result<()> {
3630            decoder.debug_check_bounds::<Self>(offset);
3631            let prim = decoder.read_num::<u32>(offset);
3632            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
3633            Ok(())
3634        }
3635    }
3636    unsafe impl fidl::encoding::TypeMarker for AudioGainInfoFlags {
3637        type Owned = Self;
3638
3639        #[inline(always)]
3640        fn inline_align(_context: fidl::encoding::Context) -> usize {
3641            4
3642        }
3643
3644        #[inline(always)]
3645        fn inline_size(_context: fidl::encoding::Context) -> usize {
3646            4
3647        }
3648    }
3649
3650    impl fidl::encoding::ValueTypeMarker for AudioGainInfoFlags {
3651        type Borrowed<'a> = Self;
3652        #[inline(always)]
3653        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3654            *value
3655        }
3656    }
3657
3658    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3659        for AudioGainInfoFlags
3660    {
3661        #[inline]
3662        unsafe fn encode(
3663            self,
3664            encoder: &mut fidl::encoding::Encoder<'_, D>,
3665            offset: usize,
3666            _depth: fidl::encoding::Depth,
3667        ) -> fidl::Result<()> {
3668            encoder.debug_check_bounds::<Self>(offset);
3669            if self.bits() & Self::all().bits() != self.bits() {
3670                return Err(fidl::Error::InvalidBitsValue);
3671            }
3672            encoder.write_num(self.bits(), offset);
3673            Ok(())
3674        }
3675    }
3676
3677    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioGainInfoFlags {
3678        #[inline(always)]
3679        fn new_empty() -> Self {
3680            Self::empty()
3681        }
3682
3683        #[inline]
3684        unsafe fn decode(
3685            &mut self,
3686            decoder: &mut fidl::encoding::Decoder<'_, D>,
3687            offset: usize,
3688            _depth: fidl::encoding::Depth,
3689        ) -> fidl::Result<()> {
3690            decoder.debug_check_bounds::<Self>(offset);
3691            let prim = decoder.read_num::<u32>(offset);
3692            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
3693            Ok(())
3694        }
3695    }
3696    unsafe impl fidl::encoding::TypeMarker for AudioGainValidFlags {
3697        type Owned = Self;
3698
3699        #[inline(always)]
3700        fn inline_align(_context: fidl::encoding::Context) -> usize {
3701            4
3702        }
3703
3704        #[inline(always)]
3705        fn inline_size(_context: fidl::encoding::Context) -> usize {
3706            4
3707        }
3708    }
3709
3710    impl fidl::encoding::ValueTypeMarker for AudioGainValidFlags {
3711        type Borrowed<'a> = Self;
3712        #[inline(always)]
3713        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3714            *value
3715        }
3716    }
3717
3718    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3719        for AudioGainValidFlags
3720    {
3721        #[inline]
3722        unsafe fn encode(
3723            self,
3724            encoder: &mut fidl::encoding::Encoder<'_, D>,
3725            offset: usize,
3726            _depth: fidl::encoding::Depth,
3727        ) -> fidl::Result<()> {
3728            encoder.debug_check_bounds::<Self>(offset);
3729            if self.bits() & Self::all().bits() != self.bits() {
3730                return Err(fidl::Error::InvalidBitsValue);
3731            }
3732            encoder.write_num(self.bits(), offset);
3733            Ok(())
3734        }
3735    }
3736
3737    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioGainValidFlags {
3738        #[inline(always)]
3739        fn new_empty() -> Self {
3740            Self::empty()
3741        }
3742
3743        #[inline]
3744        unsafe fn decode(
3745            &mut self,
3746            decoder: &mut fidl::encoding::Decoder<'_, D>,
3747            offset: usize,
3748            _depth: fidl::encoding::Depth,
3749        ) -> fidl::Result<()> {
3750            decoder.debug_check_bounds::<Self>(offset);
3751            let prim = decoder.read_num::<u32>(offset);
3752            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
3753            Ok(())
3754        }
3755    }
3756    unsafe impl fidl::encoding::TypeMarker for AacAudioObjectType {
3757        type Owned = Self;
3758
3759        #[inline(always)]
3760        fn inline_align(_context: fidl::encoding::Context) -> usize {
3761            std::mem::align_of::<u32>()
3762        }
3763
3764        #[inline(always)]
3765        fn inline_size(_context: fidl::encoding::Context) -> usize {
3766            std::mem::size_of::<u32>()
3767        }
3768
3769        #[inline(always)]
3770        fn encode_is_copy() -> bool {
3771            true
3772        }
3773
3774        #[inline(always)]
3775        fn decode_is_copy() -> bool {
3776            false
3777        }
3778    }
3779
3780    impl fidl::encoding::ValueTypeMarker for AacAudioObjectType {
3781        type Borrowed<'a> = Self;
3782        #[inline(always)]
3783        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3784            *value
3785        }
3786    }
3787
3788    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3789        for AacAudioObjectType
3790    {
3791        #[inline]
3792        unsafe fn encode(
3793            self,
3794            encoder: &mut fidl::encoding::Encoder<'_, D>,
3795            offset: usize,
3796            _depth: fidl::encoding::Depth,
3797        ) -> fidl::Result<()> {
3798            encoder.debug_check_bounds::<Self>(offset);
3799            encoder.write_num(self.into_primitive(), offset);
3800            Ok(())
3801        }
3802    }
3803
3804    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacAudioObjectType {
3805        #[inline(always)]
3806        fn new_empty() -> Self {
3807            Self::Mpeg2AacLc
3808        }
3809
3810        #[inline]
3811        unsafe fn decode(
3812            &mut self,
3813            decoder: &mut fidl::encoding::Decoder<'_, D>,
3814            offset: usize,
3815            _depth: fidl::encoding::Depth,
3816        ) -> fidl::Result<()> {
3817            decoder.debug_check_bounds::<Self>(offset);
3818            let prim = decoder.read_num::<u32>(offset);
3819
3820            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3821            Ok(())
3822        }
3823    }
3824    unsafe impl fidl::encoding::TypeMarker for AacChannelMode {
3825        type Owned = Self;
3826
3827        #[inline(always)]
3828        fn inline_align(_context: fidl::encoding::Context) -> usize {
3829            std::mem::align_of::<u32>()
3830        }
3831
3832        #[inline(always)]
3833        fn inline_size(_context: fidl::encoding::Context) -> usize {
3834            std::mem::size_of::<u32>()
3835        }
3836
3837        #[inline(always)]
3838        fn encode_is_copy() -> bool {
3839            true
3840        }
3841
3842        #[inline(always)]
3843        fn decode_is_copy() -> bool {
3844            false
3845        }
3846    }
3847
3848    impl fidl::encoding::ValueTypeMarker for AacChannelMode {
3849        type Borrowed<'a> = Self;
3850        #[inline(always)]
3851        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3852            *value
3853        }
3854    }
3855
3856    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AacChannelMode {
3857        #[inline]
3858        unsafe fn encode(
3859            self,
3860            encoder: &mut fidl::encoding::Encoder<'_, D>,
3861            offset: usize,
3862            _depth: fidl::encoding::Depth,
3863        ) -> fidl::Result<()> {
3864            encoder.debug_check_bounds::<Self>(offset);
3865            encoder.write_num(self.into_primitive(), offset);
3866            Ok(())
3867        }
3868    }
3869
3870    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacChannelMode {
3871        #[inline(always)]
3872        fn new_empty() -> Self {
3873            Self::Mono
3874        }
3875
3876        #[inline]
3877        unsafe fn decode(
3878            &mut self,
3879            decoder: &mut fidl::encoding::Decoder<'_, D>,
3880            offset: usize,
3881            _depth: fidl::encoding::Depth,
3882        ) -> fidl::Result<()> {
3883            decoder.debug_check_bounds::<Self>(offset);
3884            let prim = decoder.read_num::<u32>(offset);
3885
3886            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3887            Ok(())
3888        }
3889    }
3890    unsafe impl fidl::encoding::TypeMarker for AacVariableBitRate {
3891        type Owned = Self;
3892
3893        #[inline(always)]
3894        fn inline_align(_context: fidl::encoding::Context) -> usize {
3895            std::mem::align_of::<u32>()
3896        }
3897
3898        #[inline(always)]
3899        fn inline_size(_context: fidl::encoding::Context) -> usize {
3900            std::mem::size_of::<u32>()
3901        }
3902
3903        #[inline(always)]
3904        fn encode_is_copy() -> bool {
3905            true
3906        }
3907
3908        #[inline(always)]
3909        fn decode_is_copy() -> bool {
3910            false
3911        }
3912    }
3913
3914    impl fidl::encoding::ValueTypeMarker for AacVariableBitRate {
3915        type Borrowed<'a> = Self;
3916        #[inline(always)]
3917        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3918            *value
3919        }
3920    }
3921
3922    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3923        for AacVariableBitRate
3924    {
3925        #[inline]
3926        unsafe fn encode(
3927            self,
3928            encoder: &mut fidl::encoding::Encoder<'_, D>,
3929            offset: usize,
3930            _depth: fidl::encoding::Depth,
3931        ) -> fidl::Result<()> {
3932            encoder.debug_check_bounds::<Self>(offset);
3933            encoder.write_num(self.into_primitive(), offset);
3934            Ok(())
3935        }
3936    }
3937
3938    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacVariableBitRate {
3939        #[inline(always)]
3940        fn new_empty() -> Self {
3941            Self::V1
3942        }
3943
3944        #[inline]
3945        unsafe fn decode(
3946            &mut self,
3947            decoder: &mut fidl::encoding::Decoder<'_, D>,
3948            offset: usize,
3949            _depth: fidl::encoding::Depth,
3950        ) -> fidl::Result<()> {
3951            decoder.debug_check_bounds::<Self>(offset);
3952            let prim = decoder.read_num::<u32>(offset);
3953
3954            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3955            Ok(())
3956        }
3957    }
3958    unsafe impl fidl::encoding::TypeMarker for AudioBitrateMode {
3959        type Owned = Self;
3960
3961        #[inline(always)]
3962        fn inline_align(_context: fidl::encoding::Context) -> usize {
3963            std::mem::align_of::<u32>()
3964        }
3965
3966        #[inline(always)]
3967        fn inline_size(_context: fidl::encoding::Context) -> usize {
3968            std::mem::size_of::<u32>()
3969        }
3970
3971        #[inline(always)]
3972        fn encode_is_copy() -> bool {
3973            true
3974        }
3975
3976        #[inline(always)]
3977        fn decode_is_copy() -> bool {
3978            false
3979        }
3980    }
3981
3982    impl fidl::encoding::ValueTypeMarker for AudioBitrateMode {
3983        type Borrowed<'a> = Self;
3984        #[inline(always)]
3985        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3986            *value
3987        }
3988    }
3989
3990    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3991        for AudioBitrateMode
3992    {
3993        #[inline]
3994        unsafe fn encode(
3995            self,
3996            encoder: &mut fidl::encoding::Encoder<'_, D>,
3997            offset: usize,
3998            _depth: fidl::encoding::Depth,
3999        ) -> fidl::Result<()> {
4000            encoder.debug_check_bounds::<Self>(offset);
4001            encoder.write_num(self.into_primitive(), offset);
4002            Ok(())
4003        }
4004    }
4005
4006    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioBitrateMode {
4007        #[inline(always)]
4008        fn new_empty() -> Self {
4009            Self::Unspecified
4010        }
4011
4012        #[inline]
4013        unsafe fn decode(
4014            &mut self,
4015            decoder: &mut fidl::encoding::Decoder<'_, D>,
4016            offset: usize,
4017            _depth: fidl::encoding::Depth,
4018        ) -> fidl::Result<()> {
4019            decoder.debug_check_bounds::<Self>(offset);
4020            let prim = decoder.read_num::<u32>(offset);
4021
4022            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4023            Ok(())
4024        }
4025    }
4026    unsafe impl fidl::encoding::TypeMarker for AudioCaptureUsage {
4027        type Owned = Self;
4028
4029        #[inline(always)]
4030        fn inline_align(_context: fidl::encoding::Context) -> usize {
4031            std::mem::align_of::<u32>()
4032        }
4033
4034        #[inline(always)]
4035        fn inline_size(_context: fidl::encoding::Context) -> usize {
4036            std::mem::size_of::<u32>()
4037        }
4038
4039        #[inline(always)]
4040        fn encode_is_copy() -> bool {
4041            true
4042        }
4043
4044        #[inline(always)]
4045        fn decode_is_copy() -> bool {
4046            false
4047        }
4048    }
4049
4050    impl fidl::encoding::ValueTypeMarker for AudioCaptureUsage {
4051        type Borrowed<'a> = Self;
4052        #[inline(always)]
4053        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4054            *value
4055        }
4056    }
4057
4058    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4059        for AudioCaptureUsage
4060    {
4061        #[inline]
4062        unsafe fn encode(
4063            self,
4064            encoder: &mut fidl::encoding::Encoder<'_, D>,
4065            offset: usize,
4066            _depth: fidl::encoding::Depth,
4067        ) -> fidl::Result<()> {
4068            encoder.debug_check_bounds::<Self>(offset);
4069            encoder.write_num(self.into_primitive(), offset);
4070            Ok(())
4071        }
4072    }
4073
4074    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioCaptureUsage {
4075        #[inline(always)]
4076        fn new_empty() -> Self {
4077            Self::Background
4078        }
4079
4080        #[inline]
4081        unsafe fn decode(
4082            &mut self,
4083            decoder: &mut fidl::encoding::Decoder<'_, D>,
4084            offset: usize,
4085            _depth: fidl::encoding::Depth,
4086        ) -> fidl::Result<()> {
4087            decoder.debug_check_bounds::<Self>(offset);
4088            let prim = decoder.read_num::<u32>(offset);
4089
4090            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4091            Ok(())
4092        }
4093    }
4094    unsafe impl fidl::encoding::TypeMarker for AudioCaptureUsage2 {
4095        type Owned = Self;
4096
4097        #[inline(always)]
4098        fn inline_align(_context: fidl::encoding::Context) -> usize {
4099            std::mem::align_of::<u32>()
4100        }
4101
4102        #[inline(always)]
4103        fn inline_size(_context: fidl::encoding::Context) -> usize {
4104            std::mem::size_of::<u32>()
4105        }
4106
4107        #[inline(always)]
4108        fn encode_is_copy() -> bool {
4109            false
4110        }
4111
4112        #[inline(always)]
4113        fn decode_is_copy() -> bool {
4114            false
4115        }
4116    }
4117
4118    impl fidl::encoding::ValueTypeMarker for AudioCaptureUsage2 {
4119        type Borrowed<'a> = Self;
4120        #[inline(always)]
4121        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4122            *value
4123        }
4124    }
4125
4126    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4127        for AudioCaptureUsage2
4128    {
4129        #[inline]
4130        unsafe fn encode(
4131            self,
4132            encoder: &mut fidl::encoding::Encoder<'_, D>,
4133            offset: usize,
4134            _depth: fidl::encoding::Depth,
4135        ) -> fidl::Result<()> {
4136            encoder.debug_check_bounds::<Self>(offset);
4137            encoder.write_num(self.into_primitive(), offset);
4138            Ok(())
4139        }
4140    }
4141
4142    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioCaptureUsage2 {
4143        #[inline(always)]
4144        fn new_empty() -> Self {
4145            Self::unknown()
4146        }
4147
4148        #[inline]
4149        unsafe fn decode(
4150            &mut self,
4151            decoder: &mut fidl::encoding::Decoder<'_, D>,
4152            offset: usize,
4153            _depth: fidl::encoding::Depth,
4154        ) -> fidl::Result<()> {
4155            decoder.debug_check_bounds::<Self>(offset);
4156            let prim = decoder.read_num::<u32>(offset);
4157
4158            *self = Self::from_primitive_allow_unknown(prim);
4159            Ok(())
4160        }
4161    }
4162    unsafe impl fidl::encoding::TypeMarker for AudioChannelId {
4163        type Owned = Self;
4164
4165        #[inline(always)]
4166        fn inline_align(_context: fidl::encoding::Context) -> usize {
4167            std::mem::align_of::<u32>()
4168        }
4169
4170        #[inline(always)]
4171        fn inline_size(_context: fidl::encoding::Context) -> usize {
4172            std::mem::size_of::<u32>()
4173        }
4174
4175        #[inline(always)]
4176        fn encode_is_copy() -> bool {
4177            true
4178        }
4179
4180        #[inline(always)]
4181        fn decode_is_copy() -> bool {
4182            false
4183        }
4184    }
4185
4186    impl fidl::encoding::ValueTypeMarker for AudioChannelId {
4187        type Borrowed<'a> = Self;
4188        #[inline(always)]
4189        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4190            *value
4191        }
4192    }
4193
4194    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AudioChannelId {
4195        #[inline]
4196        unsafe fn encode(
4197            self,
4198            encoder: &mut fidl::encoding::Encoder<'_, D>,
4199            offset: usize,
4200            _depth: fidl::encoding::Depth,
4201        ) -> fidl::Result<()> {
4202            encoder.debug_check_bounds::<Self>(offset);
4203            encoder.write_num(self.into_primitive(), offset);
4204            Ok(())
4205        }
4206    }
4207
4208    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioChannelId {
4209        #[inline(always)]
4210        fn new_empty() -> Self {
4211            Self::Skip
4212        }
4213
4214        #[inline]
4215        unsafe fn decode(
4216            &mut self,
4217            decoder: &mut fidl::encoding::Decoder<'_, D>,
4218            offset: usize,
4219            _depth: fidl::encoding::Depth,
4220        ) -> fidl::Result<()> {
4221            decoder.debug_check_bounds::<Self>(offset);
4222            let prim = decoder.read_num::<u32>(offset);
4223
4224            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4225            Ok(())
4226        }
4227    }
4228    unsafe impl fidl::encoding::TypeMarker for AudioOutputRoutingPolicy {
4229        type Owned = Self;
4230
4231        #[inline(always)]
4232        fn inline_align(_context: fidl::encoding::Context) -> usize {
4233            std::mem::align_of::<u32>()
4234        }
4235
4236        #[inline(always)]
4237        fn inline_size(_context: fidl::encoding::Context) -> usize {
4238            std::mem::size_of::<u32>()
4239        }
4240
4241        #[inline(always)]
4242        fn encode_is_copy() -> bool {
4243            true
4244        }
4245
4246        #[inline(always)]
4247        fn decode_is_copy() -> bool {
4248            false
4249        }
4250    }
4251
4252    impl fidl::encoding::ValueTypeMarker for AudioOutputRoutingPolicy {
4253        type Borrowed<'a> = Self;
4254        #[inline(always)]
4255        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4256            *value
4257        }
4258    }
4259
4260    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4261        for AudioOutputRoutingPolicy
4262    {
4263        #[inline]
4264        unsafe fn encode(
4265            self,
4266            encoder: &mut fidl::encoding::Encoder<'_, D>,
4267            offset: usize,
4268            _depth: fidl::encoding::Depth,
4269        ) -> fidl::Result<()> {
4270            encoder.debug_check_bounds::<Self>(offset);
4271            encoder.write_num(self.into_primitive(), offset);
4272            Ok(())
4273        }
4274    }
4275
4276    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4277        for AudioOutputRoutingPolicy
4278    {
4279        #[inline(always)]
4280        fn new_empty() -> Self {
4281            Self::AllPluggedOutputs
4282        }
4283
4284        #[inline]
4285        unsafe fn decode(
4286            &mut self,
4287            decoder: &mut fidl::encoding::Decoder<'_, D>,
4288            offset: usize,
4289            _depth: fidl::encoding::Depth,
4290        ) -> fidl::Result<()> {
4291            decoder.debug_check_bounds::<Self>(offset);
4292            let prim = decoder.read_num::<u32>(offset);
4293
4294            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4295            Ok(())
4296        }
4297    }
4298    unsafe impl fidl::encoding::TypeMarker for AudioPcmMode {
4299        type Owned = Self;
4300
4301        #[inline(always)]
4302        fn inline_align(_context: fidl::encoding::Context) -> usize {
4303            std::mem::align_of::<u32>()
4304        }
4305
4306        #[inline(always)]
4307        fn inline_size(_context: fidl::encoding::Context) -> usize {
4308            std::mem::size_of::<u32>()
4309        }
4310
4311        #[inline(always)]
4312        fn encode_is_copy() -> bool {
4313            true
4314        }
4315
4316        #[inline(always)]
4317        fn decode_is_copy() -> bool {
4318            false
4319        }
4320    }
4321
4322    impl fidl::encoding::ValueTypeMarker for AudioPcmMode {
4323        type Borrowed<'a> = Self;
4324        #[inline(always)]
4325        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4326            *value
4327        }
4328    }
4329
4330    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AudioPcmMode {
4331        #[inline]
4332        unsafe fn encode(
4333            self,
4334            encoder: &mut fidl::encoding::Encoder<'_, D>,
4335            offset: usize,
4336            _depth: fidl::encoding::Depth,
4337        ) -> fidl::Result<()> {
4338            encoder.debug_check_bounds::<Self>(offset);
4339            encoder.write_num(self.into_primitive(), offset);
4340            Ok(())
4341        }
4342    }
4343
4344    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioPcmMode {
4345        #[inline(always)]
4346        fn new_empty() -> Self {
4347            Self::Linear
4348        }
4349
4350        #[inline]
4351        unsafe fn decode(
4352            &mut self,
4353            decoder: &mut fidl::encoding::Decoder<'_, D>,
4354            offset: usize,
4355            _depth: fidl::encoding::Depth,
4356        ) -> fidl::Result<()> {
4357            decoder.debug_check_bounds::<Self>(offset);
4358            let prim = decoder.read_num::<u32>(offset);
4359
4360            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4361            Ok(())
4362        }
4363    }
4364    unsafe impl fidl::encoding::TypeMarker for AudioRenderUsage {
4365        type Owned = Self;
4366
4367        #[inline(always)]
4368        fn inline_align(_context: fidl::encoding::Context) -> usize {
4369            std::mem::align_of::<u32>()
4370        }
4371
4372        #[inline(always)]
4373        fn inline_size(_context: fidl::encoding::Context) -> usize {
4374            std::mem::size_of::<u32>()
4375        }
4376
4377        #[inline(always)]
4378        fn encode_is_copy() -> bool {
4379            true
4380        }
4381
4382        #[inline(always)]
4383        fn decode_is_copy() -> bool {
4384            false
4385        }
4386    }
4387
4388    impl fidl::encoding::ValueTypeMarker for AudioRenderUsage {
4389        type Borrowed<'a> = Self;
4390        #[inline(always)]
4391        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4392            *value
4393        }
4394    }
4395
4396    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4397        for AudioRenderUsage
4398    {
4399        #[inline]
4400        unsafe fn encode(
4401            self,
4402            encoder: &mut fidl::encoding::Encoder<'_, D>,
4403            offset: usize,
4404            _depth: fidl::encoding::Depth,
4405        ) -> fidl::Result<()> {
4406            encoder.debug_check_bounds::<Self>(offset);
4407            encoder.write_num(self.into_primitive(), offset);
4408            Ok(())
4409        }
4410    }
4411
4412    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioRenderUsage {
4413        #[inline(always)]
4414        fn new_empty() -> Self {
4415            Self::Background
4416        }
4417
4418        #[inline]
4419        unsafe fn decode(
4420            &mut self,
4421            decoder: &mut fidl::encoding::Decoder<'_, D>,
4422            offset: usize,
4423            _depth: fidl::encoding::Depth,
4424        ) -> fidl::Result<()> {
4425            decoder.debug_check_bounds::<Self>(offset);
4426            let prim = decoder.read_num::<u32>(offset);
4427
4428            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4429            Ok(())
4430        }
4431    }
4432    unsafe impl fidl::encoding::TypeMarker for AudioRenderUsage2 {
4433        type Owned = Self;
4434
4435        #[inline(always)]
4436        fn inline_align(_context: fidl::encoding::Context) -> usize {
4437            std::mem::align_of::<u32>()
4438        }
4439
4440        #[inline(always)]
4441        fn inline_size(_context: fidl::encoding::Context) -> usize {
4442            std::mem::size_of::<u32>()
4443        }
4444
4445        #[inline(always)]
4446        fn encode_is_copy() -> bool {
4447            false
4448        }
4449
4450        #[inline(always)]
4451        fn decode_is_copy() -> bool {
4452            false
4453        }
4454    }
4455
4456    impl fidl::encoding::ValueTypeMarker for AudioRenderUsage2 {
4457        type Borrowed<'a> = Self;
4458        #[inline(always)]
4459        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4460            *value
4461        }
4462    }
4463
4464    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4465        for AudioRenderUsage2
4466    {
4467        #[inline]
4468        unsafe fn encode(
4469            self,
4470            encoder: &mut fidl::encoding::Encoder<'_, D>,
4471            offset: usize,
4472            _depth: fidl::encoding::Depth,
4473        ) -> fidl::Result<()> {
4474            encoder.debug_check_bounds::<Self>(offset);
4475            encoder.write_num(self.into_primitive(), offset);
4476            Ok(())
4477        }
4478    }
4479
4480    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioRenderUsage2 {
4481        #[inline(always)]
4482        fn new_empty() -> Self {
4483            Self::unknown()
4484        }
4485
4486        #[inline]
4487        unsafe fn decode(
4488            &mut self,
4489            decoder: &mut fidl::encoding::Decoder<'_, D>,
4490            offset: usize,
4491            _depth: fidl::encoding::Depth,
4492        ) -> fidl::Result<()> {
4493            decoder.debug_check_bounds::<Self>(offset);
4494            let prim = decoder.read_num::<u32>(offset);
4495
4496            *self = Self::from_primitive_allow_unknown(prim);
4497            Ok(())
4498        }
4499    }
4500    unsafe impl fidl::encoding::TypeMarker for AudioSampleFormat {
4501        type Owned = Self;
4502
4503        #[inline(always)]
4504        fn inline_align(_context: fidl::encoding::Context) -> usize {
4505            std::mem::align_of::<u32>()
4506        }
4507
4508        #[inline(always)]
4509        fn inline_size(_context: fidl::encoding::Context) -> usize {
4510            std::mem::size_of::<u32>()
4511        }
4512
4513        #[inline(always)]
4514        fn encode_is_copy() -> bool {
4515            true
4516        }
4517
4518        #[inline(always)]
4519        fn decode_is_copy() -> bool {
4520            false
4521        }
4522    }
4523
4524    impl fidl::encoding::ValueTypeMarker for AudioSampleFormat {
4525        type Borrowed<'a> = Self;
4526        #[inline(always)]
4527        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4528            *value
4529        }
4530    }
4531
4532    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4533        for AudioSampleFormat
4534    {
4535        #[inline]
4536        unsafe fn encode(
4537            self,
4538            encoder: &mut fidl::encoding::Encoder<'_, D>,
4539            offset: usize,
4540            _depth: fidl::encoding::Depth,
4541        ) -> fidl::Result<()> {
4542            encoder.debug_check_bounds::<Self>(offset);
4543            encoder.write_num(self.into_primitive(), offset);
4544            Ok(())
4545        }
4546    }
4547
4548    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioSampleFormat {
4549        #[inline(always)]
4550        fn new_empty() -> Self {
4551            Self::Unsigned8
4552        }
4553
4554        #[inline]
4555        unsafe fn decode(
4556            &mut self,
4557            decoder: &mut fidl::encoding::Decoder<'_, D>,
4558            offset: usize,
4559            _depth: fidl::encoding::Depth,
4560        ) -> fidl::Result<()> {
4561            decoder.debug_check_bounds::<Self>(offset);
4562            let prim = decoder.read_num::<u32>(offset);
4563
4564            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4565            Ok(())
4566        }
4567    }
4568    unsafe impl fidl::encoding::TypeMarker for Behavior {
4569        type Owned = Self;
4570
4571        #[inline(always)]
4572        fn inline_align(_context: fidl::encoding::Context) -> usize {
4573            std::mem::align_of::<u32>()
4574        }
4575
4576        #[inline(always)]
4577        fn inline_size(_context: fidl::encoding::Context) -> usize {
4578            std::mem::size_of::<u32>()
4579        }
4580
4581        #[inline(always)]
4582        fn encode_is_copy() -> bool {
4583            false
4584        }
4585
4586        #[inline(always)]
4587        fn decode_is_copy() -> bool {
4588            false
4589        }
4590    }
4591
4592    impl fidl::encoding::ValueTypeMarker for Behavior {
4593        type Borrowed<'a> = Self;
4594        #[inline(always)]
4595        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4596            *value
4597        }
4598    }
4599
4600    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Behavior {
4601        #[inline]
4602        unsafe fn encode(
4603            self,
4604            encoder: &mut fidl::encoding::Encoder<'_, D>,
4605            offset: usize,
4606            _depth: fidl::encoding::Depth,
4607        ) -> fidl::Result<()> {
4608            encoder.debug_check_bounds::<Self>(offset);
4609            encoder.write_num(self.into_primitive(), offset);
4610            Ok(())
4611        }
4612    }
4613
4614    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Behavior {
4615        #[inline(always)]
4616        fn new_empty() -> Self {
4617            Self::unknown()
4618        }
4619
4620        #[inline]
4621        unsafe fn decode(
4622            &mut self,
4623            decoder: &mut fidl::encoding::Decoder<'_, D>,
4624            offset: usize,
4625            _depth: fidl::encoding::Depth,
4626        ) -> fidl::Result<()> {
4627            decoder.debug_check_bounds::<Self>(offset);
4628            let prim = decoder.read_num::<u32>(offset);
4629
4630            *self = Self::from_primitive_allow_unknown(prim);
4631            Ok(())
4632        }
4633    }
4634    unsafe impl fidl::encoding::TypeMarker for CodecProfile {
4635        type Owned = Self;
4636
4637        #[inline(always)]
4638        fn inline_align(_context: fidl::encoding::Context) -> usize {
4639            std::mem::align_of::<u32>()
4640        }
4641
4642        #[inline(always)]
4643        fn inline_size(_context: fidl::encoding::Context) -> usize {
4644            std::mem::size_of::<u32>()
4645        }
4646
4647        #[inline(always)]
4648        fn encode_is_copy() -> bool {
4649            false
4650        }
4651
4652        #[inline(always)]
4653        fn decode_is_copy() -> bool {
4654            false
4655        }
4656    }
4657
4658    impl fidl::encoding::ValueTypeMarker for CodecProfile {
4659        type Borrowed<'a> = Self;
4660        #[inline(always)]
4661        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4662            *value
4663        }
4664    }
4665
4666    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for CodecProfile {
4667        #[inline]
4668        unsafe fn encode(
4669            self,
4670            encoder: &mut fidl::encoding::Encoder<'_, D>,
4671            offset: usize,
4672            _depth: fidl::encoding::Depth,
4673        ) -> fidl::Result<()> {
4674            encoder.debug_check_bounds::<Self>(offset);
4675            encoder.write_num(self.into_primitive(), offset);
4676            Ok(())
4677        }
4678    }
4679
4680    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecProfile {
4681        #[inline(always)]
4682        fn new_empty() -> Self {
4683            Self::unknown()
4684        }
4685
4686        #[inline]
4687        unsafe fn decode(
4688            &mut self,
4689            decoder: &mut fidl::encoding::Decoder<'_, D>,
4690            offset: usize,
4691            _depth: fidl::encoding::Depth,
4692        ) -> fidl::Result<()> {
4693            decoder.debug_check_bounds::<Self>(offset);
4694            let prim = decoder.read_num::<u32>(offset);
4695
4696            *self = Self::from_primitive_allow_unknown(prim);
4697            Ok(())
4698        }
4699    }
4700    unsafe impl fidl::encoding::TypeMarker for ColorSpace {
4701        type Owned = Self;
4702
4703        #[inline(always)]
4704        fn inline_align(_context: fidl::encoding::Context) -> usize {
4705            std::mem::align_of::<u32>()
4706        }
4707
4708        #[inline(always)]
4709        fn inline_size(_context: fidl::encoding::Context) -> usize {
4710            std::mem::size_of::<u32>()
4711        }
4712
4713        #[inline(always)]
4714        fn encode_is_copy() -> bool {
4715            true
4716        }
4717
4718        #[inline(always)]
4719        fn decode_is_copy() -> bool {
4720            false
4721        }
4722    }
4723
4724    impl fidl::encoding::ValueTypeMarker for ColorSpace {
4725        type Borrowed<'a> = Self;
4726        #[inline(always)]
4727        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4728            *value
4729        }
4730    }
4731
4732    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ColorSpace {
4733        #[inline]
4734        unsafe fn encode(
4735            self,
4736            encoder: &mut fidl::encoding::Encoder<'_, D>,
4737            offset: usize,
4738            _depth: fidl::encoding::Depth,
4739        ) -> fidl::Result<()> {
4740            encoder.debug_check_bounds::<Self>(offset);
4741            encoder.write_num(self.into_primitive(), offset);
4742            Ok(())
4743        }
4744    }
4745
4746    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ColorSpace {
4747        #[inline(always)]
4748        fn new_empty() -> Self {
4749            Self::Unknown
4750        }
4751
4752        #[inline]
4753        unsafe fn decode(
4754            &mut self,
4755            decoder: &mut fidl::encoding::Decoder<'_, D>,
4756            offset: usize,
4757            _depth: fidl::encoding::Depth,
4758        ) -> fidl::Result<()> {
4759            decoder.debug_check_bounds::<Self>(offset);
4760            let prim = decoder.read_num::<u32>(offset);
4761
4762            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4763            Ok(())
4764        }
4765    }
4766    unsafe impl fidl::encoding::TypeMarker for Lc3FrameDuration {
4767        type Owned = Self;
4768
4769        #[inline(always)]
4770        fn inline_align(_context: fidl::encoding::Context) -> usize {
4771            std::mem::align_of::<u32>()
4772        }
4773
4774        #[inline(always)]
4775        fn inline_size(_context: fidl::encoding::Context) -> usize {
4776            std::mem::size_of::<u32>()
4777        }
4778
4779        #[inline(always)]
4780        fn encode_is_copy() -> bool {
4781            false
4782        }
4783
4784        #[inline(always)]
4785        fn decode_is_copy() -> bool {
4786            false
4787        }
4788    }
4789
4790    impl fidl::encoding::ValueTypeMarker for Lc3FrameDuration {
4791        type Borrowed<'a> = Self;
4792        #[inline(always)]
4793        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4794            *value
4795        }
4796    }
4797
4798    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4799        for Lc3FrameDuration
4800    {
4801        #[inline]
4802        unsafe fn encode(
4803            self,
4804            encoder: &mut fidl::encoding::Encoder<'_, D>,
4805            offset: usize,
4806            _depth: fidl::encoding::Depth,
4807        ) -> fidl::Result<()> {
4808            encoder.debug_check_bounds::<Self>(offset);
4809            encoder.write_num(self.into_primitive(), offset);
4810            Ok(())
4811        }
4812    }
4813
4814    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Lc3FrameDuration {
4815        #[inline(always)]
4816        fn new_empty() -> Self {
4817            Self::unknown()
4818        }
4819
4820        #[inline]
4821        unsafe fn decode(
4822            &mut self,
4823            decoder: &mut fidl::encoding::Decoder<'_, D>,
4824            offset: usize,
4825            _depth: fidl::encoding::Depth,
4826        ) -> fidl::Result<()> {
4827            decoder.debug_check_bounds::<Self>(offset);
4828            let prim = decoder.read_num::<u32>(offset);
4829
4830            *self = Self::from_primitive_allow_unknown(prim);
4831            Ok(())
4832        }
4833    }
4834    unsafe impl fidl::encoding::TypeMarker for SbcAllocation {
4835        type Owned = Self;
4836
4837        #[inline(always)]
4838        fn inline_align(_context: fidl::encoding::Context) -> usize {
4839            std::mem::align_of::<u32>()
4840        }
4841
4842        #[inline(always)]
4843        fn inline_size(_context: fidl::encoding::Context) -> usize {
4844            std::mem::size_of::<u32>()
4845        }
4846
4847        #[inline(always)]
4848        fn encode_is_copy() -> bool {
4849            true
4850        }
4851
4852        #[inline(always)]
4853        fn decode_is_copy() -> bool {
4854            false
4855        }
4856    }
4857
4858    impl fidl::encoding::ValueTypeMarker for SbcAllocation {
4859        type Borrowed<'a> = Self;
4860        #[inline(always)]
4861        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4862            *value
4863        }
4864    }
4865
4866    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcAllocation {
4867        #[inline]
4868        unsafe fn encode(
4869            self,
4870            encoder: &mut fidl::encoding::Encoder<'_, D>,
4871            offset: usize,
4872            _depth: fidl::encoding::Depth,
4873        ) -> fidl::Result<()> {
4874            encoder.debug_check_bounds::<Self>(offset);
4875            encoder.write_num(self.into_primitive(), offset);
4876            Ok(())
4877        }
4878    }
4879
4880    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcAllocation {
4881        #[inline(always)]
4882        fn new_empty() -> Self {
4883            Self::AllocLoudness
4884        }
4885
4886        #[inline]
4887        unsafe fn decode(
4888            &mut self,
4889            decoder: &mut fidl::encoding::Decoder<'_, D>,
4890            offset: usize,
4891            _depth: fidl::encoding::Depth,
4892        ) -> fidl::Result<()> {
4893            decoder.debug_check_bounds::<Self>(offset);
4894            let prim = decoder.read_num::<u32>(offset);
4895
4896            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4897            Ok(())
4898        }
4899    }
4900    unsafe impl fidl::encoding::TypeMarker for SbcBlockCount {
4901        type Owned = Self;
4902
4903        #[inline(always)]
4904        fn inline_align(_context: fidl::encoding::Context) -> usize {
4905            std::mem::align_of::<u32>()
4906        }
4907
4908        #[inline(always)]
4909        fn inline_size(_context: fidl::encoding::Context) -> usize {
4910            std::mem::size_of::<u32>()
4911        }
4912
4913        #[inline(always)]
4914        fn encode_is_copy() -> bool {
4915            true
4916        }
4917
4918        #[inline(always)]
4919        fn decode_is_copy() -> bool {
4920            false
4921        }
4922    }
4923
4924    impl fidl::encoding::ValueTypeMarker for SbcBlockCount {
4925        type Borrowed<'a> = Self;
4926        #[inline(always)]
4927        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4928            *value
4929        }
4930    }
4931
4932    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcBlockCount {
4933        #[inline]
4934        unsafe fn encode(
4935            self,
4936            encoder: &mut fidl::encoding::Encoder<'_, D>,
4937            offset: usize,
4938            _depth: fidl::encoding::Depth,
4939        ) -> fidl::Result<()> {
4940            encoder.debug_check_bounds::<Self>(offset);
4941            encoder.write_num(self.into_primitive(), offset);
4942            Ok(())
4943        }
4944    }
4945
4946    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcBlockCount {
4947        #[inline(always)]
4948        fn new_empty() -> Self {
4949            Self::BlockCount4
4950        }
4951
4952        #[inline]
4953        unsafe fn decode(
4954            &mut self,
4955            decoder: &mut fidl::encoding::Decoder<'_, D>,
4956            offset: usize,
4957            _depth: fidl::encoding::Depth,
4958        ) -> fidl::Result<()> {
4959            decoder.debug_check_bounds::<Self>(offset);
4960            let prim = decoder.read_num::<u32>(offset);
4961
4962            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4963            Ok(())
4964        }
4965    }
4966    unsafe impl fidl::encoding::TypeMarker for SbcChannelMode {
4967        type Owned = Self;
4968
4969        #[inline(always)]
4970        fn inline_align(_context: fidl::encoding::Context) -> usize {
4971            std::mem::align_of::<u32>()
4972        }
4973
4974        #[inline(always)]
4975        fn inline_size(_context: fidl::encoding::Context) -> usize {
4976            std::mem::size_of::<u32>()
4977        }
4978
4979        #[inline(always)]
4980        fn encode_is_copy() -> bool {
4981            true
4982        }
4983
4984        #[inline(always)]
4985        fn decode_is_copy() -> bool {
4986            false
4987        }
4988    }
4989
4990    impl fidl::encoding::ValueTypeMarker for SbcChannelMode {
4991        type Borrowed<'a> = Self;
4992        #[inline(always)]
4993        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4994            *value
4995        }
4996    }
4997
4998    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcChannelMode {
4999        #[inline]
5000        unsafe fn encode(
5001            self,
5002            encoder: &mut fidl::encoding::Encoder<'_, D>,
5003            offset: usize,
5004            _depth: fidl::encoding::Depth,
5005        ) -> fidl::Result<()> {
5006            encoder.debug_check_bounds::<Self>(offset);
5007            encoder.write_num(self.into_primitive(), offset);
5008            Ok(())
5009        }
5010    }
5011
5012    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcChannelMode {
5013        #[inline(always)]
5014        fn new_empty() -> Self {
5015            Self::Mono
5016        }
5017
5018        #[inline]
5019        unsafe fn decode(
5020            &mut self,
5021            decoder: &mut fidl::encoding::Decoder<'_, D>,
5022            offset: usize,
5023            _depth: fidl::encoding::Depth,
5024        ) -> fidl::Result<()> {
5025            decoder.debug_check_bounds::<Self>(offset);
5026            let prim = decoder.read_num::<u32>(offset);
5027
5028            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
5029            Ok(())
5030        }
5031    }
5032    unsafe impl fidl::encoding::TypeMarker for SbcSubBands {
5033        type Owned = Self;
5034
5035        #[inline(always)]
5036        fn inline_align(_context: fidl::encoding::Context) -> usize {
5037            std::mem::align_of::<u32>()
5038        }
5039
5040        #[inline(always)]
5041        fn inline_size(_context: fidl::encoding::Context) -> usize {
5042            std::mem::size_of::<u32>()
5043        }
5044
5045        #[inline(always)]
5046        fn encode_is_copy() -> bool {
5047            true
5048        }
5049
5050        #[inline(always)]
5051        fn decode_is_copy() -> bool {
5052            false
5053        }
5054    }
5055
5056    impl fidl::encoding::ValueTypeMarker for SbcSubBands {
5057        type Borrowed<'a> = Self;
5058        #[inline(always)]
5059        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5060            *value
5061        }
5062    }
5063
5064    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcSubBands {
5065        #[inline]
5066        unsafe fn encode(
5067            self,
5068            encoder: &mut fidl::encoding::Encoder<'_, D>,
5069            offset: usize,
5070            _depth: fidl::encoding::Depth,
5071        ) -> fidl::Result<()> {
5072            encoder.debug_check_bounds::<Self>(offset);
5073            encoder.write_num(self.into_primitive(), offset);
5074            Ok(())
5075        }
5076    }
5077
5078    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcSubBands {
5079        #[inline(always)]
5080        fn new_empty() -> Self {
5081            Self::SubBands4
5082        }
5083
5084        #[inline]
5085        unsafe fn decode(
5086            &mut self,
5087            decoder: &mut fidl::encoding::Decoder<'_, D>,
5088            offset: usize,
5089            _depth: fidl::encoding::Depth,
5090        ) -> fidl::Result<()> {
5091            decoder.debug_check_bounds::<Self>(offset);
5092            let prim = decoder.read_num::<u32>(offset);
5093
5094            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
5095            Ok(())
5096        }
5097    }
5098    unsafe impl fidl::encoding::TypeMarker for StreamError {
5099        type Owned = Self;
5100
5101        #[inline(always)]
5102        fn inline_align(_context: fidl::encoding::Context) -> usize {
5103            std::mem::align_of::<u32>()
5104        }
5105
5106        #[inline(always)]
5107        fn inline_size(_context: fidl::encoding::Context) -> usize {
5108            std::mem::size_of::<u32>()
5109        }
5110
5111        #[inline(always)]
5112        fn encode_is_copy() -> bool {
5113            true
5114        }
5115
5116        #[inline(always)]
5117        fn decode_is_copy() -> bool {
5118            false
5119        }
5120    }
5121
5122    impl fidl::encoding::ValueTypeMarker for StreamError {
5123        type Borrowed<'a> = Self;
5124        #[inline(always)]
5125        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5126            *value
5127        }
5128    }
5129
5130    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for StreamError {
5131        #[inline]
5132        unsafe fn encode(
5133            self,
5134            encoder: &mut fidl::encoding::Encoder<'_, D>,
5135            offset: usize,
5136            _depth: fidl::encoding::Depth,
5137        ) -> fidl::Result<()> {
5138            encoder.debug_check_bounds::<Self>(offset);
5139            encoder.write_num(self.into_primitive(), offset);
5140            Ok(())
5141        }
5142    }
5143
5144    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamError {
5145        #[inline(always)]
5146        fn new_empty() -> Self {
5147            Self::Unknown
5148        }
5149
5150        #[inline]
5151        unsafe fn decode(
5152            &mut self,
5153            decoder: &mut fidl::encoding::Decoder<'_, D>,
5154            offset: usize,
5155            _depth: fidl::encoding::Depth,
5156        ) -> fidl::Result<()> {
5157            decoder.debug_check_bounds::<Self>(offset);
5158            let prim = decoder.read_num::<u32>(offset);
5159
5160            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
5161            Ok(())
5162        }
5163    }
5164    unsafe impl fidl::encoding::TypeMarker for VideoColorSpace {
5165        type Owned = Self;
5166
5167        #[inline(always)]
5168        fn inline_align(_context: fidl::encoding::Context) -> usize {
5169            std::mem::align_of::<u32>()
5170        }
5171
5172        #[inline(always)]
5173        fn inline_size(_context: fidl::encoding::Context) -> usize {
5174            std::mem::size_of::<u32>()
5175        }
5176
5177        #[inline(always)]
5178        fn encode_is_copy() -> bool {
5179            true
5180        }
5181
5182        #[inline(always)]
5183        fn decode_is_copy() -> bool {
5184            false
5185        }
5186    }
5187
5188    impl fidl::encoding::ValueTypeMarker for VideoColorSpace {
5189        type Borrowed<'a> = Self;
5190        #[inline(always)]
5191        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5192            *value
5193        }
5194    }
5195
5196    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
5197        for VideoColorSpace
5198    {
5199        #[inline]
5200        unsafe fn encode(
5201            self,
5202            encoder: &mut fidl::encoding::Encoder<'_, D>,
5203            offset: usize,
5204            _depth: fidl::encoding::Depth,
5205        ) -> fidl::Result<()> {
5206            encoder.debug_check_bounds::<Self>(offset);
5207            encoder.write_num(self.into_primitive(), offset);
5208            Ok(())
5209        }
5210    }
5211
5212    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoColorSpace {
5213        #[inline(always)]
5214        fn new_empty() -> Self {
5215            Self::Invalid
5216        }
5217
5218        #[inline]
5219        unsafe fn decode(
5220            &mut self,
5221            decoder: &mut fidl::encoding::Decoder<'_, D>,
5222            offset: usize,
5223            _depth: fidl::encoding::Depth,
5224        ) -> fidl::Result<()> {
5225            decoder.debug_check_bounds::<Self>(offset);
5226            let prim = decoder.read_num::<u32>(offset);
5227
5228            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
5229            Ok(())
5230        }
5231    }
5232
5233    impl fidl::encoding::ValueTypeMarker for AacConstantBitRate {
5234        type Borrowed<'a> = &'a Self;
5235        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5236            value
5237        }
5238    }
5239
5240    unsafe impl fidl::encoding::TypeMarker for AacConstantBitRate {
5241        type Owned = Self;
5242
5243        #[inline(always)]
5244        fn inline_align(_context: fidl::encoding::Context) -> usize {
5245            4
5246        }
5247
5248        #[inline(always)]
5249        fn inline_size(_context: fidl::encoding::Context) -> usize {
5250            4
5251        }
5252        #[inline(always)]
5253        fn encode_is_copy() -> bool {
5254            true
5255        }
5256
5257        #[inline(always)]
5258        fn decode_is_copy() -> bool {
5259            true
5260        }
5261    }
5262
5263    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacConstantBitRate, D>
5264        for &AacConstantBitRate
5265    {
5266        #[inline]
5267        unsafe fn encode(
5268            self,
5269            encoder: &mut fidl::encoding::Encoder<'_, D>,
5270            offset: usize,
5271            _depth: fidl::encoding::Depth,
5272        ) -> fidl::Result<()> {
5273            encoder.debug_check_bounds::<AacConstantBitRate>(offset);
5274            unsafe {
5275                // Copy the object into the buffer.
5276                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5277                (buf_ptr as *mut AacConstantBitRate)
5278                    .write_unaligned((self as *const AacConstantBitRate).read());
5279                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5280                // done second because the memcpy will write garbage to these bytes.
5281            }
5282            Ok(())
5283        }
5284    }
5285    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
5286        fidl::encoding::Encode<AacConstantBitRate, D> for (T0,)
5287    {
5288        #[inline]
5289        unsafe fn encode(
5290            self,
5291            encoder: &mut fidl::encoding::Encoder<'_, D>,
5292            offset: usize,
5293            depth: fidl::encoding::Depth,
5294        ) -> fidl::Result<()> {
5295            encoder.debug_check_bounds::<AacConstantBitRate>(offset);
5296            // Zero out padding regions. There's no need to apply masks
5297            // because the unmasked parts will be overwritten by fields.
5298            // Write the fields.
5299            self.0.encode(encoder, offset + 0, depth)?;
5300            Ok(())
5301        }
5302    }
5303
5304    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacConstantBitRate {
5305        #[inline(always)]
5306        fn new_empty() -> Self {
5307            Self { bit_rate: fidl::new_empty!(u32, D) }
5308        }
5309
5310        #[inline]
5311        unsafe fn decode(
5312            &mut self,
5313            decoder: &mut fidl::encoding::Decoder<'_, D>,
5314            offset: usize,
5315            _depth: fidl::encoding::Depth,
5316        ) -> fidl::Result<()> {
5317            decoder.debug_check_bounds::<Self>(offset);
5318            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5319            // Verify that padding bytes are zero.
5320            // Copy from the buffer into the object.
5321            unsafe {
5322                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
5323            }
5324            Ok(())
5325        }
5326    }
5327
5328    impl fidl::encoding::ValueTypeMarker for AacEncoderSettings {
5329        type Borrowed<'a> = &'a Self;
5330        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5331            value
5332        }
5333    }
5334
5335    unsafe impl fidl::encoding::TypeMarker for AacEncoderSettings {
5336        type Owned = Self;
5337
5338        #[inline(always)]
5339        fn inline_align(_context: fidl::encoding::Context) -> usize {
5340            8
5341        }
5342
5343        #[inline(always)]
5344        fn inline_size(_context: fidl::encoding::Context) -> usize {
5345            48
5346        }
5347    }
5348
5349    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacEncoderSettings, D>
5350        for &AacEncoderSettings
5351    {
5352        #[inline]
5353        unsafe fn encode(
5354            self,
5355            encoder: &mut fidl::encoding::Encoder<'_, D>,
5356            offset: usize,
5357            _depth: fidl::encoding::Depth,
5358        ) -> fidl::Result<()> {
5359            encoder.debug_check_bounds::<AacEncoderSettings>(offset);
5360            // Delegate to tuple encoding.
5361            fidl::encoding::Encode::<AacEncoderSettings, D>::encode(
5362                (
5363                    <AacTransport as fidl::encoding::ValueTypeMarker>::borrow(&self.transport),
5364                    <AacChannelMode as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_mode),
5365                    <AacBitRate as fidl::encoding::ValueTypeMarker>::borrow(&self.bit_rate),
5366                    <AacAudioObjectType as fidl::encoding::ValueTypeMarker>::borrow(&self.aot),
5367                ),
5368                encoder,
5369                offset,
5370                _depth,
5371            )
5372        }
5373    }
5374    unsafe impl<
5375        D: fidl::encoding::ResourceDialect,
5376        T0: fidl::encoding::Encode<AacTransport, D>,
5377        T1: fidl::encoding::Encode<AacChannelMode, D>,
5378        T2: fidl::encoding::Encode<AacBitRate, D>,
5379        T3: fidl::encoding::Encode<AacAudioObjectType, D>,
5380    > fidl::encoding::Encode<AacEncoderSettings, D> for (T0, T1, T2, T3)
5381    {
5382        #[inline]
5383        unsafe fn encode(
5384            self,
5385            encoder: &mut fidl::encoding::Encoder<'_, D>,
5386            offset: usize,
5387            depth: fidl::encoding::Depth,
5388        ) -> fidl::Result<()> {
5389            encoder.debug_check_bounds::<AacEncoderSettings>(offset);
5390            // Zero out padding regions. There's no need to apply masks
5391            // because the unmasked parts will be overwritten by fields.
5392            unsafe {
5393                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
5394                (ptr as *mut u64).write_unaligned(0);
5395            }
5396            unsafe {
5397                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
5398                (ptr as *mut u64).write_unaligned(0);
5399            }
5400            // Write the fields.
5401            self.0.encode(encoder, offset + 0, depth)?;
5402            self.1.encode(encoder, offset + 16, depth)?;
5403            self.2.encode(encoder, offset + 24, depth)?;
5404            self.3.encode(encoder, offset + 40, depth)?;
5405            Ok(())
5406        }
5407    }
5408
5409    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacEncoderSettings {
5410        #[inline(always)]
5411        fn new_empty() -> Self {
5412            Self {
5413                transport: fidl::new_empty!(AacTransport, D),
5414                channel_mode: fidl::new_empty!(AacChannelMode, D),
5415                bit_rate: fidl::new_empty!(AacBitRate, D),
5416                aot: fidl::new_empty!(AacAudioObjectType, D),
5417            }
5418        }
5419
5420        #[inline]
5421        unsafe fn decode(
5422            &mut self,
5423            decoder: &mut fidl::encoding::Decoder<'_, D>,
5424            offset: usize,
5425            _depth: fidl::encoding::Depth,
5426        ) -> fidl::Result<()> {
5427            decoder.debug_check_bounds::<Self>(offset);
5428            // Verify that padding bytes are zero.
5429            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
5430            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5431            let mask = 0xffffffff00000000u64;
5432            let maskedval = padval & mask;
5433            if maskedval != 0 {
5434                return Err(fidl::Error::NonZeroPadding {
5435                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
5436                });
5437            }
5438            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
5439            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5440            let mask = 0xffffffff00000000u64;
5441            let maskedval = padval & mask;
5442            if maskedval != 0 {
5443                return Err(fidl::Error::NonZeroPadding {
5444                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
5445                });
5446            }
5447            fidl::decode!(AacTransport, D, &mut self.transport, decoder, offset + 0, _depth)?;
5448            fidl::decode!(AacChannelMode, D, &mut self.channel_mode, decoder, offset + 16, _depth)?;
5449            fidl::decode!(AacBitRate, D, &mut self.bit_rate, decoder, offset + 24, _depth)?;
5450            fidl::decode!(AacAudioObjectType, D, &mut self.aot, decoder, offset + 40, _depth)?;
5451            Ok(())
5452        }
5453    }
5454
5455    impl fidl::encoding::ValueTypeMarker for AacTransportAdts {
5456        type Borrowed<'a> = &'a Self;
5457        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5458            value
5459        }
5460    }
5461
5462    unsafe impl fidl::encoding::TypeMarker for AacTransportAdts {
5463        type Owned = Self;
5464
5465        #[inline(always)]
5466        fn inline_align(_context: fidl::encoding::Context) -> usize {
5467            1
5468        }
5469
5470        #[inline(always)]
5471        fn inline_size(_context: fidl::encoding::Context) -> usize {
5472            1
5473        }
5474    }
5475
5476    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransportAdts, D>
5477        for &AacTransportAdts
5478    {
5479        #[inline]
5480        unsafe fn encode(
5481            self,
5482            encoder: &mut fidl::encoding::Encoder<'_, D>,
5483            offset: usize,
5484            _depth: fidl::encoding::Depth,
5485        ) -> fidl::Result<()> {
5486            encoder.debug_check_bounds::<AacTransportAdts>(offset);
5487            encoder.write_num(0u8, offset);
5488            Ok(())
5489        }
5490    }
5491
5492    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransportAdts {
5493        #[inline(always)]
5494        fn new_empty() -> Self {
5495            Self
5496        }
5497
5498        #[inline]
5499        unsafe fn decode(
5500            &mut self,
5501            decoder: &mut fidl::encoding::Decoder<'_, D>,
5502            offset: usize,
5503            _depth: fidl::encoding::Depth,
5504        ) -> fidl::Result<()> {
5505            decoder.debug_check_bounds::<Self>(offset);
5506            match decoder.read_num::<u8>(offset) {
5507                0 => Ok(()),
5508                _ => Err(fidl::Error::Invalid),
5509            }
5510        }
5511    }
5512
5513    impl fidl::encoding::ValueTypeMarker for AacTransportLatm {
5514        type Borrowed<'a> = &'a Self;
5515        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5516            value
5517        }
5518    }
5519
5520    unsafe impl fidl::encoding::TypeMarker for AacTransportLatm {
5521        type Owned = Self;
5522
5523        #[inline(always)]
5524        fn inline_align(_context: fidl::encoding::Context) -> usize {
5525            1
5526        }
5527
5528        #[inline(always)]
5529        fn inline_size(_context: fidl::encoding::Context) -> usize {
5530            1
5531        }
5532    }
5533
5534    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransportLatm, D>
5535        for &AacTransportLatm
5536    {
5537        #[inline]
5538        unsafe fn encode(
5539            self,
5540            encoder: &mut fidl::encoding::Encoder<'_, D>,
5541            offset: usize,
5542            _depth: fidl::encoding::Depth,
5543        ) -> fidl::Result<()> {
5544            encoder.debug_check_bounds::<AacTransportLatm>(offset);
5545            // Delegate to tuple encoding.
5546            fidl::encoding::Encode::<AacTransportLatm, D>::encode(
5547                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.mux_config_present),),
5548                encoder,
5549                offset,
5550                _depth,
5551            )
5552        }
5553    }
5554    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
5555        fidl::encoding::Encode<AacTransportLatm, D> for (T0,)
5556    {
5557        #[inline]
5558        unsafe fn encode(
5559            self,
5560            encoder: &mut fidl::encoding::Encoder<'_, D>,
5561            offset: usize,
5562            depth: fidl::encoding::Depth,
5563        ) -> fidl::Result<()> {
5564            encoder.debug_check_bounds::<AacTransportLatm>(offset);
5565            // Zero out padding regions. There's no need to apply masks
5566            // because the unmasked parts will be overwritten by fields.
5567            // Write the fields.
5568            self.0.encode(encoder, offset + 0, depth)?;
5569            Ok(())
5570        }
5571    }
5572
5573    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransportLatm {
5574        #[inline(always)]
5575        fn new_empty() -> Self {
5576            Self { mux_config_present: fidl::new_empty!(bool, D) }
5577        }
5578
5579        #[inline]
5580        unsafe fn decode(
5581            &mut self,
5582            decoder: &mut fidl::encoding::Decoder<'_, D>,
5583            offset: usize,
5584            _depth: fidl::encoding::Depth,
5585        ) -> fidl::Result<()> {
5586            decoder.debug_check_bounds::<Self>(offset);
5587            // Verify that padding bytes are zero.
5588            fidl::decode!(bool, D, &mut self.mux_config_present, decoder, offset + 0, _depth)?;
5589            Ok(())
5590        }
5591    }
5592
5593    impl fidl::encoding::ValueTypeMarker for AacTransportRaw {
5594        type Borrowed<'a> = &'a Self;
5595        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5596            value
5597        }
5598    }
5599
5600    unsafe impl fidl::encoding::TypeMarker for AacTransportRaw {
5601        type Owned = Self;
5602
5603        #[inline(always)]
5604        fn inline_align(_context: fidl::encoding::Context) -> usize {
5605            1
5606        }
5607
5608        #[inline(always)]
5609        fn inline_size(_context: fidl::encoding::Context) -> usize {
5610            1
5611        }
5612    }
5613
5614    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransportRaw, D>
5615        for &AacTransportRaw
5616    {
5617        #[inline]
5618        unsafe fn encode(
5619            self,
5620            encoder: &mut fidl::encoding::Encoder<'_, D>,
5621            offset: usize,
5622            _depth: fidl::encoding::Depth,
5623        ) -> fidl::Result<()> {
5624            encoder.debug_check_bounds::<AacTransportRaw>(offset);
5625            encoder.write_num(0u8, offset);
5626            Ok(())
5627        }
5628    }
5629
5630    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransportRaw {
5631        #[inline(always)]
5632        fn new_empty() -> Self {
5633            Self
5634        }
5635
5636        #[inline]
5637        unsafe fn decode(
5638            &mut self,
5639            decoder: &mut fidl::encoding::Decoder<'_, D>,
5640            offset: usize,
5641            _depth: fidl::encoding::Depth,
5642        ) -> fidl::Result<()> {
5643            decoder.debug_check_bounds::<Self>(offset);
5644            match decoder.read_num::<u8>(offset) {
5645                0 => Ok(()),
5646                _ => Err(fidl::Error::Invalid),
5647            }
5648        }
5649    }
5650
5651    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchCaptureActivityResponse {
5652        type Borrowed<'a> = &'a Self;
5653        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5654            value
5655        }
5656    }
5657
5658    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchCaptureActivityResponse {
5659        type Owned = Self;
5660
5661        #[inline(always)]
5662        fn inline_align(_context: fidl::encoding::Context) -> usize {
5663            8
5664        }
5665
5666        #[inline(always)]
5667        fn inline_size(_context: fidl::encoding::Context) -> usize {
5668            16
5669        }
5670    }
5671
5672    unsafe impl<D: fidl::encoding::ResourceDialect>
5673        fidl::encoding::Encode<ActivityReporterWatchCaptureActivityResponse, D>
5674        for &ActivityReporterWatchCaptureActivityResponse
5675    {
5676        #[inline]
5677        unsafe fn encode(
5678            self,
5679            encoder: &mut fidl::encoding::Encoder<'_, D>,
5680            offset: usize,
5681            _depth: fidl::encoding::Depth,
5682        ) -> fidl::Result<()> {
5683            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivityResponse>(offset);
5684            // Delegate to tuple encoding.
5685            fidl::encoding::Encode::<ActivityReporterWatchCaptureActivityResponse, D>::encode(
5686                (
5687                    <fidl::encoding::Vector<AudioCaptureUsage, 4> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5688                ),
5689                encoder, offset, _depth
5690            )
5691        }
5692    }
5693    unsafe impl<
5694        D: fidl::encoding::ResourceDialect,
5695        T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioCaptureUsage, 4>, D>,
5696    > fidl::encoding::Encode<ActivityReporterWatchCaptureActivityResponse, D> for (T0,)
5697    {
5698        #[inline]
5699        unsafe fn encode(
5700            self,
5701            encoder: &mut fidl::encoding::Encoder<'_, D>,
5702            offset: usize,
5703            depth: fidl::encoding::Depth,
5704        ) -> fidl::Result<()> {
5705            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivityResponse>(offset);
5706            // Zero out padding regions. There's no need to apply masks
5707            // because the unmasked parts will be overwritten by fields.
5708            // Write the fields.
5709            self.0.encode(encoder, offset + 0, depth)?;
5710            Ok(())
5711        }
5712    }
5713
5714    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5715        for ActivityReporterWatchCaptureActivityResponse
5716    {
5717        #[inline(always)]
5718        fn new_empty() -> Self {
5719            Self {
5720                active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioCaptureUsage, 4>, D),
5721            }
5722        }
5723
5724        #[inline]
5725        unsafe fn decode(
5726            &mut self,
5727            decoder: &mut fidl::encoding::Decoder<'_, D>,
5728            offset: usize,
5729            _depth: fidl::encoding::Depth,
5730        ) -> fidl::Result<()> {
5731            decoder.debug_check_bounds::<Self>(offset);
5732            // Verify that padding bytes are zero.
5733            fidl::decode!(fidl::encoding::Vector<AudioCaptureUsage, 4>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5734            Ok(())
5735        }
5736    }
5737
5738    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchRenderActivityResponse {
5739        type Borrowed<'a> = &'a Self;
5740        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5741            value
5742        }
5743    }
5744
5745    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchRenderActivityResponse {
5746        type Owned = Self;
5747
5748        #[inline(always)]
5749        fn inline_align(_context: fidl::encoding::Context) -> usize {
5750            8
5751        }
5752
5753        #[inline(always)]
5754        fn inline_size(_context: fidl::encoding::Context) -> usize {
5755            16
5756        }
5757    }
5758
5759    unsafe impl<D: fidl::encoding::ResourceDialect>
5760        fidl::encoding::Encode<ActivityReporterWatchRenderActivityResponse, D>
5761        for &ActivityReporterWatchRenderActivityResponse
5762    {
5763        #[inline]
5764        unsafe fn encode(
5765            self,
5766            encoder: &mut fidl::encoding::Encoder<'_, D>,
5767            offset: usize,
5768            _depth: fidl::encoding::Depth,
5769        ) -> fidl::Result<()> {
5770            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivityResponse>(offset);
5771            // Delegate to tuple encoding.
5772            fidl::encoding::Encode::<ActivityReporterWatchRenderActivityResponse, D>::encode(
5773                (
5774                    <fidl::encoding::Vector<AudioRenderUsage, 5> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5775                ),
5776                encoder, offset, _depth
5777            )
5778        }
5779    }
5780    unsafe impl<
5781        D: fidl::encoding::ResourceDialect,
5782        T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioRenderUsage, 5>, D>,
5783    > fidl::encoding::Encode<ActivityReporterWatchRenderActivityResponse, D> for (T0,)
5784    {
5785        #[inline]
5786        unsafe fn encode(
5787            self,
5788            encoder: &mut fidl::encoding::Encoder<'_, D>,
5789            offset: usize,
5790            depth: fidl::encoding::Depth,
5791        ) -> fidl::Result<()> {
5792            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivityResponse>(offset);
5793            // Zero out padding regions. There's no need to apply masks
5794            // because the unmasked parts will be overwritten by fields.
5795            // Write the fields.
5796            self.0.encode(encoder, offset + 0, depth)?;
5797            Ok(())
5798        }
5799    }
5800
5801    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5802        for ActivityReporterWatchRenderActivityResponse
5803    {
5804        #[inline(always)]
5805        fn new_empty() -> Self {
5806            Self { active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioRenderUsage, 5>, D) }
5807        }
5808
5809        #[inline]
5810        unsafe fn decode(
5811            &mut self,
5812            decoder: &mut fidl::encoding::Decoder<'_, D>,
5813            offset: usize,
5814            _depth: fidl::encoding::Depth,
5815        ) -> fidl::Result<()> {
5816            decoder.debug_check_bounds::<Self>(offset);
5817            // Verify that padding bytes are zero.
5818            fidl::decode!(fidl::encoding::Vector<AudioRenderUsage, 5>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5819            Ok(())
5820        }
5821    }
5822
5823    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchCaptureActivity2Response {
5824        type Borrowed<'a> = &'a Self;
5825        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5826            value
5827        }
5828    }
5829
5830    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchCaptureActivity2Response {
5831        type Owned = Self;
5832
5833        #[inline(always)]
5834        fn inline_align(_context: fidl::encoding::Context) -> usize {
5835            8
5836        }
5837
5838        #[inline(always)]
5839        fn inline_size(_context: fidl::encoding::Context) -> usize {
5840            16
5841        }
5842    }
5843
5844    unsafe impl<D: fidl::encoding::ResourceDialect>
5845        fidl::encoding::Encode<ActivityReporterWatchCaptureActivity2Response, D>
5846        for &ActivityReporterWatchCaptureActivity2Response
5847    {
5848        #[inline]
5849        unsafe fn encode(
5850            self,
5851            encoder: &mut fidl::encoding::Encoder<'_, D>,
5852            offset: usize,
5853            _depth: fidl::encoding::Depth,
5854        ) -> fidl::Result<()> {
5855            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivity2Response>(offset);
5856            // Delegate to tuple encoding.
5857            fidl::encoding::Encode::<ActivityReporterWatchCaptureActivity2Response, D>::encode(
5858                (
5859                    <fidl::encoding::Vector<AudioCaptureUsage2, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5860                ),
5861                encoder, offset, _depth
5862            )
5863        }
5864    }
5865    unsafe impl<
5866        D: fidl::encoding::ResourceDialect,
5867        T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioCaptureUsage2, 8>, D>,
5868    > fidl::encoding::Encode<ActivityReporterWatchCaptureActivity2Response, D> for (T0,)
5869    {
5870        #[inline]
5871        unsafe fn encode(
5872            self,
5873            encoder: &mut fidl::encoding::Encoder<'_, D>,
5874            offset: usize,
5875            depth: fidl::encoding::Depth,
5876        ) -> fidl::Result<()> {
5877            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivity2Response>(offset);
5878            // Zero out padding regions. There's no need to apply masks
5879            // because the unmasked parts will be overwritten by fields.
5880            // Write the fields.
5881            self.0.encode(encoder, offset + 0, depth)?;
5882            Ok(())
5883        }
5884    }
5885
5886    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5887        for ActivityReporterWatchCaptureActivity2Response
5888    {
5889        #[inline(always)]
5890        fn new_empty() -> Self {
5891            Self {
5892                active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioCaptureUsage2, 8>, D),
5893            }
5894        }
5895
5896        #[inline]
5897        unsafe fn decode(
5898            &mut self,
5899            decoder: &mut fidl::encoding::Decoder<'_, D>,
5900            offset: usize,
5901            _depth: fidl::encoding::Depth,
5902        ) -> fidl::Result<()> {
5903            decoder.debug_check_bounds::<Self>(offset);
5904            // Verify that padding bytes are zero.
5905            fidl::decode!(fidl::encoding::Vector<AudioCaptureUsage2, 8>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5906            Ok(())
5907        }
5908    }
5909
5910    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchRenderActivity2Response {
5911        type Borrowed<'a> = &'a Self;
5912        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5913            value
5914        }
5915    }
5916
5917    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchRenderActivity2Response {
5918        type Owned = Self;
5919
5920        #[inline(always)]
5921        fn inline_align(_context: fidl::encoding::Context) -> usize {
5922            8
5923        }
5924
5925        #[inline(always)]
5926        fn inline_size(_context: fidl::encoding::Context) -> usize {
5927            16
5928        }
5929    }
5930
5931    unsafe impl<D: fidl::encoding::ResourceDialect>
5932        fidl::encoding::Encode<ActivityReporterWatchRenderActivity2Response, D>
5933        for &ActivityReporterWatchRenderActivity2Response
5934    {
5935        #[inline]
5936        unsafe fn encode(
5937            self,
5938            encoder: &mut fidl::encoding::Encoder<'_, D>,
5939            offset: usize,
5940            _depth: fidl::encoding::Depth,
5941        ) -> fidl::Result<()> {
5942            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivity2Response>(offset);
5943            // Delegate to tuple encoding.
5944            fidl::encoding::Encode::<ActivityReporterWatchRenderActivity2Response, D>::encode(
5945                (
5946                    <fidl::encoding::Vector<AudioRenderUsage2, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5947                ),
5948                encoder, offset, _depth
5949            )
5950        }
5951    }
5952    unsafe impl<
5953        D: fidl::encoding::ResourceDialect,
5954        T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioRenderUsage2, 8>, D>,
5955    > fidl::encoding::Encode<ActivityReporterWatchRenderActivity2Response, D> for (T0,)
5956    {
5957        #[inline]
5958        unsafe fn encode(
5959            self,
5960            encoder: &mut fidl::encoding::Encoder<'_, D>,
5961            offset: usize,
5962            depth: fidl::encoding::Depth,
5963        ) -> fidl::Result<()> {
5964            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivity2Response>(offset);
5965            // Zero out padding regions. There's no need to apply masks
5966            // because the unmasked parts will be overwritten by fields.
5967            // Write the fields.
5968            self.0.encode(encoder, offset + 0, depth)?;
5969            Ok(())
5970        }
5971    }
5972
5973    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5974        for ActivityReporterWatchRenderActivity2Response
5975    {
5976        #[inline(always)]
5977        fn new_empty() -> Self {
5978            Self {
5979                active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioRenderUsage2, 8>, D),
5980            }
5981        }
5982
5983        #[inline]
5984        unsafe fn decode(
5985            &mut self,
5986            decoder: &mut fidl::encoding::Decoder<'_, D>,
5987            offset: usize,
5988            _depth: fidl::encoding::Depth,
5989        ) -> fidl::Result<()> {
5990            decoder.debug_check_bounds::<Self>(offset);
5991            // Verify that padding bytes are zero.
5992            fidl::decode!(fidl::encoding::Vector<AudioRenderUsage2, 8>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5993            Ok(())
5994        }
5995    }
5996
5997    impl fidl::encoding::ValueTypeMarker for AudioCapturerCaptureAtRequest {
5998        type Borrowed<'a> = &'a Self;
5999        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6000            value
6001        }
6002    }
6003
6004    unsafe impl fidl::encoding::TypeMarker for AudioCapturerCaptureAtRequest {
6005        type Owned = Self;
6006
6007        #[inline(always)]
6008        fn inline_align(_context: fidl::encoding::Context) -> usize {
6009            4
6010        }
6011
6012        #[inline(always)]
6013        fn inline_size(_context: fidl::encoding::Context) -> usize {
6014            12
6015        }
6016        #[inline(always)]
6017        fn encode_is_copy() -> bool {
6018            true
6019        }
6020
6021        #[inline(always)]
6022        fn decode_is_copy() -> bool {
6023            true
6024        }
6025    }
6026
6027    unsafe impl<D: fidl::encoding::ResourceDialect>
6028        fidl::encoding::Encode<AudioCapturerCaptureAtRequest, D>
6029        for &AudioCapturerCaptureAtRequest
6030    {
6031        #[inline]
6032        unsafe fn encode(
6033            self,
6034            encoder: &mut fidl::encoding::Encoder<'_, D>,
6035            offset: usize,
6036            _depth: fidl::encoding::Depth,
6037        ) -> fidl::Result<()> {
6038            encoder.debug_check_bounds::<AudioCapturerCaptureAtRequest>(offset);
6039            unsafe {
6040                // Copy the object into the buffer.
6041                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
6042                (buf_ptr as *mut AudioCapturerCaptureAtRequest)
6043                    .write_unaligned((self as *const AudioCapturerCaptureAtRequest).read());
6044                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
6045                // done second because the memcpy will write garbage to these bytes.
6046            }
6047            Ok(())
6048        }
6049    }
6050    unsafe impl<
6051        D: fidl::encoding::ResourceDialect,
6052        T0: fidl::encoding::Encode<u32, D>,
6053        T1: fidl::encoding::Encode<u32, D>,
6054        T2: fidl::encoding::Encode<u32, D>,
6055    > fidl::encoding::Encode<AudioCapturerCaptureAtRequest, D> for (T0, T1, T2)
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::<AudioCapturerCaptureAtRequest>(offset);
6065            // Zero out padding regions. There's no need to apply masks
6066            // because the unmasked parts will be overwritten by fields.
6067            // Write the fields.
6068            self.0.encode(encoder, offset + 0, depth)?;
6069            self.1.encode(encoder, offset + 4, depth)?;
6070            self.2.encode(encoder, offset + 8, depth)?;
6071            Ok(())
6072        }
6073    }
6074
6075    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6076        for AudioCapturerCaptureAtRequest
6077    {
6078        #[inline(always)]
6079        fn new_empty() -> Self {
6080            Self {
6081                payload_buffer_id: fidl::new_empty!(u32, D),
6082                payload_offset: fidl::new_empty!(u32, D),
6083                frames: fidl::new_empty!(u32, D),
6084            }
6085        }
6086
6087        #[inline]
6088        unsafe fn decode(
6089            &mut self,
6090            decoder: &mut fidl::encoding::Decoder<'_, D>,
6091            offset: usize,
6092            _depth: fidl::encoding::Depth,
6093        ) -> fidl::Result<()> {
6094            decoder.debug_check_bounds::<Self>(offset);
6095            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
6096            // Verify that padding bytes are zero.
6097            // Copy from the buffer into the object.
6098            unsafe {
6099                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
6100            }
6101            Ok(())
6102        }
6103    }
6104
6105    impl fidl::encoding::ValueTypeMarker for AudioCapturerCaptureAtResponse {
6106        type Borrowed<'a> = &'a Self;
6107        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6108            value
6109        }
6110    }
6111
6112    unsafe impl fidl::encoding::TypeMarker for AudioCapturerCaptureAtResponse {
6113        type Owned = Self;
6114
6115        #[inline(always)]
6116        fn inline_align(_context: fidl::encoding::Context) -> usize {
6117            8
6118        }
6119
6120        #[inline(always)]
6121        fn inline_size(_context: fidl::encoding::Context) -> usize {
6122            56
6123        }
6124    }
6125
6126    unsafe impl<D: fidl::encoding::ResourceDialect>
6127        fidl::encoding::Encode<AudioCapturerCaptureAtResponse, D>
6128        for &AudioCapturerCaptureAtResponse
6129    {
6130        #[inline]
6131        unsafe fn encode(
6132            self,
6133            encoder: &mut fidl::encoding::Encoder<'_, D>,
6134            offset: usize,
6135            _depth: fidl::encoding::Depth,
6136        ) -> fidl::Result<()> {
6137            encoder.debug_check_bounds::<AudioCapturerCaptureAtResponse>(offset);
6138            unsafe {
6139                // Copy the object into the buffer.
6140                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
6141                (buf_ptr as *mut AudioCapturerCaptureAtResponse)
6142                    .write_unaligned((self as *const AudioCapturerCaptureAtResponse).read());
6143                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
6144                // done second because the memcpy will write garbage to these bytes.
6145                let padding_ptr = buf_ptr.offset(8) as *mut u64;
6146                let padding_mask = 0xffffffff00000000u64;
6147                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
6148                let padding_ptr = buf_ptr.offset(32) as *mut u64;
6149                let padding_mask = 0xffffffff00000000u64;
6150                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
6151            }
6152            Ok(())
6153        }
6154    }
6155    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
6156        fidl::encoding::Encode<AudioCapturerCaptureAtResponse, D> for (T0,)
6157    {
6158        #[inline]
6159        unsafe fn encode(
6160            self,
6161            encoder: &mut fidl::encoding::Encoder<'_, D>,
6162            offset: usize,
6163            depth: fidl::encoding::Depth,
6164        ) -> fidl::Result<()> {
6165            encoder.debug_check_bounds::<AudioCapturerCaptureAtResponse>(offset);
6166            // Zero out padding regions. There's no need to apply masks
6167            // because the unmasked parts will be overwritten by fields.
6168            // Write the fields.
6169            self.0.encode(encoder, offset + 0, depth)?;
6170            Ok(())
6171        }
6172    }
6173
6174    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6175        for AudioCapturerCaptureAtResponse
6176    {
6177        #[inline(always)]
6178        fn new_empty() -> Self {
6179            Self { captured_packet: fidl::new_empty!(StreamPacket, D) }
6180        }
6181
6182        #[inline]
6183        unsafe fn decode(
6184            &mut self,
6185            decoder: &mut fidl::encoding::Decoder<'_, D>,
6186            offset: usize,
6187            _depth: fidl::encoding::Depth,
6188        ) -> fidl::Result<()> {
6189            decoder.debug_check_bounds::<Self>(offset);
6190            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
6191            // Verify that padding bytes are zero.
6192            let ptr = unsafe { buf_ptr.offset(8) };
6193            let padval = unsafe { (ptr as *const u64).read_unaligned() };
6194            let mask = 0xffffffff00000000u64;
6195            let maskedval = padval & mask;
6196            if maskedval != 0 {
6197                return Err(fidl::Error::NonZeroPadding {
6198                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
6199                });
6200            }
6201            let ptr = unsafe { buf_ptr.offset(32) };
6202            let padval = unsafe { (ptr as *const u64).read_unaligned() };
6203            let mask = 0xffffffff00000000u64;
6204            let maskedval = padval & mask;
6205            if maskedval != 0 {
6206                return Err(fidl::Error::NonZeroPadding {
6207                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
6208                });
6209            }
6210            // Copy from the buffer into the object.
6211            unsafe {
6212                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
6213            }
6214            Ok(())
6215        }
6216    }
6217
6218    impl fidl::encoding::ValueTypeMarker for AudioCapturerGetStreamTypeResponse {
6219        type Borrowed<'a> = &'a Self;
6220        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6221            value
6222        }
6223    }
6224
6225    unsafe impl fidl::encoding::TypeMarker for AudioCapturerGetStreamTypeResponse {
6226        type Owned = Self;
6227
6228        #[inline(always)]
6229        fn inline_align(_context: fidl::encoding::Context) -> usize {
6230            8
6231        }
6232
6233        #[inline(always)]
6234        fn inline_size(_context: fidl::encoding::Context) -> usize {
6235            48
6236        }
6237    }
6238
6239    unsafe impl<D: fidl::encoding::ResourceDialect>
6240        fidl::encoding::Encode<AudioCapturerGetStreamTypeResponse, D>
6241        for &AudioCapturerGetStreamTypeResponse
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::<AudioCapturerGetStreamTypeResponse>(offset);
6251            // Delegate to tuple encoding.
6252            fidl::encoding::Encode::<AudioCapturerGetStreamTypeResponse, D>::encode(
6253                (<StreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_type),),
6254                encoder,
6255                offset,
6256                _depth,
6257            )
6258        }
6259    }
6260    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamType, D>>
6261        fidl::encoding::Encode<AudioCapturerGetStreamTypeResponse, D> for (T0,)
6262    {
6263        #[inline]
6264        unsafe fn encode(
6265            self,
6266            encoder: &mut fidl::encoding::Encoder<'_, D>,
6267            offset: usize,
6268            depth: fidl::encoding::Depth,
6269        ) -> fidl::Result<()> {
6270            encoder.debug_check_bounds::<AudioCapturerGetStreamTypeResponse>(offset);
6271            // Zero out padding regions. There's no need to apply masks
6272            // because the unmasked parts will be overwritten by fields.
6273            // Write the fields.
6274            self.0.encode(encoder, offset + 0, depth)?;
6275            Ok(())
6276        }
6277    }
6278
6279    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6280        for AudioCapturerGetStreamTypeResponse
6281    {
6282        #[inline(always)]
6283        fn new_empty() -> Self {
6284            Self { stream_type: fidl::new_empty!(StreamType, D) }
6285        }
6286
6287        #[inline]
6288        unsafe fn decode(
6289            &mut self,
6290            decoder: &mut fidl::encoding::Decoder<'_, D>,
6291            offset: usize,
6292            _depth: fidl::encoding::Depth,
6293        ) -> fidl::Result<()> {
6294            decoder.debug_check_bounds::<Self>(offset);
6295            // Verify that padding bytes are zero.
6296            fidl::decode!(StreamType, D, &mut self.stream_type, decoder, offset + 0, _depth)?;
6297            Ok(())
6298        }
6299    }
6300
6301    impl fidl::encoding::ValueTypeMarker for AudioCapturerSetPcmStreamTypeRequest {
6302        type Borrowed<'a> = &'a Self;
6303        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6304            value
6305        }
6306    }
6307
6308    unsafe impl fidl::encoding::TypeMarker for AudioCapturerSetPcmStreamTypeRequest {
6309        type Owned = Self;
6310
6311        #[inline(always)]
6312        fn inline_align(_context: fidl::encoding::Context) -> usize {
6313            4
6314        }
6315
6316        #[inline(always)]
6317        fn inline_size(_context: fidl::encoding::Context) -> usize {
6318            12
6319        }
6320    }
6321
6322    unsafe impl<D: fidl::encoding::ResourceDialect>
6323        fidl::encoding::Encode<AudioCapturerSetPcmStreamTypeRequest, D>
6324        for &AudioCapturerSetPcmStreamTypeRequest
6325    {
6326        #[inline]
6327        unsafe fn encode(
6328            self,
6329            encoder: &mut fidl::encoding::Encoder<'_, D>,
6330            offset: usize,
6331            _depth: fidl::encoding::Depth,
6332        ) -> fidl::Result<()> {
6333            encoder.debug_check_bounds::<AudioCapturerSetPcmStreamTypeRequest>(offset);
6334            // Delegate to tuple encoding.
6335            fidl::encoding::Encode::<AudioCapturerSetPcmStreamTypeRequest, D>::encode(
6336                (<AudioStreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_type),),
6337                encoder,
6338                offset,
6339                _depth,
6340            )
6341        }
6342    }
6343    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioStreamType, D>>
6344        fidl::encoding::Encode<AudioCapturerSetPcmStreamTypeRequest, D> for (T0,)
6345    {
6346        #[inline]
6347        unsafe fn encode(
6348            self,
6349            encoder: &mut fidl::encoding::Encoder<'_, D>,
6350            offset: usize,
6351            depth: fidl::encoding::Depth,
6352        ) -> fidl::Result<()> {
6353            encoder.debug_check_bounds::<AudioCapturerSetPcmStreamTypeRequest>(offset);
6354            // Zero out padding regions. There's no need to apply masks
6355            // because the unmasked parts will be overwritten by fields.
6356            // Write the fields.
6357            self.0.encode(encoder, offset + 0, depth)?;
6358            Ok(())
6359        }
6360    }
6361
6362    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6363        for AudioCapturerSetPcmStreamTypeRequest
6364    {
6365        #[inline(always)]
6366        fn new_empty() -> Self {
6367            Self { stream_type: fidl::new_empty!(AudioStreamType, D) }
6368        }
6369
6370        #[inline]
6371        unsafe fn decode(
6372            &mut self,
6373            decoder: &mut fidl::encoding::Decoder<'_, D>,
6374            offset: usize,
6375            _depth: fidl::encoding::Depth,
6376        ) -> fidl::Result<()> {
6377            decoder.debug_check_bounds::<Self>(offset);
6378            // Verify that padding bytes are zero.
6379            fidl::decode!(AudioStreamType, D, &mut self.stream_type, decoder, offset + 0, _depth)?;
6380            Ok(())
6381        }
6382    }
6383
6384    impl fidl::encoding::ValueTypeMarker for AudioCapturerSetUsage2Request {
6385        type Borrowed<'a> = &'a Self;
6386        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6387            value
6388        }
6389    }
6390
6391    unsafe impl fidl::encoding::TypeMarker for AudioCapturerSetUsage2Request {
6392        type Owned = Self;
6393
6394        #[inline(always)]
6395        fn inline_align(_context: fidl::encoding::Context) -> usize {
6396            4
6397        }
6398
6399        #[inline(always)]
6400        fn inline_size(_context: fidl::encoding::Context) -> usize {
6401            4
6402        }
6403    }
6404
6405    unsafe impl<D: fidl::encoding::ResourceDialect>
6406        fidl::encoding::Encode<AudioCapturerSetUsage2Request, D>
6407        for &AudioCapturerSetUsage2Request
6408    {
6409        #[inline]
6410        unsafe fn encode(
6411            self,
6412            encoder: &mut fidl::encoding::Encoder<'_, D>,
6413            offset: usize,
6414            _depth: fidl::encoding::Depth,
6415        ) -> fidl::Result<()> {
6416            encoder.debug_check_bounds::<AudioCapturerSetUsage2Request>(offset);
6417            // Delegate to tuple encoding.
6418            fidl::encoding::Encode::<AudioCapturerSetUsage2Request, D>::encode(
6419                (<AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),),
6420                encoder,
6421                offset,
6422                _depth,
6423            )
6424        }
6425    }
6426    unsafe impl<
6427        D: fidl::encoding::ResourceDialect,
6428        T0: fidl::encoding::Encode<AudioCaptureUsage2, D>,
6429    > fidl::encoding::Encode<AudioCapturerSetUsage2Request, D> for (T0,)
6430    {
6431        #[inline]
6432        unsafe fn encode(
6433            self,
6434            encoder: &mut fidl::encoding::Encoder<'_, D>,
6435            offset: usize,
6436            depth: fidl::encoding::Depth,
6437        ) -> fidl::Result<()> {
6438            encoder.debug_check_bounds::<AudioCapturerSetUsage2Request>(offset);
6439            // Zero out padding regions. There's no need to apply masks
6440            // because the unmasked parts will be overwritten by fields.
6441            // Write the fields.
6442            self.0.encode(encoder, offset + 0, depth)?;
6443            Ok(())
6444        }
6445    }
6446
6447    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6448        for AudioCapturerSetUsage2Request
6449    {
6450        #[inline(always)]
6451        fn new_empty() -> Self {
6452            Self { usage: fidl::new_empty!(AudioCaptureUsage2, D) }
6453        }
6454
6455        #[inline]
6456        unsafe fn decode(
6457            &mut self,
6458            decoder: &mut fidl::encoding::Decoder<'_, D>,
6459            offset: usize,
6460            _depth: fidl::encoding::Depth,
6461        ) -> fidl::Result<()> {
6462            decoder.debug_check_bounds::<Self>(offset);
6463            // Verify that padding bytes are zero.
6464            fidl::decode!(AudioCaptureUsage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
6465            Ok(())
6466        }
6467    }
6468
6469    impl fidl::encoding::ValueTypeMarker for AudioCapturerSetUsageRequest {
6470        type Borrowed<'a> = &'a Self;
6471        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6472            value
6473        }
6474    }
6475
6476    unsafe impl fidl::encoding::TypeMarker for AudioCapturerSetUsageRequest {
6477        type Owned = Self;
6478
6479        #[inline(always)]
6480        fn inline_align(_context: fidl::encoding::Context) -> usize {
6481            4
6482        }
6483
6484        #[inline(always)]
6485        fn inline_size(_context: fidl::encoding::Context) -> usize {
6486            4
6487        }
6488    }
6489
6490    unsafe impl<D: fidl::encoding::ResourceDialect>
6491        fidl::encoding::Encode<AudioCapturerSetUsageRequest, D> for &AudioCapturerSetUsageRequest
6492    {
6493        #[inline]
6494        unsafe fn encode(
6495            self,
6496            encoder: &mut fidl::encoding::Encoder<'_, D>,
6497            offset: usize,
6498            _depth: fidl::encoding::Depth,
6499        ) -> fidl::Result<()> {
6500            encoder.debug_check_bounds::<AudioCapturerSetUsageRequest>(offset);
6501            // Delegate to tuple encoding.
6502            fidl::encoding::Encode::<AudioCapturerSetUsageRequest, D>::encode(
6503                (<AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),),
6504                encoder,
6505                offset,
6506                _depth,
6507            )
6508        }
6509    }
6510    unsafe impl<
6511        D: fidl::encoding::ResourceDialect,
6512        T0: fidl::encoding::Encode<AudioCaptureUsage, D>,
6513    > fidl::encoding::Encode<AudioCapturerSetUsageRequest, D> for (T0,)
6514    {
6515        #[inline]
6516        unsafe fn encode(
6517            self,
6518            encoder: &mut fidl::encoding::Encoder<'_, D>,
6519            offset: usize,
6520            depth: fidl::encoding::Depth,
6521        ) -> fidl::Result<()> {
6522            encoder.debug_check_bounds::<AudioCapturerSetUsageRequest>(offset);
6523            // Zero out padding regions. There's no need to apply masks
6524            // because the unmasked parts will be overwritten by fields.
6525            // Write the fields.
6526            self.0.encode(encoder, offset + 0, depth)?;
6527            Ok(())
6528        }
6529    }
6530
6531    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6532        for AudioCapturerSetUsageRequest
6533    {
6534        #[inline(always)]
6535        fn new_empty() -> Self {
6536            Self { usage: fidl::new_empty!(AudioCaptureUsage, D) }
6537        }
6538
6539        #[inline]
6540        unsafe fn decode(
6541            &mut self,
6542            decoder: &mut fidl::encoding::Decoder<'_, D>,
6543            offset: usize,
6544            _depth: fidl::encoding::Depth,
6545        ) -> fidl::Result<()> {
6546            decoder.debug_check_bounds::<Self>(offset);
6547            // Verify that padding bytes are zero.
6548            fidl::decode!(AudioCaptureUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
6549            Ok(())
6550        }
6551    }
6552
6553    impl fidl::encoding::ValueTypeMarker for AudioCapturerStartAsyncCaptureRequest {
6554        type Borrowed<'a> = &'a Self;
6555        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6556            value
6557        }
6558    }
6559
6560    unsafe impl fidl::encoding::TypeMarker for AudioCapturerStartAsyncCaptureRequest {
6561        type Owned = Self;
6562
6563        #[inline(always)]
6564        fn inline_align(_context: fidl::encoding::Context) -> usize {
6565            4
6566        }
6567
6568        #[inline(always)]
6569        fn inline_size(_context: fidl::encoding::Context) -> usize {
6570            4
6571        }
6572        #[inline(always)]
6573        fn encode_is_copy() -> bool {
6574            true
6575        }
6576
6577        #[inline(always)]
6578        fn decode_is_copy() -> bool {
6579            true
6580        }
6581    }
6582
6583    unsafe impl<D: fidl::encoding::ResourceDialect>
6584        fidl::encoding::Encode<AudioCapturerStartAsyncCaptureRequest, D>
6585        for &AudioCapturerStartAsyncCaptureRequest
6586    {
6587        #[inline]
6588        unsafe fn encode(
6589            self,
6590            encoder: &mut fidl::encoding::Encoder<'_, D>,
6591            offset: usize,
6592            _depth: fidl::encoding::Depth,
6593        ) -> fidl::Result<()> {
6594            encoder.debug_check_bounds::<AudioCapturerStartAsyncCaptureRequest>(offset);
6595            unsafe {
6596                // Copy the object into the buffer.
6597                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
6598                (buf_ptr as *mut AudioCapturerStartAsyncCaptureRequest)
6599                    .write_unaligned((self as *const AudioCapturerStartAsyncCaptureRequest).read());
6600                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
6601                // done second because the memcpy will write garbage to these bytes.
6602            }
6603            Ok(())
6604        }
6605    }
6606    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
6607        fidl::encoding::Encode<AudioCapturerStartAsyncCaptureRequest, D> for (T0,)
6608    {
6609        #[inline]
6610        unsafe fn encode(
6611            self,
6612            encoder: &mut fidl::encoding::Encoder<'_, D>,
6613            offset: usize,
6614            depth: fidl::encoding::Depth,
6615        ) -> fidl::Result<()> {
6616            encoder.debug_check_bounds::<AudioCapturerStartAsyncCaptureRequest>(offset);
6617            // Zero out padding regions. There's no need to apply masks
6618            // because the unmasked parts will be overwritten by fields.
6619            // Write the fields.
6620            self.0.encode(encoder, offset + 0, depth)?;
6621            Ok(())
6622        }
6623    }
6624
6625    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6626        for AudioCapturerStartAsyncCaptureRequest
6627    {
6628        #[inline(always)]
6629        fn new_empty() -> Self {
6630            Self { frames_per_packet: fidl::new_empty!(u32, D) }
6631        }
6632
6633        #[inline]
6634        unsafe fn decode(
6635            &mut self,
6636            decoder: &mut fidl::encoding::Decoder<'_, D>,
6637            offset: usize,
6638            _depth: fidl::encoding::Depth,
6639        ) -> fidl::Result<()> {
6640            decoder.debug_check_bounds::<Self>(offset);
6641            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
6642            // Verify that padding bytes are zero.
6643            // Copy from the buffer into the object.
6644            unsafe {
6645                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
6646            }
6647            Ok(())
6648        }
6649    }
6650
6651    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatAac {
6652        type Borrowed<'a> = &'a Self;
6653        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6654            value
6655        }
6656    }
6657
6658    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatAac {
6659        type Owned = Self;
6660
6661        #[inline(always)]
6662        fn inline_align(_context: fidl::encoding::Context) -> usize {
6663            1
6664        }
6665
6666        #[inline(always)]
6667        fn inline_size(_context: fidl::encoding::Context) -> usize {
6668            1
6669        }
6670    }
6671
6672    unsafe impl<D: fidl::encoding::ResourceDialect>
6673        fidl::encoding::Encode<AudioCompressedFormatAac, D> for &AudioCompressedFormatAac
6674    {
6675        #[inline]
6676        unsafe fn encode(
6677            self,
6678            encoder: &mut fidl::encoding::Encoder<'_, D>,
6679            offset: usize,
6680            _depth: fidl::encoding::Depth,
6681        ) -> fidl::Result<()> {
6682            encoder.debug_check_bounds::<AudioCompressedFormatAac>(offset);
6683            encoder.write_num(0u8, offset);
6684            Ok(())
6685        }
6686    }
6687
6688    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6689        for AudioCompressedFormatAac
6690    {
6691        #[inline(always)]
6692        fn new_empty() -> Self {
6693            Self
6694        }
6695
6696        #[inline]
6697        unsafe fn decode(
6698            &mut self,
6699            decoder: &mut fidl::encoding::Decoder<'_, D>,
6700            offset: usize,
6701            _depth: fidl::encoding::Depth,
6702        ) -> fidl::Result<()> {
6703            decoder.debug_check_bounds::<Self>(offset);
6704            match decoder.read_num::<u8>(offset) {
6705                0 => Ok(()),
6706                _ => Err(fidl::Error::Invalid),
6707            }
6708        }
6709    }
6710
6711    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatSbc {
6712        type Borrowed<'a> = &'a Self;
6713        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6714            value
6715        }
6716    }
6717
6718    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatSbc {
6719        type Owned = Self;
6720
6721        #[inline(always)]
6722        fn inline_align(_context: fidl::encoding::Context) -> usize {
6723            1
6724        }
6725
6726        #[inline(always)]
6727        fn inline_size(_context: fidl::encoding::Context) -> usize {
6728            1
6729        }
6730    }
6731
6732    unsafe impl<D: fidl::encoding::ResourceDialect>
6733        fidl::encoding::Encode<AudioCompressedFormatSbc, D> for &AudioCompressedFormatSbc
6734    {
6735        #[inline]
6736        unsafe fn encode(
6737            self,
6738            encoder: &mut fidl::encoding::Encoder<'_, D>,
6739            offset: usize,
6740            _depth: fidl::encoding::Depth,
6741        ) -> fidl::Result<()> {
6742            encoder.debug_check_bounds::<AudioCompressedFormatSbc>(offset);
6743            encoder.write_num(0u8, offset);
6744            Ok(())
6745        }
6746    }
6747
6748    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6749        for AudioCompressedFormatSbc
6750    {
6751        #[inline(always)]
6752        fn new_empty() -> Self {
6753            Self
6754        }
6755
6756        #[inline]
6757        unsafe fn decode(
6758            &mut self,
6759            decoder: &mut fidl::encoding::Decoder<'_, D>,
6760            offset: usize,
6761            _depth: fidl::encoding::Depth,
6762        ) -> fidl::Result<()> {
6763            decoder.debug_check_bounds::<Self>(offset);
6764            match decoder.read_num::<u8>(offset) {
6765                0 => Ok(()),
6766                _ => Err(fidl::Error::Invalid),
6767            }
6768        }
6769    }
6770
6771    impl fidl::encoding::ValueTypeMarker for AudioConsumerSetRateRequest {
6772        type Borrowed<'a> = &'a Self;
6773        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6774            value
6775        }
6776    }
6777
6778    unsafe impl fidl::encoding::TypeMarker for AudioConsumerSetRateRequest {
6779        type Owned = Self;
6780
6781        #[inline(always)]
6782        fn inline_align(_context: fidl::encoding::Context) -> usize {
6783            4
6784        }
6785
6786        #[inline(always)]
6787        fn inline_size(_context: fidl::encoding::Context) -> usize {
6788            4
6789        }
6790    }
6791
6792    unsafe impl<D: fidl::encoding::ResourceDialect>
6793        fidl::encoding::Encode<AudioConsumerSetRateRequest, D> for &AudioConsumerSetRateRequest
6794    {
6795        #[inline]
6796        unsafe fn encode(
6797            self,
6798            encoder: &mut fidl::encoding::Encoder<'_, D>,
6799            offset: usize,
6800            _depth: fidl::encoding::Depth,
6801        ) -> fidl::Result<()> {
6802            encoder.debug_check_bounds::<AudioConsumerSetRateRequest>(offset);
6803            // Delegate to tuple encoding.
6804            fidl::encoding::Encode::<AudioConsumerSetRateRequest, D>::encode(
6805                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.rate),),
6806                encoder,
6807                offset,
6808                _depth,
6809            )
6810        }
6811    }
6812    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
6813        fidl::encoding::Encode<AudioConsumerSetRateRequest, D> for (T0,)
6814    {
6815        #[inline]
6816        unsafe fn encode(
6817            self,
6818            encoder: &mut fidl::encoding::Encoder<'_, D>,
6819            offset: usize,
6820            depth: fidl::encoding::Depth,
6821        ) -> fidl::Result<()> {
6822            encoder.debug_check_bounds::<AudioConsumerSetRateRequest>(offset);
6823            // Zero out padding regions. There's no need to apply masks
6824            // because the unmasked parts will be overwritten by fields.
6825            // Write the fields.
6826            self.0.encode(encoder, offset + 0, depth)?;
6827            Ok(())
6828        }
6829    }
6830
6831    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6832        for AudioConsumerSetRateRequest
6833    {
6834        #[inline(always)]
6835        fn new_empty() -> Self {
6836            Self { rate: fidl::new_empty!(f32, D) }
6837        }
6838
6839        #[inline]
6840        unsafe fn decode(
6841            &mut self,
6842            decoder: &mut fidl::encoding::Decoder<'_, D>,
6843            offset: usize,
6844            _depth: fidl::encoding::Depth,
6845        ) -> fidl::Result<()> {
6846            decoder.debug_check_bounds::<Self>(offset);
6847            // Verify that padding bytes are zero.
6848            fidl::decode!(f32, D, &mut self.rate, decoder, offset + 0, _depth)?;
6849            Ok(())
6850        }
6851    }
6852
6853    impl fidl::encoding::ValueTypeMarker for AudioConsumerStartRequest {
6854        type Borrowed<'a> = &'a Self;
6855        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6856            value
6857        }
6858    }
6859
6860    unsafe impl fidl::encoding::TypeMarker for AudioConsumerStartRequest {
6861        type Owned = Self;
6862
6863        #[inline(always)]
6864        fn inline_align(_context: fidl::encoding::Context) -> usize {
6865            8
6866        }
6867
6868        #[inline(always)]
6869        fn inline_size(_context: fidl::encoding::Context) -> usize {
6870            24
6871        }
6872    }
6873
6874    unsafe impl<D: fidl::encoding::ResourceDialect>
6875        fidl::encoding::Encode<AudioConsumerStartRequest, D> for &AudioConsumerStartRequest
6876    {
6877        #[inline]
6878        unsafe fn encode(
6879            self,
6880            encoder: &mut fidl::encoding::Encoder<'_, D>,
6881            offset: usize,
6882            _depth: fidl::encoding::Depth,
6883        ) -> fidl::Result<()> {
6884            encoder.debug_check_bounds::<AudioConsumerStartRequest>(offset);
6885            // Delegate to tuple encoding.
6886            fidl::encoding::Encode::<AudioConsumerStartRequest, D>::encode(
6887                (
6888                    <AudioConsumerStartFlags as fidl::encoding::ValueTypeMarker>::borrow(
6889                        &self.flags,
6890                    ),
6891                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(&self.reference_time),
6892                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(&self.media_time),
6893                ),
6894                encoder,
6895                offset,
6896                _depth,
6897            )
6898        }
6899    }
6900    unsafe impl<
6901        D: fidl::encoding::ResourceDialect,
6902        T0: fidl::encoding::Encode<AudioConsumerStartFlags, D>,
6903        T1: fidl::encoding::Encode<i64, D>,
6904        T2: fidl::encoding::Encode<i64, D>,
6905    > fidl::encoding::Encode<AudioConsumerStartRequest, D> for (T0, T1, T2)
6906    {
6907        #[inline]
6908        unsafe fn encode(
6909            self,
6910            encoder: &mut fidl::encoding::Encoder<'_, D>,
6911            offset: usize,
6912            depth: fidl::encoding::Depth,
6913        ) -> fidl::Result<()> {
6914            encoder.debug_check_bounds::<AudioConsumerStartRequest>(offset);
6915            // Zero out padding regions. There's no need to apply masks
6916            // because the unmasked parts will be overwritten by fields.
6917            unsafe {
6918                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
6919                (ptr as *mut u64).write_unaligned(0);
6920            }
6921            // Write the fields.
6922            self.0.encode(encoder, offset + 0, depth)?;
6923            self.1.encode(encoder, offset + 8, depth)?;
6924            self.2.encode(encoder, offset + 16, depth)?;
6925            Ok(())
6926        }
6927    }
6928
6929    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6930        for AudioConsumerStartRequest
6931    {
6932        #[inline(always)]
6933        fn new_empty() -> Self {
6934            Self {
6935                flags: fidl::new_empty!(AudioConsumerStartFlags, D),
6936                reference_time: fidl::new_empty!(i64, D),
6937                media_time: fidl::new_empty!(i64, D),
6938            }
6939        }
6940
6941        #[inline]
6942        unsafe fn decode(
6943            &mut self,
6944            decoder: &mut fidl::encoding::Decoder<'_, D>,
6945            offset: usize,
6946            _depth: fidl::encoding::Depth,
6947        ) -> fidl::Result<()> {
6948            decoder.debug_check_bounds::<Self>(offset);
6949            // Verify that padding bytes are zero.
6950            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
6951            let padval = unsafe { (ptr as *const u64).read_unaligned() };
6952            let mask = 0xffffffff00000000u64;
6953            let maskedval = padval & mask;
6954            if maskedval != 0 {
6955                return Err(fidl::Error::NonZeroPadding {
6956                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
6957                });
6958            }
6959            fidl::decode!(
6960                AudioConsumerStartFlags,
6961                D,
6962                &mut self.flags,
6963                decoder,
6964                offset + 0,
6965                _depth
6966            )?;
6967            fidl::decode!(i64, D, &mut self.reference_time, decoder, offset + 8, _depth)?;
6968            fidl::decode!(i64, D, &mut self.media_time, decoder, offset + 16, _depth)?;
6969            Ok(())
6970        }
6971    }
6972
6973    impl fidl::encoding::ValueTypeMarker for AudioConsumerWatchStatusResponse {
6974        type Borrowed<'a> = &'a Self;
6975        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6976            value
6977        }
6978    }
6979
6980    unsafe impl fidl::encoding::TypeMarker for AudioConsumerWatchStatusResponse {
6981        type Owned = Self;
6982
6983        #[inline(always)]
6984        fn inline_align(_context: fidl::encoding::Context) -> usize {
6985            8
6986        }
6987
6988        #[inline(always)]
6989        fn inline_size(_context: fidl::encoding::Context) -> usize {
6990            16
6991        }
6992    }
6993
6994    unsafe impl<D: fidl::encoding::ResourceDialect>
6995        fidl::encoding::Encode<AudioConsumerWatchStatusResponse, D>
6996        for &AudioConsumerWatchStatusResponse
6997    {
6998        #[inline]
6999        unsafe fn encode(
7000            self,
7001            encoder: &mut fidl::encoding::Encoder<'_, D>,
7002            offset: usize,
7003            _depth: fidl::encoding::Depth,
7004        ) -> fidl::Result<()> {
7005            encoder.debug_check_bounds::<AudioConsumerWatchStatusResponse>(offset);
7006            // Delegate to tuple encoding.
7007            fidl::encoding::Encode::<AudioConsumerWatchStatusResponse, D>::encode(
7008                (<AudioConsumerStatus as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
7009                encoder,
7010                offset,
7011                _depth,
7012            )
7013        }
7014    }
7015    unsafe impl<
7016        D: fidl::encoding::ResourceDialect,
7017        T0: fidl::encoding::Encode<AudioConsumerStatus, D>,
7018    > fidl::encoding::Encode<AudioConsumerWatchStatusResponse, D> for (T0,)
7019    {
7020        #[inline]
7021        unsafe fn encode(
7022            self,
7023            encoder: &mut fidl::encoding::Encoder<'_, D>,
7024            offset: usize,
7025            depth: fidl::encoding::Depth,
7026        ) -> fidl::Result<()> {
7027            encoder.debug_check_bounds::<AudioConsumerWatchStatusResponse>(offset);
7028            // Zero out padding regions. There's no need to apply masks
7029            // because the unmasked parts will be overwritten by fields.
7030            // Write the fields.
7031            self.0.encode(encoder, offset + 0, depth)?;
7032            Ok(())
7033        }
7034    }
7035
7036    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7037        for AudioConsumerWatchStatusResponse
7038    {
7039        #[inline(always)]
7040        fn new_empty() -> Self {
7041            Self { status: fidl::new_empty!(AudioConsumerStatus, D) }
7042        }
7043
7044        #[inline]
7045        unsafe fn decode(
7046            &mut self,
7047            decoder: &mut fidl::encoding::Decoder<'_, D>,
7048            offset: usize,
7049            _depth: fidl::encoding::Depth,
7050        ) -> fidl::Result<()> {
7051            decoder.debug_check_bounds::<Self>(offset);
7052            // Verify that padding bytes are zero.
7053            fidl::decode!(AudioConsumerStatus, D, &mut self.status, decoder, offset + 0, _depth)?;
7054            Ok(())
7055        }
7056    }
7057
7058    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolume2Request {
7059        type Borrowed<'a> = &'a Self;
7060        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7061            value
7062        }
7063    }
7064
7065    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolume2Request {
7066        type Owned = Self;
7067
7068        #[inline(always)]
7069        fn inline_align(_context: fidl::encoding::Context) -> usize {
7070            8
7071        }
7072
7073        #[inline(always)]
7074        fn inline_size(_context: fidl::encoding::Context) -> usize {
7075            24
7076        }
7077    }
7078
7079    unsafe impl<D: fidl::encoding::ResourceDialect>
7080        fidl::encoding::Encode<AudioCoreGetDbFromVolume2Request, D>
7081        for &AudioCoreGetDbFromVolume2Request
7082    {
7083        #[inline]
7084        unsafe fn encode(
7085            self,
7086            encoder: &mut fidl::encoding::Encoder<'_, D>,
7087            offset: usize,
7088            _depth: fidl::encoding::Depth,
7089        ) -> fidl::Result<()> {
7090            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Request>(offset);
7091            // Delegate to tuple encoding.
7092            fidl::encoding::Encode::<AudioCoreGetDbFromVolume2Request, D>::encode(
7093                (
7094                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7095                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),
7096                ),
7097                encoder,
7098                offset,
7099                _depth,
7100            )
7101        }
7102    }
7103    unsafe impl<
7104        D: fidl::encoding::ResourceDialect,
7105        T0: fidl::encoding::Encode<Usage2, D>,
7106        T1: fidl::encoding::Encode<f32, D>,
7107    > fidl::encoding::Encode<AudioCoreGetDbFromVolume2Request, D> for (T0, T1)
7108    {
7109        #[inline]
7110        unsafe fn encode(
7111            self,
7112            encoder: &mut fidl::encoding::Encoder<'_, D>,
7113            offset: usize,
7114            depth: fidl::encoding::Depth,
7115        ) -> fidl::Result<()> {
7116            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Request>(offset);
7117            // Zero out padding regions. There's no need to apply masks
7118            // because the unmasked parts will be overwritten by fields.
7119            unsafe {
7120                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7121                (ptr as *mut u64).write_unaligned(0);
7122            }
7123            // Write the fields.
7124            self.0.encode(encoder, offset + 0, depth)?;
7125            self.1.encode(encoder, offset + 16, depth)?;
7126            Ok(())
7127        }
7128    }
7129
7130    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7131        for AudioCoreGetDbFromVolume2Request
7132    {
7133        #[inline(always)]
7134        fn new_empty() -> Self {
7135            Self { usage: fidl::new_empty!(Usage2, D), volume: fidl::new_empty!(f32, D) }
7136        }
7137
7138        #[inline]
7139        unsafe fn decode(
7140            &mut self,
7141            decoder: &mut fidl::encoding::Decoder<'_, D>,
7142            offset: usize,
7143            _depth: fidl::encoding::Depth,
7144        ) -> fidl::Result<()> {
7145            decoder.debug_check_bounds::<Self>(offset);
7146            // Verify that padding bytes are zero.
7147            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7148            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7149            let mask = 0xffffffff00000000u64;
7150            let maskedval = padval & mask;
7151            if maskedval != 0 {
7152                return Err(fidl::Error::NonZeroPadding {
7153                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7154                });
7155            }
7156            fidl::decode!(Usage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
7157            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 16, _depth)?;
7158            Ok(())
7159        }
7160    }
7161
7162    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolumeRequest {
7163        type Borrowed<'a> = &'a Self;
7164        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7165            value
7166        }
7167    }
7168
7169    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolumeRequest {
7170        type Owned = Self;
7171
7172        #[inline(always)]
7173        fn inline_align(_context: fidl::encoding::Context) -> usize {
7174            8
7175        }
7176
7177        #[inline(always)]
7178        fn inline_size(_context: fidl::encoding::Context) -> usize {
7179            24
7180        }
7181    }
7182
7183    unsafe impl<D: fidl::encoding::ResourceDialect>
7184        fidl::encoding::Encode<AudioCoreGetDbFromVolumeRequest, D>
7185        for &AudioCoreGetDbFromVolumeRequest
7186    {
7187        #[inline]
7188        unsafe fn encode(
7189            self,
7190            encoder: &mut fidl::encoding::Encoder<'_, D>,
7191            offset: usize,
7192            _depth: fidl::encoding::Depth,
7193        ) -> fidl::Result<()> {
7194            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeRequest>(offset);
7195            // Delegate to tuple encoding.
7196            fidl::encoding::Encode::<AudioCoreGetDbFromVolumeRequest, D>::encode(
7197                (
7198                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7199                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),
7200                ),
7201                encoder,
7202                offset,
7203                _depth,
7204            )
7205        }
7206    }
7207    unsafe impl<
7208        D: fidl::encoding::ResourceDialect,
7209        T0: fidl::encoding::Encode<Usage, D>,
7210        T1: fidl::encoding::Encode<f32, D>,
7211    > fidl::encoding::Encode<AudioCoreGetDbFromVolumeRequest, D> for (T0, T1)
7212    {
7213        #[inline]
7214        unsafe fn encode(
7215            self,
7216            encoder: &mut fidl::encoding::Encoder<'_, D>,
7217            offset: usize,
7218            depth: fidl::encoding::Depth,
7219        ) -> fidl::Result<()> {
7220            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeRequest>(offset);
7221            // Zero out padding regions. There's no need to apply masks
7222            // because the unmasked parts will be overwritten by fields.
7223            unsafe {
7224                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7225                (ptr as *mut u64).write_unaligned(0);
7226            }
7227            // Write the fields.
7228            self.0.encode(encoder, offset + 0, depth)?;
7229            self.1.encode(encoder, offset + 16, depth)?;
7230            Ok(())
7231        }
7232    }
7233
7234    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7235        for AudioCoreGetDbFromVolumeRequest
7236    {
7237        #[inline(always)]
7238        fn new_empty() -> Self {
7239            Self { usage: fidl::new_empty!(Usage, D), volume: fidl::new_empty!(f32, D) }
7240        }
7241
7242        #[inline]
7243        unsafe fn decode(
7244            &mut self,
7245            decoder: &mut fidl::encoding::Decoder<'_, D>,
7246            offset: usize,
7247            _depth: fidl::encoding::Depth,
7248        ) -> fidl::Result<()> {
7249            decoder.debug_check_bounds::<Self>(offset);
7250            // Verify that padding bytes are zero.
7251            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7252            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7253            let mask = 0xffffffff00000000u64;
7254            let maskedval = padval & mask;
7255            if maskedval != 0 {
7256                return Err(fidl::Error::NonZeroPadding {
7257                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7258                });
7259            }
7260            fidl::decode!(Usage, D, &mut self.usage, decoder, offset + 0, _depth)?;
7261            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 16, _depth)?;
7262            Ok(())
7263        }
7264    }
7265
7266    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolumeResponse {
7267        type Borrowed<'a> = &'a Self;
7268        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7269            value
7270        }
7271    }
7272
7273    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolumeResponse {
7274        type Owned = Self;
7275
7276        #[inline(always)]
7277        fn inline_align(_context: fidl::encoding::Context) -> usize {
7278            4
7279        }
7280
7281        #[inline(always)]
7282        fn inline_size(_context: fidl::encoding::Context) -> usize {
7283            4
7284        }
7285    }
7286
7287    unsafe impl<D: fidl::encoding::ResourceDialect>
7288        fidl::encoding::Encode<AudioCoreGetDbFromVolumeResponse, D>
7289        for &AudioCoreGetDbFromVolumeResponse
7290    {
7291        #[inline]
7292        unsafe fn encode(
7293            self,
7294            encoder: &mut fidl::encoding::Encoder<'_, D>,
7295            offset: usize,
7296            _depth: fidl::encoding::Depth,
7297        ) -> fidl::Result<()> {
7298            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeResponse>(offset);
7299            // Delegate to tuple encoding.
7300            fidl::encoding::Encode::<AudioCoreGetDbFromVolumeResponse, D>::encode(
7301                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),),
7302                encoder,
7303                offset,
7304                _depth,
7305            )
7306        }
7307    }
7308    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
7309        fidl::encoding::Encode<AudioCoreGetDbFromVolumeResponse, D> for (T0,)
7310    {
7311        #[inline]
7312        unsafe fn encode(
7313            self,
7314            encoder: &mut fidl::encoding::Encoder<'_, D>,
7315            offset: usize,
7316            depth: fidl::encoding::Depth,
7317        ) -> fidl::Result<()> {
7318            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeResponse>(offset);
7319            // Zero out padding regions. There's no need to apply masks
7320            // because the unmasked parts will be overwritten by fields.
7321            // Write the fields.
7322            self.0.encode(encoder, offset + 0, depth)?;
7323            Ok(())
7324        }
7325    }
7326
7327    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7328        for AudioCoreGetDbFromVolumeResponse
7329    {
7330        #[inline(always)]
7331        fn new_empty() -> Self {
7332            Self { gain_db: fidl::new_empty!(f32, D) }
7333        }
7334
7335        #[inline]
7336        unsafe fn decode(
7337            &mut self,
7338            decoder: &mut fidl::encoding::Decoder<'_, D>,
7339            offset: usize,
7340            _depth: fidl::encoding::Depth,
7341        ) -> fidl::Result<()> {
7342            decoder.debug_check_bounds::<Self>(offset);
7343            // Verify that padding bytes are zero.
7344            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 0, _depth)?;
7345            Ok(())
7346        }
7347    }
7348
7349    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDb2Request {
7350        type Borrowed<'a> = &'a Self;
7351        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7352            value
7353        }
7354    }
7355
7356    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDb2Request {
7357        type Owned = Self;
7358
7359        #[inline(always)]
7360        fn inline_align(_context: fidl::encoding::Context) -> usize {
7361            8
7362        }
7363
7364        #[inline(always)]
7365        fn inline_size(_context: fidl::encoding::Context) -> usize {
7366            24
7367        }
7368    }
7369
7370    unsafe impl<D: fidl::encoding::ResourceDialect>
7371        fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Request, D>
7372        for &AudioCoreGetVolumeFromDb2Request
7373    {
7374        #[inline]
7375        unsafe fn encode(
7376            self,
7377            encoder: &mut fidl::encoding::Encoder<'_, D>,
7378            offset: usize,
7379            _depth: fidl::encoding::Depth,
7380        ) -> fidl::Result<()> {
7381            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Request>(offset);
7382            // Delegate to tuple encoding.
7383            fidl::encoding::Encode::<AudioCoreGetVolumeFromDb2Request, D>::encode(
7384                (
7385                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7386                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7387                ),
7388                encoder,
7389                offset,
7390                _depth,
7391            )
7392        }
7393    }
7394    unsafe impl<
7395        D: fidl::encoding::ResourceDialect,
7396        T0: fidl::encoding::Encode<Usage2, D>,
7397        T1: fidl::encoding::Encode<f32, D>,
7398    > fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Request, D> for (T0, T1)
7399    {
7400        #[inline]
7401        unsafe fn encode(
7402            self,
7403            encoder: &mut fidl::encoding::Encoder<'_, D>,
7404            offset: usize,
7405            depth: fidl::encoding::Depth,
7406        ) -> fidl::Result<()> {
7407            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Request>(offset);
7408            // Zero out padding regions. There's no need to apply masks
7409            // because the unmasked parts will be overwritten by fields.
7410            unsafe {
7411                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7412                (ptr as *mut u64).write_unaligned(0);
7413            }
7414            // Write the fields.
7415            self.0.encode(encoder, offset + 0, depth)?;
7416            self.1.encode(encoder, offset + 16, depth)?;
7417            Ok(())
7418        }
7419    }
7420
7421    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7422        for AudioCoreGetVolumeFromDb2Request
7423    {
7424        #[inline(always)]
7425        fn new_empty() -> Self {
7426            Self { usage: fidl::new_empty!(Usage2, D), gain_db: fidl::new_empty!(f32, D) }
7427        }
7428
7429        #[inline]
7430        unsafe fn decode(
7431            &mut self,
7432            decoder: &mut fidl::encoding::Decoder<'_, D>,
7433            offset: usize,
7434            _depth: fidl::encoding::Depth,
7435        ) -> fidl::Result<()> {
7436            decoder.debug_check_bounds::<Self>(offset);
7437            // Verify that padding bytes are zero.
7438            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7439            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7440            let mask = 0xffffffff00000000u64;
7441            let maskedval = padval & mask;
7442            if maskedval != 0 {
7443                return Err(fidl::Error::NonZeroPadding {
7444                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7445                });
7446            }
7447            fidl::decode!(Usage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
7448            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 16, _depth)?;
7449            Ok(())
7450        }
7451    }
7452
7453    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDbRequest {
7454        type Borrowed<'a> = &'a Self;
7455        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7456            value
7457        }
7458    }
7459
7460    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDbRequest {
7461        type Owned = Self;
7462
7463        #[inline(always)]
7464        fn inline_align(_context: fidl::encoding::Context) -> usize {
7465            8
7466        }
7467
7468        #[inline(always)]
7469        fn inline_size(_context: fidl::encoding::Context) -> usize {
7470            24
7471        }
7472    }
7473
7474    unsafe impl<D: fidl::encoding::ResourceDialect>
7475        fidl::encoding::Encode<AudioCoreGetVolumeFromDbRequest, D>
7476        for &AudioCoreGetVolumeFromDbRequest
7477    {
7478        #[inline]
7479        unsafe fn encode(
7480            self,
7481            encoder: &mut fidl::encoding::Encoder<'_, D>,
7482            offset: usize,
7483            _depth: fidl::encoding::Depth,
7484        ) -> fidl::Result<()> {
7485            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbRequest>(offset);
7486            // Delegate to tuple encoding.
7487            fidl::encoding::Encode::<AudioCoreGetVolumeFromDbRequest, D>::encode(
7488                (
7489                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7490                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7491                ),
7492                encoder,
7493                offset,
7494                _depth,
7495            )
7496        }
7497    }
7498    unsafe impl<
7499        D: fidl::encoding::ResourceDialect,
7500        T0: fidl::encoding::Encode<Usage, D>,
7501        T1: fidl::encoding::Encode<f32, D>,
7502    > fidl::encoding::Encode<AudioCoreGetVolumeFromDbRequest, D> for (T0, T1)
7503    {
7504        #[inline]
7505        unsafe fn encode(
7506            self,
7507            encoder: &mut fidl::encoding::Encoder<'_, D>,
7508            offset: usize,
7509            depth: fidl::encoding::Depth,
7510        ) -> fidl::Result<()> {
7511            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbRequest>(offset);
7512            // Zero out padding regions. There's no need to apply masks
7513            // because the unmasked parts will be overwritten by fields.
7514            unsafe {
7515                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7516                (ptr as *mut u64).write_unaligned(0);
7517            }
7518            // Write the fields.
7519            self.0.encode(encoder, offset + 0, depth)?;
7520            self.1.encode(encoder, offset + 16, depth)?;
7521            Ok(())
7522        }
7523    }
7524
7525    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7526        for AudioCoreGetVolumeFromDbRequest
7527    {
7528        #[inline(always)]
7529        fn new_empty() -> Self {
7530            Self { usage: fidl::new_empty!(Usage, D), gain_db: fidl::new_empty!(f32, D) }
7531        }
7532
7533        #[inline]
7534        unsafe fn decode(
7535            &mut self,
7536            decoder: &mut fidl::encoding::Decoder<'_, D>,
7537            offset: usize,
7538            _depth: fidl::encoding::Depth,
7539        ) -> fidl::Result<()> {
7540            decoder.debug_check_bounds::<Self>(offset);
7541            // Verify that padding bytes are zero.
7542            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7543            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7544            let mask = 0xffffffff00000000u64;
7545            let maskedval = padval & mask;
7546            if maskedval != 0 {
7547                return Err(fidl::Error::NonZeroPadding {
7548                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7549                });
7550            }
7551            fidl::decode!(Usage, D, &mut self.usage, decoder, offset + 0, _depth)?;
7552            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 16, _depth)?;
7553            Ok(())
7554        }
7555    }
7556
7557    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDbResponse {
7558        type Borrowed<'a> = &'a Self;
7559        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7560            value
7561        }
7562    }
7563
7564    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDbResponse {
7565        type Owned = Self;
7566
7567        #[inline(always)]
7568        fn inline_align(_context: fidl::encoding::Context) -> usize {
7569            4
7570        }
7571
7572        #[inline(always)]
7573        fn inline_size(_context: fidl::encoding::Context) -> usize {
7574            4
7575        }
7576    }
7577
7578    unsafe impl<D: fidl::encoding::ResourceDialect>
7579        fidl::encoding::Encode<AudioCoreGetVolumeFromDbResponse, D>
7580        for &AudioCoreGetVolumeFromDbResponse
7581    {
7582        #[inline]
7583        unsafe fn encode(
7584            self,
7585            encoder: &mut fidl::encoding::Encoder<'_, D>,
7586            offset: usize,
7587            _depth: fidl::encoding::Depth,
7588        ) -> fidl::Result<()> {
7589            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbResponse>(offset);
7590            // Delegate to tuple encoding.
7591            fidl::encoding::Encode::<AudioCoreGetVolumeFromDbResponse, D>::encode(
7592                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),),
7593                encoder,
7594                offset,
7595                _depth,
7596            )
7597        }
7598    }
7599    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
7600        fidl::encoding::Encode<AudioCoreGetVolumeFromDbResponse, D> for (T0,)
7601    {
7602        #[inline]
7603        unsafe fn encode(
7604            self,
7605            encoder: &mut fidl::encoding::Encoder<'_, D>,
7606            offset: usize,
7607            depth: fidl::encoding::Depth,
7608        ) -> fidl::Result<()> {
7609            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbResponse>(offset);
7610            // Zero out padding regions. There's no need to apply masks
7611            // because the unmasked parts will be overwritten by fields.
7612            // Write the fields.
7613            self.0.encode(encoder, offset + 0, depth)?;
7614            Ok(())
7615        }
7616    }
7617
7618    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7619        for AudioCoreGetVolumeFromDbResponse
7620    {
7621        #[inline(always)]
7622        fn new_empty() -> Self {
7623            Self { volume: fidl::new_empty!(f32, D) }
7624        }
7625
7626        #[inline]
7627        unsafe fn decode(
7628            &mut self,
7629            decoder: &mut fidl::encoding::Decoder<'_, D>,
7630            offset: usize,
7631            _depth: fidl::encoding::Depth,
7632        ) -> fidl::Result<()> {
7633            decoder.debug_check_bounds::<Self>(offset);
7634            // Verify that padding bytes are zero.
7635            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 0, _depth)?;
7636            Ok(())
7637        }
7638    }
7639
7640    impl fidl::encoding::ValueTypeMarker for AudioCoreSetCaptureUsageGain2Request {
7641        type Borrowed<'a> = &'a Self;
7642        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7643            value
7644        }
7645    }
7646
7647    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetCaptureUsageGain2Request {
7648        type Owned = Self;
7649
7650        #[inline(always)]
7651        fn inline_align(_context: fidl::encoding::Context) -> usize {
7652            4
7653        }
7654
7655        #[inline(always)]
7656        fn inline_size(_context: fidl::encoding::Context) -> usize {
7657            8
7658        }
7659    }
7660
7661    unsafe impl<D: fidl::encoding::ResourceDialect>
7662        fidl::encoding::Encode<AudioCoreSetCaptureUsageGain2Request, D>
7663        for &AudioCoreSetCaptureUsageGain2Request
7664    {
7665        #[inline]
7666        unsafe fn encode(
7667            self,
7668            encoder: &mut fidl::encoding::Encoder<'_, D>,
7669            offset: usize,
7670            _depth: fidl::encoding::Depth,
7671        ) -> fidl::Result<()> {
7672            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGain2Request>(offset);
7673            // Delegate to tuple encoding.
7674            fidl::encoding::Encode::<AudioCoreSetCaptureUsageGain2Request, D>::encode(
7675                (
7676                    <AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7677                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7678                ),
7679                encoder,
7680                offset,
7681                _depth,
7682            )
7683        }
7684    }
7685    unsafe impl<
7686        D: fidl::encoding::ResourceDialect,
7687        T0: fidl::encoding::Encode<AudioCaptureUsage2, D>,
7688        T1: fidl::encoding::Encode<f32, D>,
7689    > fidl::encoding::Encode<AudioCoreSetCaptureUsageGain2Request, D> for (T0, T1)
7690    {
7691        #[inline]
7692        unsafe fn encode(
7693            self,
7694            encoder: &mut fidl::encoding::Encoder<'_, D>,
7695            offset: usize,
7696            depth: fidl::encoding::Depth,
7697        ) -> fidl::Result<()> {
7698            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGain2Request>(offset);
7699            // Zero out padding regions. There's no need to apply masks
7700            // because the unmasked parts will be overwritten by fields.
7701            // Write the fields.
7702            self.0.encode(encoder, offset + 0, depth)?;
7703            self.1.encode(encoder, offset + 4, depth)?;
7704            Ok(())
7705        }
7706    }
7707
7708    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7709        for AudioCoreSetCaptureUsageGain2Request
7710    {
7711        #[inline(always)]
7712        fn new_empty() -> Self {
7713            Self {
7714                usage: fidl::new_empty!(AudioCaptureUsage2, D),
7715                gain_db: fidl::new_empty!(f32, D),
7716            }
7717        }
7718
7719        #[inline]
7720        unsafe fn decode(
7721            &mut self,
7722            decoder: &mut fidl::encoding::Decoder<'_, D>,
7723            offset: usize,
7724            _depth: fidl::encoding::Depth,
7725        ) -> fidl::Result<()> {
7726            decoder.debug_check_bounds::<Self>(offset);
7727            // Verify that padding bytes are zero.
7728            fidl::decode!(AudioCaptureUsage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
7729            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
7730            Ok(())
7731        }
7732    }
7733
7734    impl fidl::encoding::ValueTypeMarker for AudioCoreSetCaptureUsageGainRequest {
7735        type Borrowed<'a> = &'a Self;
7736        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7737            value
7738        }
7739    }
7740
7741    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetCaptureUsageGainRequest {
7742        type Owned = Self;
7743
7744        #[inline(always)]
7745        fn inline_align(_context: fidl::encoding::Context) -> usize {
7746            4
7747        }
7748
7749        #[inline(always)]
7750        fn inline_size(_context: fidl::encoding::Context) -> usize {
7751            8
7752        }
7753    }
7754
7755    unsafe impl<D: fidl::encoding::ResourceDialect>
7756        fidl::encoding::Encode<AudioCoreSetCaptureUsageGainRequest, D>
7757        for &AudioCoreSetCaptureUsageGainRequest
7758    {
7759        #[inline]
7760        unsafe fn encode(
7761            self,
7762            encoder: &mut fidl::encoding::Encoder<'_, D>,
7763            offset: usize,
7764            _depth: fidl::encoding::Depth,
7765        ) -> fidl::Result<()> {
7766            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGainRequest>(offset);
7767            // Delegate to tuple encoding.
7768            fidl::encoding::Encode::<AudioCoreSetCaptureUsageGainRequest, D>::encode(
7769                (
7770                    <AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7771                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7772                ),
7773                encoder,
7774                offset,
7775                _depth,
7776            )
7777        }
7778    }
7779    unsafe impl<
7780        D: fidl::encoding::ResourceDialect,
7781        T0: fidl::encoding::Encode<AudioCaptureUsage, D>,
7782        T1: fidl::encoding::Encode<f32, D>,
7783    > fidl::encoding::Encode<AudioCoreSetCaptureUsageGainRequest, D> for (T0, T1)
7784    {
7785        #[inline]
7786        unsafe fn encode(
7787            self,
7788            encoder: &mut fidl::encoding::Encoder<'_, D>,
7789            offset: usize,
7790            depth: fidl::encoding::Depth,
7791        ) -> fidl::Result<()> {
7792            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGainRequest>(offset);
7793            // Zero out padding regions. There's no need to apply masks
7794            // because the unmasked parts will be overwritten by fields.
7795            // Write the fields.
7796            self.0.encode(encoder, offset + 0, depth)?;
7797            self.1.encode(encoder, offset + 4, depth)?;
7798            Ok(())
7799        }
7800    }
7801
7802    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7803        for AudioCoreSetCaptureUsageGainRequest
7804    {
7805        #[inline(always)]
7806        fn new_empty() -> Self {
7807            Self {
7808                usage: fidl::new_empty!(AudioCaptureUsage, D),
7809                gain_db: fidl::new_empty!(f32, D),
7810            }
7811        }
7812
7813        #[inline]
7814        unsafe fn decode(
7815            &mut self,
7816            decoder: &mut fidl::encoding::Decoder<'_, D>,
7817            offset: usize,
7818            _depth: fidl::encoding::Depth,
7819        ) -> fidl::Result<()> {
7820            decoder.debug_check_bounds::<Self>(offset);
7821            // Verify that padding bytes are zero.
7822            fidl::decode!(AudioCaptureUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
7823            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
7824            Ok(())
7825        }
7826    }
7827
7828    impl fidl::encoding::ValueTypeMarker for AudioCoreSetInteraction2Request {
7829        type Borrowed<'a> = &'a Self;
7830        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7831            value
7832        }
7833    }
7834
7835    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetInteraction2Request {
7836        type Owned = Self;
7837
7838        #[inline(always)]
7839        fn inline_align(_context: fidl::encoding::Context) -> usize {
7840            8
7841        }
7842
7843        #[inline(always)]
7844        fn inline_size(_context: fidl::encoding::Context) -> usize {
7845            40
7846        }
7847    }
7848
7849    unsafe impl<D: fidl::encoding::ResourceDialect>
7850        fidl::encoding::Encode<AudioCoreSetInteraction2Request, D>
7851        for &AudioCoreSetInteraction2Request
7852    {
7853        #[inline]
7854        unsafe fn encode(
7855            self,
7856            encoder: &mut fidl::encoding::Encoder<'_, D>,
7857            offset: usize,
7858            _depth: fidl::encoding::Depth,
7859        ) -> fidl::Result<()> {
7860            encoder.debug_check_bounds::<AudioCoreSetInteraction2Request>(offset);
7861            // Delegate to tuple encoding.
7862            fidl::encoding::Encode::<AudioCoreSetInteraction2Request, D>::encode(
7863                (
7864                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.active),
7865                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.affected),
7866                    <Behavior as fidl::encoding::ValueTypeMarker>::borrow(&self.behavior),
7867                ),
7868                encoder,
7869                offset,
7870                _depth,
7871            )
7872        }
7873    }
7874    unsafe impl<
7875        D: fidl::encoding::ResourceDialect,
7876        T0: fidl::encoding::Encode<Usage2, D>,
7877        T1: fidl::encoding::Encode<Usage2, D>,
7878        T2: fidl::encoding::Encode<Behavior, D>,
7879    > fidl::encoding::Encode<AudioCoreSetInteraction2Request, D> for (T0, T1, T2)
7880    {
7881        #[inline]
7882        unsafe fn encode(
7883            self,
7884            encoder: &mut fidl::encoding::Encoder<'_, D>,
7885            offset: usize,
7886            depth: fidl::encoding::Depth,
7887        ) -> fidl::Result<()> {
7888            encoder.debug_check_bounds::<AudioCoreSetInteraction2Request>(offset);
7889            // Zero out padding regions. There's no need to apply masks
7890            // because the unmasked parts will be overwritten by fields.
7891            unsafe {
7892                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
7893                (ptr as *mut u64).write_unaligned(0);
7894            }
7895            // Write the fields.
7896            self.0.encode(encoder, offset + 0, depth)?;
7897            self.1.encode(encoder, offset + 16, depth)?;
7898            self.2.encode(encoder, offset + 32, depth)?;
7899            Ok(())
7900        }
7901    }
7902
7903    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7904        for AudioCoreSetInteraction2Request
7905    {
7906        #[inline(always)]
7907        fn new_empty() -> Self {
7908            Self {
7909                active: fidl::new_empty!(Usage2, D),
7910                affected: fidl::new_empty!(Usage2, D),
7911                behavior: fidl::new_empty!(Behavior, D),
7912            }
7913        }
7914
7915        #[inline]
7916        unsafe fn decode(
7917            &mut self,
7918            decoder: &mut fidl::encoding::Decoder<'_, D>,
7919            offset: usize,
7920            _depth: fidl::encoding::Depth,
7921        ) -> fidl::Result<()> {
7922            decoder.debug_check_bounds::<Self>(offset);
7923            // Verify that padding bytes are zero.
7924            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
7925            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7926            let mask = 0xffffffff00000000u64;
7927            let maskedval = padval & mask;
7928            if maskedval != 0 {
7929                return Err(fidl::Error::NonZeroPadding {
7930                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
7931                });
7932            }
7933            fidl::decode!(Usage2, D, &mut self.active, decoder, offset + 0, _depth)?;
7934            fidl::decode!(Usage2, D, &mut self.affected, decoder, offset + 16, _depth)?;
7935            fidl::decode!(Behavior, D, &mut self.behavior, decoder, offset + 32, _depth)?;
7936            Ok(())
7937        }
7938    }
7939
7940    impl fidl::encoding::ValueTypeMarker for AudioCoreSetInteractionRequest {
7941        type Borrowed<'a> = &'a Self;
7942        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7943            value
7944        }
7945    }
7946
7947    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetInteractionRequest {
7948        type Owned = Self;
7949
7950        #[inline(always)]
7951        fn inline_align(_context: fidl::encoding::Context) -> usize {
7952            8
7953        }
7954
7955        #[inline(always)]
7956        fn inline_size(_context: fidl::encoding::Context) -> usize {
7957            40
7958        }
7959    }
7960
7961    unsafe impl<D: fidl::encoding::ResourceDialect>
7962        fidl::encoding::Encode<AudioCoreSetInteractionRequest, D>
7963        for &AudioCoreSetInteractionRequest
7964    {
7965        #[inline]
7966        unsafe fn encode(
7967            self,
7968            encoder: &mut fidl::encoding::Encoder<'_, D>,
7969            offset: usize,
7970            _depth: fidl::encoding::Depth,
7971        ) -> fidl::Result<()> {
7972            encoder.debug_check_bounds::<AudioCoreSetInteractionRequest>(offset);
7973            // Delegate to tuple encoding.
7974            fidl::encoding::Encode::<AudioCoreSetInteractionRequest, D>::encode(
7975                (
7976                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.active),
7977                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.affected),
7978                    <Behavior as fidl::encoding::ValueTypeMarker>::borrow(&self.behavior),
7979                ),
7980                encoder,
7981                offset,
7982                _depth,
7983            )
7984        }
7985    }
7986    unsafe impl<
7987        D: fidl::encoding::ResourceDialect,
7988        T0: fidl::encoding::Encode<Usage, D>,
7989        T1: fidl::encoding::Encode<Usage, D>,
7990        T2: fidl::encoding::Encode<Behavior, D>,
7991    > fidl::encoding::Encode<AudioCoreSetInteractionRequest, D> for (T0, T1, T2)
7992    {
7993        #[inline]
7994        unsafe fn encode(
7995            self,
7996            encoder: &mut fidl::encoding::Encoder<'_, D>,
7997            offset: usize,
7998            depth: fidl::encoding::Depth,
7999        ) -> fidl::Result<()> {
8000            encoder.debug_check_bounds::<AudioCoreSetInteractionRequest>(offset);
8001            // Zero out padding regions. There's no need to apply masks
8002            // because the unmasked parts will be overwritten by fields.
8003            unsafe {
8004                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
8005                (ptr as *mut u64).write_unaligned(0);
8006            }
8007            // Write the fields.
8008            self.0.encode(encoder, offset + 0, depth)?;
8009            self.1.encode(encoder, offset + 16, depth)?;
8010            self.2.encode(encoder, offset + 32, depth)?;
8011            Ok(())
8012        }
8013    }
8014
8015    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8016        for AudioCoreSetInteractionRequest
8017    {
8018        #[inline(always)]
8019        fn new_empty() -> Self {
8020            Self {
8021                active: fidl::new_empty!(Usage, D),
8022                affected: fidl::new_empty!(Usage, D),
8023                behavior: fidl::new_empty!(Behavior, D),
8024            }
8025        }
8026
8027        #[inline]
8028        unsafe fn decode(
8029            &mut self,
8030            decoder: &mut fidl::encoding::Decoder<'_, D>,
8031            offset: usize,
8032            _depth: fidl::encoding::Depth,
8033        ) -> fidl::Result<()> {
8034            decoder.debug_check_bounds::<Self>(offset);
8035            // Verify that padding bytes are zero.
8036            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
8037            let padval = unsafe { (ptr as *const u64).read_unaligned() };
8038            let mask = 0xffffffff00000000u64;
8039            let maskedval = padval & mask;
8040            if maskedval != 0 {
8041                return Err(fidl::Error::NonZeroPadding {
8042                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
8043                });
8044            }
8045            fidl::decode!(Usage, D, &mut self.active, decoder, offset + 0, _depth)?;
8046            fidl::decode!(Usage, D, &mut self.affected, decoder, offset + 16, _depth)?;
8047            fidl::decode!(Behavior, D, &mut self.behavior, decoder, offset + 32, _depth)?;
8048            Ok(())
8049        }
8050    }
8051
8052    impl fidl::encoding::ValueTypeMarker for AudioCoreSetRenderUsageGain2Request {
8053        type Borrowed<'a> = &'a Self;
8054        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8055            value
8056        }
8057    }
8058
8059    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetRenderUsageGain2Request {
8060        type Owned = Self;
8061
8062        #[inline(always)]
8063        fn inline_align(_context: fidl::encoding::Context) -> usize {
8064            4
8065        }
8066
8067        #[inline(always)]
8068        fn inline_size(_context: fidl::encoding::Context) -> usize {
8069            8
8070        }
8071    }
8072
8073    unsafe impl<D: fidl::encoding::ResourceDialect>
8074        fidl::encoding::Encode<AudioCoreSetRenderUsageGain2Request, D>
8075        for &AudioCoreSetRenderUsageGain2Request
8076    {
8077        #[inline]
8078        unsafe fn encode(
8079            self,
8080            encoder: &mut fidl::encoding::Encoder<'_, D>,
8081            offset: usize,
8082            _depth: fidl::encoding::Depth,
8083        ) -> fidl::Result<()> {
8084            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGain2Request>(offset);
8085            // Delegate to tuple encoding.
8086            fidl::encoding::Encode::<AudioCoreSetRenderUsageGain2Request, D>::encode(
8087                (
8088                    <AudioRenderUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
8089                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
8090                ),
8091                encoder,
8092                offset,
8093                _depth,
8094            )
8095        }
8096    }
8097    unsafe impl<
8098        D: fidl::encoding::ResourceDialect,
8099        T0: fidl::encoding::Encode<AudioRenderUsage2, D>,
8100        T1: fidl::encoding::Encode<f32, D>,
8101    > fidl::encoding::Encode<AudioCoreSetRenderUsageGain2Request, D> for (T0, T1)
8102    {
8103        #[inline]
8104        unsafe fn encode(
8105            self,
8106            encoder: &mut fidl::encoding::Encoder<'_, D>,
8107            offset: usize,
8108            depth: fidl::encoding::Depth,
8109        ) -> fidl::Result<()> {
8110            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGain2Request>(offset);
8111            // Zero out padding regions. There's no need to apply masks
8112            // because the unmasked parts will be overwritten by fields.
8113            // Write the fields.
8114            self.0.encode(encoder, offset + 0, depth)?;
8115            self.1.encode(encoder, offset + 4, depth)?;
8116            Ok(())
8117        }
8118    }
8119
8120    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8121        for AudioCoreSetRenderUsageGain2Request
8122    {
8123        #[inline(always)]
8124        fn new_empty() -> Self {
8125            Self {
8126                usage: fidl::new_empty!(AudioRenderUsage2, D),
8127                gain_db: fidl::new_empty!(f32, D),
8128            }
8129        }
8130
8131        #[inline]
8132        unsafe fn decode(
8133            &mut self,
8134            decoder: &mut fidl::encoding::Decoder<'_, D>,
8135            offset: usize,
8136            _depth: fidl::encoding::Depth,
8137        ) -> fidl::Result<()> {
8138            decoder.debug_check_bounds::<Self>(offset);
8139            // Verify that padding bytes are zero.
8140            fidl::decode!(AudioRenderUsage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
8141            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
8142            Ok(())
8143        }
8144    }
8145
8146    impl fidl::encoding::ValueTypeMarker for AudioCoreSetRenderUsageGainRequest {
8147        type Borrowed<'a> = &'a Self;
8148        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8149            value
8150        }
8151    }
8152
8153    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetRenderUsageGainRequest {
8154        type Owned = Self;
8155
8156        #[inline(always)]
8157        fn inline_align(_context: fidl::encoding::Context) -> usize {
8158            4
8159        }
8160
8161        #[inline(always)]
8162        fn inline_size(_context: fidl::encoding::Context) -> usize {
8163            8
8164        }
8165    }
8166
8167    unsafe impl<D: fidl::encoding::ResourceDialect>
8168        fidl::encoding::Encode<AudioCoreSetRenderUsageGainRequest, D>
8169        for &AudioCoreSetRenderUsageGainRequest
8170    {
8171        #[inline]
8172        unsafe fn encode(
8173            self,
8174            encoder: &mut fidl::encoding::Encoder<'_, D>,
8175            offset: usize,
8176            _depth: fidl::encoding::Depth,
8177        ) -> fidl::Result<()> {
8178            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGainRequest>(offset);
8179            // Delegate to tuple encoding.
8180            fidl::encoding::Encode::<AudioCoreSetRenderUsageGainRequest, D>::encode(
8181                (
8182                    <AudioRenderUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
8183                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
8184                ),
8185                encoder,
8186                offset,
8187                _depth,
8188            )
8189        }
8190    }
8191    unsafe impl<
8192        D: fidl::encoding::ResourceDialect,
8193        T0: fidl::encoding::Encode<AudioRenderUsage, D>,
8194        T1: fidl::encoding::Encode<f32, D>,
8195    > fidl::encoding::Encode<AudioCoreSetRenderUsageGainRequest, D> for (T0, T1)
8196    {
8197        #[inline]
8198        unsafe fn encode(
8199            self,
8200            encoder: &mut fidl::encoding::Encoder<'_, D>,
8201            offset: usize,
8202            depth: fidl::encoding::Depth,
8203        ) -> fidl::Result<()> {
8204            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGainRequest>(offset);
8205            // Zero out padding regions. There's no need to apply masks
8206            // because the unmasked parts will be overwritten by fields.
8207            // Write the fields.
8208            self.0.encode(encoder, offset + 0, depth)?;
8209            self.1.encode(encoder, offset + 4, depth)?;
8210            Ok(())
8211        }
8212    }
8213
8214    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8215        for AudioCoreSetRenderUsageGainRequest
8216    {
8217        #[inline(always)]
8218        fn new_empty() -> Self {
8219            Self { usage: fidl::new_empty!(AudioRenderUsage, D), gain_db: fidl::new_empty!(f32, D) }
8220        }
8221
8222        #[inline]
8223        unsafe fn decode(
8224            &mut self,
8225            decoder: &mut fidl::encoding::Decoder<'_, D>,
8226            offset: usize,
8227            _depth: fidl::encoding::Depth,
8228        ) -> fidl::Result<()> {
8229            decoder.debug_check_bounds::<Self>(offset);
8230            // Verify that padding bytes are zero.
8231            fidl::decode!(AudioRenderUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
8232            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
8233            Ok(())
8234        }
8235    }
8236
8237    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolume2Response {
8238        type Borrowed<'a> = &'a Self;
8239        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8240            value
8241        }
8242    }
8243
8244    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolume2Response {
8245        type Owned = Self;
8246
8247        #[inline(always)]
8248        fn inline_align(_context: fidl::encoding::Context) -> usize {
8249            4
8250        }
8251
8252        #[inline(always)]
8253        fn inline_size(_context: fidl::encoding::Context) -> usize {
8254            4
8255        }
8256    }
8257
8258    unsafe impl<D: fidl::encoding::ResourceDialect>
8259        fidl::encoding::Encode<AudioCoreGetDbFromVolume2Response, D>
8260        for &AudioCoreGetDbFromVolume2Response
8261    {
8262        #[inline]
8263        unsafe fn encode(
8264            self,
8265            encoder: &mut fidl::encoding::Encoder<'_, D>,
8266            offset: usize,
8267            _depth: fidl::encoding::Depth,
8268        ) -> fidl::Result<()> {
8269            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Response>(offset);
8270            // Delegate to tuple encoding.
8271            fidl::encoding::Encode::<AudioCoreGetDbFromVolume2Response, D>::encode(
8272                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),),
8273                encoder,
8274                offset,
8275                _depth,
8276            )
8277        }
8278    }
8279    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
8280        fidl::encoding::Encode<AudioCoreGetDbFromVolume2Response, D> for (T0,)
8281    {
8282        #[inline]
8283        unsafe fn encode(
8284            self,
8285            encoder: &mut fidl::encoding::Encoder<'_, D>,
8286            offset: usize,
8287            depth: fidl::encoding::Depth,
8288        ) -> fidl::Result<()> {
8289            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Response>(offset);
8290            // Zero out padding regions. There's no need to apply masks
8291            // because the unmasked parts will be overwritten by fields.
8292            // Write the fields.
8293            self.0.encode(encoder, offset + 0, depth)?;
8294            Ok(())
8295        }
8296    }
8297
8298    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8299        for AudioCoreGetDbFromVolume2Response
8300    {
8301        #[inline(always)]
8302        fn new_empty() -> Self {
8303            Self { gain_db: fidl::new_empty!(f32, D) }
8304        }
8305
8306        #[inline]
8307        unsafe fn decode(
8308            &mut self,
8309            decoder: &mut fidl::encoding::Decoder<'_, D>,
8310            offset: usize,
8311            _depth: fidl::encoding::Depth,
8312        ) -> fidl::Result<()> {
8313            decoder.debug_check_bounds::<Self>(offset);
8314            // Verify that padding bytes are zero.
8315            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 0, _depth)?;
8316            Ok(())
8317        }
8318    }
8319
8320    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDb2Response {
8321        type Borrowed<'a> = &'a Self;
8322        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8323            value
8324        }
8325    }
8326
8327    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDb2Response {
8328        type Owned = Self;
8329
8330        #[inline(always)]
8331        fn inline_align(_context: fidl::encoding::Context) -> usize {
8332            4
8333        }
8334
8335        #[inline(always)]
8336        fn inline_size(_context: fidl::encoding::Context) -> usize {
8337            4
8338        }
8339    }
8340
8341    unsafe impl<D: fidl::encoding::ResourceDialect>
8342        fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Response, D>
8343        for &AudioCoreGetVolumeFromDb2Response
8344    {
8345        #[inline]
8346        unsafe fn encode(
8347            self,
8348            encoder: &mut fidl::encoding::Encoder<'_, D>,
8349            offset: usize,
8350            _depth: fidl::encoding::Depth,
8351        ) -> fidl::Result<()> {
8352            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Response>(offset);
8353            // Delegate to tuple encoding.
8354            fidl::encoding::Encode::<AudioCoreGetVolumeFromDb2Response, D>::encode(
8355                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),),
8356                encoder,
8357                offset,
8358                _depth,
8359            )
8360        }
8361    }
8362    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
8363        fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Response, D> for (T0,)
8364    {
8365        #[inline]
8366        unsafe fn encode(
8367            self,
8368            encoder: &mut fidl::encoding::Encoder<'_, D>,
8369            offset: usize,
8370            depth: fidl::encoding::Depth,
8371        ) -> fidl::Result<()> {
8372            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Response>(offset);
8373            // Zero out padding regions. There's no need to apply masks
8374            // because the unmasked parts will be overwritten by fields.
8375            // Write the fields.
8376            self.0.encode(encoder, offset + 0, depth)?;
8377            Ok(())
8378        }
8379    }
8380
8381    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8382        for AudioCoreGetVolumeFromDb2Response
8383    {
8384        #[inline(always)]
8385        fn new_empty() -> Self {
8386            Self { volume: fidl::new_empty!(f32, D) }
8387        }
8388
8389        #[inline]
8390        unsafe fn decode(
8391            &mut self,
8392            decoder: &mut fidl::encoding::Decoder<'_, D>,
8393            offset: usize,
8394            _depth: fidl::encoding::Depth,
8395        ) -> fidl::Result<()> {
8396            decoder.debug_check_bounds::<Self>(offset);
8397            // Verify that padding bytes are zero.
8398            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 0, _depth)?;
8399            Ok(())
8400        }
8401    }
8402
8403    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorGetDeviceGainRequest {
8404        type Borrowed<'a> = &'a Self;
8405        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8406            value
8407        }
8408    }
8409
8410    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorGetDeviceGainRequest {
8411        type Owned = Self;
8412
8413        #[inline(always)]
8414        fn inline_align(_context: fidl::encoding::Context) -> usize {
8415            8
8416        }
8417
8418        #[inline(always)]
8419        fn inline_size(_context: fidl::encoding::Context) -> usize {
8420            8
8421        }
8422        #[inline(always)]
8423        fn encode_is_copy() -> bool {
8424            true
8425        }
8426
8427        #[inline(always)]
8428        fn decode_is_copy() -> bool {
8429            true
8430        }
8431    }
8432
8433    unsafe impl<D: fidl::encoding::ResourceDialect>
8434        fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainRequest, D>
8435        for &AudioDeviceEnumeratorGetDeviceGainRequest
8436    {
8437        #[inline]
8438        unsafe fn encode(
8439            self,
8440            encoder: &mut fidl::encoding::Encoder<'_, D>,
8441            offset: usize,
8442            _depth: fidl::encoding::Depth,
8443        ) -> fidl::Result<()> {
8444            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainRequest>(offset);
8445            unsafe {
8446                // Copy the object into the buffer.
8447                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
8448                (buf_ptr as *mut AudioDeviceEnumeratorGetDeviceGainRequest).write_unaligned(
8449                    (self as *const AudioDeviceEnumeratorGetDeviceGainRequest).read(),
8450                );
8451                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
8452                // done second because the memcpy will write garbage to these bytes.
8453            }
8454            Ok(())
8455        }
8456    }
8457    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
8458        fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainRequest, D> for (T0,)
8459    {
8460        #[inline]
8461        unsafe fn encode(
8462            self,
8463            encoder: &mut fidl::encoding::Encoder<'_, D>,
8464            offset: usize,
8465            depth: fidl::encoding::Depth,
8466        ) -> fidl::Result<()> {
8467            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainRequest>(offset);
8468            // Zero out padding regions. There's no need to apply masks
8469            // because the unmasked parts will be overwritten by fields.
8470            // Write the fields.
8471            self.0.encode(encoder, offset + 0, depth)?;
8472            Ok(())
8473        }
8474    }
8475
8476    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8477        for AudioDeviceEnumeratorGetDeviceGainRequest
8478    {
8479        #[inline(always)]
8480        fn new_empty() -> Self {
8481            Self { device_token: fidl::new_empty!(u64, D) }
8482        }
8483
8484        #[inline]
8485        unsafe fn decode(
8486            &mut self,
8487            decoder: &mut fidl::encoding::Decoder<'_, D>,
8488            offset: usize,
8489            _depth: fidl::encoding::Depth,
8490        ) -> fidl::Result<()> {
8491            decoder.debug_check_bounds::<Self>(offset);
8492            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
8493            // Verify that padding bytes are zero.
8494            // Copy from the buffer into the object.
8495            unsafe {
8496                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
8497            }
8498            Ok(())
8499        }
8500    }
8501
8502    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorGetDeviceGainResponse {
8503        type Borrowed<'a> = &'a Self;
8504        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8505            value
8506        }
8507    }
8508
8509    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorGetDeviceGainResponse {
8510        type Owned = Self;
8511
8512        #[inline(always)]
8513        fn inline_align(_context: fidl::encoding::Context) -> usize {
8514            8
8515        }
8516
8517        #[inline(always)]
8518        fn inline_size(_context: fidl::encoding::Context) -> usize {
8519            16
8520        }
8521    }
8522
8523    unsafe impl<D: fidl::encoding::ResourceDialect>
8524        fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainResponse, D>
8525        for &AudioDeviceEnumeratorGetDeviceGainResponse
8526    {
8527        #[inline]
8528        unsafe fn encode(
8529            self,
8530            encoder: &mut fidl::encoding::Encoder<'_, D>,
8531            offset: usize,
8532            _depth: fidl::encoding::Depth,
8533        ) -> fidl::Result<()> {
8534            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainResponse>(offset);
8535            // Delegate to tuple encoding.
8536            fidl::encoding::Encode::<AudioDeviceEnumeratorGetDeviceGainResponse, D>::encode(
8537                (
8538                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_token),
8539                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
8540                ),
8541                encoder,
8542                offset,
8543                _depth,
8544            )
8545        }
8546    }
8547    unsafe impl<
8548        D: fidl::encoding::ResourceDialect,
8549        T0: fidl::encoding::Encode<u64, D>,
8550        T1: fidl::encoding::Encode<AudioGainInfo, D>,
8551    > fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainResponse, D> for (T0, T1)
8552    {
8553        #[inline]
8554        unsafe fn encode(
8555            self,
8556            encoder: &mut fidl::encoding::Encoder<'_, D>,
8557            offset: usize,
8558            depth: fidl::encoding::Depth,
8559        ) -> fidl::Result<()> {
8560            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainResponse>(offset);
8561            // Zero out padding regions. There's no need to apply masks
8562            // because the unmasked parts will be overwritten by fields.
8563            // Write the fields.
8564            self.0.encode(encoder, offset + 0, depth)?;
8565            self.1.encode(encoder, offset + 8, depth)?;
8566            Ok(())
8567        }
8568    }
8569
8570    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8571        for AudioDeviceEnumeratorGetDeviceGainResponse
8572    {
8573        #[inline(always)]
8574        fn new_empty() -> Self {
8575            Self {
8576                device_token: fidl::new_empty!(u64, D),
8577                gain_info: fidl::new_empty!(AudioGainInfo, D),
8578            }
8579        }
8580
8581        #[inline]
8582        unsafe fn decode(
8583            &mut self,
8584            decoder: &mut fidl::encoding::Decoder<'_, D>,
8585            offset: usize,
8586            _depth: fidl::encoding::Depth,
8587        ) -> fidl::Result<()> {
8588            decoder.debug_check_bounds::<Self>(offset);
8589            // Verify that padding bytes are zero.
8590            fidl::decode!(u64, D, &mut self.device_token, decoder, offset + 0, _depth)?;
8591            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 8, _depth)?;
8592            Ok(())
8593        }
8594    }
8595
8596    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorGetDevicesResponse {
8597        type Borrowed<'a> = &'a Self;
8598        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8599            value
8600        }
8601    }
8602
8603    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorGetDevicesResponse {
8604        type Owned = Self;
8605
8606        #[inline(always)]
8607        fn inline_align(_context: fidl::encoding::Context) -> usize {
8608            8
8609        }
8610
8611        #[inline(always)]
8612        fn inline_size(_context: fidl::encoding::Context) -> usize {
8613            16
8614        }
8615    }
8616
8617    unsafe impl<D: fidl::encoding::ResourceDialect>
8618        fidl::encoding::Encode<AudioDeviceEnumeratorGetDevicesResponse, D>
8619        for &AudioDeviceEnumeratorGetDevicesResponse
8620    {
8621        #[inline]
8622        unsafe fn encode(
8623            self,
8624            encoder: &mut fidl::encoding::Encoder<'_, D>,
8625            offset: usize,
8626            _depth: fidl::encoding::Depth,
8627        ) -> fidl::Result<()> {
8628            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDevicesResponse>(offset);
8629            // Delegate to tuple encoding.
8630            fidl::encoding::Encode::<AudioDeviceEnumeratorGetDevicesResponse, D>::encode(
8631                (
8632                    <fidl::encoding::UnboundedVector<AudioDeviceInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.devices),
8633                ),
8634                encoder, offset, _depth
8635            )
8636        }
8637    }
8638    unsafe impl<
8639        D: fidl::encoding::ResourceDialect,
8640        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<AudioDeviceInfo>, D>,
8641    > fidl::encoding::Encode<AudioDeviceEnumeratorGetDevicesResponse, D> for (T0,)
8642    {
8643        #[inline]
8644        unsafe fn encode(
8645            self,
8646            encoder: &mut fidl::encoding::Encoder<'_, D>,
8647            offset: usize,
8648            depth: fidl::encoding::Depth,
8649        ) -> fidl::Result<()> {
8650            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDevicesResponse>(offset);
8651            // Zero out padding regions. There's no need to apply masks
8652            // because the unmasked parts will be overwritten by fields.
8653            // Write the fields.
8654            self.0.encode(encoder, offset + 0, depth)?;
8655            Ok(())
8656        }
8657    }
8658
8659    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8660        for AudioDeviceEnumeratorGetDevicesResponse
8661    {
8662        #[inline(always)]
8663        fn new_empty() -> Self {
8664            Self { devices: fidl::new_empty!(fidl::encoding::UnboundedVector<AudioDeviceInfo>, D) }
8665        }
8666
8667        #[inline]
8668        unsafe fn decode(
8669            &mut self,
8670            decoder: &mut fidl::encoding::Decoder<'_, D>,
8671            offset: usize,
8672            _depth: fidl::encoding::Depth,
8673        ) -> fidl::Result<()> {
8674            decoder.debug_check_bounds::<Self>(offset);
8675            // Verify that padding bytes are zero.
8676            fidl::decode!(
8677                fidl::encoding::UnboundedVector<AudioDeviceInfo>,
8678                D,
8679                &mut self.devices,
8680                decoder,
8681                offset + 0,
8682                _depth
8683            )?;
8684            Ok(())
8685        }
8686    }
8687
8688    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {
8689        type Borrowed<'a> = &'a Self;
8690        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8691            value
8692        }
8693    }
8694
8695    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {
8696        type Owned = Self;
8697
8698        #[inline(always)]
8699        fn inline_align(_context: fidl::encoding::Context) -> usize {
8700            8
8701        }
8702
8703        #[inline(always)]
8704        fn inline_size(_context: fidl::encoding::Context) -> usize {
8705            16
8706        }
8707        #[inline(always)]
8708        fn encode_is_copy() -> bool {
8709            true
8710        }
8711
8712        #[inline(always)]
8713        fn decode_is_copy() -> bool {
8714            true
8715        }
8716    }
8717
8718    unsafe impl<D: fidl::encoding::ResourceDialect>
8719        fidl::encoding::Encode<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest, D>
8720        for &AudioDeviceEnumeratorOnDefaultDeviceChangedRequest
8721    {
8722        #[inline]
8723        unsafe fn encode(
8724            self,
8725            encoder: &mut fidl::encoding::Encoder<'_, D>,
8726            offset: usize,
8727            _depth: fidl::encoding::Depth,
8728        ) -> fidl::Result<()> {
8729            encoder
8730                .debug_check_bounds::<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest>(offset);
8731            unsafe {
8732                // Copy the object into the buffer.
8733                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
8734                (buf_ptr as *mut AudioDeviceEnumeratorOnDefaultDeviceChangedRequest)
8735                    .write_unaligned(
8736                        (self as *const AudioDeviceEnumeratorOnDefaultDeviceChangedRequest).read(),
8737                    );
8738                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
8739                // done second because the memcpy will write garbage to these bytes.
8740            }
8741            Ok(())
8742        }
8743    }
8744    unsafe impl<
8745        D: fidl::encoding::ResourceDialect,
8746        T0: fidl::encoding::Encode<u64, D>,
8747        T1: fidl::encoding::Encode<u64, D>,
8748    > fidl::encoding::Encode<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest, D> for (T0, T1)
8749    {
8750        #[inline]
8751        unsafe fn encode(
8752            self,
8753            encoder: &mut fidl::encoding::Encoder<'_, D>,
8754            offset: usize,
8755            depth: fidl::encoding::Depth,
8756        ) -> fidl::Result<()> {
8757            encoder
8758                .debug_check_bounds::<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest>(offset);
8759            // Zero out padding regions. There's no need to apply masks
8760            // because the unmasked parts will be overwritten by fields.
8761            // Write the fields.
8762            self.0.encode(encoder, offset + 0, depth)?;
8763            self.1.encode(encoder, offset + 8, depth)?;
8764            Ok(())
8765        }
8766    }
8767
8768    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8769        for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest
8770    {
8771        #[inline(always)]
8772        fn new_empty() -> Self {
8773            Self {
8774                old_default_token: fidl::new_empty!(u64, D),
8775                new_default_token: fidl::new_empty!(u64, D),
8776            }
8777        }
8778
8779        #[inline]
8780        unsafe fn decode(
8781            &mut self,
8782            decoder: &mut fidl::encoding::Decoder<'_, D>,
8783            offset: usize,
8784            _depth: fidl::encoding::Depth,
8785        ) -> fidl::Result<()> {
8786            decoder.debug_check_bounds::<Self>(offset);
8787            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
8788            // Verify that padding bytes are zero.
8789            // Copy from the buffer into the object.
8790            unsafe {
8791                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
8792            }
8793            Ok(())
8794        }
8795    }
8796
8797    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDeviceAddedRequest {
8798        type Borrowed<'a> = &'a Self;
8799        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8800            value
8801        }
8802    }
8803
8804    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDeviceAddedRequest {
8805        type Owned = Self;
8806
8807        #[inline(always)]
8808        fn inline_align(_context: fidl::encoding::Context) -> usize {
8809            8
8810        }
8811
8812        #[inline(always)]
8813        fn inline_size(_context: fidl::encoding::Context) -> usize {
8814            56
8815        }
8816    }
8817
8818    unsafe impl<D: fidl::encoding::ResourceDialect>
8819        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceAddedRequest, D>
8820        for &AudioDeviceEnumeratorOnDeviceAddedRequest
8821    {
8822        #[inline]
8823        unsafe fn encode(
8824            self,
8825            encoder: &mut fidl::encoding::Encoder<'_, D>,
8826            offset: usize,
8827            _depth: fidl::encoding::Depth,
8828        ) -> fidl::Result<()> {
8829            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceAddedRequest>(offset);
8830            // Delegate to tuple encoding.
8831            fidl::encoding::Encode::<AudioDeviceEnumeratorOnDeviceAddedRequest, D>::encode(
8832                (<AudioDeviceInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.device),),
8833                encoder,
8834                offset,
8835                _depth,
8836            )
8837        }
8838    }
8839    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioDeviceInfo, D>>
8840        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceAddedRequest, D> for (T0,)
8841    {
8842        #[inline]
8843        unsafe fn encode(
8844            self,
8845            encoder: &mut fidl::encoding::Encoder<'_, D>,
8846            offset: usize,
8847            depth: fidl::encoding::Depth,
8848        ) -> fidl::Result<()> {
8849            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceAddedRequest>(offset);
8850            // Zero out padding regions. There's no need to apply masks
8851            // because the unmasked parts will be overwritten by fields.
8852            // Write the fields.
8853            self.0.encode(encoder, offset + 0, depth)?;
8854            Ok(())
8855        }
8856    }
8857
8858    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8859        for AudioDeviceEnumeratorOnDeviceAddedRequest
8860    {
8861        #[inline(always)]
8862        fn new_empty() -> Self {
8863            Self { device: fidl::new_empty!(AudioDeviceInfo, D) }
8864        }
8865
8866        #[inline]
8867        unsafe fn decode(
8868            &mut self,
8869            decoder: &mut fidl::encoding::Decoder<'_, D>,
8870            offset: usize,
8871            _depth: fidl::encoding::Depth,
8872        ) -> fidl::Result<()> {
8873            decoder.debug_check_bounds::<Self>(offset);
8874            // Verify that padding bytes are zero.
8875            fidl::decode!(AudioDeviceInfo, D, &mut self.device, decoder, offset + 0, _depth)?;
8876            Ok(())
8877        }
8878    }
8879
8880    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDeviceGainChangedRequest {
8881        type Borrowed<'a> = &'a Self;
8882        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8883            value
8884        }
8885    }
8886
8887    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDeviceGainChangedRequest {
8888        type Owned = Self;
8889
8890        #[inline(always)]
8891        fn inline_align(_context: fidl::encoding::Context) -> usize {
8892            8
8893        }
8894
8895        #[inline(always)]
8896        fn inline_size(_context: fidl::encoding::Context) -> usize {
8897            16
8898        }
8899    }
8900
8901    unsafe impl<D: fidl::encoding::ResourceDialect>
8902        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceGainChangedRequest, D>
8903        for &AudioDeviceEnumeratorOnDeviceGainChangedRequest
8904    {
8905        #[inline]
8906        unsafe fn encode(
8907            self,
8908            encoder: &mut fidl::encoding::Encoder<'_, D>,
8909            offset: usize,
8910            _depth: fidl::encoding::Depth,
8911        ) -> fidl::Result<()> {
8912            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceGainChangedRequest>(offset);
8913            // Delegate to tuple encoding.
8914            fidl::encoding::Encode::<AudioDeviceEnumeratorOnDeviceGainChangedRequest, D>::encode(
8915                (
8916                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_token),
8917                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
8918                ),
8919                encoder,
8920                offset,
8921                _depth,
8922            )
8923        }
8924    }
8925    unsafe impl<
8926        D: fidl::encoding::ResourceDialect,
8927        T0: fidl::encoding::Encode<u64, D>,
8928        T1: fidl::encoding::Encode<AudioGainInfo, D>,
8929    > fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceGainChangedRequest, D> for (T0, T1)
8930    {
8931        #[inline]
8932        unsafe fn encode(
8933            self,
8934            encoder: &mut fidl::encoding::Encoder<'_, D>,
8935            offset: usize,
8936            depth: fidl::encoding::Depth,
8937        ) -> fidl::Result<()> {
8938            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceGainChangedRequest>(offset);
8939            // Zero out padding regions. There's no need to apply masks
8940            // because the unmasked parts will be overwritten by fields.
8941            // Write the fields.
8942            self.0.encode(encoder, offset + 0, depth)?;
8943            self.1.encode(encoder, offset + 8, depth)?;
8944            Ok(())
8945        }
8946    }
8947
8948    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8949        for AudioDeviceEnumeratorOnDeviceGainChangedRequest
8950    {
8951        #[inline(always)]
8952        fn new_empty() -> Self {
8953            Self {
8954                device_token: fidl::new_empty!(u64, D),
8955                gain_info: fidl::new_empty!(AudioGainInfo, D),
8956            }
8957        }
8958
8959        #[inline]
8960        unsafe fn decode(
8961            &mut self,
8962            decoder: &mut fidl::encoding::Decoder<'_, D>,
8963            offset: usize,
8964            _depth: fidl::encoding::Depth,
8965        ) -> fidl::Result<()> {
8966            decoder.debug_check_bounds::<Self>(offset);
8967            // Verify that padding bytes are zero.
8968            fidl::decode!(u64, D, &mut self.device_token, decoder, offset + 0, _depth)?;
8969            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 8, _depth)?;
8970            Ok(())
8971        }
8972    }
8973
8974    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDeviceRemovedRequest {
8975        type Borrowed<'a> = &'a Self;
8976        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8977            value
8978        }
8979    }
8980
8981    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDeviceRemovedRequest {
8982        type Owned = Self;
8983
8984        #[inline(always)]
8985        fn inline_align(_context: fidl::encoding::Context) -> usize {
8986            8
8987        }
8988
8989        #[inline(always)]
8990        fn inline_size(_context: fidl::encoding::Context) -> usize {
8991            8
8992        }
8993        #[inline(always)]
8994        fn encode_is_copy() -> bool {
8995            true
8996        }
8997
8998        #[inline(always)]
8999        fn decode_is_copy() -> bool {
9000            true
9001        }
9002    }
9003
9004    unsafe impl<D: fidl::encoding::ResourceDialect>
9005        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceRemovedRequest, D>
9006        for &AudioDeviceEnumeratorOnDeviceRemovedRequest
9007    {
9008        #[inline]
9009        unsafe fn encode(
9010            self,
9011            encoder: &mut fidl::encoding::Encoder<'_, D>,
9012            offset: usize,
9013            _depth: fidl::encoding::Depth,
9014        ) -> fidl::Result<()> {
9015            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceRemovedRequest>(offset);
9016            unsafe {
9017                // Copy the object into the buffer.
9018                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9019                (buf_ptr as *mut AudioDeviceEnumeratorOnDeviceRemovedRequest).write_unaligned(
9020                    (self as *const AudioDeviceEnumeratorOnDeviceRemovedRequest).read(),
9021                );
9022                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9023                // done second because the memcpy will write garbage to these bytes.
9024            }
9025            Ok(())
9026        }
9027    }
9028    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
9029        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceRemovedRequest, D> for (T0,)
9030    {
9031        #[inline]
9032        unsafe fn encode(
9033            self,
9034            encoder: &mut fidl::encoding::Encoder<'_, D>,
9035            offset: usize,
9036            depth: fidl::encoding::Depth,
9037        ) -> fidl::Result<()> {
9038            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceRemovedRequest>(offset);
9039            // Zero out padding regions. There's no need to apply masks
9040            // because the unmasked parts will be overwritten by fields.
9041            // Write the fields.
9042            self.0.encode(encoder, offset + 0, depth)?;
9043            Ok(())
9044        }
9045    }
9046
9047    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9048        for AudioDeviceEnumeratorOnDeviceRemovedRequest
9049    {
9050        #[inline(always)]
9051        fn new_empty() -> Self {
9052            Self { device_token: fidl::new_empty!(u64, D) }
9053        }
9054
9055        #[inline]
9056        unsafe fn decode(
9057            &mut self,
9058            decoder: &mut fidl::encoding::Decoder<'_, D>,
9059            offset: usize,
9060            _depth: fidl::encoding::Depth,
9061        ) -> fidl::Result<()> {
9062            decoder.debug_check_bounds::<Self>(offset);
9063            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9064            // Verify that padding bytes are zero.
9065            // Copy from the buffer into the object.
9066            unsafe {
9067                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
9068            }
9069            Ok(())
9070        }
9071    }
9072
9073    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorSetDeviceGainRequest {
9074        type Borrowed<'a> = &'a Self;
9075        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9076            value
9077        }
9078    }
9079
9080    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorSetDeviceGainRequest {
9081        type Owned = Self;
9082
9083        #[inline(always)]
9084        fn inline_align(_context: fidl::encoding::Context) -> usize {
9085            8
9086        }
9087
9088        #[inline(always)]
9089        fn inline_size(_context: fidl::encoding::Context) -> usize {
9090            24
9091        }
9092    }
9093
9094    unsafe impl<D: fidl::encoding::ResourceDialect>
9095        fidl::encoding::Encode<AudioDeviceEnumeratorSetDeviceGainRequest, D>
9096        for &AudioDeviceEnumeratorSetDeviceGainRequest
9097    {
9098        #[inline]
9099        unsafe fn encode(
9100            self,
9101            encoder: &mut fidl::encoding::Encoder<'_, D>,
9102            offset: usize,
9103            _depth: fidl::encoding::Depth,
9104        ) -> fidl::Result<()> {
9105            encoder.debug_check_bounds::<AudioDeviceEnumeratorSetDeviceGainRequest>(offset);
9106            // Delegate to tuple encoding.
9107            fidl::encoding::Encode::<AudioDeviceEnumeratorSetDeviceGainRequest, D>::encode(
9108                (
9109                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_token),
9110                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
9111                    <AudioGainValidFlags as fidl::encoding::ValueTypeMarker>::borrow(
9112                        &self.valid_flags,
9113                    ),
9114                ),
9115                encoder,
9116                offset,
9117                _depth,
9118            )
9119        }
9120    }
9121    unsafe impl<
9122        D: fidl::encoding::ResourceDialect,
9123        T0: fidl::encoding::Encode<u64, D>,
9124        T1: fidl::encoding::Encode<AudioGainInfo, D>,
9125        T2: fidl::encoding::Encode<AudioGainValidFlags, D>,
9126    > fidl::encoding::Encode<AudioDeviceEnumeratorSetDeviceGainRequest, D> for (T0, T1, T2)
9127    {
9128        #[inline]
9129        unsafe fn encode(
9130            self,
9131            encoder: &mut fidl::encoding::Encoder<'_, D>,
9132            offset: usize,
9133            depth: fidl::encoding::Depth,
9134        ) -> fidl::Result<()> {
9135            encoder.debug_check_bounds::<AudioDeviceEnumeratorSetDeviceGainRequest>(offset);
9136            // Zero out padding regions. There's no need to apply masks
9137            // because the unmasked parts will be overwritten by fields.
9138            unsafe {
9139                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
9140                (ptr as *mut u64).write_unaligned(0);
9141            }
9142            // Write the fields.
9143            self.0.encode(encoder, offset + 0, depth)?;
9144            self.1.encode(encoder, offset + 8, depth)?;
9145            self.2.encode(encoder, offset + 16, depth)?;
9146            Ok(())
9147        }
9148    }
9149
9150    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9151        for AudioDeviceEnumeratorSetDeviceGainRequest
9152    {
9153        #[inline(always)]
9154        fn new_empty() -> Self {
9155            Self {
9156                device_token: fidl::new_empty!(u64, D),
9157                gain_info: fidl::new_empty!(AudioGainInfo, D),
9158                valid_flags: fidl::new_empty!(AudioGainValidFlags, D),
9159            }
9160        }
9161
9162        #[inline]
9163        unsafe fn decode(
9164            &mut self,
9165            decoder: &mut fidl::encoding::Decoder<'_, D>,
9166            offset: usize,
9167            _depth: fidl::encoding::Depth,
9168        ) -> fidl::Result<()> {
9169            decoder.debug_check_bounds::<Self>(offset);
9170            // Verify that padding bytes are zero.
9171            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
9172            let padval = unsafe { (ptr as *const u64).read_unaligned() };
9173            let mask = 0xffffffff00000000u64;
9174            let maskedval = padval & mask;
9175            if maskedval != 0 {
9176                return Err(fidl::Error::NonZeroPadding {
9177                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
9178                });
9179            }
9180            fidl::decode!(u64, D, &mut self.device_token, decoder, offset + 0, _depth)?;
9181            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 8, _depth)?;
9182            fidl::decode!(
9183                AudioGainValidFlags,
9184                D,
9185                &mut self.valid_flags,
9186                decoder,
9187                offset + 16,
9188                _depth
9189            )?;
9190            Ok(())
9191        }
9192    }
9193
9194    impl fidl::encoding::ValueTypeMarker for AudioDeviceInfo {
9195        type Borrowed<'a> = &'a Self;
9196        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9197            value
9198        }
9199    }
9200
9201    unsafe impl fidl::encoding::TypeMarker for AudioDeviceInfo {
9202        type Owned = Self;
9203
9204        #[inline(always)]
9205        fn inline_align(_context: fidl::encoding::Context) -> usize {
9206            8
9207        }
9208
9209        #[inline(always)]
9210        fn inline_size(_context: fidl::encoding::Context) -> usize {
9211            56
9212        }
9213    }
9214
9215    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioDeviceInfo, D>
9216        for &AudioDeviceInfo
9217    {
9218        #[inline]
9219        unsafe fn encode(
9220            self,
9221            encoder: &mut fidl::encoding::Encoder<'_, D>,
9222            offset: usize,
9223            _depth: fidl::encoding::Depth,
9224        ) -> fidl::Result<()> {
9225            encoder.debug_check_bounds::<AudioDeviceInfo>(offset);
9226            // Delegate to tuple encoding.
9227            fidl::encoding::Encode::<AudioDeviceInfo, D>::encode(
9228                (
9229                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
9230                        &self.name,
9231                    ),
9232                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
9233                        &self.unique_id,
9234                    ),
9235                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.token_id),
9236                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.is_input),
9237                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
9238                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.is_default),
9239                ),
9240                encoder,
9241                offset,
9242                _depth,
9243            )
9244        }
9245    }
9246    unsafe impl<
9247        D: fidl::encoding::ResourceDialect,
9248        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
9249        T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
9250        T2: fidl::encoding::Encode<u64, D>,
9251        T3: fidl::encoding::Encode<bool, D>,
9252        T4: fidl::encoding::Encode<AudioGainInfo, D>,
9253        T5: fidl::encoding::Encode<bool, D>,
9254    > fidl::encoding::Encode<AudioDeviceInfo, D> for (T0, T1, T2, T3, T4, T5)
9255    {
9256        #[inline]
9257        unsafe fn encode(
9258            self,
9259            encoder: &mut fidl::encoding::Encoder<'_, D>,
9260            offset: usize,
9261            depth: fidl::encoding::Depth,
9262        ) -> fidl::Result<()> {
9263            encoder.debug_check_bounds::<AudioDeviceInfo>(offset);
9264            // Zero out padding regions. There's no need to apply masks
9265            // because the unmasked parts will be overwritten by fields.
9266            unsafe {
9267                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
9268                (ptr as *mut u64).write_unaligned(0);
9269            }
9270            unsafe {
9271                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(48);
9272                (ptr as *mut u64).write_unaligned(0);
9273            }
9274            // Write the fields.
9275            self.0.encode(encoder, offset + 0, depth)?;
9276            self.1.encode(encoder, offset + 16, depth)?;
9277            self.2.encode(encoder, offset + 32, depth)?;
9278            self.3.encode(encoder, offset + 40, depth)?;
9279            self.4.encode(encoder, offset + 44, depth)?;
9280            self.5.encode(encoder, offset + 52, depth)?;
9281            Ok(())
9282        }
9283    }
9284
9285    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioDeviceInfo {
9286        #[inline(always)]
9287        fn new_empty() -> Self {
9288            Self {
9289                name: fidl::new_empty!(fidl::encoding::UnboundedString, D),
9290                unique_id: fidl::new_empty!(fidl::encoding::UnboundedString, D),
9291                token_id: fidl::new_empty!(u64, D),
9292                is_input: fidl::new_empty!(bool, D),
9293                gain_info: fidl::new_empty!(AudioGainInfo, D),
9294                is_default: fidl::new_empty!(bool, D),
9295            }
9296        }
9297
9298        #[inline]
9299        unsafe fn decode(
9300            &mut self,
9301            decoder: &mut fidl::encoding::Decoder<'_, D>,
9302            offset: usize,
9303            _depth: fidl::encoding::Depth,
9304        ) -> fidl::Result<()> {
9305            decoder.debug_check_bounds::<Self>(offset);
9306            // Verify that padding bytes are zero.
9307            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
9308            let padval = unsafe { (ptr as *const u64).read_unaligned() };
9309            let mask = 0xffffff00u64;
9310            let maskedval = padval & mask;
9311            if maskedval != 0 {
9312                return Err(fidl::Error::NonZeroPadding {
9313                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
9314                });
9315            }
9316            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(48) };
9317            let padval = unsafe { (ptr as *const u64).read_unaligned() };
9318            let mask = 0xffffff0000000000u64;
9319            let maskedval = padval & mask;
9320            if maskedval != 0 {
9321                return Err(fidl::Error::NonZeroPadding {
9322                    padding_start: offset + 48 + ((mask as u64).trailing_zeros() / 8) as usize,
9323                });
9324            }
9325            fidl::decode!(
9326                fidl::encoding::UnboundedString,
9327                D,
9328                &mut self.name,
9329                decoder,
9330                offset + 0,
9331                _depth
9332            )?;
9333            fidl::decode!(
9334                fidl::encoding::UnboundedString,
9335                D,
9336                &mut self.unique_id,
9337                decoder,
9338                offset + 16,
9339                _depth
9340            )?;
9341            fidl::decode!(u64, D, &mut self.token_id, decoder, offset + 32, _depth)?;
9342            fidl::decode!(bool, D, &mut self.is_input, decoder, offset + 40, _depth)?;
9343            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 44, _depth)?;
9344            fidl::decode!(bool, D, &mut self.is_default, decoder, offset + 52, _depth)?;
9345            Ok(())
9346        }
9347    }
9348
9349    impl fidl::encoding::ValueTypeMarker for AudioGainInfo {
9350        type Borrowed<'a> = &'a Self;
9351        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9352            value
9353        }
9354    }
9355
9356    unsafe impl fidl::encoding::TypeMarker for AudioGainInfo {
9357        type Owned = Self;
9358
9359        #[inline(always)]
9360        fn inline_align(_context: fidl::encoding::Context) -> usize {
9361            4
9362        }
9363
9364        #[inline(always)]
9365        fn inline_size(_context: fidl::encoding::Context) -> usize {
9366            8
9367        }
9368    }
9369
9370    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioGainInfo, D>
9371        for &AudioGainInfo
9372    {
9373        #[inline]
9374        unsafe fn encode(
9375            self,
9376            encoder: &mut fidl::encoding::Encoder<'_, D>,
9377            offset: usize,
9378            _depth: fidl::encoding::Depth,
9379        ) -> fidl::Result<()> {
9380            encoder.debug_check_bounds::<AudioGainInfo>(offset);
9381            // Delegate to tuple encoding.
9382            fidl::encoding::Encode::<AudioGainInfo, D>::encode(
9383                (
9384                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
9385                    <AudioGainInfoFlags as fidl::encoding::ValueTypeMarker>::borrow(&self.flags),
9386                ),
9387                encoder,
9388                offset,
9389                _depth,
9390            )
9391        }
9392    }
9393    unsafe impl<
9394        D: fidl::encoding::ResourceDialect,
9395        T0: fidl::encoding::Encode<f32, D>,
9396        T1: fidl::encoding::Encode<AudioGainInfoFlags, D>,
9397    > fidl::encoding::Encode<AudioGainInfo, D> for (T0, T1)
9398    {
9399        #[inline]
9400        unsafe fn encode(
9401            self,
9402            encoder: &mut fidl::encoding::Encoder<'_, D>,
9403            offset: usize,
9404            depth: fidl::encoding::Depth,
9405        ) -> fidl::Result<()> {
9406            encoder.debug_check_bounds::<AudioGainInfo>(offset);
9407            // Zero out padding regions. There's no need to apply masks
9408            // because the unmasked parts will be overwritten by fields.
9409            // Write the fields.
9410            self.0.encode(encoder, offset + 0, depth)?;
9411            self.1.encode(encoder, offset + 4, depth)?;
9412            Ok(())
9413        }
9414    }
9415
9416    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioGainInfo {
9417        #[inline(always)]
9418        fn new_empty() -> Self {
9419            Self {
9420                gain_db: fidl::new_empty!(f32, D),
9421                flags: fidl::new_empty!(AudioGainInfoFlags, D),
9422            }
9423        }
9424
9425        #[inline]
9426        unsafe fn decode(
9427            &mut self,
9428            decoder: &mut fidl::encoding::Decoder<'_, D>,
9429            offset: usize,
9430            _depth: fidl::encoding::Depth,
9431        ) -> fidl::Result<()> {
9432            decoder.debug_check_bounds::<Self>(offset);
9433            // Verify that padding bytes are zero.
9434            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 0, _depth)?;
9435            fidl::decode!(AudioGainInfoFlags, D, &mut self.flags, decoder, offset + 4, _depth)?;
9436            Ok(())
9437        }
9438    }
9439
9440    impl fidl::encoding::ValueTypeMarker for AudioRendererEnableMinLeadTimeEventsRequest {
9441        type Borrowed<'a> = &'a Self;
9442        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9443            value
9444        }
9445    }
9446
9447    unsafe impl fidl::encoding::TypeMarker for AudioRendererEnableMinLeadTimeEventsRequest {
9448        type Owned = Self;
9449
9450        #[inline(always)]
9451        fn inline_align(_context: fidl::encoding::Context) -> usize {
9452            1
9453        }
9454
9455        #[inline(always)]
9456        fn inline_size(_context: fidl::encoding::Context) -> usize {
9457            1
9458        }
9459    }
9460
9461    unsafe impl<D: fidl::encoding::ResourceDialect>
9462        fidl::encoding::Encode<AudioRendererEnableMinLeadTimeEventsRequest, D>
9463        for &AudioRendererEnableMinLeadTimeEventsRequest
9464    {
9465        #[inline]
9466        unsafe fn encode(
9467            self,
9468            encoder: &mut fidl::encoding::Encoder<'_, D>,
9469            offset: usize,
9470            _depth: fidl::encoding::Depth,
9471        ) -> fidl::Result<()> {
9472            encoder.debug_check_bounds::<AudioRendererEnableMinLeadTimeEventsRequest>(offset);
9473            // Delegate to tuple encoding.
9474            fidl::encoding::Encode::<AudioRendererEnableMinLeadTimeEventsRequest, D>::encode(
9475                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.enabled),),
9476                encoder,
9477                offset,
9478                _depth,
9479            )
9480        }
9481    }
9482    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
9483        fidl::encoding::Encode<AudioRendererEnableMinLeadTimeEventsRequest, D> for (T0,)
9484    {
9485        #[inline]
9486        unsafe fn encode(
9487            self,
9488            encoder: &mut fidl::encoding::Encoder<'_, D>,
9489            offset: usize,
9490            depth: fidl::encoding::Depth,
9491        ) -> fidl::Result<()> {
9492            encoder.debug_check_bounds::<AudioRendererEnableMinLeadTimeEventsRequest>(offset);
9493            // Zero out padding regions. There's no need to apply masks
9494            // because the unmasked parts will be overwritten by fields.
9495            // Write the fields.
9496            self.0.encode(encoder, offset + 0, depth)?;
9497            Ok(())
9498        }
9499    }
9500
9501    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9502        for AudioRendererEnableMinLeadTimeEventsRequest
9503    {
9504        #[inline(always)]
9505        fn new_empty() -> Self {
9506            Self { enabled: fidl::new_empty!(bool, D) }
9507        }
9508
9509        #[inline]
9510        unsafe fn decode(
9511            &mut self,
9512            decoder: &mut fidl::encoding::Decoder<'_, D>,
9513            offset: usize,
9514            _depth: fidl::encoding::Depth,
9515        ) -> fidl::Result<()> {
9516            decoder.debug_check_bounds::<Self>(offset);
9517            // Verify that padding bytes are zero.
9518            fidl::decode!(bool, D, &mut self.enabled, decoder, offset + 0, _depth)?;
9519            Ok(())
9520        }
9521    }
9522
9523    impl fidl::encoding::ValueTypeMarker for AudioRendererGetMinLeadTimeResponse {
9524        type Borrowed<'a> = &'a Self;
9525        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9526            value
9527        }
9528    }
9529
9530    unsafe impl fidl::encoding::TypeMarker for AudioRendererGetMinLeadTimeResponse {
9531        type Owned = Self;
9532
9533        #[inline(always)]
9534        fn inline_align(_context: fidl::encoding::Context) -> usize {
9535            8
9536        }
9537
9538        #[inline(always)]
9539        fn inline_size(_context: fidl::encoding::Context) -> usize {
9540            8
9541        }
9542        #[inline(always)]
9543        fn encode_is_copy() -> bool {
9544            true
9545        }
9546
9547        #[inline(always)]
9548        fn decode_is_copy() -> bool {
9549            true
9550        }
9551    }
9552
9553    unsafe impl<D: fidl::encoding::ResourceDialect>
9554        fidl::encoding::Encode<AudioRendererGetMinLeadTimeResponse, D>
9555        for &AudioRendererGetMinLeadTimeResponse
9556    {
9557        #[inline]
9558        unsafe fn encode(
9559            self,
9560            encoder: &mut fidl::encoding::Encoder<'_, D>,
9561            offset: usize,
9562            _depth: fidl::encoding::Depth,
9563        ) -> fidl::Result<()> {
9564            encoder.debug_check_bounds::<AudioRendererGetMinLeadTimeResponse>(offset);
9565            unsafe {
9566                // Copy the object into the buffer.
9567                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9568                (buf_ptr as *mut AudioRendererGetMinLeadTimeResponse)
9569                    .write_unaligned((self as *const AudioRendererGetMinLeadTimeResponse).read());
9570                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9571                // done second because the memcpy will write garbage to these bytes.
9572            }
9573            Ok(())
9574        }
9575    }
9576    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
9577        fidl::encoding::Encode<AudioRendererGetMinLeadTimeResponse, D> for (T0,)
9578    {
9579        #[inline]
9580        unsafe fn encode(
9581            self,
9582            encoder: &mut fidl::encoding::Encoder<'_, D>,
9583            offset: usize,
9584            depth: fidl::encoding::Depth,
9585        ) -> fidl::Result<()> {
9586            encoder.debug_check_bounds::<AudioRendererGetMinLeadTimeResponse>(offset);
9587            // Zero out padding regions. There's no need to apply masks
9588            // because the unmasked parts will be overwritten by fields.
9589            // Write the fields.
9590            self.0.encode(encoder, offset + 0, depth)?;
9591            Ok(())
9592        }
9593    }
9594
9595    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9596        for AudioRendererGetMinLeadTimeResponse
9597    {
9598        #[inline(always)]
9599        fn new_empty() -> Self {
9600            Self { min_lead_time_nsec: fidl::new_empty!(i64, D) }
9601        }
9602
9603        #[inline]
9604        unsafe fn decode(
9605            &mut self,
9606            decoder: &mut fidl::encoding::Decoder<'_, D>,
9607            offset: usize,
9608            _depth: fidl::encoding::Depth,
9609        ) -> fidl::Result<()> {
9610            decoder.debug_check_bounds::<Self>(offset);
9611            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9612            // Verify that padding bytes are zero.
9613            // Copy from the buffer into the object.
9614            unsafe {
9615                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
9616            }
9617            Ok(())
9618        }
9619    }
9620
9621    impl fidl::encoding::ValueTypeMarker for AudioRendererOnMinLeadTimeChangedRequest {
9622        type Borrowed<'a> = &'a Self;
9623        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9624            value
9625        }
9626    }
9627
9628    unsafe impl fidl::encoding::TypeMarker for AudioRendererOnMinLeadTimeChangedRequest {
9629        type Owned = Self;
9630
9631        #[inline(always)]
9632        fn inline_align(_context: fidl::encoding::Context) -> usize {
9633            8
9634        }
9635
9636        #[inline(always)]
9637        fn inline_size(_context: fidl::encoding::Context) -> usize {
9638            8
9639        }
9640        #[inline(always)]
9641        fn encode_is_copy() -> bool {
9642            true
9643        }
9644
9645        #[inline(always)]
9646        fn decode_is_copy() -> bool {
9647            true
9648        }
9649    }
9650
9651    unsafe impl<D: fidl::encoding::ResourceDialect>
9652        fidl::encoding::Encode<AudioRendererOnMinLeadTimeChangedRequest, D>
9653        for &AudioRendererOnMinLeadTimeChangedRequest
9654    {
9655        #[inline]
9656        unsafe fn encode(
9657            self,
9658            encoder: &mut fidl::encoding::Encoder<'_, D>,
9659            offset: usize,
9660            _depth: fidl::encoding::Depth,
9661        ) -> fidl::Result<()> {
9662            encoder.debug_check_bounds::<AudioRendererOnMinLeadTimeChangedRequest>(offset);
9663            unsafe {
9664                // Copy the object into the buffer.
9665                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9666                (buf_ptr as *mut AudioRendererOnMinLeadTimeChangedRequest).write_unaligned(
9667                    (self as *const AudioRendererOnMinLeadTimeChangedRequest).read(),
9668                );
9669                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9670                // done second because the memcpy will write garbage to these bytes.
9671            }
9672            Ok(())
9673        }
9674    }
9675    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
9676        fidl::encoding::Encode<AudioRendererOnMinLeadTimeChangedRequest, D> for (T0,)
9677    {
9678        #[inline]
9679        unsafe fn encode(
9680            self,
9681            encoder: &mut fidl::encoding::Encoder<'_, D>,
9682            offset: usize,
9683            depth: fidl::encoding::Depth,
9684        ) -> fidl::Result<()> {
9685            encoder.debug_check_bounds::<AudioRendererOnMinLeadTimeChangedRequest>(offset);
9686            // Zero out padding regions. There's no need to apply masks
9687            // because the unmasked parts will be overwritten by fields.
9688            // Write the fields.
9689            self.0.encode(encoder, offset + 0, depth)?;
9690            Ok(())
9691        }
9692    }
9693
9694    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9695        for AudioRendererOnMinLeadTimeChangedRequest
9696    {
9697        #[inline(always)]
9698        fn new_empty() -> Self {
9699            Self { min_lead_time_nsec: fidl::new_empty!(i64, D) }
9700        }
9701
9702        #[inline]
9703        unsafe fn decode(
9704            &mut self,
9705            decoder: &mut fidl::encoding::Decoder<'_, D>,
9706            offset: usize,
9707            _depth: fidl::encoding::Depth,
9708        ) -> fidl::Result<()> {
9709            decoder.debug_check_bounds::<Self>(offset);
9710            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9711            // Verify that padding bytes are zero.
9712            // Copy from the buffer into the object.
9713            unsafe {
9714                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
9715            }
9716            Ok(())
9717        }
9718    }
9719
9720    impl fidl::encoding::ValueTypeMarker for AudioRendererPauseResponse {
9721        type Borrowed<'a> = &'a Self;
9722        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9723            value
9724        }
9725    }
9726
9727    unsafe impl fidl::encoding::TypeMarker for AudioRendererPauseResponse {
9728        type Owned = Self;
9729
9730        #[inline(always)]
9731        fn inline_align(_context: fidl::encoding::Context) -> usize {
9732            8
9733        }
9734
9735        #[inline(always)]
9736        fn inline_size(_context: fidl::encoding::Context) -> usize {
9737            16
9738        }
9739        #[inline(always)]
9740        fn encode_is_copy() -> bool {
9741            true
9742        }
9743
9744        #[inline(always)]
9745        fn decode_is_copy() -> bool {
9746            true
9747        }
9748    }
9749
9750    unsafe impl<D: fidl::encoding::ResourceDialect>
9751        fidl::encoding::Encode<AudioRendererPauseResponse, D> for &AudioRendererPauseResponse
9752    {
9753        #[inline]
9754        unsafe fn encode(
9755            self,
9756            encoder: &mut fidl::encoding::Encoder<'_, D>,
9757            offset: usize,
9758            _depth: fidl::encoding::Depth,
9759        ) -> fidl::Result<()> {
9760            encoder.debug_check_bounds::<AudioRendererPauseResponse>(offset);
9761            unsafe {
9762                // Copy the object into the buffer.
9763                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9764                (buf_ptr as *mut AudioRendererPauseResponse)
9765                    .write_unaligned((self as *const AudioRendererPauseResponse).read());
9766                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9767                // done second because the memcpy will write garbage to these bytes.
9768            }
9769            Ok(())
9770        }
9771    }
9772    unsafe impl<
9773        D: fidl::encoding::ResourceDialect,
9774        T0: fidl::encoding::Encode<i64, D>,
9775        T1: fidl::encoding::Encode<i64, D>,
9776    > fidl::encoding::Encode<AudioRendererPauseResponse, D> for (T0, T1)
9777    {
9778        #[inline]
9779        unsafe fn encode(
9780            self,
9781            encoder: &mut fidl::encoding::Encoder<'_, D>,
9782            offset: usize,
9783            depth: fidl::encoding::Depth,
9784        ) -> fidl::Result<()> {
9785            encoder.debug_check_bounds::<AudioRendererPauseResponse>(offset);
9786            // Zero out padding regions. There's no need to apply masks
9787            // because the unmasked parts will be overwritten by fields.
9788            // Write the fields.
9789            self.0.encode(encoder, offset + 0, depth)?;
9790            self.1.encode(encoder, offset + 8, depth)?;
9791            Ok(())
9792        }
9793    }
9794
9795    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9796        for AudioRendererPauseResponse
9797    {
9798        #[inline(always)]
9799        fn new_empty() -> Self {
9800            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
9801        }
9802
9803        #[inline]
9804        unsafe fn decode(
9805            &mut self,
9806            decoder: &mut fidl::encoding::Decoder<'_, D>,
9807            offset: usize,
9808            _depth: fidl::encoding::Depth,
9809        ) -> fidl::Result<()> {
9810            decoder.debug_check_bounds::<Self>(offset);
9811            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9812            // Verify that padding bytes are zero.
9813            // Copy from the buffer into the object.
9814            unsafe {
9815                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
9816            }
9817            Ok(())
9818        }
9819    }
9820
9821    impl fidl::encoding::ValueTypeMarker for AudioRendererPlayNoReplyRequest {
9822        type Borrowed<'a> = &'a Self;
9823        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9824            value
9825        }
9826    }
9827
9828    unsafe impl fidl::encoding::TypeMarker for AudioRendererPlayNoReplyRequest {
9829        type Owned = Self;
9830
9831        #[inline(always)]
9832        fn inline_align(_context: fidl::encoding::Context) -> usize {
9833            8
9834        }
9835
9836        #[inline(always)]
9837        fn inline_size(_context: fidl::encoding::Context) -> usize {
9838            16
9839        }
9840        #[inline(always)]
9841        fn encode_is_copy() -> bool {
9842            true
9843        }
9844
9845        #[inline(always)]
9846        fn decode_is_copy() -> bool {
9847            true
9848        }
9849    }
9850
9851    unsafe impl<D: fidl::encoding::ResourceDialect>
9852        fidl::encoding::Encode<AudioRendererPlayNoReplyRequest, D>
9853        for &AudioRendererPlayNoReplyRequest
9854    {
9855        #[inline]
9856        unsafe fn encode(
9857            self,
9858            encoder: &mut fidl::encoding::Encoder<'_, D>,
9859            offset: usize,
9860            _depth: fidl::encoding::Depth,
9861        ) -> fidl::Result<()> {
9862            encoder.debug_check_bounds::<AudioRendererPlayNoReplyRequest>(offset);
9863            unsafe {
9864                // Copy the object into the buffer.
9865                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9866                (buf_ptr as *mut AudioRendererPlayNoReplyRequest)
9867                    .write_unaligned((self as *const AudioRendererPlayNoReplyRequest).read());
9868                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9869                // done second because the memcpy will write garbage to these bytes.
9870            }
9871            Ok(())
9872        }
9873    }
9874    unsafe impl<
9875        D: fidl::encoding::ResourceDialect,
9876        T0: fidl::encoding::Encode<i64, D>,
9877        T1: fidl::encoding::Encode<i64, D>,
9878    > fidl::encoding::Encode<AudioRendererPlayNoReplyRequest, D> for (T0, T1)
9879    {
9880        #[inline]
9881        unsafe fn encode(
9882            self,
9883            encoder: &mut fidl::encoding::Encoder<'_, D>,
9884            offset: usize,
9885            depth: fidl::encoding::Depth,
9886        ) -> fidl::Result<()> {
9887            encoder.debug_check_bounds::<AudioRendererPlayNoReplyRequest>(offset);
9888            // Zero out padding regions. There's no need to apply masks
9889            // because the unmasked parts will be overwritten by fields.
9890            // Write the fields.
9891            self.0.encode(encoder, offset + 0, depth)?;
9892            self.1.encode(encoder, offset + 8, depth)?;
9893            Ok(())
9894        }
9895    }
9896
9897    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9898        for AudioRendererPlayNoReplyRequest
9899    {
9900        #[inline(always)]
9901        fn new_empty() -> Self {
9902            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
9903        }
9904
9905        #[inline]
9906        unsafe fn decode(
9907            &mut self,
9908            decoder: &mut fidl::encoding::Decoder<'_, D>,
9909            offset: usize,
9910            _depth: fidl::encoding::Depth,
9911        ) -> fidl::Result<()> {
9912            decoder.debug_check_bounds::<Self>(offset);
9913            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9914            // Verify that padding bytes are zero.
9915            // Copy from the buffer into the object.
9916            unsafe {
9917                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
9918            }
9919            Ok(())
9920        }
9921    }
9922
9923    impl fidl::encoding::ValueTypeMarker for AudioRendererPlayRequest {
9924        type Borrowed<'a> = &'a Self;
9925        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9926            value
9927        }
9928    }
9929
9930    unsafe impl fidl::encoding::TypeMarker for AudioRendererPlayRequest {
9931        type Owned = Self;
9932
9933        #[inline(always)]
9934        fn inline_align(_context: fidl::encoding::Context) -> usize {
9935            8
9936        }
9937
9938        #[inline(always)]
9939        fn inline_size(_context: fidl::encoding::Context) -> usize {
9940            16
9941        }
9942        #[inline(always)]
9943        fn encode_is_copy() -> bool {
9944            true
9945        }
9946
9947        #[inline(always)]
9948        fn decode_is_copy() -> bool {
9949            true
9950        }
9951    }
9952
9953    unsafe impl<D: fidl::encoding::ResourceDialect>
9954        fidl::encoding::Encode<AudioRendererPlayRequest, D> for &AudioRendererPlayRequest
9955    {
9956        #[inline]
9957        unsafe fn encode(
9958            self,
9959            encoder: &mut fidl::encoding::Encoder<'_, D>,
9960            offset: usize,
9961            _depth: fidl::encoding::Depth,
9962        ) -> fidl::Result<()> {
9963            encoder.debug_check_bounds::<AudioRendererPlayRequest>(offset);
9964            unsafe {
9965                // Copy the object into the buffer.
9966                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9967                (buf_ptr as *mut AudioRendererPlayRequest)
9968                    .write_unaligned((self as *const AudioRendererPlayRequest).read());
9969                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9970                // done second because the memcpy will write garbage to these bytes.
9971            }
9972            Ok(())
9973        }
9974    }
9975    unsafe impl<
9976        D: fidl::encoding::ResourceDialect,
9977        T0: fidl::encoding::Encode<i64, D>,
9978        T1: fidl::encoding::Encode<i64, D>,
9979    > fidl::encoding::Encode<AudioRendererPlayRequest, D> for (T0, T1)
9980    {
9981        #[inline]
9982        unsafe fn encode(
9983            self,
9984            encoder: &mut fidl::encoding::Encoder<'_, D>,
9985            offset: usize,
9986            depth: fidl::encoding::Depth,
9987        ) -> fidl::Result<()> {
9988            encoder.debug_check_bounds::<AudioRendererPlayRequest>(offset);
9989            // Zero out padding regions. There's no need to apply masks
9990            // because the unmasked parts will be overwritten by fields.
9991            // Write the fields.
9992            self.0.encode(encoder, offset + 0, depth)?;
9993            self.1.encode(encoder, offset + 8, depth)?;
9994            Ok(())
9995        }
9996    }
9997
9998    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9999        for AudioRendererPlayRequest
10000    {
10001        #[inline(always)]
10002        fn new_empty() -> Self {
10003            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
10004        }
10005
10006        #[inline]
10007        unsafe fn decode(
10008            &mut self,
10009            decoder: &mut fidl::encoding::Decoder<'_, D>,
10010            offset: usize,
10011            _depth: fidl::encoding::Depth,
10012        ) -> fidl::Result<()> {
10013            decoder.debug_check_bounds::<Self>(offset);
10014            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10015            // Verify that padding bytes are zero.
10016            // Copy from the buffer into the object.
10017            unsafe {
10018                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
10019            }
10020            Ok(())
10021        }
10022    }
10023
10024    impl fidl::encoding::ValueTypeMarker for AudioRendererPlayResponse {
10025        type Borrowed<'a> = &'a Self;
10026        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10027            value
10028        }
10029    }
10030
10031    unsafe impl fidl::encoding::TypeMarker for AudioRendererPlayResponse {
10032        type Owned = Self;
10033
10034        #[inline(always)]
10035        fn inline_align(_context: fidl::encoding::Context) -> usize {
10036            8
10037        }
10038
10039        #[inline(always)]
10040        fn inline_size(_context: fidl::encoding::Context) -> usize {
10041            16
10042        }
10043        #[inline(always)]
10044        fn encode_is_copy() -> bool {
10045            true
10046        }
10047
10048        #[inline(always)]
10049        fn decode_is_copy() -> bool {
10050            true
10051        }
10052    }
10053
10054    unsafe impl<D: fidl::encoding::ResourceDialect>
10055        fidl::encoding::Encode<AudioRendererPlayResponse, D> for &AudioRendererPlayResponse
10056    {
10057        #[inline]
10058        unsafe fn encode(
10059            self,
10060            encoder: &mut fidl::encoding::Encoder<'_, D>,
10061            offset: usize,
10062            _depth: fidl::encoding::Depth,
10063        ) -> fidl::Result<()> {
10064            encoder.debug_check_bounds::<AudioRendererPlayResponse>(offset);
10065            unsafe {
10066                // Copy the object into the buffer.
10067                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
10068                (buf_ptr as *mut AudioRendererPlayResponse)
10069                    .write_unaligned((self as *const AudioRendererPlayResponse).read());
10070                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
10071                // done second because the memcpy will write garbage to these bytes.
10072            }
10073            Ok(())
10074        }
10075    }
10076    unsafe impl<
10077        D: fidl::encoding::ResourceDialect,
10078        T0: fidl::encoding::Encode<i64, D>,
10079        T1: fidl::encoding::Encode<i64, D>,
10080    > fidl::encoding::Encode<AudioRendererPlayResponse, D> for (T0, T1)
10081    {
10082        #[inline]
10083        unsafe fn encode(
10084            self,
10085            encoder: &mut fidl::encoding::Encoder<'_, D>,
10086            offset: usize,
10087            depth: fidl::encoding::Depth,
10088        ) -> fidl::Result<()> {
10089            encoder.debug_check_bounds::<AudioRendererPlayResponse>(offset);
10090            // Zero out padding regions. There's no need to apply masks
10091            // because the unmasked parts will be overwritten by fields.
10092            // Write the fields.
10093            self.0.encode(encoder, offset + 0, depth)?;
10094            self.1.encode(encoder, offset + 8, depth)?;
10095            Ok(())
10096        }
10097    }
10098
10099    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10100        for AudioRendererPlayResponse
10101    {
10102        #[inline(always)]
10103        fn new_empty() -> Self {
10104            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
10105        }
10106
10107        #[inline]
10108        unsafe fn decode(
10109            &mut self,
10110            decoder: &mut fidl::encoding::Decoder<'_, D>,
10111            offset: usize,
10112            _depth: fidl::encoding::Depth,
10113        ) -> fidl::Result<()> {
10114            decoder.debug_check_bounds::<Self>(offset);
10115            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10116            // Verify that padding bytes are zero.
10117            // Copy from the buffer into the object.
10118            unsafe {
10119                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
10120            }
10121            Ok(())
10122        }
10123    }
10124
10125    impl fidl::encoding::ValueTypeMarker for AudioRendererSetPcmStreamTypeRequest {
10126        type Borrowed<'a> = &'a Self;
10127        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10128            value
10129        }
10130    }
10131
10132    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetPcmStreamTypeRequest {
10133        type Owned = Self;
10134
10135        #[inline(always)]
10136        fn inline_align(_context: fidl::encoding::Context) -> usize {
10137            4
10138        }
10139
10140        #[inline(always)]
10141        fn inline_size(_context: fidl::encoding::Context) -> usize {
10142            12
10143        }
10144    }
10145
10146    unsafe impl<D: fidl::encoding::ResourceDialect>
10147        fidl::encoding::Encode<AudioRendererSetPcmStreamTypeRequest, D>
10148        for &AudioRendererSetPcmStreamTypeRequest
10149    {
10150        #[inline]
10151        unsafe fn encode(
10152            self,
10153            encoder: &mut fidl::encoding::Encoder<'_, D>,
10154            offset: usize,
10155            _depth: fidl::encoding::Depth,
10156        ) -> fidl::Result<()> {
10157            encoder.debug_check_bounds::<AudioRendererSetPcmStreamTypeRequest>(offset);
10158            // Delegate to tuple encoding.
10159            fidl::encoding::Encode::<AudioRendererSetPcmStreamTypeRequest, D>::encode(
10160                (<AudioStreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),),
10161                encoder,
10162                offset,
10163                _depth,
10164            )
10165        }
10166    }
10167    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioStreamType, D>>
10168        fidl::encoding::Encode<AudioRendererSetPcmStreamTypeRequest, D> for (T0,)
10169    {
10170        #[inline]
10171        unsafe fn encode(
10172            self,
10173            encoder: &mut fidl::encoding::Encoder<'_, D>,
10174            offset: usize,
10175            depth: fidl::encoding::Depth,
10176        ) -> fidl::Result<()> {
10177            encoder.debug_check_bounds::<AudioRendererSetPcmStreamTypeRequest>(offset);
10178            // Zero out padding regions. There's no need to apply masks
10179            // because the unmasked parts will be overwritten by fields.
10180            // Write the fields.
10181            self.0.encode(encoder, offset + 0, depth)?;
10182            Ok(())
10183        }
10184    }
10185
10186    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10187        for AudioRendererSetPcmStreamTypeRequest
10188    {
10189        #[inline(always)]
10190        fn new_empty() -> Self {
10191            Self { type_: fidl::new_empty!(AudioStreamType, D) }
10192        }
10193
10194        #[inline]
10195        unsafe fn decode(
10196            &mut self,
10197            decoder: &mut fidl::encoding::Decoder<'_, D>,
10198            offset: usize,
10199            _depth: fidl::encoding::Depth,
10200        ) -> fidl::Result<()> {
10201            decoder.debug_check_bounds::<Self>(offset);
10202            // Verify that padding bytes are zero.
10203            fidl::decode!(AudioStreamType, D, &mut self.type_, decoder, offset + 0, _depth)?;
10204            Ok(())
10205        }
10206    }
10207
10208    impl fidl::encoding::ValueTypeMarker for AudioRendererSetPtsContinuityThresholdRequest {
10209        type Borrowed<'a> = &'a Self;
10210        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10211            value
10212        }
10213    }
10214
10215    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetPtsContinuityThresholdRequest {
10216        type Owned = Self;
10217
10218        #[inline(always)]
10219        fn inline_align(_context: fidl::encoding::Context) -> usize {
10220            4
10221        }
10222
10223        #[inline(always)]
10224        fn inline_size(_context: fidl::encoding::Context) -> usize {
10225            4
10226        }
10227    }
10228
10229    unsafe impl<D: fidl::encoding::ResourceDialect>
10230        fidl::encoding::Encode<AudioRendererSetPtsContinuityThresholdRequest, D>
10231        for &AudioRendererSetPtsContinuityThresholdRequest
10232    {
10233        #[inline]
10234        unsafe fn encode(
10235            self,
10236            encoder: &mut fidl::encoding::Encoder<'_, D>,
10237            offset: usize,
10238            _depth: fidl::encoding::Depth,
10239        ) -> fidl::Result<()> {
10240            encoder.debug_check_bounds::<AudioRendererSetPtsContinuityThresholdRequest>(offset);
10241            // Delegate to tuple encoding.
10242            fidl::encoding::Encode::<AudioRendererSetPtsContinuityThresholdRequest, D>::encode(
10243                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.threshold_seconds),),
10244                encoder,
10245                offset,
10246                _depth,
10247            )
10248        }
10249    }
10250    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
10251        fidl::encoding::Encode<AudioRendererSetPtsContinuityThresholdRequest, D> for (T0,)
10252    {
10253        #[inline]
10254        unsafe fn encode(
10255            self,
10256            encoder: &mut fidl::encoding::Encoder<'_, D>,
10257            offset: usize,
10258            depth: fidl::encoding::Depth,
10259        ) -> fidl::Result<()> {
10260            encoder.debug_check_bounds::<AudioRendererSetPtsContinuityThresholdRequest>(offset);
10261            // Zero out padding regions. There's no need to apply masks
10262            // because the unmasked parts will be overwritten by fields.
10263            // Write the fields.
10264            self.0.encode(encoder, offset + 0, depth)?;
10265            Ok(())
10266        }
10267    }
10268
10269    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10270        for AudioRendererSetPtsContinuityThresholdRequest
10271    {
10272        #[inline(always)]
10273        fn new_empty() -> Self {
10274            Self { threshold_seconds: fidl::new_empty!(f32, D) }
10275        }
10276
10277        #[inline]
10278        unsafe fn decode(
10279            &mut self,
10280            decoder: &mut fidl::encoding::Decoder<'_, D>,
10281            offset: usize,
10282            _depth: fidl::encoding::Depth,
10283        ) -> fidl::Result<()> {
10284            decoder.debug_check_bounds::<Self>(offset);
10285            // Verify that padding bytes are zero.
10286            fidl::decode!(f32, D, &mut self.threshold_seconds, decoder, offset + 0, _depth)?;
10287            Ok(())
10288        }
10289    }
10290
10291    impl fidl::encoding::ValueTypeMarker for AudioRendererSetPtsUnitsRequest {
10292        type Borrowed<'a> = &'a Self;
10293        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10294            value
10295        }
10296    }
10297
10298    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetPtsUnitsRequest {
10299        type Owned = Self;
10300
10301        #[inline(always)]
10302        fn inline_align(_context: fidl::encoding::Context) -> usize {
10303            4
10304        }
10305
10306        #[inline(always)]
10307        fn inline_size(_context: fidl::encoding::Context) -> usize {
10308            8
10309        }
10310        #[inline(always)]
10311        fn encode_is_copy() -> bool {
10312            true
10313        }
10314
10315        #[inline(always)]
10316        fn decode_is_copy() -> bool {
10317            true
10318        }
10319    }
10320
10321    unsafe impl<D: fidl::encoding::ResourceDialect>
10322        fidl::encoding::Encode<AudioRendererSetPtsUnitsRequest, D>
10323        for &AudioRendererSetPtsUnitsRequest
10324    {
10325        #[inline]
10326        unsafe fn encode(
10327            self,
10328            encoder: &mut fidl::encoding::Encoder<'_, D>,
10329            offset: usize,
10330            _depth: fidl::encoding::Depth,
10331        ) -> fidl::Result<()> {
10332            encoder.debug_check_bounds::<AudioRendererSetPtsUnitsRequest>(offset);
10333            unsafe {
10334                // Copy the object into the buffer.
10335                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
10336                (buf_ptr as *mut AudioRendererSetPtsUnitsRequest)
10337                    .write_unaligned((self as *const AudioRendererSetPtsUnitsRequest).read());
10338                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
10339                // done second because the memcpy will write garbage to these bytes.
10340            }
10341            Ok(())
10342        }
10343    }
10344    unsafe impl<
10345        D: fidl::encoding::ResourceDialect,
10346        T0: fidl::encoding::Encode<u32, D>,
10347        T1: fidl::encoding::Encode<u32, D>,
10348    > fidl::encoding::Encode<AudioRendererSetPtsUnitsRequest, D> for (T0, T1)
10349    {
10350        #[inline]
10351        unsafe fn encode(
10352            self,
10353            encoder: &mut fidl::encoding::Encoder<'_, D>,
10354            offset: usize,
10355            depth: fidl::encoding::Depth,
10356        ) -> fidl::Result<()> {
10357            encoder.debug_check_bounds::<AudioRendererSetPtsUnitsRequest>(offset);
10358            // Zero out padding regions. There's no need to apply masks
10359            // because the unmasked parts will be overwritten by fields.
10360            // Write the fields.
10361            self.0.encode(encoder, offset + 0, depth)?;
10362            self.1.encode(encoder, offset + 4, depth)?;
10363            Ok(())
10364        }
10365    }
10366
10367    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10368        for AudioRendererSetPtsUnitsRequest
10369    {
10370        #[inline(always)]
10371        fn new_empty() -> Self {
10372            Self {
10373                tick_per_second_numerator: fidl::new_empty!(u32, D),
10374                tick_per_second_denominator: fidl::new_empty!(u32, D),
10375            }
10376        }
10377
10378        #[inline]
10379        unsafe fn decode(
10380            &mut self,
10381            decoder: &mut fidl::encoding::Decoder<'_, D>,
10382            offset: usize,
10383            _depth: fidl::encoding::Depth,
10384        ) -> fidl::Result<()> {
10385            decoder.debug_check_bounds::<Self>(offset);
10386            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10387            // Verify that padding bytes are zero.
10388            // Copy from the buffer into the object.
10389            unsafe {
10390                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
10391            }
10392            Ok(())
10393        }
10394    }
10395
10396    impl fidl::encoding::ValueTypeMarker for AudioRendererSetUsage2Request {
10397        type Borrowed<'a> = &'a Self;
10398        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10399            value
10400        }
10401    }
10402
10403    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetUsage2Request {
10404        type Owned = Self;
10405
10406        #[inline(always)]
10407        fn inline_align(_context: fidl::encoding::Context) -> usize {
10408            4
10409        }
10410
10411        #[inline(always)]
10412        fn inline_size(_context: fidl::encoding::Context) -> usize {
10413            4
10414        }
10415    }
10416
10417    unsafe impl<D: fidl::encoding::ResourceDialect>
10418        fidl::encoding::Encode<AudioRendererSetUsage2Request, D>
10419        for &AudioRendererSetUsage2Request
10420    {
10421        #[inline]
10422        unsafe fn encode(
10423            self,
10424            encoder: &mut fidl::encoding::Encoder<'_, D>,
10425            offset: usize,
10426            _depth: fidl::encoding::Depth,
10427        ) -> fidl::Result<()> {
10428            encoder.debug_check_bounds::<AudioRendererSetUsage2Request>(offset);
10429            // Delegate to tuple encoding.
10430            fidl::encoding::Encode::<AudioRendererSetUsage2Request, D>::encode(
10431                (<AudioRenderUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage2),),
10432                encoder,
10433                offset,
10434                _depth,
10435            )
10436        }
10437    }
10438    unsafe impl<
10439        D: fidl::encoding::ResourceDialect,
10440        T0: fidl::encoding::Encode<AudioRenderUsage2, D>,
10441    > fidl::encoding::Encode<AudioRendererSetUsage2Request, D> for (T0,)
10442    {
10443        #[inline]
10444        unsafe fn encode(
10445            self,
10446            encoder: &mut fidl::encoding::Encoder<'_, D>,
10447            offset: usize,
10448            depth: fidl::encoding::Depth,
10449        ) -> fidl::Result<()> {
10450            encoder.debug_check_bounds::<AudioRendererSetUsage2Request>(offset);
10451            // Zero out padding regions. There's no need to apply masks
10452            // because the unmasked parts will be overwritten by fields.
10453            // Write the fields.
10454            self.0.encode(encoder, offset + 0, depth)?;
10455            Ok(())
10456        }
10457    }
10458
10459    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10460        for AudioRendererSetUsage2Request
10461    {
10462        #[inline(always)]
10463        fn new_empty() -> Self {
10464            Self { usage2: fidl::new_empty!(AudioRenderUsage2, D) }
10465        }
10466
10467        #[inline]
10468        unsafe fn decode(
10469            &mut self,
10470            decoder: &mut fidl::encoding::Decoder<'_, D>,
10471            offset: usize,
10472            _depth: fidl::encoding::Depth,
10473        ) -> fidl::Result<()> {
10474            decoder.debug_check_bounds::<Self>(offset);
10475            // Verify that padding bytes are zero.
10476            fidl::decode!(AudioRenderUsage2, D, &mut self.usage2, decoder, offset + 0, _depth)?;
10477            Ok(())
10478        }
10479    }
10480
10481    impl fidl::encoding::ValueTypeMarker for AudioRendererSetUsageRequest {
10482        type Borrowed<'a> = &'a Self;
10483        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10484            value
10485        }
10486    }
10487
10488    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetUsageRequest {
10489        type Owned = Self;
10490
10491        #[inline(always)]
10492        fn inline_align(_context: fidl::encoding::Context) -> usize {
10493            4
10494        }
10495
10496        #[inline(always)]
10497        fn inline_size(_context: fidl::encoding::Context) -> usize {
10498            4
10499        }
10500    }
10501
10502    unsafe impl<D: fidl::encoding::ResourceDialect>
10503        fidl::encoding::Encode<AudioRendererSetUsageRequest, D> for &AudioRendererSetUsageRequest
10504    {
10505        #[inline]
10506        unsafe fn encode(
10507            self,
10508            encoder: &mut fidl::encoding::Encoder<'_, D>,
10509            offset: usize,
10510            _depth: fidl::encoding::Depth,
10511        ) -> fidl::Result<()> {
10512            encoder.debug_check_bounds::<AudioRendererSetUsageRequest>(offset);
10513            // Delegate to tuple encoding.
10514            fidl::encoding::Encode::<AudioRendererSetUsageRequest, D>::encode(
10515                (<AudioRenderUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),),
10516                encoder,
10517                offset,
10518                _depth,
10519            )
10520        }
10521    }
10522    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioRenderUsage, D>>
10523        fidl::encoding::Encode<AudioRendererSetUsageRequest, D> for (T0,)
10524    {
10525        #[inline]
10526        unsafe fn encode(
10527            self,
10528            encoder: &mut fidl::encoding::Encoder<'_, D>,
10529            offset: usize,
10530            depth: fidl::encoding::Depth,
10531        ) -> fidl::Result<()> {
10532            encoder.debug_check_bounds::<AudioRendererSetUsageRequest>(offset);
10533            // Zero out padding regions. There's no need to apply masks
10534            // because the unmasked parts will be overwritten by fields.
10535            // Write the fields.
10536            self.0.encode(encoder, offset + 0, depth)?;
10537            Ok(())
10538        }
10539    }
10540
10541    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10542        for AudioRendererSetUsageRequest
10543    {
10544        #[inline(always)]
10545        fn new_empty() -> Self {
10546            Self { usage: fidl::new_empty!(AudioRenderUsage, D) }
10547        }
10548
10549        #[inline]
10550        unsafe fn decode(
10551            &mut self,
10552            decoder: &mut fidl::encoding::Decoder<'_, D>,
10553            offset: usize,
10554            _depth: fidl::encoding::Depth,
10555        ) -> fidl::Result<()> {
10556            decoder.debug_check_bounds::<Self>(offset);
10557            // Verify that padding bytes are zero.
10558            fidl::decode!(AudioRenderUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
10559            Ok(())
10560        }
10561    }
10562
10563    impl fidl::encoding::ValueTypeMarker for AudioStreamType {
10564        type Borrowed<'a> = &'a Self;
10565        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10566            value
10567        }
10568    }
10569
10570    unsafe impl fidl::encoding::TypeMarker for AudioStreamType {
10571        type Owned = Self;
10572
10573        #[inline(always)]
10574        fn inline_align(_context: fidl::encoding::Context) -> usize {
10575            4
10576        }
10577
10578        #[inline(always)]
10579        fn inline_size(_context: fidl::encoding::Context) -> usize {
10580            12
10581        }
10582    }
10583
10584    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioStreamType, D>
10585        for &AudioStreamType
10586    {
10587        #[inline]
10588        unsafe fn encode(
10589            self,
10590            encoder: &mut fidl::encoding::Encoder<'_, D>,
10591            offset: usize,
10592            _depth: fidl::encoding::Depth,
10593        ) -> fidl::Result<()> {
10594            encoder.debug_check_bounds::<AudioStreamType>(offset);
10595            // Delegate to tuple encoding.
10596            fidl::encoding::Encode::<AudioStreamType, D>::encode(
10597                (
10598                    <AudioSampleFormat as fidl::encoding::ValueTypeMarker>::borrow(
10599                        &self.sample_format,
10600                    ),
10601                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.channels),
10602                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frames_per_second),
10603                ),
10604                encoder,
10605                offset,
10606                _depth,
10607            )
10608        }
10609    }
10610    unsafe impl<
10611        D: fidl::encoding::ResourceDialect,
10612        T0: fidl::encoding::Encode<AudioSampleFormat, D>,
10613        T1: fidl::encoding::Encode<u32, D>,
10614        T2: fidl::encoding::Encode<u32, D>,
10615    > fidl::encoding::Encode<AudioStreamType, D> for (T0, T1, T2)
10616    {
10617        #[inline]
10618        unsafe fn encode(
10619            self,
10620            encoder: &mut fidl::encoding::Encoder<'_, D>,
10621            offset: usize,
10622            depth: fidl::encoding::Depth,
10623        ) -> fidl::Result<()> {
10624            encoder.debug_check_bounds::<AudioStreamType>(offset);
10625            // Zero out padding regions. There's no need to apply masks
10626            // because the unmasked parts will be overwritten by fields.
10627            // Write the fields.
10628            self.0.encode(encoder, offset + 0, depth)?;
10629            self.1.encode(encoder, offset + 4, depth)?;
10630            self.2.encode(encoder, offset + 8, depth)?;
10631            Ok(())
10632        }
10633    }
10634
10635    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioStreamType {
10636        #[inline(always)]
10637        fn new_empty() -> Self {
10638            Self {
10639                sample_format: fidl::new_empty!(AudioSampleFormat, D),
10640                channels: fidl::new_empty!(u32, D),
10641                frames_per_second: fidl::new_empty!(u32, D),
10642            }
10643        }
10644
10645        #[inline]
10646        unsafe fn decode(
10647            &mut self,
10648            decoder: &mut fidl::encoding::Decoder<'_, D>,
10649            offset: usize,
10650            _depth: fidl::encoding::Depth,
10651        ) -> fidl::Result<()> {
10652            decoder.debug_check_bounds::<Self>(offset);
10653            // Verify that padding bytes are zero.
10654            fidl::decode!(
10655                AudioSampleFormat,
10656                D,
10657                &mut self.sample_format,
10658                decoder,
10659                offset + 0,
10660                _depth
10661            )?;
10662            fidl::decode!(u32, D, &mut self.channels, decoder, offset + 4, _depth)?;
10663            fidl::decode!(u32, D, &mut self.frames_per_second, decoder, offset + 8, _depth)?;
10664            Ok(())
10665        }
10666    }
10667
10668    impl fidl::encoding::ValueTypeMarker for Compression {
10669        type Borrowed<'a> = &'a Self;
10670        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10671            value
10672        }
10673    }
10674
10675    unsafe impl fidl::encoding::TypeMarker for Compression {
10676        type Owned = Self;
10677
10678        #[inline(always)]
10679        fn inline_align(_context: fidl::encoding::Context) -> usize {
10680            8
10681        }
10682
10683        #[inline(always)]
10684        fn inline_size(_context: fidl::encoding::Context) -> usize {
10685            32
10686        }
10687    }
10688
10689    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Compression, D>
10690        for &Compression
10691    {
10692        #[inline]
10693        unsafe fn encode(
10694            self,
10695            encoder: &mut fidl::encoding::Encoder<'_, D>,
10696            offset: usize,
10697            _depth: fidl::encoding::Depth,
10698        ) -> fidl::Result<()> {
10699            encoder.debug_check_bounds::<Compression>(offset);
10700            // Delegate to tuple encoding.
10701            fidl::encoding::Encode::<Compression, D>::encode(
10702                (
10703                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),
10704                    <fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>> as fidl::encoding::ValueTypeMarker>::borrow(&self.parameters),
10705                ),
10706                encoder, offset, _depth
10707            )
10708        }
10709    }
10710    unsafe impl<
10711        D: fidl::encoding::ResourceDialect,
10712        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<256>, D>,
10713        T1: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>>, D>,
10714    > fidl::encoding::Encode<Compression, D> for (T0, T1)
10715    {
10716        #[inline]
10717        unsafe fn encode(
10718            self,
10719            encoder: &mut fidl::encoding::Encoder<'_, D>,
10720            offset: usize,
10721            depth: fidl::encoding::Depth,
10722        ) -> fidl::Result<()> {
10723            encoder.debug_check_bounds::<Compression>(offset);
10724            // Zero out padding regions. There's no need to apply masks
10725            // because the unmasked parts will be overwritten by fields.
10726            // Write the fields.
10727            self.0.encode(encoder, offset + 0, depth)?;
10728            self.1.encode(encoder, offset + 16, depth)?;
10729            Ok(())
10730        }
10731    }
10732
10733    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Compression {
10734        #[inline(always)]
10735        fn new_empty() -> Self {
10736            Self {
10737                type_: fidl::new_empty!(fidl::encoding::BoundedString<256>, D),
10738                parameters: fidl::new_empty!(
10739                    fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>>,
10740                    D
10741                ),
10742            }
10743        }
10744
10745        #[inline]
10746        unsafe fn decode(
10747            &mut self,
10748            decoder: &mut fidl::encoding::Decoder<'_, D>,
10749            offset: usize,
10750            _depth: fidl::encoding::Depth,
10751        ) -> fidl::Result<()> {
10752            decoder.debug_check_bounds::<Self>(offset);
10753            // Verify that padding bytes are zero.
10754            fidl::decode!(
10755                fidl::encoding::BoundedString<256>,
10756                D,
10757                &mut self.type_,
10758                decoder,
10759                offset + 0,
10760                _depth
10761            )?;
10762            fidl::decode!(
10763                fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>>,
10764                D,
10765                &mut self.parameters,
10766                decoder,
10767                offset + 16,
10768                _depth
10769            )?;
10770            Ok(())
10771        }
10772    }
10773
10774    impl fidl::encoding::ValueTypeMarker for EncryptionPattern {
10775        type Borrowed<'a> = &'a Self;
10776        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10777            value
10778        }
10779    }
10780
10781    unsafe impl fidl::encoding::TypeMarker for EncryptionPattern {
10782        type Owned = Self;
10783
10784        #[inline(always)]
10785        fn inline_align(_context: fidl::encoding::Context) -> usize {
10786            4
10787        }
10788
10789        #[inline(always)]
10790        fn inline_size(_context: fidl::encoding::Context) -> usize {
10791            8
10792        }
10793        #[inline(always)]
10794        fn encode_is_copy() -> bool {
10795            true
10796        }
10797
10798        #[inline(always)]
10799        fn decode_is_copy() -> bool {
10800            true
10801        }
10802    }
10803
10804    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncryptionPattern, D>
10805        for &EncryptionPattern
10806    {
10807        #[inline]
10808        unsafe fn encode(
10809            self,
10810            encoder: &mut fidl::encoding::Encoder<'_, D>,
10811            offset: usize,
10812            _depth: fidl::encoding::Depth,
10813        ) -> fidl::Result<()> {
10814            encoder.debug_check_bounds::<EncryptionPattern>(offset);
10815            unsafe {
10816                // Copy the object into the buffer.
10817                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
10818                (buf_ptr as *mut EncryptionPattern)
10819                    .write_unaligned((self as *const EncryptionPattern).read());
10820                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
10821                // done second because the memcpy will write garbage to these bytes.
10822            }
10823            Ok(())
10824        }
10825    }
10826    unsafe impl<
10827        D: fidl::encoding::ResourceDialect,
10828        T0: fidl::encoding::Encode<u32, D>,
10829        T1: fidl::encoding::Encode<u32, D>,
10830    > fidl::encoding::Encode<EncryptionPattern, D> for (T0, T1)
10831    {
10832        #[inline]
10833        unsafe fn encode(
10834            self,
10835            encoder: &mut fidl::encoding::Encoder<'_, D>,
10836            offset: usize,
10837            depth: fidl::encoding::Depth,
10838        ) -> fidl::Result<()> {
10839            encoder.debug_check_bounds::<EncryptionPattern>(offset);
10840            // Zero out padding regions. There's no need to apply masks
10841            // because the unmasked parts will be overwritten by fields.
10842            // Write the fields.
10843            self.0.encode(encoder, offset + 0, depth)?;
10844            self.1.encode(encoder, offset + 4, depth)?;
10845            Ok(())
10846        }
10847    }
10848
10849    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncryptionPattern {
10850        #[inline(always)]
10851        fn new_empty() -> Self {
10852            Self {
10853                clear_blocks: fidl::new_empty!(u32, D),
10854                encrypted_blocks: fidl::new_empty!(u32, D),
10855            }
10856        }
10857
10858        #[inline]
10859        unsafe fn decode(
10860            &mut self,
10861            decoder: &mut fidl::encoding::Decoder<'_, D>,
10862            offset: usize,
10863            _depth: fidl::encoding::Depth,
10864        ) -> fidl::Result<()> {
10865            decoder.debug_check_bounds::<Self>(offset);
10866            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10867            // Verify that padding bytes are zero.
10868            // Copy from the buffer into the object.
10869            unsafe {
10870                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
10871            }
10872            Ok(())
10873        }
10874    }
10875
10876    impl fidl::encoding::ValueTypeMarker for Metadata {
10877        type Borrowed<'a> = &'a Self;
10878        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10879            value
10880        }
10881    }
10882
10883    unsafe impl fidl::encoding::TypeMarker for Metadata {
10884        type Owned = Self;
10885
10886        #[inline(always)]
10887        fn inline_align(_context: fidl::encoding::Context) -> usize {
10888            8
10889        }
10890
10891        #[inline(always)]
10892        fn inline_size(_context: fidl::encoding::Context) -> usize {
10893            16
10894        }
10895    }
10896
10897    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Metadata, D> for &Metadata {
10898        #[inline]
10899        unsafe fn encode(
10900            self,
10901            encoder: &mut fidl::encoding::Encoder<'_, D>,
10902            offset: usize,
10903            _depth: fidl::encoding::Depth,
10904        ) -> fidl::Result<()> {
10905            encoder.debug_check_bounds::<Metadata>(offset);
10906            // Delegate to tuple encoding.
10907            fidl::encoding::Encode::<Metadata, D>::encode(
10908                (
10909                    <fidl::encoding::UnboundedVector<Property> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
10910                ),
10911                encoder, offset, _depth
10912            )
10913        }
10914    }
10915    unsafe impl<
10916        D: fidl::encoding::ResourceDialect,
10917        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<Property>, D>,
10918    > fidl::encoding::Encode<Metadata, D> for (T0,)
10919    {
10920        #[inline]
10921        unsafe fn encode(
10922            self,
10923            encoder: &mut fidl::encoding::Encoder<'_, D>,
10924            offset: usize,
10925            depth: fidl::encoding::Depth,
10926        ) -> fidl::Result<()> {
10927            encoder.debug_check_bounds::<Metadata>(offset);
10928            // Zero out padding regions. There's no need to apply masks
10929            // because the unmasked parts will be overwritten by fields.
10930            // Write the fields.
10931            self.0.encode(encoder, offset + 0, depth)?;
10932            Ok(())
10933        }
10934    }
10935
10936    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Metadata {
10937        #[inline(always)]
10938        fn new_empty() -> Self {
10939            Self { properties: fidl::new_empty!(fidl::encoding::UnboundedVector<Property>, D) }
10940        }
10941
10942        #[inline]
10943        unsafe fn decode(
10944            &mut self,
10945            decoder: &mut fidl::encoding::Decoder<'_, D>,
10946            offset: usize,
10947            _depth: fidl::encoding::Depth,
10948        ) -> fidl::Result<()> {
10949            decoder.debug_check_bounds::<Self>(offset);
10950            // Verify that padding bytes are zero.
10951            fidl::decode!(
10952                fidl::encoding::UnboundedVector<Property>,
10953                D,
10954                &mut self.properties,
10955                decoder,
10956                offset + 0,
10957                _depth
10958            )?;
10959            Ok(())
10960        }
10961    }
10962
10963    impl fidl::encoding::ValueTypeMarker for Parameter {
10964        type Borrowed<'a> = &'a Self;
10965        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10966            value
10967        }
10968    }
10969
10970    unsafe impl fidl::encoding::TypeMarker for Parameter {
10971        type Owned = Self;
10972
10973        #[inline(always)]
10974        fn inline_align(_context: fidl::encoding::Context) -> usize {
10975            8
10976        }
10977
10978        #[inline(always)]
10979        fn inline_size(_context: fidl::encoding::Context) -> usize {
10980            48
10981        }
10982    }
10983
10984    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Parameter, D>
10985        for &Parameter
10986    {
10987        #[inline]
10988        unsafe fn encode(
10989            self,
10990            encoder: &mut fidl::encoding::Encoder<'_, D>,
10991            offset: usize,
10992            _depth: fidl::encoding::Depth,
10993        ) -> fidl::Result<()> {
10994            encoder.debug_check_bounds::<Parameter>(offset);
10995            // Delegate to tuple encoding.
10996            fidl::encoding::Encode::<Parameter, D>::encode(
10997                (
10998                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
10999                        &self.scope,
11000                    ),
11001                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
11002                        &self.name,
11003                    ),
11004                    <Value as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
11005                ),
11006                encoder,
11007                offset,
11008                _depth,
11009            )
11010        }
11011    }
11012    unsafe impl<
11013        D: fidl::encoding::ResourceDialect,
11014        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11015        T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11016        T2: fidl::encoding::Encode<Value, D>,
11017    > fidl::encoding::Encode<Parameter, D> for (T0, T1, T2)
11018    {
11019        #[inline]
11020        unsafe fn encode(
11021            self,
11022            encoder: &mut fidl::encoding::Encoder<'_, D>,
11023            offset: usize,
11024            depth: fidl::encoding::Depth,
11025        ) -> fidl::Result<()> {
11026            encoder.debug_check_bounds::<Parameter>(offset);
11027            // Zero out padding regions. There's no need to apply masks
11028            // because the unmasked parts will be overwritten by fields.
11029            // Write the fields.
11030            self.0.encode(encoder, offset + 0, depth)?;
11031            self.1.encode(encoder, offset + 16, depth)?;
11032            self.2.encode(encoder, offset + 32, depth)?;
11033            Ok(())
11034        }
11035    }
11036
11037    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Parameter {
11038        #[inline(always)]
11039        fn new_empty() -> Self {
11040            Self {
11041                scope: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11042                name: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11043                value: fidl::new_empty!(Value, D),
11044            }
11045        }
11046
11047        #[inline]
11048        unsafe fn decode(
11049            &mut self,
11050            decoder: &mut fidl::encoding::Decoder<'_, D>,
11051            offset: usize,
11052            _depth: fidl::encoding::Depth,
11053        ) -> fidl::Result<()> {
11054            decoder.debug_check_bounds::<Self>(offset);
11055            // Verify that padding bytes are zero.
11056            fidl::decode!(
11057                fidl::encoding::UnboundedString,
11058                D,
11059                &mut self.scope,
11060                decoder,
11061                offset + 0,
11062                _depth
11063            )?;
11064            fidl::decode!(
11065                fidl::encoding::UnboundedString,
11066                D,
11067                &mut self.name,
11068                decoder,
11069                offset + 16,
11070                _depth
11071            )?;
11072            fidl::decode!(Value, D, &mut self.value, decoder, offset + 32, _depth)?;
11073            Ok(())
11074        }
11075    }
11076
11077    impl fidl::encoding::ValueTypeMarker for PcmFormat {
11078        type Borrowed<'a> = &'a Self;
11079        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11080            value
11081        }
11082    }
11083
11084    unsafe impl fidl::encoding::TypeMarker for PcmFormat {
11085        type Owned = Self;
11086
11087        #[inline(always)]
11088        fn inline_align(_context: fidl::encoding::Context) -> usize {
11089            8
11090        }
11091
11092        #[inline(always)]
11093        fn inline_size(_context: fidl::encoding::Context) -> usize {
11094            32
11095        }
11096    }
11097
11098    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmFormat, D>
11099        for &PcmFormat
11100    {
11101        #[inline]
11102        unsafe fn encode(
11103            self,
11104            encoder: &mut fidl::encoding::Encoder<'_, D>,
11105            offset: usize,
11106            _depth: fidl::encoding::Depth,
11107        ) -> fidl::Result<()> {
11108            encoder.debug_check_bounds::<PcmFormat>(offset);
11109            // Delegate to tuple encoding.
11110            fidl::encoding::Encode::<PcmFormat, D>::encode(
11111                (
11112                    <AudioPcmMode as fidl::encoding::ValueTypeMarker>::borrow(&self.pcm_mode),
11113                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
11114                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frames_per_second),
11115                    <fidl::encoding::Vector<AudioChannelId, 16> as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_map),
11116                ),
11117                encoder, offset, _depth
11118            )
11119        }
11120    }
11121    unsafe impl<
11122        D: fidl::encoding::ResourceDialect,
11123        T0: fidl::encoding::Encode<AudioPcmMode, D>,
11124        T1: fidl::encoding::Encode<u32, D>,
11125        T2: fidl::encoding::Encode<u32, D>,
11126        T3: fidl::encoding::Encode<fidl::encoding::Vector<AudioChannelId, 16>, D>,
11127    > fidl::encoding::Encode<PcmFormat, D> for (T0, T1, T2, T3)
11128    {
11129        #[inline]
11130        unsafe fn encode(
11131            self,
11132            encoder: &mut fidl::encoding::Encoder<'_, D>,
11133            offset: usize,
11134            depth: fidl::encoding::Depth,
11135        ) -> fidl::Result<()> {
11136            encoder.debug_check_bounds::<PcmFormat>(offset);
11137            // Zero out padding regions. There's no need to apply masks
11138            // because the unmasked parts will be overwritten by fields.
11139            unsafe {
11140                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
11141                (ptr as *mut u64).write_unaligned(0);
11142            }
11143            // Write the fields.
11144            self.0.encode(encoder, offset + 0, depth)?;
11145            self.1.encode(encoder, offset + 4, depth)?;
11146            self.2.encode(encoder, offset + 8, depth)?;
11147            self.3.encode(encoder, offset + 16, depth)?;
11148            Ok(())
11149        }
11150    }
11151
11152    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmFormat {
11153        #[inline(always)]
11154        fn new_empty() -> Self {
11155            Self {
11156                pcm_mode: fidl::new_empty!(AudioPcmMode, D),
11157                bits_per_sample: fidl::new_empty!(u32, D),
11158                frames_per_second: fidl::new_empty!(u32, D),
11159                channel_map: fidl::new_empty!(fidl::encoding::Vector<AudioChannelId, 16>, D),
11160            }
11161        }
11162
11163        #[inline]
11164        unsafe fn decode(
11165            &mut self,
11166            decoder: &mut fidl::encoding::Decoder<'_, D>,
11167            offset: usize,
11168            _depth: fidl::encoding::Depth,
11169        ) -> fidl::Result<()> {
11170            decoder.debug_check_bounds::<Self>(offset);
11171            // Verify that padding bytes are zero.
11172            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
11173            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11174            let mask = 0xffffffff00000000u64;
11175            let maskedval = padval & mask;
11176            if maskedval != 0 {
11177                return Err(fidl::Error::NonZeroPadding {
11178                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
11179                });
11180            }
11181            fidl::decode!(AudioPcmMode, D, &mut self.pcm_mode, decoder, offset + 0, _depth)?;
11182            fidl::decode!(u32, D, &mut self.bits_per_sample, decoder, offset + 4, _depth)?;
11183            fidl::decode!(u32, D, &mut self.frames_per_second, decoder, offset + 8, _depth)?;
11184            fidl::decode!(fidl::encoding::Vector<AudioChannelId, 16>, D, &mut self.channel_map, decoder, offset + 16, _depth)?;
11185            Ok(())
11186        }
11187    }
11188
11189    impl fidl::encoding::ValueTypeMarker for ProfileProviderRegisterHandlerWithCapacityResponse {
11190        type Borrowed<'a> = &'a Self;
11191        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11192            value
11193        }
11194    }
11195
11196    unsafe impl fidl::encoding::TypeMarker for ProfileProviderRegisterHandlerWithCapacityResponse {
11197        type Owned = Self;
11198
11199        #[inline(always)]
11200        fn inline_align(_context: fidl::encoding::Context) -> usize {
11201            8
11202        }
11203
11204        #[inline(always)]
11205        fn inline_size(_context: fidl::encoding::Context) -> usize {
11206            16
11207        }
11208        #[inline(always)]
11209        fn encode_is_copy() -> bool {
11210            true
11211        }
11212
11213        #[inline(always)]
11214        fn decode_is_copy() -> bool {
11215            true
11216        }
11217    }
11218
11219    unsafe impl<D: fidl::encoding::ResourceDialect>
11220        fidl::encoding::Encode<ProfileProviderRegisterHandlerWithCapacityResponse, D>
11221        for &ProfileProviderRegisterHandlerWithCapacityResponse
11222    {
11223        #[inline]
11224        unsafe fn encode(
11225            self,
11226            encoder: &mut fidl::encoding::Encoder<'_, D>,
11227            offset: usize,
11228            _depth: fidl::encoding::Depth,
11229        ) -> fidl::Result<()> {
11230            encoder
11231                .debug_check_bounds::<ProfileProviderRegisterHandlerWithCapacityResponse>(offset);
11232            unsafe {
11233                // Copy the object into the buffer.
11234                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11235                (buf_ptr as *mut ProfileProviderRegisterHandlerWithCapacityResponse)
11236                    .write_unaligned(
11237                        (self as *const ProfileProviderRegisterHandlerWithCapacityResponse).read(),
11238                    );
11239                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11240                // done second because the memcpy will write garbage to these bytes.
11241            }
11242            Ok(())
11243        }
11244    }
11245    unsafe impl<
11246        D: fidl::encoding::ResourceDialect,
11247        T0: fidl::encoding::Encode<i64, D>,
11248        T1: fidl::encoding::Encode<i64, D>,
11249    > fidl::encoding::Encode<ProfileProviderRegisterHandlerWithCapacityResponse, D> for (T0, T1)
11250    {
11251        #[inline]
11252        unsafe fn encode(
11253            self,
11254            encoder: &mut fidl::encoding::Encoder<'_, D>,
11255            offset: usize,
11256            depth: fidl::encoding::Depth,
11257        ) -> fidl::Result<()> {
11258            encoder
11259                .debug_check_bounds::<ProfileProviderRegisterHandlerWithCapacityResponse>(offset);
11260            // Zero out padding regions. There's no need to apply masks
11261            // because the unmasked parts will be overwritten by fields.
11262            // Write the fields.
11263            self.0.encode(encoder, offset + 0, depth)?;
11264            self.1.encode(encoder, offset + 8, depth)?;
11265            Ok(())
11266        }
11267    }
11268
11269    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11270        for ProfileProviderRegisterHandlerWithCapacityResponse
11271    {
11272        #[inline(always)]
11273        fn new_empty() -> Self {
11274            Self { period: fidl::new_empty!(i64, D), capacity: fidl::new_empty!(i64, D) }
11275        }
11276
11277        #[inline]
11278        unsafe fn decode(
11279            &mut self,
11280            decoder: &mut fidl::encoding::Decoder<'_, D>,
11281            offset: usize,
11282            _depth: fidl::encoding::Depth,
11283        ) -> fidl::Result<()> {
11284            decoder.debug_check_bounds::<Self>(offset);
11285            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11286            // Verify that padding bytes are zero.
11287            // Copy from the buffer into the object.
11288            unsafe {
11289                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
11290            }
11291            Ok(())
11292        }
11293    }
11294
11295    impl fidl::encoding::ValueTypeMarker for Property {
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 Property {
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            32
11313        }
11314    }
11315
11316    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Property, D> for &Property {
11317        #[inline]
11318        unsafe fn encode(
11319            self,
11320            encoder: &mut fidl::encoding::Encoder<'_, D>,
11321            offset: usize,
11322            _depth: fidl::encoding::Depth,
11323        ) -> fidl::Result<()> {
11324            encoder.debug_check_bounds::<Property>(offset);
11325            // Delegate to tuple encoding.
11326            fidl::encoding::Encode::<Property, D>::encode(
11327                (
11328                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
11329                        &self.label,
11330                    ),
11331                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
11332                        &self.value,
11333                    ),
11334                ),
11335                encoder,
11336                offset,
11337                _depth,
11338            )
11339        }
11340    }
11341    unsafe impl<
11342        D: fidl::encoding::ResourceDialect,
11343        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11344        T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11345    > fidl::encoding::Encode<Property, D> for (T0, T1)
11346    {
11347        #[inline]
11348        unsafe fn encode(
11349            self,
11350            encoder: &mut fidl::encoding::Encoder<'_, D>,
11351            offset: usize,
11352            depth: fidl::encoding::Depth,
11353        ) -> fidl::Result<()> {
11354            encoder.debug_check_bounds::<Property>(offset);
11355            // Zero out padding regions. There's no need to apply masks
11356            // because the unmasked parts will be overwritten by fields.
11357            // Write the fields.
11358            self.0.encode(encoder, offset + 0, depth)?;
11359            self.1.encode(encoder, offset + 16, depth)?;
11360            Ok(())
11361        }
11362    }
11363
11364    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Property {
11365        #[inline(always)]
11366        fn new_empty() -> Self {
11367            Self {
11368                label: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11369                value: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11370            }
11371        }
11372
11373        #[inline]
11374        unsafe fn decode(
11375            &mut self,
11376            decoder: &mut fidl::encoding::Decoder<'_, D>,
11377            offset: usize,
11378            _depth: fidl::encoding::Depth,
11379        ) -> fidl::Result<()> {
11380            decoder.debug_check_bounds::<Self>(offset);
11381            // Verify that padding bytes are zero.
11382            fidl::decode!(
11383                fidl::encoding::UnboundedString,
11384                D,
11385                &mut self.label,
11386                decoder,
11387                offset + 0,
11388                _depth
11389            )?;
11390            fidl::decode!(
11391                fidl::encoding::UnboundedString,
11392                D,
11393                &mut self.value,
11394                decoder,
11395                offset + 16,
11396                _depth
11397            )?;
11398            Ok(())
11399        }
11400    }
11401
11402    impl fidl::encoding::ValueTypeMarker for SbcEncoderSettings {
11403        type Borrowed<'a> = &'a Self;
11404        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11405            value
11406        }
11407    }
11408
11409    unsafe impl fidl::encoding::TypeMarker for SbcEncoderSettings {
11410        type Owned = Self;
11411
11412        #[inline(always)]
11413        fn inline_align(_context: fidl::encoding::Context) -> usize {
11414            8
11415        }
11416
11417        #[inline(always)]
11418        fn inline_size(_context: fidl::encoding::Context) -> usize {
11419            24
11420        }
11421    }
11422
11423    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SbcEncoderSettings, D>
11424        for &SbcEncoderSettings
11425    {
11426        #[inline]
11427        unsafe fn encode(
11428            self,
11429            encoder: &mut fidl::encoding::Encoder<'_, D>,
11430            offset: usize,
11431            _depth: fidl::encoding::Depth,
11432        ) -> fidl::Result<()> {
11433            encoder.debug_check_bounds::<SbcEncoderSettings>(offset);
11434            // Delegate to tuple encoding.
11435            fidl::encoding::Encode::<SbcEncoderSettings, D>::encode(
11436                (
11437                    <SbcSubBands as fidl::encoding::ValueTypeMarker>::borrow(&self.sub_bands),
11438                    <SbcAllocation as fidl::encoding::ValueTypeMarker>::borrow(&self.allocation),
11439                    <SbcBlockCount as fidl::encoding::ValueTypeMarker>::borrow(&self.block_count),
11440                    <SbcChannelMode as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_mode),
11441                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.bit_pool),
11442                ),
11443                encoder,
11444                offset,
11445                _depth,
11446            )
11447        }
11448    }
11449    unsafe impl<
11450        D: fidl::encoding::ResourceDialect,
11451        T0: fidl::encoding::Encode<SbcSubBands, D>,
11452        T1: fidl::encoding::Encode<SbcAllocation, D>,
11453        T2: fidl::encoding::Encode<SbcBlockCount, D>,
11454        T3: fidl::encoding::Encode<SbcChannelMode, D>,
11455        T4: fidl::encoding::Encode<u64, D>,
11456    > fidl::encoding::Encode<SbcEncoderSettings, D> for (T0, T1, T2, T3, T4)
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::<SbcEncoderSettings>(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            self.1.encode(encoder, offset + 4, depth)?;
11471            self.2.encode(encoder, offset + 8, depth)?;
11472            self.3.encode(encoder, offset + 12, depth)?;
11473            self.4.encode(encoder, offset + 16, depth)?;
11474            Ok(())
11475        }
11476    }
11477
11478    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcEncoderSettings {
11479        #[inline(always)]
11480        fn new_empty() -> Self {
11481            Self {
11482                sub_bands: fidl::new_empty!(SbcSubBands, D),
11483                allocation: fidl::new_empty!(SbcAllocation, D),
11484                block_count: fidl::new_empty!(SbcBlockCount, D),
11485                channel_mode: fidl::new_empty!(SbcChannelMode, D),
11486                bit_pool: fidl::new_empty!(u64, D),
11487            }
11488        }
11489
11490        #[inline]
11491        unsafe fn decode(
11492            &mut self,
11493            decoder: &mut fidl::encoding::Decoder<'_, D>,
11494            offset: usize,
11495            _depth: fidl::encoding::Depth,
11496        ) -> fidl::Result<()> {
11497            decoder.debug_check_bounds::<Self>(offset);
11498            // Verify that padding bytes are zero.
11499            fidl::decode!(SbcSubBands, D, &mut self.sub_bands, decoder, offset + 0, _depth)?;
11500            fidl::decode!(SbcAllocation, D, &mut self.allocation, decoder, offset + 4, _depth)?;
11501            fidl::decode!(SbcBlockCount, D, &mut self.block_count, decoder, offset + 8, _depth)?;
11502            fidl::decode!(SbcChannelMode, D, &mut self.channel_mode, decoder, offset + 12, _depth)?;
11503            fidl::decode!(u64, D, &mut self.bit_pool, decoder, offset + 16, _depth)?;
11504            Ok(())
11505        }
11506    }
11507
11508    impl fidl::encoding::ValueTypeMarker for StreamBufferSetRemovePayloadBufferRequest {
11509        type Borrowed<'a> = &'a Self;
11510        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11511            value
11512        }
11513    }
11514
11515    unsafe impl fidl::encoding::TypeMarker for StreamBufferSetRemovePayloadBufferRequest {
11516        type Owned = Self;
11517
11518        #[inline(always)]
11519        fn inline_align(_context: fidl::encoding::Context) -> usize {
11520            4
11521        }
11522
11523        #[inline(always)]
11524        fn inline_size(_context: fidl::encoding::Context) -> usize {
11525            4
11526        }
11527        #[inline(always)]
11528        fn encode_is_copy() -> bool {
11529            true
11530        }
11531
11532        #[inline(always)]
11533        fn decode_is_copy() -> bool {
11534            true
11535        }
11536    }
11537
11538    unsafe impl<D: fidl::encoding::ResourceDialect>
11539        fidl::encoding::Encode<StreamBufferSetRemovePayloadBufferRequest, D>
11540        for &StreamBufferSetRemovePayloadBufferRequest
11541    {
11542        #[inline]
11543        unsafe fn encode(
11544            self,
11545            encoder: &mut fidl::encoding::Encoder<'_, D>,
11546            offset: usize,
11547            _depth: fidl::encoding::Depth,
11548        ) -> fidl::Result<()> {
11549            encoder.debug_check_bounds::<StreamBufferSetRemovePayloadBufferRequest>(offset);
11550            unsafe {
11551                // Copy the object into the buffer.
11552                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11553                (buf_ptr as *mut StreamBufferSetRemovePayloadBufferRequest).write_unaligned(
11554                    (self as *const StreamBufferSetRemovePayloadBufferRequest).read(),
11555                );
11556                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11557                // done second because the memcpy will write garbage to these bytes.
11558            }
11559            Ok(())
11560        }
11561    }
11562    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
11563        fidl::encoding::Encode<StreamBufferSetRemovePayloadBufferRequest, D> for (T0,)
11564    {
11565        #[inline]
11566        unsafe fn encode(
11567            self,
11568            encoder: &mut fidl::encoding::Encoder<'_, D>,
11569            offset: usize,
11570            depth: fidl::encoding::Depth,
11571        ) -> fidl::Result<()> {
11572            encoder.debug_check_bounds::<StreamBufferSetRemovePayloadBufferRequest>(offset);
11573            // Zero out padding regions. There's no need to apply masks
11574            // because the unmasked parts will be overwritten by fields.
11575            // Write the fields.
11576            self.0.encode(encoder, offset + 0, depth)?;
11577            Ok(())
11578        }
11579    }
11580
11581    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11582        for StreamBufferSetRemovePayloadBufferRequest
11583    {
11584        #[inline(always)]
11585        fn new_empty() -> Self {
11586            Self { id: fidl::new_empty!(u32, D) }
11587        }
11588
11589        #[inline]
11590        unsafe fn decode(
11591            &mut self,
11592            decoder: &mut fidl::encoding::Decoder<'_, D>,
11593            offset: usize,
11594            _depth: fidl::encoding::Depth,
11595        ) -> fidl::Result<()> {
11596            decoder.debug_check_bounds::<Self>(offset);
11597            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11598            // Verify that padding bytes are zero.
11599            // Copy from the buffer into the object.
11600            unsafe {
11601                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
11602            }
11603            Ok(())
11604        }
11605    }
11606
11607    impl fidl::encoding::ValueTypeMarker for StreamPacket {
11608        type Borrowed<'a> = &'a Self;
11609        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11610            value
11611        }
11612    }
11613
11614    unsafe impl fidl::encoding::TypeMarker for StreamPacket {
11615        type Owned = Self;
11616
11617        #[inline(always)]
11618        fn inline_align(_context: fidl::encoding::Context) -> usize {
11619            8
11620        }
11621
11622        #[inline(always)]
11623        fn inline_size(_context: fidl::encoding::Context) -> usize {
11624            56
11625        }
11626    }
11627
11628    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamPacket, D>
11629        for &StreamPacket
11630    {
11631        #[inline]
11632        unsafe fn encode(
11633            self,
11634            encoder: &mut fidl::encoding::Encoder<'_, D>,
11635            offset: usize,
11636            _depth: fidl::encoding::Depth,
11637        ) -> fidl::Result<()> {
11638            encoder.debug_check_bounds::<StreamPacket>(offset);
11639            unsafe {
11640                // Copy the object into the buffer.
11641                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11642                (buf_ptr as *mut StreamPacket)
11643                    .write_unaligned((self as *const StreamPacket).read());
11644                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11645                // done second because the memcpy will write garbage to these bytes.
11646                let padding_ptr = buf_ptr.offset(8) as *mut u64;
11647                let padding_mask = 0xffffffff00000000u64;
11648                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
11649                let padding_ptr = buf_ptr.offset(32) as *mut u64;
11650                let padding_mask = 0xffffffff00000000u64;
11651                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
11652            }
11653            Ok(())
11654        }
11655    }
11656    unsafe impl<
11657        D: fidl::encoding::ResourceDialect,
11658        T0: fidl::encoding::Encode<i64, D>,
11659        T1: fidl::encoding::Encode<u32, D>,
11660        T2: fidl::encoding::Encode<u64, D>,
11661        T3: fidl::encoding::Encode<u64, D>,
11662        T4: fidl::encoding::Encode<u32, D>,
11663        T5: fidl::encoding::Encode<u64, D>,
11664        T6: fidl::encoding::Encode<u64, D>,
11665    > fidl::encoding::Encode<StreamPacket, D> for (T0, T1, T2, T3, T4, T5, T6)
11666    {
11667        #[inline]
11668        unsafe fn encode(
11669            self,
11670            encoder: &mut fidl::encoding::Encoder<'_, D>,
11671            offset: usize,
11672            depth: fidl::encoding::Depth,
11673        ) -> fidl::Result<()> {
11674            encoder.debug_check_bounds::<StreamPacket>(offset);
11675            // Zero out padding regions. There's no need to apply masks
11676            // because the unmasked parts will be overwritten by fields.
11677            unsafe {
11678                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
11679                (ptr as *mut u64).write_unaligned(0);
11680            }
11681            unsafe {
11682                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
11683                (ptr as *mut u64).write_unaligned(0);
11684            }
11685            // Write the fields.
11686            self.0.encode(encoder, offset + 0, depth)?;
11687            self.1.encode(encoder, offset + 8, depth)?;
11688            self.2.encode(encoder, offset + 16, depth)?;
11689            self.3.encode(encoder, offset + 24, depth)?;
11690            self.4.encode(encoder, offset + 32, depth)?;
11691            self.5.encode(encoder, offset + 40, depth)?;
11692            self.6.encode(encoder, offset + 48, depth)?;
11693            Ok(())
11694        }
11695    }
11696
11697    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamPacket {
11698        #[inline(always)]
11699        fn new_empty() -> Self {
11700            Self {
11701                pts: fidl::new_empty!(i64, D),
11702                payload_buffer_id: fidl::new_empty!(u32, D),
11703                payload_offset: fidl::new_empty!(u64, D),
11704                payload_size: fidl::new_empty!(u64, D),
11705                flags: fidl::new_empty!(u32, D),
11706                buffer_config: fidl::new_empty!(u64, D),
11707                stream_segment_id: fidl::new_empty!(u64, D),
11708            }
11709        }
11710
11711        #[inline]
11712        unsafe fn decode(
11713            &mut self,
11714            decoder: &mut fidl::encoding::Decoder<'_, D>,
11715            offset: usize,
11716            _depth: fidl::encoding::Depth,
11717        ) -> fidl::Result<()> {
11718            decoder.debug_check_bounds::<Self>(offset);
11719            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11720            // Verify that padding bytes are zero.
11721            let ptr = unsafe { buf_ptr.offset(8) };
11722            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11723            let mask = 0xffffffff00000000u64;
11724            let maskedval = padval & mask;
11725            if maskedval != 0 {
11726                return Err(fidl::Error::NonZeroPadding {
11727                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
11728                });
11729            }
11730            let ptr = unsafe { buf_ptr.offset(32) };
11731            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11732            let mask = 0xffffffff00000000u64;
11733            let maskedval = padval & mask;
11734            if maskedval != 0 {
11735                return Err(fidl::Error::NonZeroPadding {
11736                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
11737                });
11738            }
11739            // Copy from the buffer into the object.
11740            unsafe {
11741                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
11742            }
11743            Ok(())
11744        }
11745    }
11746
11747    impl fidl::encoding::ValueTypeMarker for StreamProcessorCloseCurrentStreamRequest {
11748        type Borrowed<'a> = &'a Self;
11749        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11750            value
11751        }
11752    }
11753
11754    unsafe impl fidl::encoding::TypeMarker for StreamProcessorCloseCurrentStreamRequest {
11755        type Owned = Self;
11756
11757        #[inline(always)]
11758        fn inline_align(_context: fidl::encoding::Context) -> usize {
11759            8
11760        }
11761
11762        #[inline(always)]
11763        fn inline_size(_context: fidl::encoding::Context) -> usize {
11764            16
11765        }
11766    }
11767
11768    unsafe impl<D: fidl::encoding::ResourceDialect>
11769        fidl::encoding::Encode<StreamProcessorCloseCurrentStreamRequest, D>
11770        for &StreamProcessorCloseCurrentStreamRequest
11771    {
11772        #[inline]
11773        unsafe fn encode(
11774            self,
11775            encoder: &mut fidl::encoding::Encoder<'_, D>,
11776            offset: usize,
11777            _depth: fidl::encoding::Depth,
11778        ) -> fidl::Result<()> {
11779            encoder.debug_check_bounds::<StreamProcessorCloseCurrentStreamRequest>(offset);
11780            // Delegate to tuple encoding.
11781            fidl::encoding::Encode::<StreamProcessorCloseCurrentStreamRequest, D>::encode(
11782                (
11783                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
11784                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.release_input_buffers),
11785                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.release_output_buffers),
11786                ),
11787                encoder,
11788                offset,
11789                _depth,
11790            )
11791        }
11792    }
11793    unsafe impl<
11794        D: fidl::encoding::ResourceDialect,
11795        T0: fidl::encoding::Encode<u64, D>,
11796        T1: fidl::encoding::Encode<bool, D>,
11797        T2: fidl::encoding::Encode<bool, D>,
11798    > fidl::encoding::Encode<StreamProcessorCloseCurrentStreamRequest, D> for (T0, T1, T2)
11799    {
11800        #[inline]
11801        unsafe fn encode(
11802            self,
11803            encoder: &mut fidl::encoding::Encoder<'_, D>,
11804            offset: usize,
11805            depth: fidl::encoding::Depth,
11806        ) -> fidl::Result<()> {
11807            encoder.debug_check_bounds::<StreamProcessorCloseCurrentStreamRequest>(offset);
11808            // Zero out padding regions. There's no need to apply masks
11809            // because the unmasked parts will be overwritten by fields.
11810            unsafe {
11811                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
11812                (ptr as *mut u64).write_unaligned(0);
11813            }
11814            // Write the fields.
11815            self.0.encode(encoder, offset + 0, depth)?;
11816            self.1.encode(encoder, offset + 8, depth)?;
11817            self.2.encode(encoder, offset + 9, depth)?;
11818            Ok(())
11819        }
11820    }
11821
11822    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11823        for StreamProcessorCloseCurrentStreamRequest
11824    {
11825        #[inline(always)]
11826        fn new_empty() -> Self {
11827            Self {
11828                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
11829                release_input_buffers: fidl::new_empty!(bool, D),
11830                release_output_buffers: fidl::new_empty!(bool, D),
11831            }
11832        }
11833
11834        #[inline]
11835        unsafe fn decode(
11836            &mut self,
11837            decoder: &mut fidl::encoding::Decoder<'_, D>,
11838            offset: usize,
11839            _depth: fidl::encoding::Depth,
11840        ) -> fidl::Result<()> {
11841            decoder.debug_check_bounds::<Self>(offset);
11842            // Verify that padding bytes are zero.
11843            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
11844            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11845            let mask = 0xffffffffffff0000u64;
11846            let maskedval = padval & mask;
11847            if maskedval != 0 {
11848                return Err(fidl::Error::NonZeroPadding {
11849                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
11850                });
11851            }
11852            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
11853            fidl::decode!(bool, D, &mut self.release_input_buffers, decoder, offset + 8, _depth)?;
11854            fidl::decode!(bool, D, &mut self.release_output_buffers, decoder, offset + 9, _depth)?;
11855            Ok(())
11856        }
11857    }
11858
11859    impl fidl::encoding::ValueTypeMarker for StreamProcessorCompleteOutputBufferPartialSettingsRequest {
11860        type Borrowed<'a> = &'a Self;
11861        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11862            value
11863        }
11864    }
11865
11866    unsafe impl fidl::encoding::TypeMarker
11867        for StreamProcessorCompleteOutputBufferPartialSettingsRequest
11868    {
11869        type Owned = Self;
11870
11871        #[inline(always)]
11872        fn inline_align(_context: fidl::encoding::Context) -> usize {
11873            8
11874        }
11875
11876        #[inline(always)]
11877        fn inline_size(_context: fidl::encoding::Context) -> usize {
11878            8
11879        }
11880        #[inline(always)]
11881        fn encode_is_copy() -> bool {
11882            true
11883        }
11884
11885        #[inline(always)]
11886        fn decode_is_copy() -> bool {
11887            true
11888        }
11889    }
11890
11891    unsafe impl<D: fidl::encoding::ResourceDialect>
11892        fidl::encoding::Encode<StreamProcessorCompleteOutputBufferPartialSettingsRequest, D>
11893        for &StreamProcessorCompleteOutputBufferPartialSettingsRequest
11894    {
11895        #[inline]
11896        unsafe fn encode(
11897            self,
11898            encoder: &mut fidl::encoding::Encoder<'_, D>,
11899            offset: usize,
11900            _depth: fidl::encoding::Depth,
11901        ) -> fidl::Result<()> {
11902            encoder
11903                .debug_check_bounds::<StreamProcessorCompleteOutputBufferPartialSettingsRequest>(
11904                    offset,
11905                );
11906            unsafe {
11907                // Copy the object into the buffer.
11908                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11909                (buf_ptr as *mut StreamProcessorCompleteOutputBufferPartialSettingsRequest)
11910                    .write_unaligned(
11911                        (self as *const StreamProcessorCompleteOutputBufferPartialSettingsRequest)
11912                            .read(),
11913                    );
11914                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11915                // done second because the memcpy will write garbage to these bytes.
11916            }
11917            Ok(())
11918        }
11919    }
11920    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
11921        fidl::encoding::Encode<StreamProcessorCompleteOutputBufferPartialSettingsRequest, D>
11922        for (T0,)
11923    {
11924        #[inline]
11925        unsafe fn encode(
11926            self,
11927            encoder: &mut fidl::encoding::Encoder<'_, D>,
11928            offset: usize,
11929            depth: fidl::encoding::Depth,
11930        ) -> fidl::Result<()> {
11931            encoder
11932                .debug_check_bounds::<StreamProcessorCompleteOutputBufferPartialSettingsRequest>(
11933                    offset,
11934                );
11935            // Zero out padding regions. There's no need to apply masks
11936            // because the unmasked parts will be overwritten by fields.
11937            // Write the fields.
11938            self.0.encode(encoder, offset + 0, depth)?;
11939            Ok(())
11940        }
11941    }
11942
11943    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11944        for StreamProcessorCompleteOutputBufferPartialSettingsRequest
11945    {
11946        #[inline(always)]
11947        fn new_empty() -> Self {
11948            Self { buffer_lifetime_ordinal: fidl::new_empty!(u64, D) }
11949        }
11950
11951        #[inline]
11952        unsafe fn decode(
11953            &mut self,
11954            decoder: &mut fidl::encoding::Decoder<'_, D>,
11955            offset: usize,
11956            _depth: fidl::encoding::Depth,
11957        ) -> fidl::Result<()> {
11958            decoder.debug_check_bounds::<Self>(offset);
11959            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11960            // Verify that padding bytes are zero.
11961            // Copy from the buffer into the object.
11962            unsafe {
11963                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
11964            }
11965            Ok(())
11966        }
11967    }
11968
11969    impl fidl::encoding::ValueTypeMarker for StreamProcessorFlushEndOfStreamAndCloseStreamRequest {
11970        type Borrowed<'a> = &'a Self;
11971        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11972            value
11973        }
11974    }
11975
11976    unsafe impl fidl::encoding::TypeMarker for StreamProcessorFlushEndOfStreamAndCloseStreamRequest {
11977        type Owned = Self;
11978
11979        #[inline(always)]
11980        fn inline_align(_context: fidl::encoding::Context) -> usize {
11981            8
11982        }
11983
11984        #[inline(always)]
11985        fn inline_size(_context: fidl::encoding::Context) -> usize {
11986            8
11987        }
11988        #[inline(always)]
11989        fn encode_is_copy() -> bool {
11990            true
11991        }
11992
11993        #[inline(always)]
11994        fn decode_is_copy() -> bool {
11995            true
11996        }
11997    }
11998
11999    unsafe impl<D: fidl::encoding::ResourceDialect>
12000        fidl::encoding::Encode<StreamProcessorFlushEndOfStreamAndCloseStreamRequest, D>
12001        for &StreamProcessorFlushEndOfStreamAndCloseStreamRequest
12002    {
12003        #[inline]
12004        unsafe fn encode(
12005            self,
12006            encoder: &mut fidl::encoding::Encoder<'_, D>,
12007            offset: usize,
12008            _depth: fidl::encoding::Depth,
12009        ) -> fidl::Result<()> {
12010            encoder
12011                .debug_check_bounds::<StreamProcessorFlushEndOfStreamAndCloseStreamRequest>(offset);
12012            unsafe {
12013                // Copy the object into the buffer.
12014                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
12015                (buf_ptr as *mut StreamProcessorFlushEndOfStreamAndCloseStreamRequest)
12016                    .write_unaligned(
12017                        (self as *const StreamProcessorFlushEndOfStreamAndCloseStreamRequest)
12018                            .read(),
12019                    );
12020                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
12021                // done second because the memcpy will write garbage to these bytes.
12022            }
12023            Ok(())
12024        }
12025    }
12026    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
12027        fidl::encoding::Encode<StreamProcessorFlushEndOfStreamAndCloseStreamRequest, D> for (T0,)
12028    {
12029        #[inline]
12030        unsafe fn encode(
12031            self,
12032            encoder: &mut fidl::encoding::Encoder<'_, D>,
12033            offset: usize,
12034            depth: fidl::encoding::Depth,
12035        ) -> fidl::Result<()> {
12036            encoder
12037                .debug_check_bounds::<StreamProcessorFlushEndOfStreamAndCloseStreamRequest>(offset);
12038            // Zero out padding regions. There's no need to apply masks
12039            // because the unmasked parts will be overwritten by fields.
12040            // Write the fields.
12041            self.0.encode(encoder, offset + 0, depth)?;
12042            Ok(())
12043        }
12044    }
12045
12046    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12047        for StreamProcessorFlushEndOfStreamAndCloseStreamRequest
12048    {
12049        #[inline(always)]
12050        fn new_empty() -> Self {
12051            Self { stream_lifetime_ordinal: fidl::new_empty!(u64, D) }
12052        }
12053
12054        #[inline]
12055        unsafe fn decode(
12056            &mut self,
12057            decoder: &mut fidl::encoding::Decoder<'_, D>,
12058            offset: usize,
12059            _depth: fidl::encoding::Depth,
12060        ) -> fidl::Result<()> {
12061            decoder.debug_check_bounds::<Self>(offset);
12062            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
12063            // Verify that padding bytes are zero.
12064            // Copy from the buffer into the object.
12065            unsafe {
12066                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
12067            }
12068            Ok(())
12069        }
12070    }
12071
12072    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnFreeInputPacketRequest {
12073        type Borrowed<'a> = &'a Self;
12074        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12075            value
12076        }
12077    }
12078
12079    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnFreeInputPacketRequest {
12080        type Owned = Self;
12081
12082        #[inline(always)]
12083        fn inline_align(_context: fidl::encoding::Context) -> usize {
12084            8
12085        }
12086
12087        #[inline(always)]
12088        fn inline_size(_context: fidl::encoding::Context) -> usize {
12089            16
12090        }
12091    }
12092
12093    unsafe impl<D: fidl::encoding::ResourceDialect>
12094        fidl::encoding::Encode<StreamProcessorOnFreeInputPacketRequest, D>
12095        for &StreamProcessorOnFreeInputPacketRequest
12096    {
12097        #[inline]
12098        unsafe fn encode(
12099            self,
12100            encoder: &mut fidl::encoding::Encoder<'_, D>,
12101            offset: usize,
12102            _depth: fidl::encoding::Depth,
12103        ) -> fidl::Result<()> {
12104            encoder.debug_check_bounds::<StreamProcessorOnFreeInputPacketRequest>(offset);
12105            // Delegate to tuple encoding.
12106            fidl::encoding::Encode::<StreamProcessorOnFreeInputPacketRequest, D>::encode(
12107                (<PacketHeader as fidl::encoding::ValueTypeMarker>::borrow(
12108                    &self.free_input_packet,
12109                ),),
12110                encoder,
12111                offset,
12112                _depth,
12113            )
12114        }
12115    }
12116    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PacketHeader, D>>
12117        fidl::encoding::Encode<StreamProcessorOnFreeInputPacketRequest, D> for (T0,)
12118    {
12119        #[inline]
12120        unsafe fn encode(
12121            self,
12122            encoder: &mut fidl::encoding::Encoder<'_, D>,
12123            offset: usize,
12124            depth: fidl::encoding::Depth,
12125        ) -> fidl::Result<()> {
12126            encoder.debug_check_bounds::<StreamProcessorOnFreeInputPacketRequest>(offset);
12127            // Zero out padding regions. There's no need to apply masks
12128            // because the unmasked parts will be overwritten by fields.
12129            // Write the fields.
12130            self.0.encode(encoder, offset + 0, depth)?;
12131            Ok(())
12132        }
12133    }
12134
12135    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12136        for StreamProcessorOnFreeInputPacketRequest
12137    {
12138        #[inline(always)]
12139        fn new_empty() -> Self {
12140            Self { free_input_packet: fidl::new_empty!(PacketHeader, D) }
12141        }
12142
12143        #[inline]
12144        unsafe fn decode(
12145            &mut self,
12146            decoder: &mut fidl::encoding::Decoder<'_, D>,
12147            offset: usize,
12148            _depth: fidl::encoding::Depth,
12149        ) -> fidl::Result<()> {
12150            decoder.debug_check_bounds::<Self>(offset);
12151            // Verify that padding bytes are zero.
12152            fidl::decode!(
12153                PacketHeader,
12154                D,
12155                &mut self.free_input_packet,
12156                decoder,
12157                offset + 0,
12158                _depth
12159            )?;
12160            Ok(())
12161        }
12162    }
12163
12164    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnInputConstraintsRequest {
12165        type Borrowed<'a> = &'a Self;
12166        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12167            value
12168        }
12169    }
12170
12171    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnInputConstraintsRequest {
12172        type Owned = Self;
12173
12174        #[inline(always)]
12175        fn inline_align(_context: fidl::encoding::Context) -> usize {
12176            8
12177        }
12178
12179        #[inline(always)]
12180        fn inline_size(_context: fidl::encoding::Context) -> usize {
12181            16
12182        }
12183    }
12184
12185    unsafe impl<D: fidl::encoding::ResourceDialect>
12186        fidl::encoding::Encode<StreamProcessorOnInputConstraintsRequest, D>
12187        for &StreamProcessorOnInputConstraintsRequest
12188    {
12189        #[inline]
12190        unsafe fn encode(
12191            self,
12192            encoder: &mut fidl::encoding::Encoder<'_, D>,
12193            offset: usize,
12194            _depth: fidl::encoding::Depth,
12195        ) -> fidl::Result<()> {
12196            encoder.debug_check_bounds::<StreamProcessorOnInputConstraintsRequest>(offset);
12197            // Delegate to tuple encoding.
12198            fidl::encoding::Encode::<StreamProcessorOnInputConstraintsRequest, D>::encode(
12199                (<StreamBufferConstraints as fidl::encoding::ValueTypeMarker>::borrow(
12200                    &self.input_constraints,
12201                ),),
12202                encoder,
12203                offset,
12204                _depth,
12205            )
12206        }
12207    }
12208    unsafe impl<
12209        D: fidl::encoding::ResourceDialect,
12210        T0: fidl::encoding::Encode<StreamBufferConstraints, D>,
12211    > fidl::encoding::Encode<StreamProcessorOnInputConstraintsRequest, D> for (T0,)
12212    {
12213        #[inline]
12214        unsafe fn encode(
12215            self,
12216            encoder: &mut fidl::encoding::Encoder<'_, D>,
12217            offset: usize,
12218            depth: fidl::encoding::Depth,
12219        ) -> fidl::Result<()> {
12220            encoder.debug_check_bounds::<StreamProcessorOnInputConstraintsRequest>(offset);
12221            // Zero out padding regions. There's no need to apply masks
12222            // because the unmasked parts will be overwritten by fields.
12223            // Write the fields.
12224            self.0.encode(encoder, offset + 0, depth)?;
12225            Ok(())
12226        }
12227    }
12228
12229    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12230        for StreamProcessorOnInputConstraintsRequest
12231    {
12232        #[inline(always)]
12233        fn new_empty() -> Self {
12234            Self { input_constraints: fidl::new_empty!(StreamBufferConstraints, D) }
12235        }
12236
12237        #[inline]
12238        unsafe fn decode(
12239            &mut self,
12240            decoder: &mut fidl::encoding::Decoder<'_, D>,
12241            offset: usize,
12242            _depth: fidl::encoding::Depth,
12243        ) -> fidl::Result<()> {
12244            decoder.debug_check_bounds::<Self>(offset);
12245            // Verify that padding bytes are zero.
12246            fidl::decode!(
12247                StreamBufferConstraints,
12248                D,
12249                &mut self.input_constraints,
12250                decoder,
12251                offset + 0,
12252                _depth
12253            )?;
12254            Ok(())
12255        }
12256    }
12257
12258    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputConstraintsRequest {
12259        type Borrowed<'a> = &'a Self;
12260        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12261            value
12262        }
12263    }
12264
12265    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputConstraintsRequest {
12266        type Owned = Self;
12267
12268        #[inline(always)]
12269        fn inline_align(_context: fidl::encoding::Context) -> usize {
12270            8
12271        }
12272
12273        #[inline(always)]
12274        fn inline_size(_context: fidl::encoding::Context) -> usize {
12275            16
12276        }
12277    }
12278
12279    unsafe impl<D: fidl::encoding::ResourceDialect>
12280        fidl::encoding::Encode<StreamProcessorOnOutputConstraintsRequest, D>
12281        for &StreamProcessorOnOutputConstraintsRequest
12282    {
12283        #[inline]
12284        unsafe fn encode(
12285            self,
12286            encoder: &mut fidl::encoding::Encoder<'_, D>,
12287            offset: usize,
12288            _depth: fidl::encoding::Depth,
12289        ) -> fidl::Result<()> {
12290            encoder.debug_check_bounds::<StreamProcessorOnOutputConstraintsRequest>(offset);
12291            // Delegate to tuple encoding.
12292            fidl::encoding::Encode::<StreamProcessorOnOutputConstraintsRequest, D>::encode(
12293                (<StreamOutputConstraints as fidl::encoding::ValueTypeMarker>::borrow(
12294                    &self.output_config,
12295                ),),
12296                encoder,
12297                offset,
12298                _depth,
12299            )
12300        }
12301    }
12302    unsafe impl<
12303        D: fidl::encoding::ResourceDialect,
12304        T0: fidl::encoding::Encode<StreamOutputConstraints, D>,
12305    > fidl::encoding::Encode<StreamProcessorOnOutputConstraintsRequest, D> for (T0,)
12306    {
12307        #[inline]
12308        unsafe fn encode(
12309            self,
12310            encoder: &mut fidl::encoding::Encoder<'_, D>,
12311            offset: usize,
12312            depth: fidl::encoding::Depth,
12313        ) -> fidl::Result<()> {
12314            encoder.debug_check_bounds::<StreamProcessorOnOutputConstraintsRequest>(offset);
12315            // Zero out padding regions. There's no need to apply masks
12316            // because the unmasked parts will be overwritten by fields.
12317            // Write the fields.
12318            self.0.encode(encoder, offset + 0, depth)?;
12319            Ok(())
12320        }
12321    }
12322
12323    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12324        for StreamProcessorOnOutputConstraintsRequest
12325    {
12326        #[inline(always)]
12327        fn new_empty() -> Self {
12328            Self { output_config: fidl::new_empty!(StreamOutputConstraints, D) }
12329        }
12330
12331        #[inline]
12332        unsafe fn decode(
12333            &mut self,
12334            decoder: &mut fidl::encoding::Decoder<'_, D>,
12335            offset: usize,
12336            _depth: fidl::encoding::Depth,
12337        ) -> fidl::Result<()> {
12338            decoder.debug_check_bounds::<Self>(offset);
12339            // Verify that padding bytes are zero.
12340            fidl::decode!(
12341                StreamOutputConstraints,
12342                D,
12343                &mut self.output_config,
12344                decoder,
12345                offset + 0,
12346                _depth
12347            )?;
12348            Ok(())
12349        }
12350    }
12351
12352    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputEndOfStreamRequest {
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 StreamProcessorOnOutputEndOfStreamRequest {
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<StreamProcessorOnOutputEndOfStreamRequest, D>
12375        for &StreamProcessorOnOutputEndOfStreamRequest
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::<StreamProcessorOnOutputEndOfStreamRequest>(offset);
12385            // Delegate to tuple encoding.
12386            fidl::encoding::Encode::<StreamProcessorOnOutputEndOfStreamRequest, D>::encode(
12387                (
12388                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
12389                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.error_detected_before),
12390                ),
12391                encoder,
12392                offset,
12393                _depth,
12394            )
12395        }
12396    }
12397    unsafe impl<
12398        D: fidl::encoding::ResourceDialect,
12399        T0: fidl::encoding::Encode<u64, D>,
12400        T1: fidl::encoding::Encode<bool, D>,
12401    > fidl::encoding::Encode<StreamProcessorOnOutputEndOfStreamRequest, D> for (T0, T1)
12402    {
12403        #[inline]
12404        unsafe fn encode(
12405            self,
12406            encoder: &mut fidl::encoding::Encoder<'_, D>,
12407            offset: usize,
12408            depth: fidl::encoding::Depth,
12409        ) -> fidl::Result<()> {
12410            encoder.debug_check_bounds::<StreamProcessorOnOutputEndOfStreamRequest>(offset);
12411            // Zero out padding regions. There's no need to apply masks
12412            // because the unmasked parts will be overwritten by fields.
12413            unsafe {
12414                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
12415                (ptr as *mut u64).write_unaligned(0);
12416            }
12417            // Write the fields.
12418            self.0.encode(encoder, offset + 0, depth)?;
12419            self.1.encode(encoder, offset + 8, depth)?;
12420            Ok(())
12421        }
12422    }
12423
12424    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12425        for StreamProcessorOnOutputEndOfStreamRequest
12426    {
12427        #[inline(always)]
12428        fn new_empty() -> Self {
12429            Self {
12430                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
12431                error_detected_before: fidl::new_empty!(bool, D),
12432            }
12433        }
12434
12435        #[inline]
12436        unsafe fn decode(
12437            &mut self,
12438            decoder: &mut fidl::encoding::Decoder<'_, D>,
12439            offset: usize,
12440            _depth: fidl::encoding::Depth,
12441        ) -> fidl::Result<()> {
12442            decoder.debug_check_bounds::<Self>(offset);
12443            // Verify that padding bytes are zero.
12444            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
12445            let padval = unsafe { (ptr as *const u64).read_unaligned() };
12446            let mask = 0xffffffffffffff00u64;
12447            let maskedval = padval & mask;
12448            if maskedval != 0 {
12449                return Err(fidl::Error::NonZeroPadding {
12450                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
12451                });
12452            }
12453            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
12454            fidl::decode!(bool, D, &mut self.error_detected_before, decoder, offset + 8, _depth)?;
12455            Ok(())
12456        }
12457    }
12458
12459    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputFormatRequest {
12460        type Borrowed<'a> = &'a Self;
12461        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12462            value
12463        }
12464    }
12465
12466    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputFormatRequest {
12467        type Owned = Self;
12468
12469        #[inline(always)]
12470        fn inline_align(_context: fidl::encoding::Context) -> usize {
12471            8
12472        }
12473
12474        #[inline(always)]
12475        fn inline_size(_context: fidl::encoding::Context) -> usize {
12476            16
12477        }
12478    }
12479
12480    unsafe impl<D: fidl::encoding::ResourceDialect>
12481        fidl::encoding::Encode<StreamProcessorOnOutputFormatRequest, D>
12482        for &StreamProcessorOnOutputFormatRequest
12483    {
12484        #[inline]
12485        unsafe fn encode(
12486            self,
12487            encoder: &mut fidl::encoding::Encoder<'_, D>,
12488            offset: usize,
12489            _depth: fidl::encoding::Depth,
12490        ) -> fidl::Result<()> {
12491            encoder.debug_check_bounds::<StreamProcessorOnOutputFormatRequest>(offset);
12492            // Delegate to tuple encoding.
12493            fidl::encoding::Encode::<StreamProcessorOnOutputFormatRequest, D>::encode(
12494                (<StreamOutputFormat as fidl::encoding::ValueTypeMarker>::borrow(
12495                    &self.output_format,
12496                ),),
12497                encoder,
12498                offset,
12499                _depth,
12500            )
12501        }
12502    }
12503    unsafe impl<
12504        D: fidl::encoding::ResourceDialect,
12505        T0: fidl::encoding::Encode<StreamOutputFormat, D>,
12506    > fidl::encoding::Encode<StreamProcessorOnOutputFormatRequest, D> for (T0,)
12507    {
12508        #[inline]
12509        unsafe fn encode(
12510            self,
12511            encoder: &mut fidl::encoding::Encoder<'_, D>,
12512            offset: usize,
12513            depth: fidl::encoding::Depth,
12514        ) -> fidl::Result<()> {
12515            encoder.debug_check_bounds::<StreamProcessorOnOutputFormatRequest>(offset);
12516            // Zero out padding regions. There's no need to apply masks
12517            // because the unmasked parts will be overwritten by fields.
12518            // Write the fields.
12519            self.0.encode(encoder, offset + 0, depth)?;
12520            Ok(())
12521        }
12522    }
12523
12524    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12525        for StreamProcessorOnOutputFormatRequest
12526    {
12527        #[inline(always)]
12528        fn new_empty() -> Self {
12529            Self { output_format: fidl::new_empty!(StreamOutputFormat, D) }
12530        }
12531
12532        #[inline]
12533        unsafe fn decode(
12534            &mut self,
12535            decoder: &mut fidl::encoding::Decoder<'_, D>,
12536            offset: usize,
12537            _depth: fidl::encoding::Depth,
12538        ) -> fidl::Result<()> {
12539            decoder.debug_check_bounds::<Self>(offset);
12540            // Verify that padding bytes are zero.
12541            fidl::decode!(
12542                StreamOutputFormat,
12543                D,
12544                &mut self.output_format,
12545                decoder,
12546                offset + 0,
12547                _depth
12548            )?;
12549            Ok(())
12550        }
12551    }
12552
12553    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputPacketRequest {
12554        type Borrowed<'a> = &'a Self;
12555        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12556            value
12557        }
12558    }
12559
12560    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputPacketRequest {
12561        type Owned = Self;
12562
12563        #[inline(always)]
12564        fn inline_align(_context: fidl::encoding::Context) -> usize {
12565            8
12566        }
12567
12568        #[inline(always)]
12569        fn inline_size(_context: fidl::encoding::Context) -> usize {
12570            24
12571        }
12572    }
12573
12574    unsafe impl<D: fidl::encoding::ResourceDialect>
12575        fidl::encoding::Encode<StreamProcessorOnOutputPacketRequest, D>
12576        for &StreamProcessorOnOutputPacketRequest
12577    {
12578        #[inline]
12579        unsafe fn encode(
12580            self,
12581            encoder: &mut fidl::encoding::Encoder<'_, D>,
12582            offset: usize,
12583            _depth: fidl::encoding::Depth,
12584        ) -> fidl::Result<()> {
12585            encoder.debug_check_bounds::<StreamProcessorOnOutputPacketRequest>(offset);
12586            // Delegate to tuple encoding.
12587            fidl::encoding::Encode::<StreamProcessorOnOutputPacketRequest, D>::encode(
12588                (
12589                    <Packet as fidl::encoding::ValueTypeMarker>::borrow(&self.output_packet),
12590                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.error_detected_before),
12591                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.error_detected_during),
12592                ),
12593                encoder,
12594                offset,
12595                _depth,
12596            )
12597        }
12598    }
12599    unsafe impl<
12600        D: fidl::encoding::ResourceDialect,
12601        T0: fidl::encoding::Encode<Packet, D>,
12602        T1: fidl::encoding::Encode<bool, D>,
12603        T2: fidl::encoding::Encode<bool, D>,
12604    > fidl::encoding::Encode<StreamProcessorOnOutputPacketRequest, D> for (T0, T1, T2)
12605    {
12606        #[inline]
12607        unsafe fn encode(
12608            self,
12609            encoder: &mut fidl::encoding::Encoder<'_, D>,
12610            offset: usize,
12611            depth: fidl::encoding::Depth,
12612        ) -> fidl::Result<()> {
12613            encoder.debug_check_bounds::<StreamProcessorOnOutputPacketRequest>(offset);
12614            // Zero out padding regions. There's no need to apply masks
12615            // because the unmasked parts will be overwritten by fields.
12616            unsafe {
12617                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
12618                (ptr as *mut u64).write_unaligned(0);
12619            }
12620            // Write the fields.
12621            self.0.encode(encoder, offset + 0, depth)?;
12622            self.1.encode(encoder, offset + 16, depth)?;
12623            self.2.encode(encoder, offset + 17, depth)?;
12624            Ok(())
12625        }
12626    }
12627
12628    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12629        for StreamProcessorOnOutputPacketRequest
12630    {
12631        #[inline(always)]
12632        fn new_empty() -> Self {
12633            Self {
12634                output_packet: fidl::new_empty!(Packet, D),
12635                error_detected_before: fidl::new_empty!(bool, D),
12636                error_detected_during: fidl::new_empty!(bool, D),
12637            }
12638        }
12639
12640        #[inline]
12641        unsafe fn decode(
12642            &mut self,
12643            decoder: &mut fidl::encoding::Decoder<'_, D>,
12644            offset: usize,
12645            _depth: fidl::encoding::Depth,
12646        ) -> fidl::Result<()> {
12647            decoder.debug_check_bounds::<Self>(offset);
12648            // Verify that padding bytes are zero.
12649            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
12650            let padval = unsafe { (ptr as *const u64).read_unaligned() };
12651            let mask = 0xffffffffffff0000u64;
12652            let maskedval = padval & mask;
12653            if maskedval != 0 {
12654                return Err(fidl::Error::NonZeroPadding {
12655                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
12656                });
12657            }
12658            fidl::decode!(Packet, D, &mut self.output_packet, decoder, offset + 0, _depth)?;
12659            fidl::decode!(bool, D, &mut self.error_detected_before, decoder, offset + 16, _depth)?;
12660            fidl::decode!(bool, D, &mut self.error_detected_during, decoder, offset + 17, _depth)?;
12661            Ok(())
12662        }
12663    }
12664
12665    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnStreamFailedRequest {
12666        type Borrowed<'a> = &'a Self;
12667        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12668            value
12669        }
12670    }
12671
12672    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnStreamFailedRequest {
12673        type Owned = Self;
12674
12675        #[inline(always)]
12676        fn inline_align(_context: fidl::encoding::Context) -> usize {
12677            8
12678        }
12679
12680        #[inline(always)]
12681        fn inline_size(_context: fidl::encoding::Context) -> usize {
12682            16
12683        }
12684    }
12685
12686    unsafe impl<D: fidl::encoding::ResourceDialect>
12687        fidl::encoding::Encode<StreamProcessorOnStreamFailedRequest, D>
12688        for &StreamProcessorOnStreamFailedRequest
12689    {
12690        #[inline]
12691        unsafe fn encode(
12692            self,
12693            encoder: &mut fidl::encoding::Encoder<'_, D>,
12694            offset: usize,
12695            _depth: fidl::encoding::Depth,
12696        ) -> fidl::Result<()> {
12697            encoder.debug_check_bounds::<StreamProcessorOnStreamFailedRequest>(offset);
12698            // Delegate to tuple encoding.
12699            fidl::encoding::Encode::<StreamProcessorOnStreamFailedRequest, D>::encode(
12700                (
12701                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
12702                    <StreamError as fidl::encoding::ValueTypeMarker>::borrow(&self.error),
12703                ),
12704                encoder,
12705                offset,
12706                _depth,
12707            )
12708        }
12709    }
12710    unsafe impl<
12711        D: fidl::encoding::ResourceDialect,
12712        T0: fidl::encoding::Encode<u64, D>,
12713        T1: fidl::encoding::Encode<StreamError, D>,
12714    > fidl::encoding::Encode<StreamProcessorOnStreamFailedRequest, D> for (T0, T1)
12715    {
12716        #[inline]
12717        unsafe fn encode(
12718            self,
12719            encoder: &mut fidl::encoding::Encoder<'_, D>,
12720            offset: usize,
12721            depth: fidl::encoding::Depth,
12722        ) -> fidl::Result<()> {
12723            encoder.debug_check_bounds::<StreamProcessorOnStreamFailedRequest>(offset);
12724            // Zero out padding regions. There's no need to apply masks
12725            // because the unmasked parts will be overwritten by fields.
12726            unsafe {
12727                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
12728                (ptr as *mut u64).write_unaligned(0);
12729            }
12730            // Write the fields.
12731            self.0.encode(encoder, offset + 0, depth)?;
12732            self.1.encode(encoder, offset + 8, depth)?;
12733            Ok(())
12734        }
12735    }
12736
12737    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12738        for StreamProcessorOnStreamFailedRequest
12739    {
12740        #[inline(always)]
12741        fn new_empty() -> Self {
12742            Self {
12743                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
12744                error: fidl::new_empty!(StreamError, D),
12745            }
12746        }
12747
12748        #[inline]
12749        unsafe fn decode(
12750            &mut self,
12751            decoder: &mut fidl::encoding::Decoder<'_, D>,
12752            offset: usize,
12753            _depth: fidl::encoding::Depth,
12754        ) -> fidl::Result<()> {
12755            decoder.debug_check_bounds::<Self>(offset);
12756            // Verify that padding bytes are zero.
12757            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
12758            let padval = unsafe { (ptr as *const u64).read_unaligned() };
12759            let mask = 0xffffffff00000000u64;
12760            let maskedval = padval & mask;
12761            if maskedval != 0 {
12762                return Err(fidl::Error::NonZeroPadding {
12763                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
12764                });
12765            }
12766            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
12767            fidl::decode!(StreamError, D, &mut self.error, decoder, offset + 8, _depth)?;
12768            Ok(())
12769        }
12770    }
12771
12772    impl fidl::encoding::ValueTypeMarker for StreamProcessorQueueInputEndOfStreamRequest {
12773        type Borrowed<'a> = &'a Self;
12774        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12775            value
12776        }
12777    }
12778
12779    unsafe impl fidl::encoding::TypeMarker for StreamProcessorQueueInputEndOfStreamRequest {
12780        type Owned = Self;
12781
12782        #[inline(always)]
12783        fn inline_align(_context: fidl::encoding::Context) -> usize {
12784            8
12785        }
12786
12787        #[inline(always)]
12788        fn inline_size(_context: fidl::encoding::Context) -> usize {
12789            8
12790        }
12791        #[inline(always)]
12792        fn encode_is_copy() -> bool {
12793            true
12794        }
12795
12796        #[inline(always)]
12797        fn decode_is_copy() -> bool {
12798            true
12799        }
12800    }
12801
12802    unsafe impl<D: fidl::encoding::ResourceDialect>
12803        fidl::encoding::Encode<StreamProcessorQueueInputEndOfStreamRequest, D>
12804        for &StreamProcessorQueueInputEndOfStreamRequest
12805    {
12806        #[inline]
12807        unsafe fn encode(
12808            self,
12809            encoder: &mut fidl::encoding::Encoder<'_, D>,
12810            offset: usize,
12811            _depth: fidl::encoding::Depth,
12812        ) -> fidl::Result<()> {
12813            encoder.debug_check_bounds::<StreamProcessorQueueInputEndOfStreamRequest>(offset);
12814            unsafe {
12815                // Copy the object into the buffer.
12816                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
12817                (buf_ptr as *mut StreamProcessorQueueInputEndOfStreamRequest).write_unaligned(
12818                    (self as *const StreamProcessorQueueInputEndOfStreamRequest).read(),
12819                );
12820                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
12821                // done second because the memcpy will write garbage to these bytes.
12822            }
12823            Ok(())
12824        }
12825    }
12826    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
12827        fidl::encoding::Encode<StreamProcessorQueueInputEndOfStreamRequest, D> for (T0,)
12828    {
12829        #[inline]
12830        unsafe fn encode(
12831            self,
12832            encoder: &mut fidl::encoding::Encoder<'_, D>,
12833            offset: usize,
12834            depth: fidl::encoding::Depth,
12835        ) -> fidl::Result<()> {
12836            encoder.debug_check_bounds::<StreamProcessorQueueInputEndOfStreamRequest>(offset);
12837            // Zero out padding regions. There's no need to apply masks
12838            // because the unmasked parts will be overwritten by fields.
12839            // Write the fields.
12840            self.0.encode(encoder, offset + 0, depth)?;
12841            Ok(())
12842        }
12843    }
12844
12845    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12846        for StreamProcessorQueueInputEndOfStreamRequest
12847    {
12848        #[inline(always)]
12849        fn new_empty() -> Self {
12850            Self { stream_lifetime_ordinal: fidl::new_empty!(u64, D) }
12851        }
12852
12853        #[inline]
12854        unsafe fn decode(
12855            &mut self,
12856            decoder: &mut fidl::encoding::Decoder<'_, D>,
12857            offset: usize,
12858            _depth: fidl::encoding::Depth,
12859        ) -> fidl::Result<()> {
12860            decoder.debug_check_bounds::<Self>(offset);
12861            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
12862            // Verify that padding bytes are zero.
12863            // Copy from the buffer into the object.
12864            unsafe {
12865                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
12866            }
12867            Ok(())
12868        }
12869    }
12870
12871    impl fidl::encoding::ValueTypeMarker for StreamProcessorQueueInputFormatDetailsRequest {
12872        type Borrowed<'a> = &'a Self;
12873        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12874            value
12875        }
12876    }
12877
12878    unsafe impl fidl::encoding::TypeMarker for StreamProcessorQueueInputFormatDetailsRequest {
12879        type Owned = Self;
12880
12881        #[inline(always)]
12882        fn inline_align(_context: fidl::encoding::Context) -> usize {
12883            8
12884        }
12885
12886        #[inline(always)]
12887        fn inline_size(_context: fidl::encoding::Context) -> usize {
12888            24
12889        }
12890    }
12891
12892    unsafe impl<D: fidl::encoding::ResourceDialect>
12893        fidl::encoding::Encode<StreamProcessorQueueInputFormatDetailsRequest, D>
12894        for &StreamProcessorQueueInputFormatDetailsRequest
12895    {
12896        #[inline]
12897        unsafe fn encode(
12898            self,
12899            encoder: &mut fidl::encoding::Encoder<'_, D>,
12900            offset: usize,
12901            _depth: fidl::encoding::Depth,
12902        ) -> fidl::Result<()> {
12903            encoder.debug_check_bounds::<StreamProcessorQueueInputFormatDetailsRequest>(offset);
12904            // Delegate to tuple encoding.
12905            fidl::encoding::Encode::<StreamProcessorQueueInputFormatDetailsRequest, D>::encode(
12906                (
12907                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
12908                    <FormatDetails as fidl::encoding::ValueTypeMarker>::borrow(
12909                        &self.format_details,
12910                    ),
12911                ),
12912                encoder,
12913                offset,
12914                _depth,
12915            )
12916        }
12917    }
12918    unsafe impl<
12919        D: fidl::encoding::ResourceDialect,
12920        T0: fidl::encoding::Encode<u64, D>,
12921        T1: fidl::encoding::Encode<FormatDetails, D>,
12922    > fidl::encoding::Encode<StreamProcessorQueueInputFormatDetailsRequest, D> for (T0, T1)
12923    {
12924        #[inline]
12925        unsafe fn encode(
12926            self,
12927            encoder: &mut fidl::encoding::Encoder<'_, D>,
12928            offset: usize,
12929            depth: fidl::encoding::Depth,
12930        ) -> fidl::Result<()> {
12931            encoder.debug_check_bounds::<StreamProcessorQueueInputFormatDetailsRequest>(offset);
12932            // Zero out padding regions. There's no need to apply masks
12933            // because the unmasked parts will be overwritten by fields.
12934            // Write the fields.
12935            self.0.encode(encoder, offset + 0, depth)?;
12936            self.1.encode(encoder, offset + 8, depth)?;
12937            Ok(())
12938        }
12939    }
12940
12941    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12942        for StreamProcessorQueueInputFormatDetailsRequest
12943    {
12944        #[inline(always)]
12945        fn new_empty() -> Self {
12946            Self {
12947                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
12948                format_details: fidl::new_empty!(FormatDetails, D),
12949            }
12950        }
12951
12952        #[inline]
12953        unsafe fn decode(
12954            &mut self,
12955            decoder: &mut fidl::encoding::Decoder<'_, D>,
12956            offset: usize,
12957            _depth: fidl::encoding::Depth,
12958        ) -> fidl::Result<()> {
12959            decoder.debug_check_bounds::<Self>(offset);
12960            // Verify that padding bytes are zero.
12961            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
12962            fidl::decode!(FormatDetails, D, &mut self.format_details, decoder, offset + 8, _depth)?;
12963            Ok(())
12964        }
12965    }
12966
12967    impl fidl::encoding::ValueTypeMarker for StreamProcessorQueueInputPacketRequest {
12968        type Borrowed<'a> = &'a Self;
12969        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12970            value
12971        }
12972    }
12973
12974    unsafe impl fidl::encoding::TypeMarker for StreamProcessorQueueInputPacketRequest {
12975        type Owned = Self;
12976
12977        #[inline(always)]
12978        fn inline_align(_context: fidl::encoding::Context) -> usize {
12979            8
12980        }
12981
12982        #[inline(always)]
12983        fn inline_size(_context: fidl::encoding::Context) -> usize {
12984            16
12985        }
12986    }
12987
12988    unsafe impl<D: fidl::encoding::ResourceDialect>
12989        fidl::encoding::Encode<StreamProcessorQueueInputPacketRequest, D>
12990        for &StreamProcessorQueueInputPacketRequest
12991    {
12992        #[inline]
12993        unsafe fn encode(
12994            self,
12995            encoder: &mut fidl::encoding::Encoder<'_, D>,
12996            offset: usize,
12997            _depth: fidl::encoding::Depth,
12998        ) -> fidl::Result<()> {
12999            encoder.debug_check_bounds::<StreamProcessorQueueInputPacketRequest>(offset);
13000            // Delegate to tuple encoding.
13001            fidl::encoding::Encode::<StreamProcessorQueueInputPacketRequest, D>::encode(
13002                (<Packet as fidl::encoding::ValueTypeMarker>::borrow(&self.packet),),
13003                encoder,
13004                offset,
13005                _depth,
13006            )
13007        }
13008    }
13009    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Packet, D>>
13010        fidl::encoding::Encode<StreamProcessorQueueInputPacketRequest, D> for (T0,)
13011    {
13012        #[inline]
13013        unsafe fn encode(
13014            self,
13015            encoder: &mut fidl::encoding::Encoder<'_, D>,
13016            offset: usize,
13017            depth: fidl::encoding::Depth,
13018        ) -> fidl::Result<()> {
13019            encoder.debug_check_bounds::<StreamProcessorQueueInputPacketRequest>(offset);
13020            // Zero out padding regions. There's no need to apply masks
13021            // because the unmasked parts will be overwritten by fields.
13022            // Write the fields.
13023            self.0.encode(encoder, offset + 0, depth)?;
13024            Ok(())
13025        }
13026    }
13027
13028    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13029        for StreamProcessorQueueInputPacketRequest
13030    {
13031        #[inline(always)]
13032        fn new_empty() -> Self {
13033            Self { packet: fidl::new_empty!(Packet, D) }
13034        }
13035
13036        #[inline]
13037        unsafe fn decode(
13038            &mut self,
13039            decoder: &mut fidl::encoding::Decoder<'_, D>,
13040            offset: usize,
13041            _depth: fidl::encoding::Depth,
13042        ) -> fidl::Result<()> {
13043            decoder.debug_check_bounds::<Self>(offset);
13044            // Verify that padding bytes are zero.
13045            fidl::decode!(Packet, D, &mut self.packet, decoder, offset + 0, _depth)?;
13046            Ok(())
13047        }
13048    }
13049
13050    impl fidl::encoding::ValueTypeMarker for StreamProcessorRecycleOutputPacketRequest {
13051        type Borrowed<'a> = &'a Self;
13052        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13053            value
13054        }
13055    }
13056
13057    unsafe impl fidl::encoding::TypeMarker for StreamProcessorRecycleOutputPacketRequest {
13058        type Owned = Self;
13059
13060        #[inline(always)]
13061        fn inline_align(_context: fidl::encoding::Context) -> usize {
13062            8
13063        }
13064
13065        #[inline(always)]
13066        fn inline_size(_context: fidl::encoding::Context) -> usize {
13067            16
13068        }
13069    }
13070
13071    unsafe impl<D: fidl::encoding::ResourceDialect>
13072        fidl::encoding::Encode<StreamProcessorRecycleOutputPacketRequest, D>
13073        for &StreamProcessorRecycleOutputPacketRequest
13074    {
13075        #[inline]
13076        unsafe fn encode(
13077            self,
13078            encoder: &mut fidl::encoding::Encoder<'_, D>,
13079            offset: usize,
13080            _depth: fidl::encoding::Depth,
13081        ) -> fidl::Result<()> {
13082            encoder.debug_check_bounds::<StreamProcessorRecycleOutputPacketRequest>(offset);
13083            // Delegate to tuple encoding.
13084            fidl::encoding::Encode::<StreamProcessorRecycleOutputPacketRequest, D>::encode(
13085                (<PacketHeader as fidl::encoding::ValueTypeMarker>::borrow(
13086                    &self.available_output_packet,
13087                ),),
13088                encoder,
13089                offset,
13090                _depth,
13091            )
13092        }
13093    }
13094    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PacketHeader, D>>
13095        fidl::encoding::Encode<StreamProcessorRecycleOutputPacketRequest, D> for (T0,)
13096    {
13097        #[inline]
13098        unsafe fn encode(
13099            self,
13100            encoder: &mut fidl::encoding::Encoder<'_, D>,
13101            offset: usize,
13102            depth: fidl::encoding::Depth,
13103        ) -> fidl::Result<()> {
13104            encoder.debug_check_bounds::<StreamProcessorRecycleOutputPacketRequest>(offset);
13105            // Zero out padding regions. There's no need to apply masks
13106            // because the unmasked parts will be overwritten by fields.
13107            // Write the fields.
13108            self.0.encode(encoder, offset + 0, depth)?;
13109            Ok(())
13110        }
13111    }
13112
13113    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13114        for StreamProcessorRecycleOutputPacketRequest
13115    {
13116        #[inline(always)]
13117        fn new_empty() -> Self {
13118            Self { available_output_packet: fidl::new_empty!(PacketHeader, D) }
13119        }
13120
13121        #[inline]
13122        unsafe fn decode(
13123            &mut self,
13124            decoder: &mut fidl::encoding::Decoder<'_, D>,
13125            offset: usize,
13126            _depth: fidl::encoding::Depth,
13127        ) -> fidl::Result<()> {
13128            decoder.debug_check_bounds::<Self>(offset);
13129            // Verify that padding bytes are zero.
13130            fidl::decode!(
13131                PacketHeader,
13132                D,
13133                &mut self.available_output_packet,
13134                decoder,
13135                offset + 0,
13136                _depth
13137            )?;
13138            Ok(())
13139        }
13140    }
13141
13142    impl fidl::encoding::ValueTypeMarker for StreamSinkSendPacketNoReplyRequest {
13143        type Borrowed<'a> = &'a Self;
13144        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13145            value
13146        }
13147    }
13148
13149    unsafe impl fidl::encoding::TypeMarker for StreamSinkSendPacketNoReplyRequest {
13150        type Owned = Self;
13151
13152        #[inline(always)]
13153        fn inline_align(_context: fidl::encoding::Context) -> usize {
13154            8
13155        }
13156
13157        #[inline(always)]
13158        fn inline_size(_context: fidl::encoding::Context) -> usize {
13159            56
13160        }
13161    }
13162
13163    unsafe impl<D: fidl::encoding::ResourceDialect>
13164        fidl::encoding::Encode<StreamSinkSendPacketNoReplyRequest, D>
13165        for &StreamSinkSendPacketNoReplyRequest
13166    {
13167        #[inline]
13168        unsafe fn encode(
13169            self,
13170            encoder: &mut fidl::encoding::Encoder<'_, D>,
13171            offset: usize,
13172            _depth: fidl::encoding::Depth,
13173        ) -> fidl::Result<()> {
13174            encoder.debug_check_bounds::<StreamSinkSendPacketNoReplyRequest>(offset);
13175            unsafe {
13176                // Copy the object into the buffer.
13177                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13178                (buf_ptr as *mut StreamSinkSendPacketNoReplyRequest)
13179                    .write_unaligned((self as *const StreamSinkSendPacketNoReplyRequest).read());
13180                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13181                // done second because the memcpy will write garbage to these bytes.
13182                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13183                let padding_mask = 0xffffffff00000000u64;
13184                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13185                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13186                let padding_mask = 0xffffffff00000000u64;
13187                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13188            }
13189            Ok(())
13190        }
13191    }
13192    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13193        fidl::encoding::Encode<StreamSinkSendPacketNoReplyRequest, D> for (T0,)
13194    {
13195        #[inline]
13196        unsafe fn encode(
13197            self,
13198            encoder: &mut fidl::encoding::Encoder<'_, D>,
13199            offset: usize,
13200            depth: fidl::encoding::Depth,
13201        ) -> fidl::Result<()> {
13202            encoder.debug_check_bounds::<StreamSinkSendPacketNoReplyRequest>(offset);
13203            // Zero out padding regions. There's no need to apply masks
13204            // because the unmasked parts will be overwritten by fields.
13205            // Write the fields.
13206            self.0.encode(encoder, offset + 0, depth)?;
13207            Ok(())
13208        }
13209    }
13210
13211    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13212        for StreamSinkSendPacketNoReplyRequest
13213    {
13214        #[inline(always)]
13215        fn new_empty() -> Self {
13216            Self { packet: fidl::new_empty!(StreamPacket, D) }
13217        }
13218
13219        #[inline]
13220        unsafe fn decode(
13221            &mut self,
13222            decoder: &mut fidl::encoding::Decoder<'_, D>,
13223            offset: usize,
13224            _depth: fidl::encoding::Depth,
13225        ) -> fidl::Result<()> {
13226            decoder.debug_check_bounds::<Self>(offset);
13227            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13228            // Verify that padding bytes are zero.
13229            let ptr = unsafe { buf_ptr.offset(8) };
13230            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13231            let mask = 0xffffffff00000000u64;
13232            let maskedval = padval & mask;
13233            if maskedval != 0 {
13234                return Err(fidl::Error::NonZeroPadding {
13235                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13236                });
13237            }
13238            let ptr = unsafe { buf_ptr.offset(32) };
13239            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13240            let mask = 0xffffffff00000000u64;
13241            let maskedval = padval & mask;
13242            if maskedval != 0 {
13243                return Err(fidl::Error::NonZeroPadding {
13244                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13245                });
13246            }
13247            // Copy from the buffer into the object.
13248            unsafe {
13249                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13250            }
13251            Ok(())
13252        }
13253    }
13254
13255    impl fidl::encoding::ValueTypeMarker for StreamSinkSendPacketRequest {
13256        type Borrowed<'a> = &'a Self;
13257        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13258            value
13259        }
13260    }
13261
13262    unsafe impl fidl::encoding::TypeMarker for StreamSinkSendPacketRequest {
13263        type Owned = Self;
13264
13265        #[inline(always)]
13266        fn inline_align(_context: fidl::encoding::Context) -> usize {
13267            8
13268        }
13269
13270        #[inline(always)]
13271        fn inline_size(_context: fidl::encoding::Context) -> usize {
13272            56
13273        }
13274    }
13275
13276    unsafe impl<D: fidl::encoding::ResourceDialect>
13277        fidl::encoding::Encode<StreamSinkSendPacketRequest, D> for &StreamSinkSendPacketRequest
13278    {
13279        #[inline]
13280        unsafe fn encode(
13281            self,
13282            encoder: &mut fidl::encoding::Encoder<'_, D>,
13283            offset: usize,
13284            _depth: fidl::encoding::Depth,
13285        ) -> fidl::Result<()> {
13286            encoder.debug_check_bounds::<StreamSinkSendPacketRequest>(offset);
13287            unsafe {
13288                // Copy the object into the buffer.
13289                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13290                (buf_ptr as *mut StreamSinkSendPacketRequest)
13291                    .write_unaligned((self as *const StreamSinkSendPacketRequest).read());
13292                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13293                // done second because the memcpy will write garbage to these bytes.
13294                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13295                let padding_mask = 0xffffffff00000000u64;
13296                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13297                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13298                let padding_mask = 0xffffffff00000000u64;
13299                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13300            }
13301            Ok(())
13302        }
13303    }
13304    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13305        fidl::encoding::Encode<StreamSinkSendPacketRequest, D> for (T0,)
13306    {
13307        #[inline]
13308        unsafe fn encode(
13309            self,
13310            encoder: &mut fidl::encoding::Encoder<'_, D>,
13311            offset: usize,
13312            depth: fidl::encoding::Depth,
13313        ) -> fidl::Result<()> {
13314            encoder.debug_check_bounds::<StreamSinkSendPacketRequest>(offset);
13315            // Zero out padding regions. There's no need to apply masks
13316            // because the unmasked parts will be overwritten by fields.
13317            // Write the fields.
13318            self.0.encode(encoder, offset + 0, depth)?;
13319            Ok(())
13320        }
13321    }
13322
13323    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13324        for StreamSinkSendPacketRequest
13325    {
13326        #[inline(always)]
13327        fn new_empty() -> Self {
13328            Self { packet: fidl::new_empty!(StreamPacket, D) }
13329        }
13330
13331        #[inline]
13332        unsafe fn decode(
13333            &mut self,
13334            decoder: &mut fidl::encoding::Decoder<'_, D>,
13335            offset: usize,
13336            _depth: fidl::encoding::Depth,
13337        ) -> fidl::Result<()> {
13338            decoder.debug_check_bounds::<Self>(offset);
13339            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13340            // Verify that padding bytes are zero.
13341            let ptr = unsafe { buf_ptr.offset(8) };
13342            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13343            let mask = 0xffffffff00000000u64;
13344            let maskedval = padval & mask;
13345            if maskedval != 0 {
13346                return Err(fidl::Error::NonZeroPadding {
13347                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13348                });
13349            }
13350            let ptr = unsafe { buf_ptr.offset(32) };
13351            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13352            let mask = 0xffffffff00000000u64;
13353            let maskedval = padval & mask;
13354            if maskedval != 0 {
13355                return Err(fidl::Error::NonZeroPadding {
13356                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13357                });
13358            }
13359            // Copy from the buffer into the object.
13360            unsafe {
13361                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13362            }
13363            Ok(())
13364        }
13365    }
13366
13367    impl fidl::encoding::ValueTypeMarker for StreamSourceOnPacketProducedRequest {
13368        type Borrowed<'a> = &'a Self;
13369        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13370            value
13371        }
13372    }
13373
13374    unsafe impl fidl::encoding::TypeMarker for StreamSourceOnPacketProducedRequest {
13375        type Owned = Self;
13376
13377        #[inline(always)]
13378        fn inline_align(_context: fidl::encoding::Context) -> usize {
13379            8
13380        }
13381
13382        #[inline(always)]
13383        fn inline_size(_context: fidl::encoding::Context) -> usize {
13384            56
13385        }
13386    }
13387
13388    unsafe impl<D: fidl::encoding::ResourceDialect>
13389        fidl::encoding::Encode<StreamSourceOnPacketProducedRequest, D>
13390        for &StreamSourceOnPacketProducedRequest
13391    {
13392        #[inline]
13393        unsafe fn encode(
13394            self,
13395            encoder: &mut fidl::encoding::Encoder<'_, D>,
13396            offset: usize,
13397            _depth: fidl::encoding::Depth,
13398        ) -> fidl::Result<()> {
13399            encoder.debug_check_bounds::<StreamSourceOnPacketProducedRequest>(offset);
13400            unsafe {
13401                // Copy the object into the buffer.
13402                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13403                (buf_ptr as *mut StreamSourceOnPacketProducedRequest)
13404                    .write_unaligned((self as *const StreamSourceOnPacketProducedRequest).read());
13405                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13406                // done second because the memcpy will write garbage to these bytes.
13407                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13408                let padding_mask = 0xffffffff00000000u64;
13409                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13410                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13411                let padding_mask = 0xffffffff00000000u64;
13412                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13413            }
13414            Ok(())
13415        }
13416    }
13417    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13418        fidl::encoding::Encode<StreamSourceOnPacketProducedRequest, D> for (T0,)
13419    {
13420        #[inline]
13421        unsafe fn encode(
13422            self,
13423            encoder: &mut fidl::encoding::Encoder<'_, D>,
13424            offset: usize,
13425            depth: fidl::encoding::Depth,
13426        ) -> fidl::Result<()> {
13427            encoder.debug_check_bounds::<StreamSourceOnPacketProducedRequest>(offset);
13428            // Zero out padding regions. There's no need to apply masks
13429            // because the unmasked parts will be overwritten by fields.
13430            // Write the fields.
13431            self.0.encode(encoder, offset + 0, depth)?;
13432            Ok(())
13433        }
13434    }
13435
13436    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13437        for StreamSourceOnPacketProducedRequest
13438    {
13439        #[inline(always)]
13440        fn new_empty() -> Self {
13441            Self { packet: fidl::new_empty!(StreamPacket, D) }
13442        }
13443
13444        #[inline]
13445        unsafe fn decode(
13446            &mut self,
13447            decoder: &mut fidl::encoding::Decoder<'_, D>,
13448            offset: usize,
13449            _depth: fidl::encoding::Depth,
13450        ) -> fidl::Result<()> {
13451            decoder.debug_check_bounds::<Self>(offset);
13452            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13453            // Verify that padding bytes are zero.
13454            let ptr = unsafe { buf_ptr.offset(8) };
13455            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13456            let mask = 0xffffffff00000000u64;
13457            let maskedval = padval & mask;
13458            if maskedval != 0 {
13459                return Err(fidl::Error::NonZeroPadding {
13460                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13461                });
13462            }
13463            let ptr = unsafe { buf_ptr.offset(32) };
13464            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13465            let mask = 0xffffffff00000000u64;
13466            let maskedval = padval & mask;
13467            if maskedval != 0 {
13468                return Err(fidl::Error::NonZeroPadding {
13469                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13470                });
13471            }
13472            // Copy from the buffer into the object.
13473            unsafe {
13474                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13475            }
13476            Ok(())
13477        }
13478    }
13479
13480    impl fidl::encoding::ValueTypeMarker for StreamSourceReleasePacketRequest {
13481        type Borrowed<'a> = &'a Self;
13482        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13483            value
13484        }
13485    }
13486
13487    unsafe impl fidl::encoding::TypeMarker for StreamSourceReleasePacketRequest {
13488        type Owned = Self;
13489
13490        #[inline(always)]
13491        fn inline_align(_context: fidl::encoding::Context) -> usize {
13492            8
13493        }
13494
13495        #[inline(always)]
13496        fn inline_size(_context: fidl::encoding::Context) -> usize {
13497            56
13498        }
13499    }
13500
13501    unsafe impl<D: fidl::encoding::ResourceDialect>
13502        fidl::encoding::Encode<StreamSourceReleasePacketRequest, D>
13503        for &StreamSourceReleasePacketRequest
13504    {
13505        #[inline]
13506        unsafe fn encode(
13507            self,
13508            encoder: &mut fidl::encoding::Encoder<'_, D>,
13509            offset: usize,
13510            _depth: fidl::encoding::Depth,
13511        ) -> fidl::Result<()> {
13512            encoder.debug_check_bounds::<StreamSourceReleasePacketRequest>(offset);
13513            unsafe {
13514                // Copy the object into the buffer.
13515                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13516                (buf_ptr as *mut StreamSourceReleasePacketRequest)
13517                    .write_unaligned((self as *const StreamSourceReleasePacketRequest).read());
13518                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13519                // done second because the memcpy will write garbage to these bytes.
13520                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13521                let padding_mask = 0xffffffff00000000u64;
13522                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13523                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13524                let padding_mask = 0xffffffff00000000u64;
13525                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13526            }
13527            Ok(())
13528        }
13529    }
13530    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13531        fidl::encoding::Encode<StreamSourceReleasePacketRequest, D> for (T0,)
13532    {
13533        #[inline]
13534        unsafe fn encode(
13535            self,
13536            encoder: &mut fidl::encoding::Encoder<'_, D>,
13537            offset: usize,
13538            depth: fidl::encoding::Depth,
13539        ) -> fidl::Result<()> {
13540            encoder.debug_check_bounds::<StreamSourceReleasePacketRequest>(offset);
13541            // Zero out padding regions. There's no need to apply masks
13542            // because the unmasked parts will be overwritten by fields.
13543            // Write the fields.
13544            self.0.encode(encoder, offset + 0, depth)?;
13545            Ok(())
13546        }
13547    }
13548
13549    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13550        for StreamSourceReleasePacketRequest
13551    {
13552        #[inline(always)]
13553        fn new_empty() -> Self {
13554            Self { packet: fidl::new_empty!(StreamPacket, D) }
13555        }
13556
13557        #[inline]
13558        unsafe fn decode(
13559            &mut self,
13560            decoder: &mut fidl::encoding::Decoder<'_, D>,
13561            offset: usize,
13562            _depth: fidl::encoding::Depth,
13563        ) -> fidl::Result<()> {
13564            decoder.debug_check_bounds::<Self>(offset);
13565            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13566            // Verify that padding bytes are zero.
13567            let ptr = unsafe { buf_ptr.offset(8) };
13568            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13569            let mask = 0xffffffff00000000u64;
13570            let maskedval = padval & mask;
13571            if maskedval != 0 {
13572                return Err(fidl::Error::NonZeroPadding {
13573                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13574                });
13575            }
13576            let ptr = unsafe { buf_ptr.offset(32) };
13577            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13578            let mask = 0xffffffff00000000u64;
13579            let maskedval = padval & mask;
13580            if maskedval != 0 {
13581                return Err(fidl::Error::NonZeroPadding {
13582                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13583                });
13584            }
13585            // Copy from the buffer into the object.
13586            unsafe {
13587                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13588            }
13589            Ok(())
13590        }
13591    }
13592
13593    impl fidl::encoding::ValueTypeMarker for StreamType {
13594        type Borrowed<'a> = &'a Self;
13595        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13596            value
13597        }
13598    }
13599
13600    unsafe impl fidl::encoding::TypeMarker for StreamType {
13601        type Owned = Self;
13602
13603        #[inline(always)]
13604        fn inline_align(_context: fidl::encoding::Context) -> usize {
13605            8
13606        }
13607
13608        #[inline(always)]
13609        fn inline_size(_context: fidl::encoding::Context) -> usize {
13610            48
13611        }
13612    }
13613
13614    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamType, D>
13615        for &StreamType
13616    {
13617        #[inline]
13618        unsafe fn encode(
13619            self,
13620            encoder: &mut fidl::encoding::Encoder<'_, D>,
13621            offset: usize,
13622            _depth: fidl::encoding::Depth,
13623        ) -> fidl::Result<()> {
13624            encoder.debug_check_bounds::<StreamType>(offset);
13625            // Delegate to tuple encoding.
13626            fidl::encoding::Encode::<StreamType, D>::encode(
13627                (
13628                    <MediumSpecificStreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.medium_specific),
13629                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow(&self.encoding),
13630                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>> as fidl::encoding::ValueTypeMarker>::borrow(&self.encoding_parameters),
13631                ),
13632                encoder, offset, _depth
13633            )
13634        }
13635    }
13636    unsafe impl<
13637        D: fidl::encoding::ResourceDialect,
13638        T0: fidl::encoding::Encode<MediumSpecificStreamType, D>,
13639        T1: fidl::encoding::Encode<fidl::encoding::BoundedString<255>, D>,
13640        T2: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>>, D>,
13641    > fidl::encoding::Encode<StreamType, D> for (T0, T1, T2)
13642    {
13643        #[inline]
13644        unsafe fn encode(
13645            self,
13646            encoder: &mut fidl::encoding::Encoder<'_, D>,
13647            offset: usize,
13648            depth: fidl::encoding::Depth,
13649        ) -> fidl::Result<()> {
13650            encoder.debug_check_bounds::<StreamType>(offset);
13651            // Zero out padding regions. There's no need to apply masks
13652            // because the unmasked parts will be overwritten by fields.
13653            // Write the fields.
13654            self.0.encode(encoder, offset + 0, depth)?;
13655            self.1.encode(encoder, offset + 16, depth)?;
13656            self.2.encode(encoder, offset + 32, depth)?;
13657            Ok(())
13658        }
13659    }
13660
13661    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamType {
13662        #[inline(always)]
13663        fn new_empty() -> Self {
13664            Self {
13665                medium_specific: fidl::new_empty!(MediumSpecificStreamType, D),
13666                encoding: fidl::new_empty!(fidl::encoding::BoundedString<255>, D),
13667                encoding_parameters: fidl::new_empty!(
13668                    fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>>,
13669                    D
13670                ),
13671            }
13672        }
13673
13674        #[inline]
13675        unsafe fn decode(
13676            &mut self,
13677            decoder: &mut fidl::encoding::Decoder<'_, D>,
13678            offset: usize,
13679            _depth: fidl::encoding::Depth,
13680        ) -> fidl::Result<()> {
13681            decoder.debug_check_bounds::<Self>(offset);
13682            // Verify that padding bytes are zero.
13683            fidl::decode!(
13684                MediumSpecificStreamType,
13685                D,
13686                &mut self.medium_specific,
13687                decoder,
13688                offset + 0,
13689                _depth
13690            )?;
13691            fidl::decode!(
13692                fidl::encoding::BoundedString<255>,
13693                D,
13694                &mut self.encoding,
13695                decoder,
13696                offset + 16,
13697                _depth
13698            )?;
13699            fidl::decode!(
13700                fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>>,
13701                D,
13702                &mut self.encoding_parameters,
13703                decoder,
13704                offset + 32,
13705                _depth
13706            )?;
13707            Ok(())
13708        }
13709    }
13710
13711    impl fidl::encoding::ValueTypeMarker for SubpictureStreamType {
13712        type Borrowed<'a> = &'a Self;
13713        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13714            value
13715        }
13716    }
13717
13718    unsafe impl fidl::encoding::TypeMarker for SubpictureStreamType {
13719        type Owned = Self;
13720
13721        #[inline(always)]
13722        fn inline_align(_context: fidl::encoding::Context) -> usize {
13723            1
13724        }
13725
13726        #[inline(always)]
13727        fn inline_size(_context: fidl::encoding::Context) -> usize {
13728            1
13729        }
13730    }
13731
13732    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SubpictureStreamType, D>
13733        for &SubpictureStreamType
13734    {
13735        #[inline]
13736        unsafe fn encode(
13737            self,
13738            encoder: &mut fidl::encoding::Encoder<'_, D>,
13739            offset: usize,
13740            _depth: fidl::encoding::Depth,
13741        ) -> fidl::Result<()> {
13742            encoder.debug_check_bounds::<SubpictureStreamType>(offset);
13743            encoder.write_num(0u8, offset);
13744            Ok(())
13745        }
13746    }
13747
13748    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SubpictureStreamType {
13749        #[inline(always)]
13750        fn new_empty() -> Self {
13751            Self
13752        }
13753
13754        #[inline]
13755        unsafe fn decode(
13756            &mut self,
13757            decoder: &mut fidl::encoding::Decoder<'_, D>,
13758            offset: usize,
13759            _depth: fidl::encoding::Depth,
13760        ) -> fidl::Result<()> {
13761            decoder.debug_check_bounds::<Self>(offset);
13762            match decoder.read_num::<u8>(offset) {
13763                0 => Ok(()),
13764                _ => Err(fidl::Error::Invalid),
13765            }
13766        }
13767    }
13768
13769    impl fidl::encoding::ValueTypeMarker for SubsampleEntry {
13770        type Borrowed<'a> = &'a Self;
13771        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13772            value
13773        }
13774    }
13775
13776    unsafe impl fidl::encoding::TypeMarker for SubsampleEntry {
13777        type Owned = Self;
13778
13779        #[inline(always)]
13780        fn inline_align(_context: fidl::encoding::Context) -> usize {
13781            4
13782        }
13783
13784        #[inline(always)]
13785        fn inline_size(_context: fidl::encoding::Context) -> usize {
13786            8
13787        }
13788        #[inline(always)]
13789        fn encode_is_copy() -> bool {
13790            true
13791        }
13792
13793        #[inline(always)]
13794        fn decode_is_copy() -> bool {
13795            true
13796        }
13797    }
13798
13799    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SubsampleEntry, D>
13800        for &SubsampleEntry
13801    {
13802        #[inline]
13803        unsafe fn encode(
13804            self,
13805            encoder: &mut fidl::encoding::Encoder<'_, D>,
13806            offset: usize,
13807            _depth: fidl::encoding::Depth,
13808        ) -> fidl::Result<()> {
13809            encoder.debug_check_bounds::<SubsampleEntry>(offset);
13810            unsafe {
13811                // Copy the object into the buffer.
13812                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13813                (buf_ptr as *mut SubsampleEntry)
13814                    .write_unaligned((self as *const SubsampleEntry).read());
13815                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13816                // done second because the memcpy will write garbage to these bytes.
13817            }
13818            Ok(())
13819        }
13820    }
13821    unsafe impl<
13822        D: fidl::encoding::ResourceDialect,
13823        T0: fidl::encoding::Encode<u32, D>,
13824        T1: fidl::encoding::Encode<u32, D>,
13825    > fidl::encoding::Encode<SubsampleEntry, D> for (T0, T1)
13826    {
13827        #[inline]
13828        unsafe fn encode(
13829            self,
13830            encoder: &mut fidl::encoding::Encoder<'_, D>,
13831            offset: usize,
13832            depth: fidl::encoding::Depth,
13833        ) -> fidl::Result<()> {
13834            encoder.debug_check_bounds::<SubsampleEntry>(offset);
13835            // Zero out padding regions. There's no need to apply masks
13836            // because the unmasked parts will be overwritten by fields.
13837            // Write the fields.
13838            self.0.encode(encoder, offset + 0, depth)?;
13839            self.1.encode(encoder, offset + 4, depth)?;
13840            Ok(())
13841        }
13842    }
13843
13844    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SubsampleEntry {
13845        #[inline(always)]
13846        fn new_empty() -> Self {
13847            Self {
13848                clear_bytes: fidl::new_empty!(u32, D),
13849                encrypted_bytes: fidl::new_empty!(u32, D),
13850            }
13851        }
13852
13853        #[inline]
13854        unsafe fn decode(
13855            &mut self,
13856            decoder: &mut fidl::encoding::Decoder<'_, D>,
13857            offset: usize,
13858            _depth: fidl::encoding::Depth,
13859        ) -> fidl::Result<()> {
13860            decoder.debug_check_bounds::<Self>(offset);
13861            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13862            // Verify that padding bytes are zero.
13863            // Copy from the buffer into the object.
13864            unsafe {
13865                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
13866            }
13867            Ok(())
13868        }
13869    }
13870
13871    impl fidl::encoding::ValueTypeMarker for TextStreamType {
13872        type Borrowed<'a> = &'a Self;
13873        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13874            value
13875        }
13876    }
13877
13878    unsafe impl fidl::encoding::TypeMarker for TextStreamType {
13879        type Owned = Self;
13880
13881        #[inline(always)]
13882        fn inline_align(_context: fidl::encoding::Context) -> usize {
13883            1
13884        }
13885
13886        #[inline(always)]
13887        fn inline_size(_context: fidl::encoding::Context) -> usize {
13888            1
13889        }
13890    }
13891
13892    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TextStreamType, D>
13893        for &TextStreamType
13894    {
13895        #[inline]
13896        unsafe fn encode(
13897            self,
13898            encoder: &mut fidl::encoding::Encoder<'_, D>,
13899            offset: usize,
13900            _depth: fidl::encoding::Depth,
13901        ) -> fidl::Result<()> {
13902            encoder.debug_check_bounds::<TextStreamType>(offset);
13903            encoder.write_num(0u8, offset);
13904            Ok(())
13905        }
13906    }
13907
13908    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TextStreamType {
13909        #[inline(always)]
13910        fn new_empty() -> Self {
13911            Self
13912        }
13913
13914        #[inline]
13915        unsafe fn decode(
13916            &mut self,
13917            decoder: &mut fidl::encoding::Decoder<'_, D>,
13918            offset: usize,
13919            _depth: fidl::encoding::Depth,
13920        ) -> fidl::Result<()> {
13921            decoder.debug_check_bounds::<Self>(offset);
13922            match decoder.read_num::<u8>(offset) {
13923                0 => Ok(()),
13924                _ => Err(fidl::Error::Invalid),
13925            }
13926        }
13927    }
13928
13929    impl fidl::encoding::ValueTypeMarker for TimelineFunction {
13930        type Borrowed<'a> = &'a Self;
13931        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13932            value
13933        }
13934    }
13935
13936    unsafe impl fidl::encoding::TypeMarker for TimelineFunction {
13937        type Owned = Self;
13938
13939        #[inline(always)]
13940        fn inline_align(_context: fidl::encoding::Context) -> usize {
13941            8
13942        }
13943
13944        #[inline(always)]
13945        fn inline_size(_context: fidl::encoding::Context) -> usize {
13946            24
13947        }
13948        #[inline(always)]
13949        fn encode_is_copy() -> bool {
13950            true
13951        }
13952
13953        #[inline(always)]
13954        fn decode_is_copy() -> bool {
13955            true
13956        }
13957    }
13958
13959    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TimelineFunction, D>
13960        for &TimelineFunction
13961    {
13962        #[inline]
13963        unsafe fn encode(
13964            self,
13965            encoder: &mut fidl::encoding::Encoder<'_, D>,
13966            offset: usize,
13967            _depth: fidl::encoding::Depth,
13968        ) -> fidl::Result<()> {
13969            encoder.debug_check_bounds::<TimelineFunction>(offset);
13970            unsafe {
13971                // Copy the object into the buffer.
13972                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13973                (buf_ptr as *mut TimelineFunction)
13974                    .write_unaligned((self as *const TimelineFunction).read());
13975                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13976                // done second because the memcpy will write garbage to these bytes.
13977            }
13978            Ok(())
13979        }
13980    }
13981    unsafe impl<
13982        D: fidl::encoding::ResourceDialect,
13983        T0: fidl::encoding::Encode<i64, D>,
13984        T1: fidl::encoding::Encode<i64, D>,
13985        T2: fidl::encoding::Encode<u32, D>,
13986        T3: fidl::encoding::Encode<u32, D>,
13987    > fidl::encoding::Encode<TimelineFunction, D> for (T0, T1, T2, T3)
13988    {
13989        #[inline]
13990        unsafe fn encode(
13991            self,
13992            encoder: &mut fidl::encoding::Encoder<'_, D>,
13993            offset: usize,
13994            depth: fidl::encoding::Depth,
13995        ) -> fidl::Result<()> {
13996            encoder.debug_check_bounds::<TimelineFunction>(offset);
13997            // Zero out padding regions. There's no need to apply masks
13998            // because the unmasked parts will be overwritten by fields.
13999            // Write the fields.
14000            self.0.encode(encoder, offset + 0, depth)?;
14001            self.1.encode(encoder, offset + 8, depth)?;
14002            self.2.encode(encoder, offset + 16, depth)?;
14003            self.3.encode(encoder, offset + 20, depth)?;
14004            Ok(())
14005        }
14006    }
14007
14008    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TimelineFunction {
14009        #[inline(always)]
14010        fn new_empty() -> Self {
14011            Self {
14012                subject_time: fidl::new_empty!(i64, D),
14013                reference_time: fidl::new_empty!(i64, D),
14014                subject_delta: fidl::new_empty!(u32, D),
14015                reference_delta: fidl::new_empty!(u32, D),
14016            }
14017        }
14018
14019        #[inline]
14020        unsafe fn decode(
14021            &mut self,
14022            decoder: &mut fidl::encoding::Decoder<'_, D>,
14023            offset: usize,
14024            _depth: fidl::encoding::Depth,
14025        ) -> fidl::Result<()> {
14026            decoder.debug_check_bounds::<Self>(offset);
14027            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
14028            // Verify that padding bytes are zero.
14029            // Copy from the buffer into the object.
14030            unsafe {
14031                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 24);
14032            }
14033            Ok(())
14034        }
14035    }
14036
14037    impl fidl::encoding::ValueTypeMarker for UsageGainListenerOnGainMuteChangedRequest {
14038        type Borrowed<'a> = &'a Self;
14039        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14040            value
14041        }
14042    }
14043
14044    unsafe impl fidl::encoding::TypeMarker for UsageGainListenerOnGainMuteChangedRequest {
14045        type Owned = Self;
14046
14047        #[inline(always)]
14048        fn inline_align(_context: fidl::encoding::Context) -> usize {
14049            4
14050        }
14051
14052        #[inline(always)]
14053        fn inline_size(_context: fidl::encoding::Context) -> usize {
14054            8
14055        }
14056    }
14057
14058    unsafe impl<D: fidl::encoding::ResourceDialect>
14059        fidl::encoding::Encode<UsageGainListenerOnGainMuteChangedRequest, D>
14060        for &UsageGainListenerOnGainMuteChangedRequest
14061    {
14062        #[inline]
14063        unsafe fn encode(
14064            self,
14065            encoder: &mut fidl::encoding::Encoder<'_, D>,
14066            offset: usize,
14067            _depth: fidl::encoding::Depth,
14068        ) -> fidl::Result<()> {
14069            encoder.debug_check_bounds::<UsageGainListenerOnGainMuteChangedRequest>(offset);
14070            // Delegate to tuple encoding.
14071            fidl::encoding::Encode::<UsageGainListenerOnGainMuteChangedRequest, D>::encode(
14072                (
14073                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.muted),
14074                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_dbfs),
14075                ),
14076                encoder,
14077                offset,
14078                _depth,
14079            )
14080        }
14081    }
14082    unsafe impl<
14083        D: fidl::encoding::ResourceDialect,
14084        T0: fidl::encoding::Encode<bool, D>,
14085        T1: fidl::encoding::Encode<f32, D>,
14086    > fidl::encoding::Encode<UsageGainListenerOnGainMuteChangedRequest, D> for (T0, T1)
14087    {
14088        #[inline]
14089        unsafe fn encode(
14090            self,
14091            encoder: &mut fidl::encoding::Encoder<'_, D>,
14092            offset: usize,
14093            depth: fidl::encoding::Depth,
14094        ) -> fidl::Result<()> {
14095            encoder.debug_check_bounds::<UsageGainListenerOnGainMuteChangedRequest>(offset);
14096            // Zero out padding regions. There's no need to apply masks
14097            // because the unmasked parts will be overwritten by fields.
14098            unsafe {
14099                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
14100                (ptr as *mut u32).write_unaligned(0);
14101            }
14102            // Write the fields.
14103            self.0.encode(encoder, offset + 0, depth)?;
14104            self.1.encode(encoder, offset + 4, depth)?;
14105            Ok(())
14106        }
14107    }
14108
14109    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14110        for UsageGainListenerOnGainMuteChangedRequest
14111    {
14112        #[inline(always)]
14113        fn new_empty() -> Self {
14114            Self { muted: fidl::new_empty!(bool, D), gain_dbfs: fidl::new_empty!(f32, D) }
14115        }
14116
14117        #[inline]
14118        unsafe fn decode(
14119            &mut self,
14120            decoder: &mut fidl::encoding::Decoder<'_, D>,
14121            offset: usize,
14122            _depth: fidl::encoding::Depth,
14123        ) -> fidl::Result<()> {
14124            decoder.debug_check_bounds::<Self>(offset);
14125            // Verify that padding bytes are zero.
14126            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
14127            let padval = unsafe { (ptr as *const u32).read_unaligned() };
14128            let mask = 0xffffff00u32;
14129            let maskedval = padval & mask;
14130            if maskedval != 0 {
14131                return Err(fidl::Error::NonZeroPadding {
14132                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
14133                });
14134            }
14135            fidl::decode!(bool, D, &mut self.muted, decoder, offset + 0, _depth)?;
14136            fidl::decode!(f32, D, &mut self.gain_dbfs, decoder, offset + 4, _depth)?;
14137            Ok(())
14138        }
14139    }
14140
14141    impl fidl::encoding::ValueTypeMarker for UsageWatcher2OnStateChangedRequest {
14142        type Borrowed<'a> = &'a Self;
14143        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14144            value
14145        }
14146    }
14147
14148    unsafe impl fidl::encoding::TypeMarker for UsageWatcher2OnStateChangedRequest {
14149        type Owned = Self;
14150
14151        #[inline(always)]
14152        fn inline_align(_context: fidl::encoding::Context) -> usize {
14153            8
14154        }
14155
14156        #[inline(always)]
14157        fn inline_size(_context: fidl::encoding::Context) -> usize {
14158            32
14159        }
14160    }
14161
14162    unsafe impl<D: fidl::encoding::ResourceDialect>
14163        fidl::encoding::Encode<UsageWatcher2OnStateChangedRequest, D>
14164        for &UsageWatcher2OnStateChangedRequest
14165    {
14166        #[inline]
14167        unsafe fn encode(
14168            self,
14169            encoder: &mut fidl::encoding::Encoder<'_, D>,
14170            offset: usize,
14171            _depth: fidl::encoding::Depth,
14172        ) -> fidl::Result<()> {
14173            encoder.debug_check_bounds::<UsageWatcher2OnStateChangedRequest>(offset);
14174            // Delegate to tuple encoding.
14175            fidl::encoding::Encode::<UsageWatcher2OnStateChangedRequest, D>::encode(
14176                (
14177                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
14178                    <UsageState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),
14179                ),
14180                encoder,
14181                offset,
14182                _depth,
14183            )
14184        }
14185    }
14186    unsafe impl<
14187        D: fidl::encoding::ResourceDialect,
14188        T0: fidl::encoding::Encode<Usage2, D>,
14189        T1: fidl::encoding::Encode<UsageState, D>,
14190    > fidl::encoding::Encode<UsageWatcher2OnStateChangedRequest, D> for (T0, T1)
14191    {
14192        #[inline]
14193        unsafe fn encode(
14194            self,
14195            encoder: &mut fidl::encoding::Encoder<'_, D>,
14196            offset: usize,
14197            depth: fidl::encoding::Depth,
14198        ) -> fidl::Result<()> {
14199            encoder.debug_check_bounds::<UsageWatcher2OnStateChangedRequest>(offset);
14200            // Zero out padding regions. There's no need to apply masks
14201            // because the unmasked parts will be overwritten by fields.
14202            // Write the fields.
14203            self.0.encode(encoder, offset + 0, depth)?;
14204            self.1.encode(encoder, offset + 16, depth)?;
14205            Ok(())
14206        }
14207    }
14208
14209    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14210        for UsageWatcher2OnStateChangedRequest
14211    {
14212        #[inline(always)]
14213        fn new_empty() -> Self {
14214            Self { usage: fidl::new_empty!(Usage2, D), state: fidl::new_empty!(UsageState, D) }
14215        }
14216
14217        #[inline]
14218        unsafe fn decode(
14219            &mut self,
14220            decoder: &mut fidl::encoding::Decoder<'_, D>,
14221            offset: usize,
14222            _depth: fidl::encoding::Depth,
14223        ) -> fidl::Result<()> {
14224            decoder.debug_check_bounds::<Self>(offset);
14225            // Verify that padding bytes are zero.
14226            fidl::decode!(Usage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
14227            fidl::decode!(UsageState, D, &mut self.state, decoder, offset + 16, _depth)?;
14228            Ok(())
14229        }
14230    }
14231
14232    impl fidl::encoding::ValueTypeMarker for UsageWatcherOnStateChangedRequest {
14233        type Borrowed<'a> = &'a Self;
14234        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14235            value
14236        }
14237    }
14238
14239    unsafe impl fidl::encoding::TypeMarker for UsageWatcherOnStateChangedRequest {
14240        type Owned = Self;
14241
14242        #[inline(always)]
14243        fn inline_align(_context: fidl::encoding::Context) -> usize {
14244            8
14245        }
14246
14247        #[inline(always)]
14248        fn inline_size(_context: fidl::encoding::Context) -> usize {
14249            32
14250        }
14251    }
14252
14253    unsafe impl<D: fidl::encoding::ResourceDialect>
14254        fidl::encoding::Encode<UsageWatcherOnStateChangedRequest, D>
14255        for &UsageWatcherOnStateChangedRequest
14256    {
14257        #[inline]
14258        unsafe fn encode(
14259            self,
14260            encoder: &mut fidl::encoding::Encoder<'_, D>,
14261            offset: usize,
14262            _depth: fidl::encoding::Depth,
14263        ) -> fidl::Result<()> {
14264            encoder.debug_check_bounds::<UsageWatcherOnStateChangedRequest>(offset);
14265            // Delegate to tuple encoding.
14266            fidl::encoding::Encode::<UsageWatcherOnStateChangedRequest, D>::encode(
14267                (
14268                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
14269                    <UsageState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),
14270                ),
14271                encoder,
14272                offset,
14273                _depth,
14274            )
14275        }
14276    }
14277    unsafe impl<
14278        D: fidl::encoding::ResourceDialect,
14279        T0: fidl::encoding::Encode<Usage, D>,
14280        T1: fidl::encoding::Encode<UsageState, D>,
14281    > fidl::encoding::Encode<UsageWatcherOnStateChangedRequest, D> for (T0, T1)
14282    {
14283        #[inline]
14284        unsafe fn encode(
14285            self,
14286            encoder: &mut fidl::encoding::Encoder<'_, D>,
14287            offset: usize,
14288            depth: fidl::encoding::Depth,
14289        ) -> fidl::Result<()> {
14290            encoder.debug_check_bounds::<UsageWatcherOnStateChangedRequest>(offset);
14291            // Zero out padding regions. There's no need to apply masks
14292            // because the unmasked parts will be overwritten by fields.
14293            // Write the fields.
14294            self.0.encode(encoder, offset + 0, depth)?;
14295            self.1.encode(encoder, offset + 16, depth)?;
14296            Ok(())
14297        }
14298    }
14299
14300    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14301        for UsageWatcherOnStateChangedRequest
14302    {
14303        #[inline(always)]
14304        fn new_empty() -> Self {
14305            Self { usage: fidl::new_empty!(Usage, D), state: fidl::new_empty!(UsageState, D) }
14306        }
14307
14308        #[inline]
14309        unsafe fn decode(
14310            &mut self,
14311            decoder: &mut fidl::encoding::Decoder<'_, D>,
14312            offset: usize,
14313            _depth: fidl::encoding::Depth,
14314        ) -> fidl::Result<()> {
14315            decoder.debug_check_bounds::<Self>(offset);
14316            // Verify that padding bytes are zero.
14317            fidl::decode!(Usage, D, &mut self.usage, decoder, offset + 0, _depth)?;
14318            fidl::decode!(UsageState, D, &mut self.state, decoder, offset + 16, _depth)?;
14319            Ok(())
14320        }
14321    }
14322
14323    impl fidl::encoding::ValueTypeMarker for VideoStreamType {
14324        type Borrowed<'a> = &'a Self;
14325        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14326            value
14327        }
14328    }
14329
14330    unsafe impl fidl::encoding::TypeMarker for VideoStreamType {
14331        type Owned = Self;
14332
14333        #[inline(always)]
14334        fn inline_align(_context: fidl::encoding::Context) -> usize {
14335            4
14336        }
14337
14338        #[inline(always)]
14339        fn inline_size(_context: fidl::encoding::Context) -> usize {
14340            36
14341        }
14342    }
14343
14344    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VideoStreamType, D>
14345        for &VideoStreamType
14346    {
14347        #[inline]
14348        unsafe fn encode(
14349            self,
14350            encoder: &mut fidl::encoding::Encoder<'_, D>,
14351            offset: usize,
14352            _depth: fidl::encoding::Depth,
14353        ) -> fidl::Result<()> {
14354            encoder.debug_check_bounds::<VideoStreamType>(offset);
14355            // Delegate to tuple encoding.
14356            fidl::encoding::Encode::<VideoStreamType, D>::encode(
14357                (
14358                    <fidl_fuchsia_images__common::PixelFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_format),
14359                    <ColorSpace as fidl::encoding::ValueTypeMarker>::borrow(&self.color_space),
14360                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.width),
14361                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.height),
14362                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.coded_width),
14363                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.coded_height),
14364                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_aspect_ratio_width),
14365                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_aspect_ratio_height),
14366                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.stride),
14367                ),
14368                encoder, offset, _depth
14369            )
14370        }
14371    }
14372    unsafe impl<
14373        D: fidl::encoding::ResourceDialect,
14374        T0: fidl::encoding::Encode<fidl_fuchsia_images__common::PixelFormat, D>,
14375        T1: fidl::encoding::Encode<ColorSpace, D>,
14376        T2: fidl::encoding::Encode<u32, D>,
14377        T3: fidl::encoding::Encode<u32, D>,
14378        T4: fidl::encoding::Encode<u32, D>,
14379        T5: fidl::encoding::Encode<u32, D>,
14380        T6: fidl::encoding::Encode<u32, D>,
14381        T7: fidl::encoding::Encode<u32, D>,
14382        T8: fidl::encoding::Encode<u32, D>,
14383    > fidl::encoding::Encode<VideoStreamType, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
14384    {
14385        #[inline]
14386        unsafe fn encode(
14387            self,
14388            encoder: &mut fidl::encoding::Encoder<'_, D>,
14389            offset: usize,
14390            depth: fidl::encoding::Depth,
14391        ) -> fidl::Result<()> {
14392            encoder.debug_check_bounds::<VideoStreamType>(offset);
14393            // Zero out padding regions. There's no need to apply masks
14394            // because the unmasked parts will be overwritten by fields.
14395            // Write the fields.
14396            self.0.encode(encoder, offset + 0, depth)?;
14397            self.1.encode(encoder, offset + 4, depth)?;
14398            self.2.encode(encoder, offset + 8, depth)?;
14399            self.3.encode(encoder, offset + 12, depth)?;
14400            self.4.encode(encoder, offset + 16, depth)?;
14401            self.5.encode(encoder, offset + 20, depth)?;
14402            self.6.encode(encoder, offset + 24, depth)?;
14403            self.7.encode(encoder, offset + 28, depth)?;
14404            self.8.encode(encoder, offset + 32, depth)?;
14405            Ok(())
14406        }
14407    }
14408
14409    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoStreamType {
14410        #[inline(always)]
14411        fn new_empty() -> Self {
14412            Self {
14413                pixel_format: fidl::new_empty!(fidl_fuchsia_images__common::PixelFormat, D),
14414                color_space: fidl::new_empty!(ColorSpace, D),
14415                width: fidl::new_empty!(u32, D),
14416                height: fidl::new_empty!(u32, D),
14417                coded_width: fidl::new_empty!(u32, D),
14418                coded_height: fidl::new_empty!(u32, D),
14419                pixel_aspect_ratio_width: fidl::new_empty!(u32, D),
14420                pixel_aspect_ratio_height: fidl::new_empty!(u32, D),
14421                stride: fidl::new_empty!(u32, D),
14422            }
14423        }
14424
14425        #[inline]
14426        unsafe fn decode(
14427            &mut self,
14428            decoder: &mut fidl::encoding::Decoder<'_, D>,
14429            offset: usize,
14430            _depth: fidl::encoding::Depth,
14431        ) -> fidl::Result<()> {
14432            decoder.debug_check_bounds::<Self>(offset);
14433            // Verify that padding bytes are zero.
14434            fidl::decode!(
14435                fidl_fuchsia_images__common::PixelFormat,
14436                D,
14437                &mut self.pixel_format,
14438                decoder,
14439                offset + 0,
14440                _depth
14441            )?;
14442            fidl::decode!(ColorSpace, D, &mut self.color_space, decoder, offset + 4, _depth)?;
14443            fidl::decode!(u32, D, &mut self.width, decoder, offset + 8, _depth)?;
14444            fidl::decode!(u32, D, &mut self.height, decoder, offset + 12, _depth)?;
14445            fidl::decode!(u32, D, &mut self.coded_width, decoder, offset + 16, _depth)?;
14446            fidl::decode!(u32, D, &mut self.coded_height, decoder, offset + 20, _depth)?;
14447            fidl::decode!(
14448                u32,
14449                D,
14450                &mut self.pixel_aspect_ratio_width,
14451                decoder,
14452                offset + 24,
14453                _depth
14454            )?;
14455            fidl::decode!(
14456                u32,
14457                D,
14458                &mut self.pixel_aspect_ratio_height,
14459                decoder,
14460                offset + 28,
14461                _depth
14462            )?;
14463            fidl::decode!(u32, D, &mut self.stride, decoder, offset + 32, _depth)?;
14464            Ok(())
14465        }
14466    }
14467
14468    impl fidl::encoding::ValueTypeMarker for VideoUncompressedFormat {
14469        type Borrowed<'a> = &'a Self;
14470        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14471            value
14472        }
14473    }
14474
14475    unsafe impl fidl::encoding::TypeMarker for VideoUncompressedFormat {
14476        type Owned = Self;
14477
14478        #[inline(always)]
14479        fn inline_align(_context: fidl::encoding::Context) -> usize {
14480            8
14481        }
14482
14483        #[inline(always)]
14484        fn inline_size(_context: fidl::encoding::Context) -> usize {
14485            128
14486        }
14487    }
14488
14489    unsafe impl<D: fidl::encoding::ResourceDialect>
14490        fidl::encoding::Encode<VideoUncompressedFormat, D> for &VideoUncompressedFormat
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            // Delegate to tuple encoding.
14501            fidl::encoding::Encode::<VideoUncompressedFormat, D>::encode(
14502                (
14503                    <fidl_fuchsia_sysmem__common::ImageFormat2 as fidl::encoding::ValueTypeMarker>::borrow(&self.image_format),
14504                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.fourcc),
14505                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_width_pixels),
14506                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_height_pixels),
14507                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_width_pixels),
14508                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_height_pixels),
14509                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.planar),
14510                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.swizzled),
14511                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_line_stride_bytes),
14512                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_line_stride_bytes),
14513                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_start_offset),
14514                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_start_offset),
14515                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.tertiary_start_offset),
14516                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_pixel_stride),
14517                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_pixel_stride),
14518                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_display_width_pixels),
14519                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_display_height_pixels),
14520                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.has_pixel_aspect_ratio),
14521                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_aspect_ratio_width),
14522                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_aspect_ratio_height),
14523                ),
14524                encoder, offset, _depth
14525            )
14526        }
14527    }
14528    unsafe impl<
14529        D: fidl::encoding::ResourceDialect,
14530        T0: fidl::encoding::Encode<fidl_fuchsia_sysmem__common::ImageFormat2, D>,
14531        T1: fidl::encoding::Encode<u32, D>,
14532        T2: fidl::encoding::Encode<u32, D>,
14533        T3: fidl::encoding::Encode<u32, D>,
14534        T4: fidl::encoding::Encode<u32, D>,
14535        T5: fidl::encoding::Encode<u32, D>,
14536        T6: fidl::encoding::Encode<bool, D>,
14537        T7: fidl::encoding::Encode<bool, D>,
14538        T8: fidl::encoding::Encode<u32, D>,
14539        T9: fidl::encoding::Encode<u32, D>,
14540        T10: fidl::encoding::Encode<u32, D>,
14541        T11: fidl::encoding::Encode<u32, D>,
14542        T12: fidl::encoding::Encode<u32, D>,
14543        T13: fidl::encoding::Encode<u32, D>,
14544        T14: fidl::encoding::Encode<u32, D>,
14545        T15: fidl::encoding::Encode<u32, D>,
14546        T16: fidl::encoding::Encode<u32, D>,
14547        T17: fidl::encoding::Encode<bool, D>,
14548        T18: fidl::encoding::Encode<u32, D>,
14549        T19: fidl::encoding::Encode<u32, D>,
14550    > fidl::encoding::Encode<VideoUncompressedFormat, D>
14551        for (
14552            T0,
14553            T1,
14554            T2,
14555            T3,
14556            T4,
14557            T5,
14558            T6,
14559            T7,
14560            T8,
14561            T9,
14562            T10,
14563            T11,
14564            T12,
14565            T13,
14566            T14,
14567            T15,
14568            T16,
14569            T17,
14570            T18,
14571            T19,
14572        )
14573    {
14574        #[inline]
14575        unsafe fn encode(
14576            self,
14577            encoder: &mut fidl::encoding::Encoder<'_, D>,
14578            offset: usize,
14579            depth: fidl::encoding::Depth,
14580        ) -> fidl::Result<()> {
14581            encoder.debug_check_bounds::<VideoUncompressedFormat>(offset);
14582            // Zero out padding regions. There's no need to apply masks
14583            // because the unmasked parts will be overwritten by fields.
14584            unsafe {
14585                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(72);
14586                (ptr as *mut u64).write_unaligned(0);
14587            }
14588            unsafe {
14589                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(112);
14590                (ptr as *mut u64).write_unaligned(0);
14591            }
14592            // Write the fields.
14593            self.0.encode(encoder, offset + 0, depth)?;
14594            self.1.encode(encoder, offset + 56, depth)?;
14595            self.2.encode(encoder, offset + 60, depth)?;
14596            self.3.encode(encoder, offset + 64, depth)?;
14597            self.4.encode(encoder, offset + 68, depth)?;
14598            self.5.encode(encoder, offset + 72, depth)?;
14599            self.6.encode(encoder, offset + 76, depth)?;
14600            self.7.encode(encoder, offset + 77, depth)?;
14601            self.8.encode(encoder, offset + 80, depth)?;
14602            self.9.encode(encoder, offset + 84, depth)?;
14603            self.10.encode(encoder, offset + 88, depth)?;
14604            self.11.encode(encoder, offset + 92, depth)?;
14605            self.12.encode(encoder, offset + 96, depth)?;
14606            self.13.encode(encoder, offset + 100, depth)?;
14607            self.14.encode(encoder, offset + 104, depth)?;
14608            self.15.encode(encoder, offset + 108, depth)?;
14609            self.16.encode(encoder, offset + 112, depth)?;
14610            self.17.encode(encoder, offset + 116, depth)?;
14611            self.18.encode(encoder, offset + 120, depth)?;
14612            self.19.encode(encoder, offset + 124, depth)?;
14613            Ok(())
14614        }
14615    }
14616
14617    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14618        for VideoUncompressedFormat
14619    {
14620        #[inline(always)]
14621        fn new_empty() -> Self {
14622            Self {
14623                image_format: fidl::new_empty!(fidl_fuchsia_sysmem__common::ImageFormat2, D),
14624                fourcc: fidl::new_empty!(u32, D),
14625                primary_width_pixels: fidl::new_empty!(u32, D),
14626                primary_height_pixels: fidl::new_empty!(u32, D),
14627                secondary_width_pixels: fidl::new_empty!(u32, D),
14628                secondary_height_pixels: fidl::new_empty!(u32, D),
14629                planar: fidl::new_empty!(bool, D),
14630                swizzled: fidl::new_empty!(bool, D),
14631                primary_line_stride_bytes: fidl::new_empty!(u32, D),
14632                secondary_line_stride_bytes: fidl::new_empty!(u32, D),
14633                primary_start_offset: fidl::new_empty!(u32, D),
14634                secondary_start_offset: fidl::new_empty!(u32, D),
14635                tertiary_start_offset: fidl::new_empty!(u32, D),
14636                primary_pixel_stride: fidl::new_empty!(u32, D),
14637                secondary_pixel_stride: fidl::new_empty!(u32, D),
14638                primary_display_width_pixels: fidl::new_empty!(u32, D),
14639                primary_display_height_pixels: fidl::new_empty!(u32, D),
14640                has_pixel_aspect_ratio: fidl::new_empty!(bool, D),
14641                pixel_aspect_ratio_width: fidl::new_empty!(u32, D),
14642                pixel_aspect_ratio_height: fidl::new_empty!(u32, D),
14643            }
14644        }
14645
14646        #[inline]
14647        unsafe fn decode(
14648            &mut self,
14649            decoder: &mut fidl::encoding::Decoder<'_, D>,
14650            offset: usize,
14651            _depth: fidl::encoding::Depth,
14652        ) -> fidl::Result<()> {
14653            decoder.debug_check_bounds::<Self>(offset);
14654            // Verify that padding bytes are zero.
14655            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(72) };
14656            let padval = unsafe { (ptr as *const u64).read_unaligned() };
14657            let mask = 0xffff000000000000u64;
14658            let maskedval = padval & mask;
14659            if maskedval != 0 {
14660                return Err(fidl::Error::NonZeroPadding {
14661                    padding_start: offset + 72 + ((mask as u64).trailing_zeros() / 8) as usize,
14662                });
14663            }
14664            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(112) };
14665            let padval = unsafe { (ptr as *const u64).read_unaligned() };
14666            let mask = 0xffffff0000000000u64;
14667            let maskedval = padval & mask;
14668            if maskedval != 0 {
14669                return Err(fidl::Error::NonZeroPadding {
14670                    padding_start: offset + 112 + ((mask as u64).trailing_zeros() / 8) as usize,
14671                });
14672            }
14673            fidl::decode!(
14674                fidl_fuchsia_sysmem__common::ImageFormat2,
14675                D,
14676                &mut self.image_format,
14677                decoder,
14678                offset + 0,
14679                _depth
14680            )?;
14681            fidl::decode!(u32, D, &mut self.fourcc, decoder, offset + 56, _depth)?;
14682            fidl::decode!(u32, D, &mut self.primary_width_pixels, decoder, offset + 60, _depth)?;
14683            fidl::decode!(u32, D, &mut self.primary_height_pixels, decoder, offset + 64, _depth)?;
14684            fidl::decode!(u32, D, &mut self.secondary_width_pixels, decoder, offset + 68, _depth)?;
14685            fidl::decode!(u32, D, &mut self.secondary_height_pixels, decoder, offset + 72, _depth)?;
14686            fidl::decode!(bool, D, &mut self.planar, decoder, offset + 76, _depth)?;
14687            fidl::decode!(bool, D, &mut self.swizzled, decoder, offset + 77, _depth)?;
14688            fidl::decode!(
14689                u32,
14690                D,
14691                &mut self.primary_line_stride_bytes,
14692                decoder,
14693                offset + 80,
14694                _depth
14695            )?;
14696            fidl::decode!(
14697                u32,
14698                D,
14699                &mut self.secondary_line_stride_bytes,
14700                decoder,
14701                offset + 84,
14702                _depth
14703            )?;
14704            fidl::decode!(u32, D, &mut self.primary_start_offset, decoder, offset + 88, _depth)?;
14705            fidl::decode!(u32, D, &mut self.secondary_start_offset, decoder, offset + 92, _depth)?;
14706            fidl::decode!(u32, D, &mut self.tertiary_start_offset, decoder, offset + 96, _depth)?;
14707            fidl::decode!(u32, D, &mut self.primary_pixel_stride, decoder, offset + 100, _depth)?;
14708            fidl::decode!(u32, D, &mut self.secondary_pixel_stride, decoder, offset + 104, _depth)?;
14709            fidl::decode!(
14710                u32,
14711                D,
14712                &mut self.primary_display_width_pixels,
14713                decoder,
14714                offset + 108,
14715                _depth
14716            )?;
14717            fidl::decode!(
14718                u32,
14719                D,
14720                &mut self.primary_display_height_pixels,
14721                decoder,
14722                offset + 112,
14723                _depth
14724            )?;
14725            fidl::decode!(
14726                bool,
14727                D,
14728                &mut self.has_pixel_aspect_ratio,
14729                decoder,
14730                offset + 116,
14731                _depth
14732            )?;
14733            fidl::decode!(
14734                u32,
14735                D,
14736                &mut self.pixel_aspect_ratio_width,
14737                decoder,
14738                offset + 120,
14739                _depth
14740            )?;
14741            fidl::decode!(
14742                u32,
14743                D,
14744                &mut self.pixel_aspect_ratio_height,
14745                decoder,
14746                offset + 124,
14747                _depth
14748            )?;
14749            Ok(())
14750        }
14751    }
14752
14753    impl fidl::encoding::ValueTypeMarker for Void {
14754        type Borrowed<'a> = &'a Self;
14755        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14756            value
14757        }
14758    }
14759
14760    unsafe impl fidl::encoding::TypeMarker for Void {
14761        type Owned = Self;
14762
14763        #[inline(always)]
14764        fn inline_align(_context: fidl::encoding::Context) -> usize {
14765            1
14766        }
14767
14768        #[inline(always)]
14769        fn inline_size(_context: fidl::encoding::Context) -> usize {
14770            1
14771        }
14772    }
14773
14774    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Void, D> for &Void {
14775        #[inline]
14776        unsafe fn encode(
14777            self,
14778            encoder: &mut fidl::encoding::Encoder<'_, D>,
14779            offset: usize,
14780            _depth: fidl::encoding::Depth,
14781        ) -> fidl::Result<()> {
14782            encoder.debug_check_bounds::<Void>(offset);
14783            encoder.write_num(0u8, offset);
14784            Ok(())
14785        }
14786    }
14787
14788    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Void {
14789        #[inline(always)]
14790        fn new_empty() -> Self {
14791            Self
14792        }
14793
14794        #[inline]
14795        unsafe fn decode(
14796            &mut self,
14797            decoder: &mut fidl::encoding::Decoder<'_, D>,
14798            offset: usize,
14799            _depth: fidl::encoding::Depth,
14800        ) -> fidl::Result<()> {
14801            decoder.debug_check_bounds::<Self>(offset);
14802            match decoder.read_num::<u8>(offset) {
14803                0 => Ok(()),
14804                _ => Err(fidl::Error::Invalid),
14805            }
14806        }
14807    }
14808
14809    impl AudioCompressedFormatCvsd {
14810        #[inline(always)]
14811        fn max_ordinal_present(&self) -> u64 {
14812            0
14813        }
14814    }
14815
14816    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatCvsd {
14817        type Borrowed<'a> = &'a Self;
14818        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14819            value
14820        }
14821    }
14822
14823    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatCvsd {
14824        type Owned = Self;
14825
14826        #[inline(always)]
14827        fn inline_align(_context: fidl::encoding::Context) -> usize {
14828            8
14829        }
14830
14831        #[inline(always)]
14832        fn inline_size(_context: fidl::encoding::Context) -> usize {
14833            16
14834        }
14835    }
14836
14837    unsafe impl<D: fidl::encoding::ResourceDialect>
14838        fidl::encoding::Encode<AudioCompressedFormatCvsd, D> for &AudioCompressedFormatCvsd
14839    {
14840        unsafe fn encode(
14841            self,
14842            encoder: &mut fidl::encoding::Encoder<'_, D>,
14843            offset: usize,
14844            mut depth: fidl::encoding::Depth,
14845        ) -> fidl::Result<()> {
14846            encoder.debug_check_bounds::<AudioCompressedFormatCvsd>(offset);
14847            // Vector header
14848            let max_ordinal: u64 = self.max_ordinal_present();
14849            encoder.write_num(max_ordinal, offset);
14850            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14851            // Calling encoder.out_of_line_offset(0) is not allowed.
14852            if max_ordinal == 0 {
14853                return Ok(());
14854            }
14855            depth.increment()?;
14856            let envelope_size = 8;
14857            let bytes_len = max_ordinal as usize * envelope_size;
14858            #[allow(unused_variables)]
14859            let offset = encoder.out_of_line_offset(bytes_len);
14860            let mut _prev_end_offset: usize = 0;
14861
14862            Ok(())
14863        }
14864    }
14865
14866    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14867        for AudioCompressedFormatCvsd
14868    {
14869        #[inline(always)]
14870        fn new_empty() -> Self {
14871            Self::default()
14872        }
14873
14874        unsafe fn decode(
14875            &mut self,
14876            decoder: &mut fidl::encoding::Decoder<'_, D>,
14877            offset: usize,
14878            mut depth: fidl::encoding::Depth,
14879        ) -> fidl::Result<()> {
14880            decoder.debug_check_bounds::<Self>(offset);
14881            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14882                None => return Err(fidl::Error::NotNullable),
14883                Some(len) => len,
14884            };
14885            // Calling decoder.out_of_line_offset(0) is not allowed.
14886            if len == 0 {
14887                return Ok(());
14888            };
14889            depth.increment()?;
14890            let envelope_size = 8;
14891            let bytes_len = len * envelope_size;
14892            let offset = decoder.out_of_line_offset(bytes_len)?;
14893            // Decode the envelope for each type.
14894            let mut _next_ordinal_to_read = 0;
14895            let mut next_offset = offset;
14896            let end_offset = offset + bytes_len;
14897
14898            // Decode the remaining unknown envelopes.
14899            while next_offset < end_offset {
14900                _next_ordinal_to_read += 1;
14901                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14902                next_offset += envelope_size;
14903            }
14904
14905            Ok(())
14906        }
14907    }
14908
14909    impl AudioCompressedFormatLc3 {
14910        #[inline(always)]
14911        fn max_ordinal_present(&self) -> u64 {
14912            0
14913        }
14914    }
14915
14916    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatLc3 {
14917        type Borrowed<'a> = &'a Self;
14918        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14919            value
14920        }
14921    }
14922
14923    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatLc3 {
14924        type Owned = Self;
14925
14926        #[inline(always)]
14927        fn inline_align(_context: fidl::encoding::Context) -> usize {
14928            8
14929        }
14930
14931        #[inline(always)]
14932        fn inline_size(_context: fidl::encoding::Context) -> usize {
14933            16
14934        }
14935    }
14936
14937    unsafe impl<D: fidl::encoding::ResourceDialect>
14938        fidl::encoding::Encode<AudioCompressedFormatLc3, D> for &AudioCompressedFormatLc3
14939    {
14940        unsafe fn encode(
14941            self,
14942            encoder: &mut fidl::encoding::Encoder<'_, D>,
14943            offset: usize,
14944            mut depth: fidl::encoding::Depth,
14945        ) -> fidl::Result<()> {
14946            encoder.debug_check_bounds::<AudioCompressedFormatLc3>(offset);
14947            // Vector header
14948            let max_ordinal: u64 = self.max_ordinal_present();
14949            encoder.write_num(max_ordinal, offset);
14950            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14951            // Calling encoder.out_of_line_offset(0) is not allowed.
14952            if max_ordinal == 0 {
14953                return Ok(());
14954            }
14955            depth.increment()?;
14956            let envelope_size = 8;
14957            let bytes_len = max_ordinal as usize * envelope_size;
14958            #[allow(unused_variables)]
14959            let offset = encoder.out_of_line_offset(bytes_len);
14960            let mut _prev_end_offset: usize = 0;
14961
14962            Ok(())
14963        }
14964    }
14965
14966    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14967        for AudioCompressedFormatLc3
14968    {
14969        #[inline(always)]
14970        fn new_empty() -> Self {
14971            Self::default()
14972        }
14973
14974        unsafe fn decode(
14975            &mut self,
14976            decoder: &mut fidl::encoding::Decoder<'_, D>,
14977            offset: usize,
14978            mut depth: fidl::encoding::Depth,
14979        ) -> fidl::Result<()> {
14980            decoder.debug_check_bounds::<Self>(offset);
14981            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14982                None => return Err(fidl::Error::NotNullable),
14983                Some(len) => len,
14984            };
14985            // Calling decoder.out_of_line_offset(0) is not allowed.
14986            if len == 0 {
14987                return Ok(());
14988            };
14989            depth.increment()?;
14990            let envelope_size = 8;
14991            let bytes_len = len * envelope_size;
14992            let offset = decoder.out_of_line_offset(bytes_len)?;
14993            // Decode the envelope for each type.
14994            let mut _next_ordinal_to_read = 0;
14995            let mut next_offset = offset;
14996            let end_offset = offset + bytes_len;
14997
14998            // Decode the remaining unknown envelopes.
14999            while next_offset < end_offset {
15000                _next_ordinal_to_read += 1;
15001                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15002                next_offset += envelope_size;
15003            }
15004
15005            Ok(())
15006        }
15007    }
15008
15009    impl AudioConsumerStatus {
15010        #[inline(always)]
15011        fn max_ordinal_present(&self) -> u64 {
15012            if let Some(_) = self.max_lead_time {
15013                return 4;
15014            }
15015            if let Some(_) = self.min_lead_time {
15016                return 3;
15017            }
15018            if let Some(_) = self.presentation_timeline {
15019                return 2;
15020            }
15021            if let Some(_) = self.error {
15022                return 1;
15023            }
15024            0
15025        }
15026    }
15027
15028    impl fidl::encoding::ValueTypeMarker for AudioConsumerStatus {
15029        type Borrowed<'a> = &'a Self;
15030        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15031            value
15032        }
15033    }
15034
15035    unsafe impl fidl::encoding::TypeMarker for AudioConsumerStatus {
15036        type Owned = Self;
15037
15038        #[inline(always)]
15039        fn inline_align(_context: fidl::encoding::Context) -> usize {
15040            8
15041        }
15042
15043        #[inline(always)]
15044        fn inline_size(_context: fidl::encoding::Context) -> usize {
15045            16
15046        }
15047    }
15048
15049    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioConsumerStatus, D>
15050        for &AudioConsumerStatus
15051    {
15052        unsafe fn encode(
15053            self,
15054            encoder: &mut fidl::encoding::Encoder<'_, D>,
15055            offset: usize,
15056            mut depth: fidl::encoding::Depth,
15057        ) -> fidl::Result<()> {
15058            encoder.debug_check_bounds::<AudioConsumerStatus>(offset);
15059            // Vector header
15060            let max_ordinal: u64 = self.max_ordinal_present();
15061            encoder.write_num(max_ordinal, offset);
15062            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15063            // Calling encoder.out_of_line_offset(0) is not allowed.
15064            if max_ordinal == 0 {
15065                return Ok(());
15066            }
15067            depth.increment()?;
15068            let envelope_size = 8;
15069            let bytes_len = max_ordinal as usize * envelope_size;
15070            #[allow(unused_variables)]
15071            let offset = encoder.out_of_line_offset(bytes_len);
15072            let mut _prev_end_offset: usize = 0;
15073            if 1 > max_ordinal {
15074                return Ok(());
15075            }
15076
15077            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15078            // are envelope_size bytes.
15079            let cur_offset: usize = (1 - 1) * envelope_size;
15080
15081            // Zero reserved fields.
15082            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15083
15084            // Safety:
15085            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15086            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15087            //   envelope_size bytes, there is always sufficient room.
15088            fidl::encoding::encode_in_envelope_optional::<AudioConsumerError, D>(
15089                self.error
15090                    .as_ref()
15091                    .map(<AudioConsumerError as fidl::encoding::ValueTypeMarker>::borrow),
15092                encoder,
15093                offset + cur_offset,
15094                depth,
15095            )?;
15096
15097            _prev_end_offset = cur_offset + envelope_size;
15098            if 2 > max_ordinal {
15099                return Ok(());
15100            }
15101
15102            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15103            // are envelope_size bytes.
15104            let cur_offset: usize = (2 - 1) * envelope_size;
15105
15106            // Zero reserved fields.
15107            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15108
15109            // Safety:
15110            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15111            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15112            //   envelope_size bytes, there is always sufficient room.
15113            fidl::encoding::encode_in_envelope_optional::<TimelineFunction, D>(
15114                self.presentation_timeline
15115                    .as_ref()
15116                    .map(<TimelineFunction as fidl::encoding::ValueTypeMarker>::borrow),
15117                encoder,
15118                offset + cur_offset,
15119                depth,
15120            )?;
15121
15122            _prev_end_offset = cur_offset + envelope_size;
15123            if 3 > max_ordinal {
15124                return Ok(());
15125            }
15126
15127            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15128            // are envelope_size bytes.
15129            let cur_offset: usize = (3 - 1) * envelope_size;
15130
15131            // Zero reserved fields.
15132            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15133
15134            // Safety:
15135            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15136            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15137            //   envelope_size bytes, there is always sufficient room.
15138            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15139                self.min_lead_time.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15140                encoder,
15141                offset + cur_offset,
15142                depth,
15143            )?;
15144
15145            _prev_end_offset = cur_offset + envelope_size;
15146            if 4 > max_ordinal {
15147                return Ok(());
15148            }
15149
15150            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15151            // are envelope_size bytes.
15152            let cur_offset: usize = (4 - 1) * envelope_size;
15153
15154            // Zero reserved fields.
15155            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15156
15157            // Safety:
15158            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15159            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15160            //   envelope_size bytes, there is always sufficient room.
15161            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15162                self.max_lead_time.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15163                encoder,
15164                offset + cur_offset,
15165                depth,
15166            )?;
15167
15168            _prev_end_offset = cur_offset + envelope_size;
15169
15170            Ok(())
15171        }
15172    }
15173
15174    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioConsumerStatus {
15175        #[inline(always)]
15176        fn new_empty() -> Self {
15177            Self::default()
15178        }
15179
15180        unsafe fn decode(
15181            &mut self,
15182            decoder: &mut fidl::encoding::Decoder<'_, D>,
15183            offset: usize,
15184            mut depth: fidl::encoding::Depth,
15185        ) -> fidl::Result<()> {
15186            decoder.debug_check_bounds::<Self>(offset);
15187            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15188                None => return Err(fidl::Error::NotNullable),
15189                Some(len) => len,
15190            };
15191            // Calling decoder.out_of_line_offset(0) is not allowed.
15192            if len == 0 {
15193                return Ok(());
15194            };
15195            depth.increment()?;
15196            let envelope_size = 8;
15197            let bytes_len = len * envelope_size;
15198            let offset = decoder.out_of_line_offset(bytes_len)?;
15199            // Decode the envelope for each type.
15200            let mut _next_ordinal_to_read = 0;
15201            let mut next_offset = offset;
15202            let end_offset = offset + bytes_len;
15203            _next_ordinal_to_read += 1;
15204            if next_offset >= end_offset {
15205                return Ok(());
15206            }
15207
15208            // Decode unknown envelopes for gaps in ordinals.
15209            while _next_ordinal_to_read < 1 {
15210                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15211                _next_ordinal_to_read += 1;
15212                next_offset += envelope_size;
15213            }
15214
15215            let next_out_of_line = decoder.next_out_of_line();
15216            let handles_before = decoder.remaining_handles();
15217            if let Some((inlined, num_bytes, num_handles)) =
15218                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15219            {
15220                let member_inline_size =
15221                    <AudioConsumerError as fidl::encoding::TypeMarker>::inline_size(
15222                        decoder.context,
15223                    );
15224                if inlined != (member_inline_size <= 4) {
15225                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15226                }
15227                let inner_offset;
15228                let mut inner_depth = depth.clone();
15229                if inlined {
15230                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15231                    inner_offset = next_offset;
15232                } else {
15233                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15234                    inner_depth.increment()?;
15235                }
15236                let val_ref =
15237                    self.error.get_or_insert_with(|| fidl::new_empty!(AudioConsumerError, D));
15238                fidl::decode!(AudioConsumerError, D, val_ref, decoder, inner_offset, inner_depth)?;
15239                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15240                {
15241                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15242                }
15243                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15244                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15245                }
15246            }
15247
15248            next_offset += envelope_size;
15249            _next_ordinal_to_read += 1;
15250            if next_offset >= end_offset {
15251                return Ok(());
15252            }
15253
15254            // Decode unknown envelopes for gaps in ordinals.
15255            while _next_ordinal_to_read < 2 {
15256                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15257                _next_ordinal_to_read += 1;
15258                next_offset += envelope_size;
15259            }
15260
15261            let next_out_of_line = decoder.next_out_of_line();
15262            let handles_before = decoder.remaining_handles();
15263            if let Some((inlined, num_bytes, num_handles)) =
15264                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15265            {
15266                let member_inline_size =
15267                    <TimelineFunction as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15268                if inlined != (member_inline_size <= 4) {
15269                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15270                }
15271                let inner_offset;
15272                let mut inner_depth = depth.clone();
15273                if inlined {
15274                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15275                    inner_offset = next_offset;
15276                } else {
15277                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15278                    inner_depth.increment()?;
15279                }
15280                let val_ref = self
15281                    .presentation_timeline
15282                    .get_or_insert_with(|| fidl::new_empty!(TimelineFunction, D));
15283                fidl::decode!(TimelineFunction, D, val_ref, decoder, inner_offset, inner_depth)?;
15284                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15285                {
15286                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15287                }
15288                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15289                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15290                }
15291            }
15292
15293            next_offset += envelope_size;
15294            _next_ordinal_to_read += 1;
15295            if next_offset >= end_offset {
15296                return Ok(());
15297            }
15298
15299            // Decode unknown envelopes for gaps in ordinals.
15300            while _next_ordinal_to_read < 3 {
15301                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15302                _next_ordinal_to_read += 1;
15303                next_offset += envelope_size;
15304            }
15305
15306            let next_out_of_line = decoder.next_out_of_line();
15307            let handles_before = decoder.remaining_handles();
15308            if let Some((inlined, num_bytes, num_handles)) =
15309                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15310            {
15311                let member_inline_size =
15312                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15313                if inlined != (member_inline_size <= 4) {
15314                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15315                }
15316                let inner_offset;
15317                let mut inner_depth = depth.clone();
15318                if inlined {
15319                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15320                    inner_offset = next_offset;
15321                } else {
15322                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15323                    inner_depth.increment()?;
15324                }
15325                let val_ref = self.min_lead_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
15326                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15327                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15328                {
15329                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15330                }
15331                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15332                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15333                }
15334            }
15335
15336            next_offset += envelope_size;
15337            _next_ordinal_to_read += 1;
15338            if next_offset >= end_offset {
15339                return Ok(());
15340            }
15341
15342            // Decode unknown envelopes for gaps in ordinals.
15343            while _next_ordinal_to_read < 4 {
15344                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15345                _next_ordinal_to_read += 1;
15346                next_offset += envelope_size;
15347            }
15348
15349            let next_out_of_line = decoder.next_out_of_line();
15350            let handles_before = decoder.remaining_handles();
15351            if let Some((inlined, num_bytes, num_handles)) =
15352                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15353            {
15354                let member_inline_size =
15355                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15356                if inlined != (member_inline_size <= 4) {
15357                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15358                }
15359                let inner_offset;
15360                let mut inner_depth = depth.clone();
15361                if inlined {
15362                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15363                    inner_offset = next_offset;
15364                } else {
15365                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15366                    inner_depth.increment()?;
15367                }
15368                let val_ref = self.max_lead_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
15369                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15370                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15371                {
15372                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15373                }
15374                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15375                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15376                }
15377            }
15378
15379            next_offset += envelope_size;
15380
15381            // Decode the remaining unknown envelopes.
15382            while next_offset < end_offset {
15383                _next_ordinal_to_read += 1;
15384                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15385                next_offset += envelope_size;
15386            }
15387
15388            Ok(())
15389        }
15390    }
15391
15392    impl CvsdEncoderSettings {
15393        #[inline(always)]
15394        fn max_ordinal_present(&self) -> u64 {
15395            0
15396        }
15397    }
15398
15399    impl fidl::encoding::ValueTypeMarker for CvsdEncoderSettings {
15400        type Borrowed<'a> = &'a Self;
15401        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15402            value
15403        }
15404    }
15405
15406    unsafe impl fidl::encoding::TypeMarker for CvsdEncoderSettings {
15407        type Owned = Self;
15408
15409        #[inline(always)]
15410        fn inline_align(_context: fidl::encoding::Context) -> usize {
15411            8
15412        }
15413
15414        #[inline(always)]
15415        fn inline_size(_context: fidl::encoding::Context) -> usize {
15416            16
15417        }
15418    }
15419
15420    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CvsdEncoderSettings, D>
15421        for &CvsdEncoderSettings
15422    {
15423        unsafe fn encode(
15424            self,
15425            encoder: &mut fidl::encoding::Encoder<'_, D>,
15426            offset: usize,
15427            mut depth: fidl::encoding::Depth,
15428        ) -> fidl::Result<()> {
15429            encoder.debug_check_bounds::<CvsdEncoderSettings>(offset);
15430            // Vector header
15431            let max_ordinal: u64 = self.max_ordinal_present();
15432            encoder.write_num(max_ordinal, offset);
15433            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15434            // Calling encoder.out_of_line_offset(0) is not allowed.
15435            if max_ordinal == 0 {
15436                return Ok(());
15437            }
15438            depth.increment()?;
15439            let envelope_size = 8;
15440            let bytes_len = max_ordinal as usize * envelope_size;
15441            #[allow(unused_variables)]
15442            let offset = encoder.out_of_line_offset(bytes_len);
15443            let mut _prev_end_offset: usize = 0;
15444
15445            Ok(())
15446        }
15447    }
15448
15449    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CvsdEncoderSettings {
15450        #[inline(always)]
15451        fn new_empty() -> Self {
15452            Self::default()
15453        }
15454
15455        unsafe fn decode(
15456            &mut self,
15457            decoder: &mut fidl::encoding::Decoder<'_, D>,
15458            offset: usize,
15459            mut depth: fidl::encoding::Depth,
15460        ) -> fidl::Result<()> {
15461            decoder.debug_check_bounds::<Self>(offset);
15462            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15463                None => return Err(fidl::Error::NotNullable),
15464                Some(len) => len,
15465            };
15466            // Calling decoder.out_of_line_offset(0) is not allowed.
15467            if len == 0 {
15468                return Ok(());
15469            };
15470            depth.increment()?;
15471            let envelope_size = 8;
15472            let bytes_len = len * envelope_size;
15473            let offset = decoder.out_of_line_offset(bytes_len)?;
15474            // Decode the envelope for each type.
15475            let mut _next_ordinal_to_read = 0;
15476            let mut next_offset = offset;
15477            let end_offset = offset + bytes_len;
15478
15479            // Decode the remaining unknown envelopes.
15480            while next_offset < end_offset {
15481                _next_ordinal_to_read += 1;
15482                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15483                next_offset += envelope_size;
15484            }
15485
15486            Ok(())
15487        }
15488    }
15489
15490    impl DecryptedFormat {
15491        #[inline(always)]
15492        fn max_ordinal_present(&self) -> u64 {
15493            if let Some(_) = self.ignore_this_field {
15494                return 1;
15495            }
15496            0
15497        }
15498    }
15499
15500    impl fidl::encoding::ValueTypeMarker for DecryptedFormat {
15501        type Borrowed<'a> = &'a Self;
15502        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15503            value
15504        }
15505    }
15506
15507    unsafe impl fidl::encoding::TypeMarker for DecryptedFormat {
15508        type Owned = Self;
15509
15510        #[inline(always)]
15511        fn inline_align(_context: fidl::encoding::Context) -> usize {
15512            8
15513        }
15514
15515        #[inline(always)]
15516        fn inline_size(_context: fidl::encoding::Context) -> usize {
15517            16
15518        }
15519    }
15520
15521    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DecryptedFormat, D>
15522        for &DecryptedFormat
15523    {
15524        unsafe fn encode(
15525            self,
15526            encoder: &mut fidl::encoding::Encoder<'_, D>,
15527            offset: usize,
15528            mut depth: fidl::encoding::Depth,
15529        ) -> fidl::Result<()> {
15530            encoder.debug_check_bounds::<DecryptedFormat>(offset);
15531            // Vector header
15532            let max_ordinal: u64 = self.max_ordinal_present();
15533            encoder.write_num(max_ordinal, offset);
15534            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15535            // Calling encoder.out_of_line_offset(0) is not allowed.
15536            if max_ordinal == 0 {
15537                return Ok(());
15538            }
15539            depth.increment()?;
15540            let envelope_size = 8;
15541            let bytes_len = max_ordinal as usize * envelope_size;
15542            #[allow(unused_variables)]
15543            let offset = encoder.out_of_line_offset(bytes_len);
15544            let mut _prev_end_offset: usize = 0;
15545            if 1 > max_ordinal {
15546                return Ok(());
15547            }
15548
15549            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15550            // are envelope_size bytes.
15551            let cur_offset: usize = (1 - 1) * envelope_size;
15552
15553            // Zero reserved fields.
15554            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15555
15556            // Safety:
15557            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15558            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15559            //   envelope_size bytes, there is always sufficient room.
15560            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15561                self.ignore_this_field
15562                    .as_ref()
15563                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15564                encoder,
15565                offset + cur_offset,
15566                depth,
15567            )?;
15568
15569            _prev_end_offset = cur_offset + envelope_size;
15570
15571            Ok(())
15572        }
15573    }
15574
15575    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DecryptedFormat {
15576        #[inline(always)]
15577        fn new_empty() -> Self {
15578            Self::default()
15579        }
15580
15581        unsafe fn decode(
15582            &mut self,
15583            decoder: &mut fidl::encoding::Decoder<'_, D>,
15584            offset: usize,
15585            mut depth: fidl::encoding::Depth,
15586        ) -> fidl::Result<()> {
15587            decoder.debug_check_bounds::<Self>(offset);
15588            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15589                None => return Err(fidl::Error::NotNullable),
15590                Some(len) => len,
15591            };
15592            // Calling decoder.out_of_line_offset(0) is not allowed.
15593            if len == 0 {
15594                return Ok(());
15595            };
15596            depth.increment()?;
15597            let envelope_size = 8;
15598            let bytes_len = len * envelope_size;
15599            let offset = decoder.out_of_line_offset(bytes_len)?;
15600            // Decode the envelope for each type.
15601            let mut _next_ordinal_to_read = 0;
15602            let mut next_offset = offset;
15603            let end_offset = offset + bytes_len;
15604            _next_ordinal_to_read += 1;
15605            if next_offset >= end_offset {
15606                return Ok(());
15607            }
15608
15609            // Decode unknown envelopes for gaps in ordinals.
15610            while _next_ordinal_to_read < 1 {
15611                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15612                _next_ordinal_to_read += 1;
15613                next_offset += envelope_size;
15614            }
15615
15616            let next_out_of_line = decoder.next_out_of_line();
15617            let handles_before = decoder.remaining_handles();
15618            if let Some((inlined, num_bytes, num_handles)) =
15619                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15620            {
15621                let member_inline_size =
15622                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15623                if inlined != (member_inline_size <= 4) {
15624                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15625                }
15626                let inner_offset;
15627                let mut inner_depth = depth.clone();
15628                if inlined {
15629                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15630                    inner_offset = next_offset;
15631                } else {
15632                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15633                    inner_depth.increment()?;
15634                }
15635                let val_ref =
15636                    self.ignore_this_field.get_or_insert_with(|| fidl::new_empty!(bool, D));
15637                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15638                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15639                {
15640                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15641                }
15642                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15643                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15644                }
15645            }
15646
15647            next_offset += envelope_size;
15648
15649            // Decode the remaining unknown envelopes.
15650            while next_offset < end_offset {
15651                _next_ordinal_to_read += 1;
15652                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15653                next_offset += envelope_size;
15654            }
15655
15656            Ok(())
15657        }
15658    }
15659
15660    impl EncryptedFormat {
15661        #[inline(always)]
15662        fn max_ordinal_present(&self) -> u64 {
15663            if let Some(_) = self.key_id {
15664                return 8;
15665            }
15666            if let Some(_) = self.scheme {
15667                return 6;
15668            }
15669            if let Some(_) = self.pattern {
15670                return 5;
15671            }
15672            if let Some(_) = self.subsamples {
15673                return 4;
15674            }
15675            if let Some(_) = self.init_vector {
15676                return 3;
15677            }
15678            0
15679        }
15680    }
15681
15682    impl fidl::encoding::ValueTypeMarker for EncryptedFormat {
15683        type Borrowed<'a> = &'a Self;
15684        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15685            value
15686        }
15687    }
15688
15689    unsafe impl fidl::encoding::TypeMarker for EncryptedFormat {
15690        type Owned = Self;
15691
15692        #[inline(always)]
15693        fn inline_align(_context: fidl::encoding::Context) -> usize {
15694            8
15695        }
15696
15697        #[inline(always)]
15698        fn inline_size(_context: fidl::encoding::Context) -> usize {
15699            16
15700        }
15701    }
15702
15703    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncryptedFormat, D>
15704        for &EncryptedFormat
15705    {
15706        unsafe fn encode(
15707            self,
15708            encoder: &mut fidl::encoding::Encoder<'_, D>,
15709            offset: usize,
15710            mut depth: fidl::encoding::Depth,
15711        ) -> fidl::Result<()> {
15712            encoder.debug_check_bounds::<EncryptedFormat>(offset);
15713            // Vector header
15714            let max_ordinal: u64 = self.max_ordinal_present();
15715            encoder.write_num(max_ordinal, offset);
15716            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15717            // Calling encoder.out_of_line_offset(0) is not allowed.
15718            if max_ordinal == 0 {
15719                return Ok(());
15720            }
15721            depth.increment()?;
15722            let envelope_size = 8;
15723            let bytes_len = max_ordinal as usize * envelope_size;
15724            #[allow(unused_variables)]
15725            let offset = encoder.out_of_line_offset(bytes_len);
15726            let mut _prev_end_offset: usize = 0;
15727            if 3 > max_ordinal {
15728                return Ok(());
15729            }
15730
15731            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15732            // are envelope_size bytes.
15733            let cur_offset: usize = (3 - 1) * envelope_size;
15734
15735            // Zero reserved fields.
15736            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15737
15738            // Safety:
15739            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15740            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15741            //   envelope_size bytes, there is always sufficient room.
15742            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
15743                self.init_vector.as_ref().map(
15744                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
15745                ),
15746                encoder,
15747                offset + cur_offset,
15748                depth,
15749            )?;
15750
15751            _prev_end_offset = cur_offset + envelope_size;
15752            if 4 > max_ordinal {
15753                return Ok(());
15754            }
15755
15756            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15757            // are envelope_size bytes.
15758            let cur_offset: usize = (4 - 1) * envelope_size;
15759
15760            // Zero reserved fields.
15761            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15762
15763            // Safety:
15764            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15765            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15766            //   envelope_size bytes, there is always sufficient room.
15767            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<SubsampleEntry>, D>(
15768            self.subsamples.as_ref().map(<fidl::encoding::UnboundedVector<SubsampleEntry> as fidl::encoding::ValueTypeMarker>::borrow),
15769            encoder, offset + cur_offset, depth
15770        )?;
15771
15772            _prev_end_offset = cur_offset + envelope_size;
15773            if 5 > max_ordinal {
15774                return Ok(());
15775            }
15776
15777            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15778            // are envelope_size bytes.
15779            let cur_offset: usize = (5 - 1) * envelope_size;
15780
15781            // Zero reserved fields.
15782            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15783
15784            // Safety:
15785            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15786            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15787            //   envelope_size bytes, there is always sufficient room.
15788            fidl::encoding::encode_in_envelope_optional::<EncryptionPattern, D>(
15789                self.pattern
15790                    .as_ref()
15791                    .map(<EncryptionPattern as fidl::encoding::ValueTypeMarker>::borrow),
15792                encoder,
15793                offset + cur_offset,
15794                depth,
15795            )?;
15796
15797            _prev_end_offset = cur_offset + envelope_size;
15798            if 6 > max_ordinal {
15799                return Ok(());
15800            }
15801
15802            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15803            // are envelope_size bytes.
15804            let cur_offset: usize = (6 - 1) * envelope_size;
15805
15806            // Zero reserved fields.
15807            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15808
15809            // Safety:
15810            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15811            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15812            //   envelope_size bytes, there is always sufficient room.
15813            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
15814                self.scheme.as_ref().map(
15815                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
15816                ),
15817                encoder,
15818                offset + cur_offset,
15819                depth,
15820            )?;
15821
15822            _prev_end_offset = cur_offset + envelope_size;
15823            if 8 > max_ordinal {
15824                return Ok(());
15825            }
15826
15827            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15828            // are envelope_size bytes.
15829            let cur_offset: usize = (8 - 1) * envelope_size;
15830
15831            // Zero reserved fields.
15832            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15833
15834            // Safety:
15835            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15836            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15837            //   envelope_size bytes, there is always sufficient room.
15838            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
15839                self.key_id.as_ref().map(
15840                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
15841                ),
15842                encoder,
15843                offset + cur_offset,
15844                depth,
15845            )?;
15846
15847            _prev_end_offset = cur_offset + envelope_size;
15848
15849            Ok(())
15850        }
15851    }
15852
15853    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncryptedFormat {
15854        #[inline(always)]
15855        fn new_empty() -> Self {
15856            Self::default()
15857        }
15858
15859        unsafe fn decode(
15860            &mut self,
15861            decoder: &mut fidl::encoding::Decoder<'_, D>,
15862            offset: usize,
15863            mut depth: fidl::encoding::Depth,
15864        ) -> fidl::Result<()> {
15865            decoder.debug_check_bounds::<Self>(offset);
15866            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15867                None => return Err(fidl::Error::NotNullable),
15868                Some(len) => len,
15869            };
15870            // Calling decoder.out_of_line_offset(0) is not allowed.
15871            if len == 0 {
15872                return Ok(());
15873            };
15874            depth.increment()?;
15875            let envelope_size = 8;
15876            let bytes_len = len * envelope_size;
15877            let offset = decoder.out_of_line_offset(bytes_len)?;
15878            // Decode the envelope for each type.
15879            let mut _next_ordinal_to_read = 0;
15880            let mut next_offset = offset;
15881            let end_offset = offset + bytes_len;
15882            _next_ordinal_to_read += 1;
15883            if next_offset >= end_offset {
15884                return Ok(());
15885            }
15886
15887            // Decode unknown envelopes for gaps in ordinals.
15888            while _next_ordinal_to_read < 3 {
15889                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15890                _next_ordinal_to_read += 1;
15891                next_offset += envelope_size;
15892            }
15893
15894            let next_out_of_line = decoder.next_out_of_line();
15895            let handles_before = decoder.remaining_handles();
15896            if let Some((inlined, num_bytes, num_handles)) =
15897                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15898            {
15899                let member_inline_size =
15900                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
15901                        decoder.context,
15902                    );
15903                if inlined != (member_inline_size <= 4) {
15904                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15905                }
15906                let inner_offset;
15907                let mut inner_depth = depth.clone();
15908                if inlined {
15909                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15910                    inner_offset = next_offset;
15911                } else {
15912                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15913                    inner_depth.increment()?;
15914                }
15915                let val_ref = self
15916                    .init_vector
15917                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
15918                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
15919                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15920                {
15921                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15922                }
15923                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15924                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15925                }
15926            }
15927
15928            next_offset += envelope_size;
15929            _next_ordinal_to_read += 1;
15930            if next_offset >= end_offset {
15931                return Ok(());
15932            }
15933
15934            // Decode unknown envelopes for gaps in ordinals.
15935            while _next_ordinal_to_read < 4 {
15936                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15937                _next_ordinal_to_read += 1;
15938                next_offset += envelope_size;
15939            }
15940
15941            let next_out_of_line = decoder.next_out_of_line();
15942            let handles_before = decoder.remaining_handles();
15943            if let Some((inlined, num_bytes, num_handles)) =
15944                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15945            {
15946                let member_inline_size = <fidl::encoding::UnboundedVector<SubsampleEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15947                if inlined != (member_inline_size <= 4) {
15948                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15949                }
15950                let inner_offset;
15951                let mut inner_depth = depth.clone();
15952                if inlined {
15953                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15954                    inner_offset = next_offset;
15955                } else {
15956                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15957                    inner_depth.increment()?;
15958                }
15959                let val_ref = self.subsamples.get_or_insert_with(|| {
15960                    fidl::new_empty!(fidl::encoding::UnboundedVector<SubsampleEntry>, D)
15961                });
15962                fidl::decode!(
15963                    fidl::encoding::UnboundedVector<SubsampleEntry>,
15964                    D,
15965                    val_ref,
15966                    decoder,
15967                    inner_offset,
15968                    inner_depth
15969                )?;
15970                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15971                {
15972                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15973                }
15974                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15975                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15976                }
15977            }
15978
15979            next_offset += envelope_size;
15980            _next_ordinal_to_read += 1;
15981            if next_offset >= end_offset {
15982                return Ok(());
15983            }
15984
15985            // Decode unknown envelopes for gaps in ordinals.
15986            while _next_ordinal_to_read < 5 {
15987                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15988                _next_ordinal_to_read += 1;
15989                next_offset += envelope_size;
15990            }
15991
15992            let next_out_of_line = decoder.next_out_of_line();
15993            let handles_before = decoder.remaining_handles();
15994            if let Some((inlined, num_bytes, num_handles)) =
15995                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15996            {
15997                let member_inline_size =
15998                    <EncryptionPattern as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15999                if inlined != (member_inline_size <= 4) {
16000                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16001                }
16002                let inner_offset;
16003                let mut inner_depth = depth.clone();
16004                if inlined {
16005                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16006                    inner_offset = next_offset;
16007                } else {
16008                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16009                    inner_depth.increment()?;
16010                }
16011                let val_ref =
16012                    self.pattern.get_or_insert_with(|| fidl::new_empty!(EncryptionPattern, D));
16013                fidl::decode!(EncryptionPattern, D, val_ref, decoder, inner_offset, inner_depth)?;
16014                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16015                {
16016                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16017                }
16018                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16019                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16020                }
16021            }
16022
16023            next_offset += envelope_size;
16024            _next_ordinal_to_read += 1;
16025            if next_offset >= end_offset {
16026                return Ok(());
16027            }
16028
16029            // Decode unknown envelopes for gaps in ordinals.
16030            while _next_ordinal_to_read < 6 {
16031                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16032                _next_ordinal_to_read += 1;
16033                next_offset += envelope_size;
16034            }
16035
16036            let next_out_of_line = decoder.next_out_of_line();
16037            let handles_before = decoder.remaining_handles();
16038            if let Some((inlined, num_bytes, num_handles)) =
16039                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16040            {
16041                let member_inline_size =
16042                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
16043                        decoder.context,
16044                    );
16045                if inlined != (member_inline_size <= 4) {
16046                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16047                }
16048                let inner_offset;
16049                let mut inner_depth = depth.clone();
16050                if inlined {
16051                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16052                    inner_offset = next_offset;
16053                } else {
16054                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16055                    inner_depth.increment()?;
16056                }
16057                let val_ref = self
16058                    .scheme
16059                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
16060                fidl::decode!(
16061                    fidl::encoding::UnboundedString,
16062                    D,
16063                    val_ref,
16064                    decoder,
16065                    inner_offset,
16066                    inner_depth
16067                )?;
16068                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16069                {
16070                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16071                }
16072                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16073                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16074                }
16075            }
16076
16077            next_offset += envelope_size;
16078            _next_ordinal_to_read += 1;
16079            if next_offset >= end_offset {
16080                return Ok(());
16081            }
16082
16083            // Decode unknown envelopes for gaps in ordinals.
16084            while _next_ordinal_to_read < 8 {
16085                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16086                _next_ordinal_to_read += 1;
16087                next_offset += envelope_size;
16088            }
16089
16090            let next_out_of_line = decoder.next_out_of_line();
16091            let handles_before = decoder.remaining_handles();
16092            if let Some((inlined, num_bytes, num_handles)) =
16093                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16094            {
16095                let member_inline_size =
16096                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
16097                        decoder.context,
16098                    );
16099                if inlined != (member_inline_size <= 4) {
16100                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16101                }
16102                let inner_offset;
16103                let mut inner_depth = depth.clone();
16104                if inlined {
16105                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16106                    inner_offset = next_offset;
16107                } else {
16108                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16109                    inner_depth.increment()?;
16110                }
16111                let val_ref = self
16112                    .key_id
16113                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
16114                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
16115                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16116                {
16117                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16118                }
16119                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16120                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16121                }
16122            }
16123
16124            next_offset += envelope_size;
16125
16126            // Decode the remaining unknown envelopes.
16127            while next_offset < end_offset {
16128                _next_ordinal_to_read += 1;
16129                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16130                next_offset += envelope_size;
16131            }
16132
16133            Ok(())
16134        }
16135    }
16136
16137    impl FormatDetails {
16138        #[inline(always)]
16139        fn max_ordinal_present(&self) -> u64 {
16140            if let Some(_) = self.profile {
16141                return 8;
16142            }
16143            if let Some(_) = self.timebase {
16144                return 7;
16145            }
16146            if let Some(_) = self.encoder_settings {
16147                return 6;
16148            }
16149            if let Some(_) = self.pass_through_parameters {
16150                return 5;
16151            }
16152            if let Some(_) = self.domain {
16153                return 4;
16154            }
16155            if let Some(_) = self.oob_bytes {
16156                return 3;
16157            }
16158            if let Some(_) = self.mime_type {
16159                return 2;
16160            }
16161            if let Some(_) = self.format_details_version_ordinal {
16162                return 1;
16163            }
16164            0
16165        }
16166    }
16167
16168    impl fidl::encoding::ValueTypeMarker for FormatDetails {
16169        type Borrowed<'a> = &'a Self;
16170        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16171            value
16172        }
16173    }
16174
16175    unsafe impl fidl::encoding::TypeMarker for FormatDetails {
16176        type Owned = Self;
16177
16178        #[inline(always)]
16179        fn inline_align(_context: fidl::encoding::Context) -> usize {
16180            8
16181        }
16182
16183        #[inline(always)]
16184        fn inline_size(_context: fidl::encoding::Context) -> usize {
16185            16
16186        }
16187    }
16188
16189    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FormatDetails, D>
16190        for &FormatDetails
16191    {
16192        unsafe fn encode(
16193            self,
16194            encoder: &mut fidl::encoding::Encoder<'_, D>,
16195            offset: usize,
16196            mut depth: fidl::encoding::Depth,
16197        ) -> fidl::Result<()> {
16198            encoder.debug_check_bounds::<FormatDetails>(offset);
16199            // Vector header
16200            let max_ordinal: u64 = self.max_ordinal_present();
16201            encoder.write_num(max_ordinal, offset);
16202            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16203            // Calling encoder.out_of_line_offset(0) is not allowed.
16204            if max_ordinal == 0 {
16205                return Ok(());
16206            }
16207            depth.increment()?;
16208            let envelope_size = 8;
16209            let bytes_len = max_ordinal as usize * envelope_size;
16210            #[allow(unused_variables)]
16211            let offset = encoder.out_of_line_offset(bytes_len);
16212            let mut _prev_end_offset: usize = 0;
16213            if 1 > max_ordinal {
16214                return Ok(());
16215            }
16216
16217            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16218            // are envelope_size bytes.
16219            let cur_offset: usize = (1 - 1) * envelope_size;
16220
16221            // Zero reserved fields.
16222            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16223
16224            // Safety:
16225            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16226            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16227            //   envelope_size bytes, there is always sufficient room.
16228            fidl::encoding::encode_in_envelope_optional::<u64, D>(
16229                self.format_details_version_ordinal
16230                    .as_ref()
16231                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
16232                encoder,
16233                offset + cur_offset,
16234                depth,
16235            )?;
16236
16237            _prev_end_offset = cur_offset + envelope_size;
16238            if 2 > max_ordinal {
16239                return Ok(());
16240            }
16241
16242            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16243            // are envelope_size bytes.
16244            let cur_offset: usize = (2 - 1) * envelope_size;
16245
16246            // Zero reserved fields.
16247            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16248
16249            // Safety:
16250            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16251            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16252            //   envelope_size bytes, there is always sufficient room.
16253            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
16254                self.mime_type.as_ref().map(
16255                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
16256                ),
16257                encoder,
16258                offset + cur_offset,
16259                depth,
16260            )?;
16261
16262            _prev_end_offset = cur_offset + envelope_size;
16263            if 3 > max_ordinal {
16264                return Ok(());
16265            }
16266
16267            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16268            // are envelope_size bytes.
16269            let cur_offset: usize = (3 - 1) * envelope_size;
16270
16271            // Zero reserved fields.
16272            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16273
16274            // Safety:
16275            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16276            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16277            //   envelope_size bytes, there is always sufficient room.
16278            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
16279            self.oob_bytes.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
16280            encoder, offset + cur_offset, depth
16281        )?;
16282
16283            _prev_end_offset = cur_offset + envelope_size;
16284            if 4 > max_ordinal {
16285                return Ok(());
16286            }
16287
16288            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16289            // are envelope_size bytes.
16290            let cur_offset: usize = (4 - 1) * envelope_size;
16291
16292            // Zero reserved fields.
16293            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16294
16295            // Safety:
16296            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16297            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16298            //   envelope_size bytes, there is always sufficient room.
16299            fidl::encoding::encode_in_envelope_optional::<DomainFormat, D>(
16300                self.domain.as_ref().map(<DomainFormat as fidl::encoding::ValueTypeMarker>::borrow),
16301                encoder,
16302                offset + cur_offset,
16303                depth,
16304            )?;
16305
16306            _prev_end_offset = cur_offset + envelope_size;
16307            if 5 > max_ordinal {
16308                return Ok(());
16309            }
16310
16311            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16312            // are envelope_size bytes.
16313            let cur_offset: usize = (5 - 1) * envelope_size;
16314
16315            // Zero reserved fields.
16316            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16317
16318            // Safety:
16319            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16320            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16321            //   envelope_size bytes, there is always sufficient room.
16322            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Parameter>, D>(
16323            self.pass_through_parameters.as_ref().map(<fidl::encoding::UnboundedVector<Parameter> as fidl::encoding::ValueTypeMarker>::borrow),
16324            encoder, offset + cur_offset, depth
16325        )?;
16326
16327            _prev_end_offset = cur_offset + envelope_size;
16328            if 6 > max_ordinal {
16329                return Ok(());
16330            }
16331
16332            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16333            // are envelope_size bytes.
16334            let cur_offset: usize = (6 - 1) * envelope_size;
16335
16336            // Zero reserved fields.
16337            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16338
16339            // Safety:
16340            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16341            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16342            //   envelope_size bytes, there is always sufficient room.
16343            fidl::encoding::encode_in_envelope_optional::<EncoderSettings, D>(
16344                self.encoder_settings
16345                    .as_ref()
16346                    .map(<EncoderSettings as fidl::encoding::ValueTypeMarker>::borrow),
16347                encoder,
16348                offset + cur_offset,
16349                depth,
16350            )?;
16351
16352            _prev_end_offset = cur_offset + envelope_size;
16353            if 7 > max_ordinal {
16354                return Ok(());
16355            }
16356
16357            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16358            // are envelope_size bytes.
16359            let cur_offset: usize = (7 - 1) * envelope_size;
16360
16361            // Zero reserved fields.
16362            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16363
16364            // Safety:
16365            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16366            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16367            //   envelope_size bytes, there is always sufficient room.
16368            fidl::encoding::encode_in_envelope_optional::<u64, D>(
16369                self.timebase.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
16370                encoder,
16371                offset + cur_offset,
16372                depth,
16373            )?;
16374
16375            _prev_end_offset = cur_offset + envelope_size;
16376            if 8 > max_ordinal {
16377                return Ok(());
16378            }
16379
16380            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16381            // are envelope_size bytes.
16382            let cur_offset: usize = (8 - 1) * envelope_size;
16383
16384            // Zero reserved fields.
16385            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16386
16387            // Safety:
16388            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16389            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16390            //   envelope_size bytes, there is always sufficient room.
16391            fidl::encoding::encode_in_envelope_optional::<CodecProfile, D>(
16392                self.profile
16393                    .as_ref()
16394                    .map(<CodecProfile as fidl::encoding::ValueTypeMarker>::borrow),
16395                encoder,
16396                offset + cur_offset,
16397                depth,
16398            )?;
16399
16400            _prev_end_offset = cur_offset + envelope_size;
16401
16402            Ok(())
16403        }
16404    }
16405
16406    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FormatDetails {
16407        #[inline(always)]
16408        fn new_empty() -> Self {
16409            Self::default()
16410        }
16411
16412        unsafe fn decode(
16413            &mut self,
16414            decoder: &mut fidl::encoding::Decoder<'_, D>,
16415            offset: usize,
16416            mut depth: fidl::encoding::Depth,
16417        ) -> fidl::Result<()> {
16418            decoder.debug_check_bounds::<Self>(offset);
16419            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16420                None => return Err(fidl::Error::NotNullable),
16421                Some(len) => len,
16422            };
16423            // Calling decoder.out_of_line_offset(0) is not allowed.
16424            if len == 0 {
16425                return Ok(());
16426            };
16427            depth.increment()?;
16428            let envelope_size = 8;
16429            let bytes_len = len * envelope_size;
16430            let offset = decoder.out_of_line_offset(bytes_len)?;
16431            // Decode the envelope for each type.
16432            let mut _next_ordinal_to_read = 0;
16433            let mut next_offset = offset;
16434            let end_offset = offset + bytes_len;
16435            _next_ordinal_to_read += 1;
16436            if next_offset >= end_offset {
16437                return Ok(());
16438            }
16439
16440            // Decode unknown envelopes for gaps in ordinals.
16441            while _next_ordinal_to_read < 1 {
16442                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16443                _next_ordinal_to_read += 1;
16444                next_offset += envelope_size;
16445            }
16446
16447            let next_out_of_line = decoder.next_out_of_line();
16448            let handles_before = decoder.remaining_handles();
16449            if let Some((inlined, num_bytes, num_handles)) =
16450                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16451            {
16452                let member_inline_size =
16453                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16454                if inlined != (member_inline_size <= 4) {
16455                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16456                }
16457                let inner_offset;
16458                let mut inner_depth = depth.clone();
16459                if inlined {
16460                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16461                    inner_offset = next_offset;
16462                } else {
16463                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16464                    inner_depth.increment()?;
16465                }
16466                let val_ref = self
16467                    .format_details_version_ordinal
16468                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
16469                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
16470                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16471                {
16472                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16473                }
16474                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16475                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16476                }
16477            }
16478
16479            next_offset += envelope_size;
16480            _next_ordinal_to_read += 1;
16481            if next_offset >= end_offset {
16482                return Ok(());
16483            }
16484
16485            // Decode unknown envelopes for gaps in ordinals.
16486            while _next_ordinal_to_read < 2 {
16487                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16488                _next_ordinal_to_read += 1;
16489                next_offset += envelope_size;
16490            }
16491
16492            let next_out_of_line = decoder.next_out_of_line();
16493            let handles_before = decoder.remaining_handles();
16494            if let Some((inlined, num_bytes, num_handles)) =
16495                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16496            {
16497                let member_inline_size =
16498                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
16499                        decoder.context,
16500                    );
16501                if inlined != (member_inline_size <= 4) {
16502                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16503                }
16504                let inner_offset;
16505                let mut inner_depth = depth.clone();
16506                if inlined {
16507                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16508                    inner_offset = next_offset;
16509                } else {
16510                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16511                    inner_depth.increment()?;
16512                }
16513                let val_ref = self
16514                    .mime_type
16515                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
16516                fidl::decode!(
16517                    fidl::encoding::UnboundedString,
16518                    D,
16519                    val_ref,
16520                    decoder,
16521                    inner_offset,
16522                    inner_depth
16523                )?;
16524                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16525                {
16526                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16527                }
16528                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16529                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16530                }
16531            }
16532
16533            next_offset += envelope_size;
16534            _next_ordinal_to_read += 1;
16535            if next_offset >= end_offset {
16536                return Ok(());
16537            }
16538
16539            // Decode unknown envelopes for gaps in ordinals.
16540            while _next_ordinal_to_read < 3 {
16541                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16542                _next_ordinal_to_read += 1;
16543                next_offset += envelope_size;
16544            }
16545
16546            let next_out_of_line = decoder.next_out_of_line();
16547            let handles_before = decoder.remaining_handles();
16548            if let Some((inlined, num_bytes, num_handles)) =
16549                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16550            {
16551                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16552                if inlined != (member_inline_size <= 4) {
16553                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16554                }
16555                let inner_offset;
16556                let mut inner_depth = depth.clone();
16557                if inlined {
16558                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16559                    inner_offset = next_offset;
16560                } else {
16561                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16562                    inner_depth.increment()?;
16563                }
16564                let val_ref = self.oob_bytes.get_or_insert_with(|| {
16565                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
16566                });
16567                fidl::decode!(
16568                    fidl::encoding::UnboundedVector<u8>,
16569                    D,
16570                    val_ref,
16571                    decoder,
16572                    inner_offset,
16573                    inner_depth
16574                )?;
16575                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16576                {
16577                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16578                }
16579                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16580                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16581                }
16582            }
16583
16584            next_offset += envelope_size;
16585            _next_ordinal_to_read += 1;
16586            if next_offset >= end_offset {
16587                return Ok(());
16588            }
16589
16590            // Decode unknown envelopes for gaps in ordinals.
16591            while _next_ordinal_to_read < 4 {
16592                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16593                _next_ordinal_to_read += 1;
16594                next_offset += envelope_size;
16595            }
16596
16597            let next_out_of_line = decoder.next_out_of_line();
16598            let handles_before = decoder.remaining_handles();
16599            if let Some((inlined, num_bytes, num_handles)) =
16600                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16601            {
16602                let member_inline_size =
16603                    <DomainFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16604                if inlined != (member_inline_size <= 4) {
16605                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16606                }
16607                let inner_offset;
16608                let mut inner_depth = depth.clone();
16609                if inlined {
16610                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16611                    inner_offset = next_offset;
16612                } else {
16613                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16614                    inner_depth.increment()?;
16615                }
16616                let val_ref = self.domain.get_or_insert_with(|| fidl::new_empty!(DomainFormat, D));
16617                fidl::decode!(DomainFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
16618                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16619                {
16620                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16621                }
16622                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16623                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16624                }
16625            }
16626
16627            next_offset += envelope_size;
16628            _next_ordinal_to_read += 1;
16629            if next_offset >= end_offset {
16630                return Ok(());
16631            }
16632
16633            // Decode unknown envelopes for gaps in ordinals.
16634            while _next_ordinal_to_read < 5 {
16635                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16636                _next_ordinal_to_read += 1;
16637                next_offset += envelope_size;
16638            }
16639
16640            let next_out_of_line = decoder.next_out_of_line();
16641            let handles_before = decoder.remaining_handles();
16642            if let Some((inlined, num_bytes, num_handles)) =
16643                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16644            {
16645                let member_inline_size = <fidl::encoding::UnboundedVector<Parameter> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16646                if inlined != (member_inline_size <= 4) {
16647                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16648                }
16649                let inner_offset;
16650                let mut inner_depth = depth.clone();
16651                if inlined {
16652                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16653                    inner_offset = next_offset;
16654                } else {
16655                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16656                    inner_depth.increment()?;
16657                }
16658                let val_ref = self.pass_through_parameters.get_or_insert_with(|| {
16659                    fidl::new_empty!(fidl::encoding::UnboundedVector<Parameter>, D)
16660                });
16661                fidl::decode!(
16662                    fidl::encoding::UnboundedVector<Parameter>,
16663                    D,
16664                    val_ref,
16665                    decoder,
16666                    inner_offset,
16667                    inner_depth
16668                )?;
16669                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16670                {
16671                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16672                }
16673                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16674                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16675                }
16676            }
16677
16678            next_offset += envelope_size;
16679            _next_ordinal_to_read += 1;
16680            if next_offset >= end_offset {
16681                return Ok(());
16682            }
16683
16684            // Decode unknown envelopes for gaps in ordinals.
16685            while _next_ordinal_to_read < 6 {
16686                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16687                _next_ordinal_to_read += 1;
16688                next_offset += envelope_size;
16689            }
16690
16691            let next_out_of_line = decoder.next_out_of_line();
16692            let handles_before = decoder.remaining_handles();
16693            if let Some((inlined, num_bytes, num_handles)) =
16694                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16695            {
16696                let member_inline_size =
16697                    <EncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16698                if inlined != (member_inline_size <= 4) {
16699                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16700                }
16701                let inner_offset;
16702                let mut inner_depth = depth.clone();
16703                if inlined {
16704                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16705                    inner_offset = next_offset;
16706                } else {
16707                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16708                    inner_depth.increment()?;
16709                }
16710                let val_ref = self
16711                    .encoder_settings
16712                    .get_or_insert_with(|| fidl::new_empty!(EncoderSettings, D));
16713                fidl::decode!(EncoderSettings, D, val_ref, decoder, inner_offset, inner_depth)?;
16714                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16715                {
16716                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16717                }
16718                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16719                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16720                }
16721            }
16722
16723            next_offset += envelope_size;
16724            _next_ordinal_to_read += 1;
16725            if next_offset >= end_offset {
16726                return Ok(());
16727            }
16728
16729            // Decode unknown envelopes for gaps in ordinals.
16730            while _next_ordinal_to_read < 7 {
16731                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16732                _next_ordinal_to_read += 1;
16733                next_offset += envelope_size;
16734            }
16735
16736            let next_out_of_line = decoder.next_out_of_line();
16737            let handles_before = decoder.remaining_handles();
16738            if let Some((inlined, num_bytes, num_handles)) =
16739                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16740            {
16741                let member_inline_size =
16742                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16743                if inlined != (member_inline_size <= 4) {
16744                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16745                }
16746                let inner_offset;
16747                let mut inner_depth = depth.clone();
16748                if inlined {
16749                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16750                    inner_offset = next_offset;
16751                } else {
16752                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16753                    inner_depth.increment()?;
16754                }
16755                let val_ref = self.timebase.get_or_insert_with(|| fidl::new_empty!(u64, D));
16756                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
16757                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16758                {
16759                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16760                }
16761                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16762                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16763                }
16764            }
16765
16766            next_offset += envelope_size;
16767            _next_ordinal_to_read += 1;
16768            if next_offset >= end_offset {
16769                return Ok(());
16770            }
16771
16772            // Decode unknown envelopes for gaps in ordinals.
16773            while _next_ordinal_to_read < 8 {
16774                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16775                _next_ordinal_to_read += 1;
16776                next_offset += envelope_size;
16777            }
16778
16779            let next_out_of_line = decoder.next_out_of_line();
16780            let handles_before = decoder.remaining_handles();
16781            if let Some((inlined, num_bytes, num_handles)) =
16782                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16783            {
16784                let member_inline_size =
16785                    <CodecProfile as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16786                if inlined != (member_inline_size <= 4) {
16787                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16788                }
16789                let inner_offset;
16790                let mut inner_depth = depth.clone();
16791                if inlined {
16792                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16793                    inner_offset = next_offset;
16794                } else {
16795                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16796                    inner_depth.increment()?;
16797                }
16798                let val_ref = self.profile.get_or_insert_with(|| fidl::new_empty!(CodecProfile, D));
16799                fidl::decode!(CodecProfile, D, val_ref, decoder, inner_offset, inner_depth)?;
16800                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16801                {
16802                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16803                }
16804                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16805                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16806                }
16807            }
16808
16809            next_offset += envelope_size;
16810
16811            // Decode the remaining unknown envelopes.
16812            while next_offset < end_offset {
16813                _next_ordinal_to_read += 1;
16814                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16815                next_offset += envelope_size;
16816            }
16817
16818            Ok(())
16819        }
16820    }
16821
16822    impl H264EncoderSettings {
16823        #[inline(always)]
16824        fn max_ordinal_present(&self) -> u64 {
16825            if let Some(_) = self.quantization_params {
16826                return 7;
16827            }
16828            if let Some(_) = self.force_key_frame {
16829                return 6;
16830            }
16831            if let Some(_) = self.min_frame_rate {
16832                return 5;
16833            }
16834            if let Some(_) = self.variable_frame_rate {
16835                return 4;
16836            }
16837            if let Some(_) = self.gop_size {
16838                return 3;
16839            }
16840            if let Some(_) = self.frame_rate {
16841                return 2;
16842            }
16843            if let Some(_) = self.bit_rate {
16844                return 1;
16845            }
16846            0
16847        }
16848    }
16849
16850    impl fidl::encoding::ValueTypeMarker for H264EncoderSettings {
16851        type Borrowed<'a> = &'a Self;
16852        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16853            value
16854        }
16855    }
16856
16857    unsafe impl fidl::encoding::TypeMarker for H264EncoderSettings {
16858        type Owned = Self;
16859
16860        #[inline(always)]
16861        fn inline_align(_context: fidl::encoding::Context) -> usize {
16862            8
16863        }
16864
16865        #[inline(always)]
16866        fn inline_size(_context: fidl::encoding::Context) -> usize {
16867            16
16868        }
16869    }
16870
16871    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<H264EncoderSettings, D>
16872        for &H264EncoderSettings
16873    {
16874        unsafe fn encode(
16875            self,
16876            encoder: &mut fidl::encoding::Encoder<'_, D>,
16877            offset: usize,
16878            mut depth: fidl::encoding::Depth,
16879        ) -> fidl::Result<()> {
16880            encoder.debug_check_bounds::<H264EncoderSettings>(offset);
16881            // Vector header
16882            let max_ordinal: u64 = self.max_ordinal_present();
16883            encoder.write_num(max_ordinal, offset);
16884            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16885            // Calling encoder.out_of_line_offset(0) is not allowed.
16886            if max_ordinal == 0 {
16887                return Ok(());
16888            }
16889            depth.increment()?;
16890            let envelope_size = 8;
16891            let bytes_len = max_ordinal as usize * envelope_size;
16892            #[allow(unused_variables)]
16893            let offset = encoder.out_of_line_offset(bytes_len);
16894            let mut _prev_end_offset: usize = 0;
16895            if 1 > max_ordinal {
16896                return Ok(());
16897            }
16898
16899            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16900            // are envelope_size bytes.
16901            let cur_offset: usize = (1 - 1) * envelope_size;
16902
16903            // Zero reserved fields.
16904            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16905
16906            // Safety:
16907            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16908            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16909            //   envelope_size bytes, there is always sufficient room.
16910            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16911                self.bit_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16912                encoder,
16913                offset + cur_offset,
16914                depth,
16915            )?;
16916
16917            _prev_end_offset = cur_offset + envelope_size;
16918            if 2 > max_ordinal {
16919                return Ok(());
16920            }
16921
16922            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16923            // are envelope_size bytes.
16924            let cur_offset: usize = (2 - 1) * envelope_size;
16925
16926            // Zero reserved fields.
16927            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16928
16929            // Safety:
16930            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16931            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16932            //   envelope_size bytes, there is always sufficient room.
16933            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16934                self.frame_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16935                encoder,
16936                offset + cur_offset,
16937                depth,
16938            )?;
16939
16940            _prev_end_offset = cur_offset + envelope_size;
16941            if 3 > max_ordinal {
16942                return Ok(());
16943            }
16944
16945            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16946            // are envelope_size bytes.
16947            let cur_offset: usize = (3 - 1) * envelope_size;
16948
16949            // Zero reserved fields.
16950            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16951
16952            // Safety:
16953            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16954            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16955            //   envelope_size bytes, there is always sufficient room.
16956            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16957                self.gop_size.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16958                encoder,
16959                offset + cur_offset,
16960                depth,
16961            )?;
16962
16963            _prev_end_offset = cur_offset + envelope_size;
16964            if 4 > max_ordinal {
16965                return Ok(());
16966            }
16967
16968            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16969            // are envelope_size bytes.
16970            let cur_offset: usize = (4 - 1) * envelope_size;
16971
16972            // Zero reserved fields.
16973            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16974
16975            // Safety:
16976            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16977            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16978            //   envelope_size bytes, there is always sufficient room.
16979            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16980                self.variable_frame_rate
16981                    .as_ref()
16982                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16983                encoder,
16984                offset + cur_offset,
16985                depth,
16986            )?;
16987
16988            _prev_end_offset = cur_offset + envelope_size;
16989            if 5 > max_ordinal {
16990                return Ok(());
16991            }
16992
16993            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16994            // are envelope_size bytes.
16995            let cur_offset: usize = (5 - 1) * envelope_size;
16996
16997            // Zero reserved fields.
16998            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16999
17000            // Safety:
17001            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17002            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17003            //   envelope_size bytes, there is always sufficient room.
17004            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17005                self.min_frame_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17006                encoder,
17007                offset + cur_offset,
17008                depth,
17009            )?;
17010
17011            _prev_end_offset = cur_offset + envelope_size;
17012            if 6 > max_ordinal {
17013                return Ok(());
17014            }
17015
17016            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17017            // are envelope_size bytes.
17018            let cur_offset: usize = (6 - 1) * envelope_size;
17019
17020            // Zero reserved fields.
17021            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17022
17023            // Safety:
17024            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17025            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17026            //   envelope_size bytes, there is always sufficient room.
17027            fidl::encoding::encode_in_envelope_optional::<bool, D>(
17028                self.force_key_frame
17029                    .as_ref()
17030                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
17031                encoder,
17032                offset + cur_offset,
17033                depth,
17034            )?;
17035
17036            _prev_end_offset = cur_offset + envelope_size;
17037            if 7 > max_ordinal {
17038                return Ok(());
17039            }
17040
17041            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17042            // are envelope_size bytes.
17043            let cur_offset: usize = (7 - 1) * envelope_size;
17044
17045            // Zero reserved fields.
17046            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17047
17048            // Safety:
17049            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17050            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17051            //   envelope_size bytes, there is always sufficient room.
17052            fidl::encoding::encode_in_envelope_optional::<H264QuantizationParameters, D>(
17053                self.quantization_params
17054                    .as_ref()
17055                    .map(<H264QuantizationParameters as fidl::encoding::ValueTypeMarker>::borrow),
17056                encoder,
17057                offset + cur_offset,
17058                depth,
17059            )?;
17060
17061            _prev_end_offset = cur_offset + envelope_size;
17062
17063            Ok(())
17064        }
17065    }
17066
17067    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for H264EncoderSettings {
17068        #[inline(always)]
17069        fn new_empty() -> Self {
17070            Self::default()
17071        }
17072
17073        unsafe fn decode(
17074            &mut self,
17075            decoder: &mut fidl::encoding::Decoder<'_, D>,
17076            offset: usize,
17077            mut depth: fidl::encoding::Depth,
17078        ) -> fidl::Result<()> {
17079            decoder.debug_check_bounds::<Self>(offset);
17080            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17081                None => return Err(fidl::Error::NotNullable),
17082                Some(len) => len,
17083            };
17084            // Calling decoder.out_of_line_offset(0) is not allowed.
17085            if len == 0 {
17086                return Ok(());
17087            };
17088            depth.increment()?;
17089            let envelope_size = 8;
17090            let bytes_len = len * envelope_size;
17091            let offset = decoder.out_of_line_offset(bytes_len)?;
17092            // Decode the envelope for each type.
17093            let mut _next_ordinal_to_read = 0;
17094            let mut next_offset = offset;
17095            let end_offset = offset + bytes_len;
17096            _next_ordinal_to_read += 1;
17097            if next_offset >= end_offset {
17098                return Ok(());
17099            }
17100
17101            // Decode unknown envelopes for gaps in ordinals.
17102            while _next_ordinal_to_read < 1 {
17103                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17104                _next_ordinal_to_read += 1;
17105                next_offset += envelope_size;
17106            }
17107
17108            let next_out_of_line = decoder.next_out_of_line();
17109            let handles_before = decoder.remaining_handles();
17110            if let Some((inlined, num_bytes, num_handles)) =
17111                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17112            {
17113                let member_inline_size =
17114                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17115                if inlined != (member_inline_size <= 4) {
17116                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17117                }
17118                let inner_offset;
17119                let mut inner_depth = depth.clone();
17120                if inlined {
17121                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17122                    inner_offset = next_offset;
17123                } else {
17124                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17125                    inner_depth.increment()?;
17126                }
17127                let val_ref = self.bit_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
17128                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17129                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17130                {
17131                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17132                }
17133                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17134                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17135                }
17136            }
17137
17138            next_offset += envelope_size;
17139            _next_ordinal_to_read += 1;
17140            if next_offset >= end_offset {
17141                return Ok(());
17142            }
17143
17144            // Decode unknown envelopes for gaps in ordinals.
17145            while _next_ordinal_to_read < 2 {
17146                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17147                _next_ordinal_to_read += 1;
17148                next_offset += envelope_size;
17149            }
17150
17151            let next_out_of_line = decoder.next_out_of_line();
17152            let handles_before = decoder.remaining_handles();
17153            if let Some((inlined, num_bytes, num_handles)) =
17154                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17155            {
17156                let member_inline_size =
17157                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17158                if inlined != (member_inline_size <= 4) {
17159                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17160                }
17161                let inner_offset;
17162                let mut inner_depth = depth.clone();
17163                if inlined {
17164                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17165                    inner_offset = next_offset;
17166                } else {
17167                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17168                    inner_depth.increment()?;
17169                }
17170                let val_ref = self.frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
17171                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17172                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17173                {
17174                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17175                }
17176                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17177                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17178                }
17179            }
17180
17181            next_offset += envelope_size;
17182            _next_ordinal_to_read += 1;
17183            if next_offset >= end_offset {
17184                return Ok(());
17185            }
17186
17187            // Decode unknown envelopes for gaps in ordinals.
17188            while _next_ordinal_to_read < 3 {
17189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17190                _next_ordinal_to_read += 1;
17191                next_offset += envelope_size;
17192            }
17193
17194            let next_out_of_line = decoder.next_out_of_line();
17195            let handles_before = decoder.remaining_handles();
17196            if let Some((inlined, num_bytes, num_handles)) =
17197                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17198            {
17199                let member_inline_size =
17200                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17201                if inlined != (member_inline_size <= 4) {
17202                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17203                }
17204                let inner_offset;
17205                let mut inner_depth = depth.clone();
17206                if inlined {
17207                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17208                    inner_offset = next_offset;
17209                } else {
17210                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17211                    inner_depth.increment()?;
17212                }
17213                let val_ref = self.gop_size.get_or_insert_with(|| fidl::new_empty!(u32, D));
17214                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17215                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17216                {
17217                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17218                }
17219                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17220                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17221                }
17222            }
17223
17224            next_offset += envelope_size;
17225            _next_ordinal_to_read += 1;
17226            if next_offset >= end_offset {
17227                return Ok(());
17228            }
17229
17230            // Decode unknown envelopes for gaps in ordinals.
17231            while _next_ordinal_to_read < 4 {
17232                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17233                _next_ordinal_to_read += 1;
17234                next_offset += envelope_size;
17235            }
17236
17237            let next_out_of_line = decoder.next_out_of_line();
17238            let handles_before = decoder.remaining_handles();
17239            if let Some((inlined, num_bytes, num_handles)) =
17240                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17241            {
17242                let member_inline_size =
17243                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17244                if inlined != (member_inline_size <= 4) {
17245                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17246                }
17247                let inner_offset;
17248                let mut inner_depth = depth.clone();
17249                if inlined {
17250                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17251                    inner_offset = next_offset;
17252                } else {
17253                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17254                    inner_depth.increment()?;
17255                }
17256                let val_ref =
17257                    self.variable_frame_rate.get_or_insert_with(|| fidl::new_empty!(bool, D));
17258                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
17259                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17260                {
17261                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17262                }
17263                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17264                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17265                }
17266            }
17267
17268            next_offset += envelope_size;
17269            _next_ordinal_to_read += 1;
17270            if next_offset >= end_offset {
17271                return Ok(());
17272            }
17273
17274            // Decode unknown envelopes for gaps in ordinals.
17275            while _next_ordinal_to_read < 5 {
17276                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17277                _next_ordinal_to_read += 1;
17278                next_offset += envelope_size;
17279            }
17280
17281            let next_out_of_line = decoder.next_out_of_line();
17282            let handles_before = decoder.remaining_handles();
17283            if let Some((inlined, num_bytes, num_handles)) =
17284                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17285            {
17286                let member_inline_size =
17287                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17288                if inlined != (member_inline_size <= 4) {
17289                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17290                }
17291                let inner_offset;
17292                let mut inner_depth = depth.clone();
17293                if inlined {
17294                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17295                    inner_offset = next_offset;
17296                } else {
17297                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17298                    inner_depth.increment()?;
17299                }
17300                let val_ref = self.min_frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
17301                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17302                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17303                {
17304                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17305                }
17306                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17307                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17308                }
17309            }
17310
17311            next_offset += envelope_size;
17312            _next_ordinal_to_read += 1;
17313            if next_offset >= end_offset {
17314                return Ok(());
17315            }
17316
17317            // Decode unknown envelopes for gaps in ordinals.
17318            while _next_ordinal_to_read < 6 {
17319                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17320                _next_ordinal_to_read += 1;
17321                next_offset += envelope_size;
17322            }
17323
17324            let next_out_of_line = decoder.next_out_of_line();
17325            let handles_before = decoder.remaining_handles();
17326            if let Some((inlined, num_bytes, num_handles)) =
17327                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17328            {
17329                let member_inline_size =
17330                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17331                if inlined != (member_inline_size <= 4) {
17332                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17333                }
17334                let inner_offset;
17335                let mut inner_depth = depth.clone();
17336                if inlined {
17337                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17338                    inner_offset = next_offset;
17339                } else {
17340                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17341                    inner_depth.increment()?;
17342                }
17343                let val_ref = self.force_key_frame.get_or_insert_with(|| fidl::new_empty!(bool, D));
17344                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
17345                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17346                {
17347                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17348                }
17349                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17350                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17351                }
17352            }
17353
17354            next_offset += envelope_size;
17355            _next_ordinal_to_read += 1;
17356            if next_offset >= end_offset {
17357                return Ok(());
17358            }
17359
17360            // Decode unknown envelopes for gaps in ordinals.
17361            while _next_ordinal_to_read < 7 {
17362                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17363                _next_ordinal_to_read += 1;
17364                next_offset += envelope_size;
17365            }
17366
17367            let next_out_of_line = decoder.next_out_of_line();
17368            let handles_before = decoder.remaining_handles();
17369            if let Some((inlined, num_bytes, num_handles)) =
17370                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17371            {
17372                let member_inline_size =
17373                    <H264QuantizationParameters as fidl::encoding::TypeMarker>::inline_size(
17374                        decoder.context,
17375                    );
17376                if inlined != (member_inline_size <= 4) {
17377                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17378                }
17379                let inner_offset;
17380                let mut inner_depth = depth.clone();
17381                if inlined {
17382                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17383                    inner_offset = next_offset;
17384                } else {
17385                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17386                    inner_depth.increment()?;
17387                }
17388                let val_ref = self
17389                    .quantization_params
17390                    .get_or_insert_with(|| fidl::new_empty!(H264QuantizationParameters, D));
17391                fidl::decode!(
17392                    H264QuantizationParameters,
17393                    D,
17394                    val_ref,
17395                    decoder,
17396                    inner_offset,
17397                    inner_depth
17398                )?;
17399                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17400                {
17401                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17402                }
17403                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17404                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17405                }
17406            }
17407
17408            next_offset += envelope_size;
17409
17410            // Decode the remaining unknown envelopes.
17411            while next_offset < end_offset {
17412                _next_ordinal_to_read += 1;
17413                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17414                next_offset += envelope_size;
17415            }
17416
17417            Ok(())
17418        }
17419    }
17420
17421    impl H264QuantizationParameters {
17422        #[inline(always)]
17423        fn max_ordinal_present(&self) -> u64 {
17424            if let Some(_) = self.p_max {
17425                return 6;
17426            }
17427            if let Some(_) = self.p_min {
17428                return 5;
17429            }
17430            if let Some(_) = self.p_base {
17431                return 4;
17432            }
17433            if let Some(_) = self.i_max {
17434                return 3;
17435            }
17436            if let Some(_) = self.i_min {
17437                return 2;
17438            }
17439            if let Some(_) = self.i_base {
17440                return 1;
17441            }
17442            0
17443        }
17444    }
17445
17446    impl fidl::encoding::ValueTypeMarker for H264QuantizationParameters {
17447        type Borrowed<'a> = &'a Self;
17448        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17449            value
17450        }
17451    }
17452
17453    unsafe impl fidl::encoding::TypeMarker for H264QuantizationParameters {
17454        type Owned = Self;
17455
17456        #[inline(always)]
17457        fn inline_align(_context: fidl::encoding::Context) -> usize {
17458            8
17459        }
17460
17461        #[inline(always)]
17462        fn inline_size(_context: fidl::encoding::Context) -> usize {
17463            16
17464        }
17465    }
17466
17467    unsafe impl<D: fidl::encoding::ResourceDialect>
17468        fidl::encoding::Encode<H264QuantizationParameters, D> for &H264QuantizationParameters
17469    {
17470        unsafe fn encode(
17471            self,
17472            encoder: &mut fidl::encoding::Encoder<'_, D>,
17473            offset: usize,
17474            mut depth: fidl::encoding::Depth,
17475        ) -> fidl::Result<()> {
17476            encoder.debug_check_bounds::<H264QuantizationParameters>(offset);
17477            // Vector header
17478            let max_ordinal: u64 = self.max_ordinal_present();
17479            encoder.write_num(max_ordinal, offset);
17480            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17481            // Calling encoder.out_of_line_offset(0) is not allowed.
17482            if max_ordinal == 0 {
17483                return Ok(());
17484            }
17485            depth.increment()?;
17486            let envelope_size = 8;
17487            let bytes_len = max_ordinal as usize * envelope_size;
17488            #[allow(unused_variables)]
17489            let offset = encoder.out_of_line_offset(bytes_len);
17490            let mut _prev_end_offset: usize = 0;
17491            if 1 > max_ordinal {
17492                return Ok(());
17493            }
17494
17495            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17496            // are envelope_size bytes.
17497            let cur_offset: usize = (1 - 1) * envelope_size;
17498
17499            // Zero reserved fields.
17500            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17501
17502            // Safety:
17503            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17504            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17505            //   envelope_size bytes, there is always sufficient room.
17506            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17507                self.i_base.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17508                encoder,
17509                offset + cur_offset,
17510                depth,
17511            )?;
17512
17513            _prev_end_offset = cur_offset + envelope_size;
17514            if 2 > max_ordinal {
17515                return Ok(());
17516            }
17517
17518            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17519            // are envelope_size bytes.
17520            let cur_offset: usize = (2 - 1) * envelope_size;
17521
17522            // Zero reserved fields.
17523            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17524
17525            // Safety:
17526            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17527            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17528            //   envelope_size bytes, there is always sufficient room.
17529            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17530                self.i_min.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17531                encoder,
17532                offset + cur_offset,
17533                depth,
17534            )?;
17535
17536            _prev_end_offset = cur_offset + envelope_size;
17537            if 3 > max_ordinal {
17538                return Ok(());
17539            }
17540
17541            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17542            // are envelope_size bytes.
17543            let cur_offset: usize = (3 - 1) * envelope_size;
17544
17545            // Zero reserved fields.
17546            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17547
17548            // Safety:
17549            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17550            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17551            //   envelope_size bytes, there is always sufficient room.
17552            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17553                self.i_max.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17554                encoder,
17555                offset + cur_offset,
17556                depth,
17557            )?;
17558
17559            _prev_end_offset = cur_offset + envelope_size;
17560            if 4 > max_ordinal {
17561                return Ok(());
17562            }
17563
17564            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17565            // are envelope_size bytes.
17566            let cur_offset: usize = (4 - 1) * envelope_size;
17567
17568            // Zero reserved fields.
17569            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17570
17571            // Safety:
17572            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17573            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17574            //   envelope_size bytes, there is always sufficient room.
17575            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17576                self.p_base.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17577                encoder,
17578                offset + cur_offset,
17579                depth,
17580            )?;
17581
17582            _prev_end_offset = cur_offset + envelope_size;
17583            if 5 > max_ordinal {
17584                return Ok(());
17585            }
17586
17587            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17588            // are envelope_size bytes.
17589            let cur_offset: usize = (5 - 1) * envelope_size;
17590
17591            // Zero reserved fields.
17592            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17593
17594            // Safety:
17595            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17596            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17597            //   envelope_size bytes, there is always sufficient room.
17598            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17599                self.p_min.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17600                encoder,
17601                offset + cur_offset,
17602                depth,
17603            )?;
17604
17605            _prev_end_offset = cur_offset + envelope_size;
17606            if 6 > max_ordinal {
17607                return Ok(());
17608            }
17609
17610            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17611            // are envelope_size bytes.
17612            let cur_offset: usize = (6 - 1) * envelope_size;
17613
17614            // Zero reserved fields.
17615            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17616
17617            // Safety:
17618            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17619            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17620            //   envelope_size bytes, there is always sufficient room.
17621            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17622                self.p_max.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17623                encoder,
17624                offset + cur_offset,
17625                depth,
17626            )?;
17627
17628            _prev_end_offset = cur_offset + envelope_size;
17629
17630            Ok(())
17631        }
17632    }
17633
17634    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
17635        for H264QuantizationParameters
17636    {
17637        #[inline(always)]
17638        fn new_empty() -> Self {
17639            Self::default()
17640        }
17641
17642        unsafe fn decode(
17643            &mut self,
17644            decoder: &mut fidl::encoding::Decoder<'_, D>,
17645            offset: usize,
17646            mut depth: fidl::encoding::Depth,
17647        ) -> fidl::Result<()> {
17648            decoder.debug_check_bounds::<Self>(offset);
17649            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17650                None => return Err(fidl::Error::NotNullable),
17651                Some(len) => len,
17652            };
17653            // Calling decoder.out_of_line_offset(0) is not allowed.
17654            if len == 0 {
17655                return Ok(());
17656            };
17657            depth.increment()?;
17658            let envelope_size = 8;
17659            let bytes_len = len * envelope_size;
17660            let offset = decoder.out_of_line_offset(bytes_len)?;
17661            // Decode the envelope for each type.
17662            let mut _next_ordinal_to_read = 0;
17663            let mut next_offset = offset;
17664            let end_offset = offset + bytes_len;
17665            _next_ordinal_to_read += 1;
17666            if next_offset >= end_offset {
17667                return Ok(());
17668            }
17669
17670            // Decode unknown envelopes for gaps in ordinals.
17671            while _next_ordinal_to_read < 1 {
17672                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17673                _next_ordinal_to_read += 1;
17674                next_offset += envelope_size;
17675            }
17676
17677            let next_out_of_line = decoder.next_out_of_line();
17678            let handles_before = decoder.remaining_handles();
17679            if let Some((inlined, num_bytes, num_handles)) =
17680                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17681            {
17682                let member_inline_size =
17683                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17684                if inlined != (member_inline_size <= 4) {
17685                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17686                }
17687                let inner_offset;
17688                let mut inner_depth = depth.clone();
17689                if inlined {
17690                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17691                    inner_offset = next_offset;
17692                } else {
17693                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17694                    inner_depth.increment()?;
17695                }
17696                let val_ref = self.i_base.get_or_insert_with(|| fidl::new_empty!(u32, D));
17697                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17698                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17699                {
17700                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17701                }
17702                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17703                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17704                }
17705            }
17706
17707            next_offset += envelope_size;
17708            _next_ordinal_to_read += 1;
17709            if next_offset >= end_offset {
17710                return Ok(());
17711            }
17712
17713            // Decode unknown envelopes for gaps in ordinals.
17714            while _next_ordinal_to_read < 2 {
17715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17716                _next_ordinal_to_read += 1;
17717                next_offset += envelope_size;
17718            }
17719
17720            let next_out_of_line = decoder.next_out_of_line();
17721            let handles_before = decoder.remaining_handles();
17722            if let Some((inlined, num_bytes, num_handles)) =
17723                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17724            {
17725                let member_inline_size =
17726                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17727                if inlined != (member_inline_size <= 4) {
17728                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17729                }
17730                let inner_offset;
17731                let mut inner_depth = depth.clone();
17732                if inlined {
17733                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17734                    inner_offset = next_offset;
17735                } else {
17736                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17737                    inner_depth.increment()?;
17738                }
17739                let val_ref = self.i_min.get_or_insert_with(|| fidl::new_empty!(u32, D));
17740                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17741                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17742                {
17743                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17744                }
17745                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17746                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17747                }
17748            }
17749
17750            next_offset += envelope_size;
17751            _next_ordinal_to_read += 1;
17752            if next_offset >= end_offset {
17753                return Ok(());
17754            }
17755
17756            // Decode unknown envelopes for gaps in ordinals.
17757            while _next_ordinal_to_read < 3 {
17758                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17759                _next_ordinal_to_read += 1;
17760                next_offset += envelope_size;
17761            }
17762
17763            let next_out_of_line = decoder.next_out_of_line();
17764            let handles_before = decoder.remaining_handles();
17765            if let Some((inlined, num_bytes, num_handles)) =
17766                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17767            {
17768                let member_inline_size =
17769                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17770                if inlined != (member_inline_size <= 4) {
17771                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17772                }
17773                let inner_offset;
17774                let mut inner_depth = depth.clone();
17775                if inlined {
17776                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17777                    inner_offset = next_offset;
17778                } else {
17779                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17780                    inner_depth.increment()?;
17781                }
17782                let val_ref = self.i_max.get_or_insert_with(|| fidl::new_empty!(u32, D));
17783                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17784                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17785                {
17786                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17787                }
17788                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17789                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17790                }
17791            }
17792
17793            next_offset += envelope_size;
17794            _next_ordinal_to_read += 1;
17795            if next_offset >= end_offset {
17796                return Ok(());
17797            }
17798
17799            // Decode unknown envelopes for gaps in ordinals.
17800            while _next_ordinal_to_read < 4 {
17801                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17802                _next_ordinal_to_read += 1;
17803                next_offset += envelope_size;
17804            }
17805
17806            let next_out_of_line = decoder.next_out_of_line();
17807            let handles_before = decoder.remaining_handles();
17808            if let Some((inlined, num_bytes, num_handles)) =
17809                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17810            {
17811                let member_inline_size =
17812                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17813                if inlined != (member_inline_size <= 4) {
17814                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17815                }
17816                let inner_offset;
17817                let mut inner_depth = depth.clone();
17818                if inlined {
17819                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17820                    inner_offset = next_offset;
17821                } else {
17822                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17823                    inner_depth.increment()?;
17824                }
17825                let val_ref = self.p_base.get_or_insert_with(|| fidl::new_empty!(u32, D));
17826                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17827                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17828                {
17829                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17830                }
17831                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17832                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17833                }
17834            }
17835
17836            next_offset += envelope_size;
17837            _next_ordinal_to_read += 1;
17838            if next_offset >= end_offset {
17839                return Ok(());
17840            }
17841
17842            // Decode unknown envelopes for gaps in ordinals.
17843            while _next_ordinal_to_read < 5 {
17844                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17845                _next_ordinal_to_read += 1;
17846                next_offset += envelope_size;
17847            }
17848
17849            let next_out_of_line = decoder.next_out_of_line();
17850            let handles_before = decoder.remaining_handles();
17851            if let Some((inlined, num_bytes, num_handles)) =
17852                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17853            {
17854                let member_inline_size =
17855                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17856                if inlined != (member_inline_size <= 4) {
17857                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17858                }
17859                let inner_offset;
17860                let mut inner_depth = depth.clone();
17861                if inlined {
17862                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17863                    inner_offset = next_offset;
17864                } else {
17865                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17866                    inner_depth.increment()?;
17867                }
17868                let val_ref = self.p_min.get_or_insert_with(|| fidl::new_empty!(u32, D));
17869                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17870                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17871                {
17872                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17873                }
17874                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17875                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17876                }
17877            }
17878
17879            next_offset += envelope_size;
17880            _next_ordinal_to_read += 1;
17881            if next_offset >= end_offset {
17882                return Ok(());
17883            }
17884
17885            // Decode unknown envelopes for gaps in ordinals.
17886            while _next_ordinal_to_read < 6 {
17887                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17888                _next_ordinal_to_read += 1;
17889                next_offset += envelope_size;
17890            }
17891
17892            let next_out_of_line = decoder.next_out_of_line();
17893            let handles_before = decoder.remaining_handles();
17894            if let Some((inlined, num_bytes, num_handles)) =
17895                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17896            {
17897                let member_inline_size =
17898                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17899                if inlined != (member_inline_size <= 4) {
17900                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17901                }
17902                let inner_offset;
17903                let mut inner_depth = depth.clone();
17904                if inlined {
17905                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17906                    inner_offset = next_offset;
17907                } else {
17908                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17909                    inner_depth.increment()?;
17910                }
17911                let val_ref = self.p_max.get_or_insert_with(|| fidl::new_empty!(u32, D));
17912                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17913                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17914                {
17915                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17916                }
17917                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17918                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17919                }
17920            }
17921
17922            next_offset += envelope_size;
17923
17924            // Decode the remaining unknown envelopes.
17925            while next_offset < end_offset {
17926                _next_ordinal_to_read += 1;
17927                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17928                next_offset += envelope_size;
17929            }
17930
17931            Ok(())
17932        }
17933    }
17934
17935    impl HevcEncoderSettings {
17936        #[inline(always)]
17937        fn max_ordinal_present(&self) -> u64 {
17938            if let Some(_) = self.gop_size {
17939                return 3;
17940            }
17941            if let Some(_) = self.frame_rate {
17942                return 2;
17943            }
17944            if let Some(_) = self.bit_rate {
17945                return 1;
17946            }
17947            0
17948        }
17949    }
17950
17951    impl fidl::encoding::ValueTypeMarker for HevcEncoderSettings {
17952        type Borrowed<'a> = &'a Self;
17953        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17954            value
17955        }
17956    }
17957
17958    unsafe impl fidl::encoding::TypeMarker for HevcEncoderSettings {
17959        type Owned = Self;
17960
17961        #[inline(always)]
17962        fn inline_align(_context: fidl::encoding::Context) -> usize {
17963            8
17964        }
17965
17966        #[inline(always)]
17967        fn inline_size(_context: fidl::encoding::Context) -> usize {
17968            16
17969        }
17970    }
17971
17972    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HevcEncoderSettings, D>
17973        for &HevcEncoderSettings
17974    {
17975        unsafe fn encode(
17976            self,
17977            encoder: &mut fidl::encoding::Encoder<'_, D>,
17978            offset: usize,
17979            mut depth: fidl::encoding::Depth,
17980        ) -> fidl::Result<()> {
17981            encoder.debug_check_bounds::<HevcEncoderSettings>(offset);
17982            // Vector header
17983            let max_ordinal: u64 = self.max_ordinal_present();
17984            encoder.write_num(max_ordinal, offset);
17985            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17986            // Calling encoder.out_of_line_offset(0) is not allowed.
17987            if max_ordinal == 0 {
17988                return Ok(());
17989            }
17990            depth.increment()?;
17991            let envelope_size = 8;
17992            let bytes_len = max_ordinal as usize * envelope_size;
17993            #[allow(unused_variables)]
17994            let offset = encoder.out_of_line_offset(bytes_len);
17995            let mut _prev_end_offset: usize = 0;
17996            if 1 > max_ordinal {
17997                return Ok(());
17998            }
17999
18000            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18001            // are envelope_size bytes.
18002            let cur_offset: usize = (1 - 1) * envelope_size;
18003
18004            // Zero reserved fields.
18005            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18006
18007            // Safety:
18008            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18009            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18010            //   envelope_size bytes, there is always sufficient room.
18011            fidl::encoding::encode_in_envelope_optional::<u32, D>(
18012                self.bit_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
18013                encoder,
18014                offset + cur_offset,
18015                depth,
18016            )?;
18017
18018            _prev_end_offset = cur_offset + envelope_size;
18019            if 2 > max_ordinal {
18020                return Ok(());
18021            }
18022
18023            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18024            // are envelope_size bytes.
18025            let cur_offset: usize = (2 - 1) * envelope_size;
18026
18027            // Zero reserved fields.
18028            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18029
18030            // Safety:
18031            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18032            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18033            //   envelope_size bytes, there is always sufficient room.
18034            fidl::encoding::encode_in_envelope_optional::<u32, D>(
18035                self.frame_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
18036                encoder,
18037                offset + cur_offset,
18038                depth,
18039            )?;
18040
18041            _prev_end_offset = cur_offset + envelope_size;
18042            if 3 > max_ordinal {
18043                return Ok(());
18044            }
18045
18046            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18047            // are envelope_size bytes.
18048            let cur_offset: usize = (3 - 1) * envelope_size;
18049
18050            // Zero reserved fields.
18051            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18052
18053            // Safety:
18054            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18055            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18056            //   envelope_size bytes, there is always sufficient room.
18057            fidl::encoding::encode_in_envelope_optional::<u32, D>(
18058                self.gop_size.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
18059                encoder,
18060                offset + cur_offset,
18061                depth,
18062            )?;
18063
18064            _prev_end_offset = cur_offset + envelope_size;
18065
18066            Ok(())
18067        }
18068    }
18069
18070    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HevcEncoderSettings {
18071        #[inline(always)]
18072        fn new_empty() -> Self {
18073            Self::default()
18074        }
18075
18076        unsafe fn decode(
18077            &mut self,
18078            decoder: &mut fidl::encoding::Decoder<'_, D>,
18079            offset: usize,
18080            mut depth: fidl::encoding::Depth,
18081        ) -> fidl::Result<()> {
18082            decoder.debug_check_bounds::<Self>(offset);
18083            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18084                None => return Err(fidl::Error::NotNullable),
18085                Some(len) => len,
18086            };
18087            // Calling decoder.out_of_line_offset(0) is not allowed.
18088            if len == 0 {
18089                return Ok(());
18090            };
18091            depth.increment()?;
18092            let envelope_size = 8;
18093            let bytes_len = len * envelope_size;
18094            let offset = decoder.out_of_line_offset(bytes_len)?;
18095            // Decode the envelope for each type.
18096            let mut _next_ordinal_to_read = 0;
18097            let mut next_offset = offset;
18098            let end_offset = offset + bytes_len;
18099            _next_ordinal_to_read += 1;
18100            if next_offset >= end_offset {
18101                return Ok(());
18102            }
18103
18104            // Decode unknown envelopes for gaps in ordinals.
18105            while _next_ordinal_to_read < 1 {
18106                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18107                _next_ordinal_to_read += 1;
18108                next_offset += envelope_size;
18109            }
18110
18111            let next_out_of_line = decoder.next_out_of_line();
18112            let handles_before = decoder.remaining_handles();
18113            if let Some((inlined, num_bytes, num_handles)) =
18114                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18115            {
18116                let member_inline_size =
18117                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18118                if inlined != (member_inline_size <= 4) {
18119                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18120                }
18121                let inner_offset;
18122                let mut inner_depth = depth.clone();
18123                if inlined {
18124                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18125                    inner_offset = next_offset;
18126                } else {
18127                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18128                    inner_depth.increment()?;
18129                }
18130                let val_ref = self.bit_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
18131                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18132                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18133                {
18134                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18135                }
18136                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18137                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18138                }
18139            }
18140
18141            next_offset += envelope_size;
18142            _next_ordinal_to_read += 1;
18143            if next_offset >= end_offset {
18144                return Ok(());
18145            }
18146
18147            // Decode unknown envelopes for gaps in ordinals.
18148            while _next_ordinal_to_read < 2 {
18149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18150                _next_ordinal_to_read += 1;
18151                next_offset += envelope_size;
18152            }
18153
18154            let next_out_of_line = decoder.next_out_of_line();
18155            let handles_before = decoder.remaining_handles();
18156            if let Some((inlined, num_bytes, num_handles)) =
18157                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18158            {
18159                let member_inline_size =
18160                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18161                if inlined != (member_inline_size <= 4) {
18162                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18163                }
18164                let inner_offset;
18165                let mut inner_depth = depth.clone();
18166                if inlined {
18167                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18168                    inner_offset = next_offset;
18169                } else {
18170                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18171                    inner_depth.increment()?;
18172                }
18173                let val_ref = self.frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
18174                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18175                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18176                {
18177                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18178                }
18179                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18180                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18181                }
18182            }
18183
18184            next_offset += envelope_size;
18185            _next_ordinal_to_read += 1;
18186            if next_offset >= end_offset {
18187                return Ok(());
18188            }
18189
18190            // Decode unknown envelopes for gaps in ordinals.
18191            while _next_ordinal_to_read < 3 {
18192                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18193                _next_ordinal_to_read += 1;
18194                next_offset += envelope_size;
18195            }
18196
18197            let next_out_of_line = decoder.next_out_of_line();
18198            let handles_before = decoder.remaining_handles();
18199            if let Some((inlined, num_bytes, num_handles)) =
18200                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18201            {
18202                let member_inline_size =
18203                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18204                if inlined != (member_inline_size <= 4) {
18205                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18206                }
18207                let inner_offset;
18208                let mut inner_depth = depth.clone();
18209                if inlined {
18210                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18211                    inner_offset = next_offset;
18212                } else {
18213                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18214                    inner_depth.increment()?;
18215                }
18216                let val_ref = self.gop_size.get_or_insert_with(|| fidl::new_empty!(u32, D));
18217                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18218                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18219                {
18220                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18221                }
18222                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18223                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18224                }
18225            }
18226
18227            next_offset += envelope_size;
18228
18229            // Decode the remaining unknown envelopes.
18230            while next_offset < end_offset {
18231                _next_ordinal_to_read += 1;
18232                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18233                next_offset += envelope_size;
18234            }
18235
18236            Ok(())
18237        }
18238    }
18239
18240    impl InputAudioCapturerConfiguration {
18241        #[inline(always)]
18242        fn max_ordinal_present(&self) -> u64 {
18243            if let Some(_) = self.usage2 {
18244                return 2;
18245            }
18246            if let Some(_) = self.usage {
18247                return 1;
18248            }
18249            0
18250        }
18251    }
18252
18253    impl fidl::encoding::ValueTypeMarker for InputAudioCapturerConfiguration {
18254        type Borrowed<'a> = &'a Self;
18255        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18256            value
18257        }
18258    }
18259
18260    unsafe impl fidl::encoding::TypeMarker for InputAudioCapturerConfiguration {
18261        type Owned = Self;
18262
18263        #[inline(always)]
18264        fn inline_align(_context: fidl::encoding::Context) -> usize {
18265            8
18266        }
18267
18268        #[inline(always)]
18269        fn inline_size(_context: fidl::encoding::Context) -> usize {
18270            16
18271        }
18272    }
18273
18274    unsafe impl<D: fidl::encoding::ResourceDialect>
18275        fidl::encoding::Encode<InputAudioCapturerConfiguration, D>
18276        for &InputAudioCapturerConfiguration
18277    {
18278        unsafe fn encode(
18279            self,
18280            encoder: &mut fidl::encoding::Encoder<'_, D>,
18281            offset: usize,
18282            mut depth: fidl::encoding::Depth,
18283        ) -> fidl::Result<()> {
18284            encoder.debug_check_bounds::<InputAudioCapturerConfiguration>(offset);
18285            // Vector header
18286            let max_ordinal: u64 = self.max_ordinal_present();
18287            encoder.write_num(max_ordinal, offset);
18288            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18289            // Calling encoder.out_of_line_offset(0) is not allowed.
18290            if max_ordinal == 0 {
18291                return Ok(());
18292            }
18293            depth.increment()?;
18294            let envelope_size = 8;
18295            let bytes_len = max_ordinal as usize * envelope_size;
18296            #[allow(unused_variables)]
18297            let offset = encoder.out_of_line_offset(bytes_len);
18298            let mut _prev_end_offset: usize = 0;
18299            if 1 > max_ordinal {
18300                return Ok(());
18301            }
18302
18303            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18304            // are envelope_size bytes.
18305            let cur_offset: usize = (1 - 1) * envelope_size;
18306
18307            // Zero reserved fields.
18308            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18309
18310            // Safety:
18311            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18312            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18313            //   envelope_size bytes, there is always sufficient room.
18314            fidl::encoding::encode_in_envelope_optional::<AudioCaptureUsage, D>(
18315                self.usage
18316                    .as_ref()
18317                    .map(<AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow),
18318                encoder,
18319                offset + cur_offset,
18320                depth,
18321            )?;
18322
18323            _prev_end_offset = cur_offset + envelope_size;
18324            if 2 > max_ordinal {
18325                return Ok(());
18326            }
18327
18328            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18329            // are envelope_size bytes.
18330            let cur_offset: usize = (2 - 1) * envelope_size;
18331
18332            // Zero reserved fields.
18333            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18334
18335            // Safety:
18336            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18337            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18338            //   envelope_size bytes, there is always sufficient room.
18339            fidl::encoding::encode_in_envelope_optional::<AudioCaptureUsage2, D>(
18340                self.usage2
18341                    .as_ref()
18342                    .map(<AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow),
18343                encoder,
18344                offset + cur_offset,
18345                depth,
18346            )?;
18347
18348            _prev_end_offset = cur_offset + envelope_size;
18349
18350            Ok(())
18351        }
18352    }
18353
18354    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
18355        for InputAudioCapturerConfiguration
18356    {
18357        #[inline(always)]
18358        fn new_empty() -> Self {
18359            Self::default()
18360        }
18361
18362        unsafe fn decode(
18363            &mut self,
18364            decoder: &mut fidl::encoding::Decoder<'_, D>,
18365            offset: usize,
18366            mut depth: fidl::encoding::Depth,
18367        ) -> fidl::Result<()> {
18368            decoder.debug_check_bounds::<Self>(offset);
18369            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18370                None => return Err(fidl::Error::NotNullable),
18371                Some(len) => len,
18372            };
18373            // Calling decoder.out_of_line_offset(0) is not allowed.
18374            if len == 0 {
18375                return Ok(());
18376            };
18377            depth.increment()?;
18378            let envelope_size = 8;
18379            let bytes_len = len * envelope_size;
18380            let offset = decoder.out_of_line_offset(bytes_len)?;
18381            // Decode the envelope for each type.
18382            let mut _next_ordinal_to_read = 0;
18383            let mut next_offset = offset;
18384            let end_offset = offset + bytes_len;
18385            _next_ordinal_to_read += 1;
18386            if next_offset >= end_offset {
18387                return Ok(());
18388            }
18389
18390            // Decode unknown envelopes for gaps in ordinals.
18391            while _next_ordinal_to_read < 1 {
18392                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18393                _next_ordinal_to_read += 1;
18394                next_offset += envelope_size;
18395            }
18396
18397            let next_out_of_line = decoder.next_out_of_line();
18398            let handles_before = decoder.remaining_handles();
18399            if let Some((inlined, num_bytes, num_handles)) =
18400                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18401            {
18402                let member_inline_size =
18403                    <AudioCaptureUsage as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18404                if inlined != (member_inline_size <= 4) {
18405                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18406                }
18407                let inner_offset;
18408                let mut inner_depth = depth.clone();
18409                if inlined {
18410                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18411                    inner_offset = next_offset;
18412                } else {
18413                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18414                    inner_depth.increment()?;
18415                }
18416                let val_ref =
18417                    self.usage.get_or_insert_with(|| fidl::new_empty!(AudioCaptureUsage, D));
18418                fidl::decode!(AudioCaptureUsage, D, val_ref, decoder, inner_offset, inner_depth)?;
18419                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18420                {
18421                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18422                }
18423                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18424                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18425                }
18426            }
18427
18428            next_offset += envelope_size;
18429            _next_ordinal_to_read += 1;
18430            if next_offset >= end_offset {
18431                return Ok(());
18432            }
18433
18434            // Decode unknown envelopes for gaps in ordinals.
18435            while _next_ordinal_to_read < 2 {
18436                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18437                _next_ordinal_to_read += 1;
18438                next_offset += envelope_size;
18439            }
18440
18441            let next_out_of_line = decoder.next_out_of_line();
18442            let handles_before = decoder.remaining_handles();
18443            if let Some((inlined, num_bytes, num_handles)) =
18444                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18445            {
18446                let member_inline_size =
18447                    <AudioCaptureUsage2 as fidl::encoding::TypeMarker>::inline_size(
18448                        decoder.context,
18449                    );
18450                if inlined != (member_inline_size <= 4) {
18451                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18452                }
18453                let inner_offset;
18454                let mut inner_depth = depth.clone();
18455                if inlined {
18456                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18457                    inner_offset = next_offset;
18458                } else {
18459                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18460                    inner_depth.increment()?;
18461                }
18462                let val_ref =
18463                    self.usage2.get_or_insert_with(|| fidl::new_empty!(AudioCaptureUsage2, D));
18464                fidl::decode!(AudioCaptureUsage2, D, val_ref, decoder, inner_offset, inner_depth)?;
18465                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18466                {
18467                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18468                }
18469                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18470                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18471                }
18472            }
18473
18474            next_offset += envelope_size;
18475
18476            // Decode the remaining unknown envelopes.
18477            while next_offset < end_offset {
18478                _next_ordinal_to_read += 1;
18479                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18480                next_offset += envelope_size;
18481            }
18482
18483            Ok(())
18484        }
18485    }
18486
18487    impl Lc3EncoderSettings {
18488        #[inline(always)]
18489        fn max_ordinal_present(&self) -> u64 {
18490            if let Some(_) = self.frame_duration {
18491                return 2;
18492            }
18493            if let Some(_) = self.nbytes {
18494                return 1;
18495            }
18496            0
18497        }
18498    }
18499
18500    impl fidl::encoding::ValueTypeMarker for Lc3EncoderSettings {
18501        type Borrowed<'a> = &'a Self;
18502        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18503            value
18504        }
18505    }
18506
18507    unsafe impl fidl::encoding::TypeMarker for Lc3EncoderSettings {
18508        type Owned = Self;
18509
18510        #[inline(always)]
18511        fn inline_align(_context: fidl::encoding::Context) -> usize {
18512            8
18513        }
18514
18515        #[inline(always)]
18516        fn inline_size(_context: fidl::encoding::Context) -> usize {
18517            16
18518        }
18519    }
18520
18521    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Lc3EncoderSettings, D>
18522        for &Lc3EncoderSettings
18523    {
18524        unsafe fn encode(
18525            self,
18526            encoder: &mut fidl::encoding::Encoder<'_, D>,
18527            offset: usize,
18528            mut depth: fidl::encoding::Depth,
18529        ) -> fidl::Result<()> {
18530            encoder.debug_check_bounds::<Lc3EncoderSettings>(offset);
18531            // Vector header
18532            let max_ordinal: u64 = self.max_ordinal_present();
18533            encoder.write_num(max_ordinal, offset);
18534            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18535            // Calling encoder.out_of_line_offset(0) is not allowed.
18536            if max_ordinal == 0 {
18537                return Ok(());
18538            }
18539            depth.increment()?;
18540            let envelope_size = 8;
18541            let bytes_len = max_ordinal as usize * envelope_size;
18542            #[allow(unused_variables)]
18543            let offset = encoder.out_of_line_offset(bytes_len);
18544            let mut _prev_end_offset: usize = 0;
18545            if 1 > max_ordinal {
18546                return Ok(());
18547            }
18548
18549            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18550            // are envelope_size bytes.
18551            let cur_offset: usize = (1 - 1) * envelope_size;
18552
18553            // Zero reserved fields.
18554            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18555
18556            // Safety:
18557            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18558            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18559            //   envelope_size bytes, there is always sufficient room.
18560            fidl::encoding::encode_in_envelope_optional::<u16, D>(
18561                self.nbytes.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
18562                encoder,
18563                offset + cur_offset,
18564                depth,
18565            )?;
18566
18567            _prev_end_offset = cur_offset + envelope_size;
18568            if 2 > max_ordinal {
18569                return Ok(());
18570            }
18571
18572            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18573            // are envelope_size bytes.
18574            let cur_offset: usize = (2 - 1) * envelope_size;
18575
18576            // Zero reserved fields.
18577            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18578
18579            // Safety:
18580            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18581            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18582            //   envelope_size bytes, there is always sufficient room.
18583            fidl::encoding::encode_in_envelope_optional::<Lc3FrameDuration, D>(
18584                self.frame_duration
18585                    .as_ref()
18586                    .map(<Lc3FrameDuration as fidl::encoding::ValueTypeMarker>::borrow),
18587                encoder,
18588                offset + cur_offset,
18589                depth,
18590            )?;
18591
18592            _prev_end_offset = cur_offset + envelope_size;
18593
18594            Ok(())
18595        }
18596    }
18597
18598    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Lc3EncoderSettings {
18599        #[inline(always)]
18600        fn new_empty() -> Self {
18601            Self::default()
18602        }
18603
18604        unsafe fn decode(
18605            &mut self,
18606            decoder: &mut fidl::encoding::Decoder<'_, D>,
18607            offset: usize,
18608            mut depth: fidl::encoding::Depth,
18609        ) -> fidl::Result<()> {
18610            decoder.debug_check_bounds::<Self>(offset);
18611            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18612                None => return Err(fidl::Error::NotNullable),
18613                Some(len) => len,
18614            };
18615            // Calling decoder.out_of_line_offset(0) is not allowed.
18616            if len == 0 {
18617                return Ok(());
18618            };
18619            depth.increment()?;
18620            let envelope_size = 8;
18621            let bytes_len = len * envelope_size;
18622            let offset = decoder.out_of_line_offset(bytes_len)?;
18623            // Decode the envelope for each type.
18624            let mut _next_ordinal_to_read = 0;
18625            let mut next_offset = offset;
18626            let end_offset = offset + bytes_len;
18627            _next_ordinal_to_read += 1;
18628            if next_offset >= end_offset {
18629                return Ok(());
18630            }
18631
18632            // Decode unknown envelopes for gaps in ordinals.
18633            while _next_ordinal_to_read < 1 {
18634                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18635                _next_ordinal_to_read += 1;
18636                next_offset += envelope_size;
18637            }
18638
18639            let next_out_of_line = decoder.next_out_of_line();
18640            let handles_before = decoder.remaining_handles();
18641            if let Some((inlined, num_bytes, num_handles)) =
18642                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18643            {
18644                let member_inline_size =
18645                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18646                if inlined != (member_inline_size <= 4) {
18647                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18648                }
18649                let inner_offset;
18650                let mut inner_depth = depth.clone();
18651                if inlined {
18652                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18653                    inner_offset = next_offset;
18654                } else {
18655                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18656                    inner_depth.increment()?;
18657                }
18658                let val_ref = self.nbytes.get_or_insert_with(|| fidl::new_empty!(u16, D));
18659                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
18660                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18661                {
18662                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18663                }
18664                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18665                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18666                }
18667            }
18668
18669            next_offset += envelope_size;
18670            _next_ordinal_to_read += 1;
18671            if next_offset >= end_offset {
18672                return Ok(());
18673            }
18674
18675            // Decode unknown envelopes for gaps in ordinals.
18676            while _next_ordinal_to_read < 2 {
18677                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18678                _next_ordinal_to_read += 1;
18679                next_offset += envelope_size;
18680            }
18681
18682            let next_out_of_line = decoder.next_out_of_line();
18683            let handles_before = decoder.remaining_handles();
18684            if let Some((inlined, num_bytes, num_handles)) =
18685                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18686            {
18687                let member_inline_size =
18688                    <Lc3FrameDuration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18689                if inlined != (member_inline_size <= 4) {
18690                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18691                }
18692                let inner_offset;
18693                let mut inner_depth = depth.clone();
18694                if inlined {
18695                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18696                    inner_offset = next_offset;
18697                } else {
18698                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18699                    inner_depth.increment()?;
18700                }
18701                let val_ref = self
18702                    .frame_duration
18703                    .get_or_insert_with(|| fidl::new_empty!(Lc3FrameDuration, D));
18704                fidl::decode!(Lc3FrameDuration, D, val_ref, decoder, inner_offset, inner_depth)?;
18705                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18706                {
18707                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18708                }
18709                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18710                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18711                }
18712            }
18713
18714            next_offset += envelope_size;
18715
18716            // Decode the remaining unknown envelopes.
18717            while next_offset < end_offset {
18718                _next_ordinal_to_read += 1;
18719                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18720                next_offset += envelope_size;
18721            }
18722
18723            Ok(())
18724        }
18725    }
18726
18727    impl LoopbackAudioCapturerConfiguration {
18728        #[inline(always)]
18729        fn max_ordinal_present(&self) -> u64 {
18730            0
18731        }
18732    }
18733
18734    impl fidl::encoding::ValueTypeMarker for LoopbackAudioCapturerConfiguration {
18735        type Borrowed<'a> = &'a Self;
18736        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18737            value
18738        }
18739    }
18740
18741    unsafe impl fidl::encoding::TypeMarker for LoopbackAudioCapturerConfiguration {
18742        type Owned = Self;
18743
18744        #[inline(always)]
18745        fn inline_align(_context: fidl::encoding::Context) -> usize {
18746            8
18747        }
18748
18749        #[inline(always)]
18750        fn inline_size(_context: fidl::encoding::Context) -> usize {
18751            16
18752        }
18753    }
18754
18755    unsafe impl<D: fidl::encoding::ResourceDialect>
18756        fidl::encoding::Encode<LoopbackAudioCapturerConfiguration, D>
18757        for &LoopbackAudioCapturerConfiguration
18758    {
18759        unsafe fn encode(
18760            self,
18761            encoder: &mut fidl::encoding::Encoder<'_, D>,
18762            offset: usize,
18763            mut depth: fidl::encoding::Depth,
18764        ) -> fidl::Result<()> {
18765            encoder.debug_check_bounds::<LoopbackAudioCapturerConfiguration>(offset);
18766            // Vector header
18767            let max_ordinal: u64 = self.max_ordinal_present();
18768            encoder.write_num(max_ordinal, offset);
18769            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18770            // Calling encoder.out_of_line_offset(0) is not allowed.
18771            if max_ordinal == 0 {
18772                return Ok(());
18773            }
18774            depth.increment()?;
18775            let envelope_size = 8;
18776            let bytes_len = max_ordinal as usize * envelope_size;
18777            #[allow(unused_variables)]
18778            let offset = encoder.out_of_line_offset(bytes_len);
18779            let mut _prev_end_offset: usize = 0;
18780
18781            Ok(())
18782        }
18783    }
18784
18785    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
18786        for LoopbackAudioCapturerConfiguration
18787    {
18788        #[inline(always)]
18789        fn new_empty() -> Self {
18790            Self::default()
18791        }
18792
18793        unsafe fn decode(
18794            &mut self,
18795            decoder: &mut fidl::encoding::Decoder<'_, D>,
18796            offset: usize,
18797            mut depth: fidl::encoding::Depth,
18798        ) -> fidl::Result<()> {
18799            decoder.debug_check_bounds::<Self>(offset);
18800            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18801                None => return Err(fidl::Error::NotNullable),
18802                Some(len) => len,
18803            };
18804            // Calling decoder.out_of_line_offset(0) is not allowed.
18805            if len == 0 {
18806                return Ok(());
18807            };
18808            depth.increment()?;
18809            let envelope_size = 8;
18810            let bytes_len = len * envelope_size;
18811            let offset = decoder.out_of_line_offset(bytes_len)?;
18812            // Decode the envelope for each type.
18813            let mut _next_ordinal_to_read = 0;
18814            let mut next_offset = offset;
18815            let end_offset = offset + bytes_len;
18816
18817            // Decode the remaining unknown envelopes.
18818            while next_offset < end_offset {
18819                _next_ordinal_to_read += 1;
18820                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18821                next_offset += envelope_size;
18822            }
18823
18824            Ok(())
18825        }
18826    }
18827
18828    impl MSbcEncoderSettings {
18829        #[inline(always)]
18830        fn max_ordinal_present(&self) -> u64 {
18831            0
18832        }
18833    }
18834
18835    impl fidl::encoding::ValueTypeMarker for MSbcEncoderSettings {
18836        type Borrowed<'a> = &'a Self;
18837        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18838            value
18839        }
18840    }
18841
18842    unsafe impl fidl::encoding::TypeMarker for MSbcEncoderSettings {
18843        type Owned = Self;
18844
18845        #[inline(always)]
18846        fn inline_align(_context: fidl::encoding::Context) -> usize {
18847            8
18848        }
18849
18850        #[inline(always)]
18851        fn inline_size(_context: fidl::encoding::Context) -> usize {
18852            16
18853        }
18854    }
18855
18856    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MSbcEncoderSettings, D>
18857        for &MSbcEncoderSettings
18858    {
18859        unsafe fn encode(
18860            self,
18861            encoder: &mut fidl::encoding::Encoder<'_, D>,
18862            offset: usize,
18863            mut depth: fidl::encoding::Depth,
18864        ) -> fidl::Result<()> {
18865            encoder.debug_check_bounds::<MSbcEncoderSettings>(offset);
18866            // Vector header
18867            let max_ordinal: u64 = self.max_ordinal_present();
18868            encoder.write_num(max_ordinal, offset);
18869            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18870            // Calling encoder.out_of_line_offset(0) is not allowed.
18871            if max_ordinal == 0 {
18872                return Ok(());
18873            }
18874            depth.increment()?;
18875            let envelope_size = 8;
18876            let bytes_len = max_ordinal as usize * envelope_size;
18877            #[allow(unused_variables)]
18878            let offset = encoder.out_of_line_offset(bytes_len);
18879            let mut _prev_end_offset: usize = 0;
18880
18881            Ok(())
18882        }
18883    }
18884
18885    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MSbcEncoderSettings {
18886        #[inline(always)]
18887        fn new_empty() -> Self {
18888            Self::default()
18889        }
18890
18891        unsafe fn decode(
18892            &mut self,
18893            decoder: &mut fidl::encoding::Decoder<'_, D>,
18894            offset: usize,
18895            mut depth: fidl::encoding::Depth,
18896        ) -> fidl::Result<()> {
18897            decoder.debug_check_bounds::<Self>(offset);
18898            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18899                None => return Err(fidl::Error::NotNullable),
18900                Some(len) => len,
18901            };
18902            // Calling decoder.out_of_line_offset(0) is not allowed.
18903            if len == 0 {
18904                return Ok(());
18905            };
18906            depth.increment()?;
18907            let envelope_size = 8;
18908            let bytes_len = len * envelope_size;
18909            let offset = decoder.out_of_line_offset(bytes_len)?;
18910            // Decode the envelope for each type.
18911            let mut _next_ordinal_to_read = 0;
18912            let mut next_offset = offset;
18913            let end_offset = offset + bytes_len;
18914
18915            // Decode the remaining unknown envelopes.
18916            while next_offset < end_offset {
18917                _next_ordinal_to_read += 1;
18918                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18919                next_offset += envelope_size;
18920            }
18921
18922            Ok(())
18923        }
18924    }
18925
18926    impl Packet {
18927        #[inline(always)]
18928        fn max_ordinal_present(&self) -> u64 {
18929            if let Some(_) = self.key_frame {
18930                return 9;
18931            }
18932            if let Some(_) = self.known_end_access_unit {
18933                return 8;
18934            }
18935            if let Some(_) = self.start_access_unit {
18936                return 7;
18937            }
18938            if let Some(_) = self.timestamp_ish {
18939                return 6;
18940            }
18941            if let Some(_) = self.valid_length_bytes {
18942                return 5;
18943            }
18944            if let Some(_) = self.start_offset {
18945                return 4;
18946            }
18947            if let Some(_) = self.stream_lifetime_ordinal {
18948                return 3;
18949            }
18950            if let Some(_) = self.buffer_index {
18951                return 2;
18952            }
18953            if let Some(_) = self.header {
18954                return 1;
18955            }
18956            0
18957        }
18958    }
18959
18960    impl fidl::encoding::ValueTypeMarker for Packet {
18961        type Borrowed<'a> = &'a Self;
18962        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18963            value
18964        }
18965    }
18966
18967    unsafe impl fidl::encoding::TypeMarker for Packet {
18968        type Owned = Self;
18969
18970        #[inline(always)]
18971        fn inline_align(_context: fidl::encoding::Context) -> usize {
18972            8
18973        }
18974
18975        #[inline(always)]
18976        fn inline_size(_context: fidl::encoding::Context) -> usize {
18977            16
18978        }
18979    }
18980
18981    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Packet, D> for &Packet {
18982        unsafe fn encode(
18983            self,
18984            encoder: &mut fidl::encoding::Encoder<'_, D>,
18985            offset: usize,
18986            mut depth: fidl::encoding::Depth,
18987        ) -> fidl::Result<()> {
18988            encoder.debug_check_bounds::<Packet>(offset);
18989            // Vector header
18990            let max_ordinal: u64 = self.max_ordinal_present();
18991            encoder.write_num(max_ordinal, offset);
18992            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18993            // Calling encoder.out_of_line_offset(0) is not allowed.
18994            if max_ordinal == 0 {
18995                return Ok(());
18996            }
18997            depth.increment()?;
18998            let envelope_size = 8;
18999            let bytes_len = max_ordinal as usize * envelope_size;
19000            #[allow(unused_variables)]
19001            let offset = encoder.out_of_line_offset(bytes_len);
19002            let mut _prev_end_offset: usize = 0;
19003            if 1 > max_ordinal {
19004                return Ok(());
19005            }
19006
19007            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19008            // are envelope_size bytes.
19009            let cur_offset: usize = (1 - 1) * envelope_size;
19010
19011            // Zero reserved fields.
19012            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19013
19014            // Safety:
19015            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19016            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19017            //   envelope_size bytes, there is always sufficient room.
19018            fidl::encoding::encode_in_envelope_optional::<PacketHeader, D>(
19019                self.header.as_ref().map(<PacketHeader as fidl::encoding::ValueTypeMarker>::borrow),
19020                encoder,
19021                offset + cur_offset,
19022                depth,
19023            )?;
19024
19025            _prev_end_offset = cur_offset + envelope_size;
19026            if 2 > max_ordinal {
19027                return Ok(());
19028            }
19029
19030            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19031            // are envelope_size bytes.
19032            let cur_offset: usize = (2 - 1) * envelope_size;
19033
19034            // Zero reserved fields.
19035            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19036
19037            // Safety:
19038            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19039            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19040            //   envelope_size bytes, there is always sufficient room.
19041            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19042                self.buffer_index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19043                encoder,
19044                offset + cur_offset,
19045                depth,
19046            )?;
19047
19048            _prev_end_offset = cur_offset + envelope_size;
19049            if 3 > max_ordinal {
19050                return Ok(());
19051            }
19052
19053            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19054            // are envelope_size bytes.
19055            let cur_offset: usize = (3 - 1) * envelope_size;
19056
19057            // Zero reserved fields.
19058            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19059
19060            // Safety:
19061            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19062            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19063            //   envelope_size bytes, there is always sufficient room.
19064            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19065                self.stream_lifetime_ordinal
19066                    .as_ref()
19067                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19068                encoder,
19069                offset + cur_offset,
19070                depth,
19071            )?;
19072
19073            _prev_end_offset = cur_offset + envelope_size;
19074            if 4 > max_ordinal {
19075                return Ok(());
19076            }
19077
19078            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19079            // are envelope_size bytes.
19080            let cur_offset: usize = (4 - 1) * envelope_size;
19081
19082            // Zero reserved fields.
19083            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19084
19085            // Safety:
19086            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19087            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19088            //   envelope_size bytes, there is always sufficient room.
19089            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19090                self.start_offset.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19091                encoder,
19092                offset + cur_offset,
19093                depth,
19094            )?;
19095
19096            _prev_end_offset = cur_offset + envelope_size;
19097            if 5 > max_ordinal {
19098                return Ok(());
19099            }
19100
19101            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19102            // are envelope_size bytes.
19103            let cur_offset: usize = (5 - 1) * envelope_size;
19104
19105            // Zero reserved fields.
19106            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19107
19108            // Safety:
19109            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19110            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19111            //   envelope_size bytes, there is always sufficient room.
19112            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19113                self.valid_length_bytes
19114                    .as_ref()
19115                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19116                encoder,
19117                offset + cur_offset,
19118                depth,
19119            )?;
19120
19121            _prev_end_offset = cur_offset + envelope_size;
19122            if 6 > max_ordinal {
19123                return Ok(());
19124            }
19125
19126            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19127            // are envelope_size bytes.
19128            let cur_offset: usize = (6 - 1) * envelope_size;
19129
19130            // Zero reserved fields.
19131            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19132
19133            // Safety:
19134            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19135            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19136            //   envelope_size bytes, there is always sufficient room.
19137            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19138                self.timestamp_ish.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19139                encoder,
19140                offset + cur_offset,
19141                depth,
19142            )?;
19143
19144            _prev_end_offset = cur_offset + envelope_size;
19145            if 7 > max_ordinal {
19146                return Ok(());
19147            }
19148
19149            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19150            // are envelope_size bytes.
19151            let cur_offset: usize = (7 - 1) * envelope_size;
19152
19153            // Zero reserved fields.
19154            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19155
19156            // Safety:
19157            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19158            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19159            //   envelope_size bytes, there is always sufficient room.
19160            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19161                self.start_access_unit
19162                    .as_ref()
19163                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19164                encoder,
19165                offset + cur_offset,
19166                depth,
19167            )?;
19168
19169            _prev_end_offset = cur_offset + envelope_size;
19170            if 8 > max_ordinal {
19171                return Ok(());
19172            }
19173
19174            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19175            // are envelope_size bytes.
19176            let cur_offset: usize = (8 - 1) * envelope_size;
19177
19178            // Zero reserved fields.
19179            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19180
19181            // Safety:
19182            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19183            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19184            //   envelope_size bytes, there is always sufficient room.
19185            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19186                self.known_end_access_unit
19187                    .as_ref()
19188                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19189                encoder,
19190                offset + cur_offset,
19191                depth,
19192            )?;
19193
19194            _prev_end_offset = cur_offset + envelope_size;
19195            if 9 > max_ordinal {
19196                return Ok(());
19197            }
19198
19199            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19200            // are envelope_size bytes.
19201            let cur_offset: usize = (9 - 1) * envelope_size;
19202
19203            // Zero reserved fields.
19204            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19205
19206            // Safety:
19207            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19208            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19209            //   envelope_size bytes, there is always sufficient room.
19210            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19211                self.key_frame.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19212                encoder,
19213                offset + cur_offset,
19214                depth,
19215            )?;
19216
19217            _prev_end_offset = cur_offset + envelope_size;
19218
19219            Ok(())
19220        }
19221    }
19222
19223    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Packet {
19224        #[inline(always)]
19225        fn new_empty() -> Self {
19226            Self::default()
19227        }
19228
19229        unsafe fn decode(
19230            &mut self,
19231            decoder: &mut fidl::encoding::Decoder<'_, D>,
19232            offset: usize,
19233            mut depth: fidl::encoding::Depth,
19234        ) -> fidl::Result<()> {
19235            decoder.debug_check_bounds::<Self>(offset);
19236            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19237                None => return Err(fidl::Error::NotNullable),
19238                Some(len) => len,
19239            };
19240            // Calling decoder.out_of_line_offset(0) is not allowed.
19241            if len == 0 {
19242                return Ok(());
19243            };
19244            depth.increment()?;
19245            let envelope_size = 8;
19246            let bytes_len = len * envelope_size;
19247            let offset = decoder.out_of_line_offset(bytes_len)?;
19248            // Decode the envelope for each type.
19249            let mut _next_ordinal_to_read = 0;
19250            let mut next_offset = offset;
19251            let end_offset = offset + bytes_len;
19252            _next_ordinal_to_read += 1;
19253            if next_offset >= end_offset {
19254                return Ok(());
19255            }
19256
19257            // Decode unknown envelopes for gaps in ordinals.
19258            while _next_ordinal_to_read < 1 {
19259                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19260                _next_ordinal_to_read += 1;
19261                next_offset += envelope_size;
19262            }
19263
19264            let next_out_of_line = decoder.next_out_of_line();
19265            let handles_before = decoder.remaining_handles();
19266            if let Some((inlined, num_bytes, num_handles)) =
19267                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19268            {
19269                let member_inline_size =
19270                    <PacketHeader as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19271                if inlined != (member_inline_size <= 4) {
19272                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19273                }
19274                let inner_offset;
19275                let mut inner_depth = depth.clone();
19276                if inlined {
19277                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19278                    inner_offset = next_offset;
19279                } else {
19280                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19281                    inner_depth.increment()?;
19282                }
19283                let val_ref = self.header.get_or_insert_with(|| fidl::new_empty!(PacketHeader, D));
19284                fidl::decode!(PacketHeader, D, val_ref, decoder, inner_offset, inner_depth)?;
19285                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19286                {
19287                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19288                }
19289                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19290                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19291                }
19292            }
19293
19294            next_offset += envelope_size;
19295            _next_ordinal_to_read += 1;
19296            if next_offset >= end_offset {
19297                return Ok(());
19298            }
19299
19300            // Decode unknown envelopes for gaps in ordinals.
19301            while _next_ordinal_to_read < 2 {
19302                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19303                _next_ordinal_to_read += 1;
19304                next_offset += envelope_size;
19305            }
19306
19307            let next_out_of_line = decoder.next_out_of_line();
19308            let handles_before = decoder.remaining_handles();
19309            if let Some((inlined, num_bytes, num_handles)) =
19310                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19311            {
19312                let member_inline_size =
19313                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19314                if inlined != (member_inline_size <= 4) {
19315                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19316                }
19317                let inner_offset;
19318                let mut inner_depth = depth.clone();
19319                if inlined {
19320                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19321                    inner_offset = next_offset;
19322                } else {
19323                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19324                    inner_depth.increment()?;
19325                }
19326                let val_ref = self.buffer_index.get_or_insert_with(|| fidl::new_empty!(u32, D));
19327                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19328                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19329                {
19330                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19331                }
19332                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19333                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19334                }
19335            }
19336
19337            next_offset += envelope_size;
19338            _next_ordinal_to_read += 1;
19339            if next_offset >= end_offset {
19340                return Ok(());
19341            }
19342
19343            // Decode unknown envelopes for gaps in ordinals.
19344            while _next_ordinal_to_read < 3 {
19345                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19346                _next_ordinal_to_read += 1;
19347                next_offset += envelope_size;
19348            }
19349
19350            let next_out_of_line = decoder.next_out_of_line();
19351            let handles_before = decoder.remaining_handles();
19352            if let Some((inlined, num_bytes, num_handles)) =
19353                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19354            {
19355                let member_inline_size =
19356                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19357                if inlined != (member_inline_size <= 4) {
19358                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19359                }
19360                let inner_offset;
19361                let mut inner_depth = depth.clone();
19362                if inlined {
19363                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19364                    inner_offset = next_offset;
19365                } else {
19366                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19367                    inner_depth.increment()?;
19368                }
19369                let val_ref =
19370                    self.stream_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
19371                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19372                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19373                {
19374                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19375                }
19376                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19377                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19378                }
19379            }
19380
19381            next_offset += envelope_size;
19382            _next_ordinal_to_read += 1;
19383            if next_offset >= end_offset {
19384                return Ok(());
19385            }
19386
19387            // Decode unknown envelopes for gaps in ordinals.
19388            while _next_ordinal_to_read < 4 {
19389                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19390                _next_ordinal_to_read += 1;
19391                next_offset += envelope_size;
19392            }
19393
19394            let next_out_of_line = decoder.next_out_of_line();
19395            let handles_before = decoder.remaining_handles();
19396            if let Some((inlined, num_bytes, num_handles)) =
19397                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19398            {
19399                let member_inline_size =
19400                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19401                if inlined != (member_inline_size <= 4) {
19402                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19403                }
19404                let inner_offset;
19405                let mut inner_depth = depth.clone();
19406                if inlined {
19407                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19408                    inner_offset = next_offset;
19409                } else {
19410                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19411                    inner_depth.increment()?;
19412                }
19413                let val_ref = self.start_offset.get_or_insert_with(|| fidl::new_empty!(u32, D));
19414                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19415                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19416                {
19417                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19418                }
19419                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19420                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19421                }
19422            }
19423
19424            next_offset += envelope_size;
19425            _next_ordinal_to_read += 1;
19426            if next_offset >= end_offset {
19427                return Ok(());
19428            }
19429
19430            // Decode unknown envelopes for gaps in ordinals.
19431            while _next_ordinal_to_read < 5 {
19432                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19433                _next_ordinal_to_read += 1;
19434                next_offset += envelope_size;
19435            }
19436
19437            let next_out_of_line = decoder.next_out_of_line();
19438            let handles_before = decoder.remaining_handles();
19439            if let Some((inlined, num_bytes, num_handles)) =
19440                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19441            {
19442                let member_inline_size =
19443                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19444                if inlined != (member_inline_size <= 4) {
19445                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19446                }
19447                let inner_offset;
19448                let mut inner_depth = depth.clone();
19449                if inlined {
19450                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19451                    inner_offset = next_offset;
19452                } else {
19453                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19454                    inner_depth.increment()?;
19455                }
19456                let val_ref =
19457                    self.valid_length_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
19458                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19459                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19460                {
19461                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19462                }
19463                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19464                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19465                }
19466            }
19467
19468            next_offset += envelope_size;
19469            _next_ordinal_to_read += 1;
19470            if next_offset >= end_offset {
19471                return Ok(());
19472            }
19473
19474            // Decode unknown envelopes for gaps in ordinals.
19475            while _next_ordinal_to_read < 6 {
19476                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19477                _next_ordinal_to_read += 1;
19478                next_offset += envelope_size;
19479            }
19480
19481            let next_out_of_line = decoder.next_out_of_line();
19482            let handles_before = decoder.remaining_handles();
19483            if let Some((inlined, num_bytes, num_handles)) =
19484                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19485            {
19486                let member_inline_size =
19487                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19488                if inlined != (member_inline_size <= 4) {
19489                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19490                }
19491                let inner_offset;
19492                let mut inner_depth = depth.clone();
19493                if inlined {
19494                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19495                    inner_offset = next_offset;
19496                } else {
19497                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19498                    inner_depth.increment()?;
19499                }
19500                let val_ref = self.timestamp_ish.get_or_insert_with(|| fidl::new_empty!(u64, D));
19501                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19502                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19503                {
19504                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19505                }
19506                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19507                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19508                }
19509            }
19510
19511            next_offset += envelope_size;
19512            _next_ordinal_to_read += 1;
19513            if next_offset >= end_offset {
19514                return Ok(());
19515            }
19516
19517            // Decode unknown envelopes for gaps in ordinals.
19518            while _next_ordinal_to_read < 7 {
19519                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19520                _next_ordinal_to_read += 1;
19521                next_offset += envelope_size;
19522            }
19523
19524            let next_out_of_line = decoder.next_out_of_line();
19525            let handles_before = decoder.remaining_handles();
19526            if let Some((inlined, num_bytes, num_handles)) =
19527                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19528            {
19529                let member_inline_size =
19530                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19531                if inlined != (member_inline_size <= 4) {
19532                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19533                }
19534                let inner_offset;
19535                let mut inner_depth = depth.clone();
19536                if inlined {
19537                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19538                    inner_offset = next_offset;
19539                } else {
19540                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19541                    inner_depth.increment()?;
19542                }
19543                let val_ref =
19544                    self.start_access_unit.get_or_insert_with(|| fidl::new_empty!(bool, D));
19545                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19546                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19547                {
19548                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19549                }
19550                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19551                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19552                }
19553            }
19554
19555            next_offset += envelope_size;
19556            _next_ordinal_to_read += 1;
19557            if next_offset >= end_offset {
19558                return Ok(());
19559            }
19560
19561            // Decode unknown envelopes for gaps in ordinals.
19562            while _next_ordinal_to_read < 8 {
19563                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19564                _next_ordinal_to_read += 1;
19565                next_offset += envelope_size;
19566            }
19567
19568            let next_out_of_line = decoder.next_out_of_line();
19569            let handles_before = decoder.remaining_handles();
19570            if let Some((inlined, num_bytes, num_handles)) =
19571                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19572            {
19573                let member_inline_size =
19574                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19575                if inlined != (member_inline_size <= 4) {
19576                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19577                }
19578                let inner_offset;
19579                let mut inner_depth = depth.clone();
19580                if inlined {
19581                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19582                    inner_offset = next_offset;
19583                } else {
19584                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19585                    inner_depth.increment()?;
19586                }
19587                let val_ref =
19588                    self.known_end_access_unit.get_or_insert_with(|| fidl::new_empty!(bool, D));
19589                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19590                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19591                {
19592                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19593                }
19594                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19595                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19596                }
19597            }
19598
19599            next_offset += envelope_size;
19600            _next_ordinal_to_read += 1;
19601            if next_offset >= end_offset {
19602                return Ok(());
19603            }
19604
19605            // Decode unknown envelopes for gaps in ordinals.
19606            while _next_ordinal_to_read < 9 {
19607                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19608                _next_ordinal_to_read += 1;
19609                next_offset += envelope_size;
19610            }
19611
19612            let next_out_of_line = decoder.next_out_of_line();
19613            let handles_before = decoder.remaining_handles();
19614            if let Some((inlined, num_bytes, num_handles)) =
19615                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19616            {
19617                let member_inline_size =
19618                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19619                if inlined != (member_inline_size <= 4) {
19620                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19621                }
19622                let inner_offset;
19623                let mut inner_depth = depth.clone();
19624                if inlined {
19625                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19626                    inner_offset = next_offset;
19627                } else {
19628                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19629                    inner_depth.increment()?;
19630                }
19631                let val_ref = self.key_frame.get_or_insert_with(|| fidl::new_empty!(bool, D));
19632                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19633                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19634                {
19635                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19636                }
19637                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19638                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19639                }
19640            }
19641
19642            next_offset += envelope_size;
19643
19644            // Decode the remaining unknown envelopes.
19645            while next_offset < end_offset {
19646                _next_ordinal_to_read += 1;
19647                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19648                next_offset += envelope_size;
19649            }
19650
19651            Ok(())
19652        }
19653    }
19654
19655    impl PacketHeader {
19656        #[inline(always)]
19657        fn max_ordinal_present(&self) -> u64 {
19658            if let Some(_) = self.packet_index {
19659                return 2;
19660            }
19661            if let Some(_) = self.buffer_lifetime_ordinal {
19662                return 1;
19663            }
19664            0
19665        }
19666    }
19667
19668    impl fidl::encoding::ValueTypeMarker for PacketHeader {
19669        type Borrowed<'a> = &'a Self;
19670        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19671            value
19672        }
19673    }
19674
19675    unsafe impl fidl::encoding::TypeMarker for PacketHeader {
19676        type Owned = Self;
19677
19678        #[inline(always)]
19679        fn inline_align(_context: fidl::encoding::Context) -> usize {
19680            8
19681        }
19682
19683        #[inline(always)]
19684        fn inline_size(_context: fidl::encoding::Context) -> usize {
19685            16
19686        }
19687    }
19688
19689    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PacketHeader, D>
19690        for &PacketHeader
19691    {
19692        unsafe fn encode(
19693            self,
19694            encoder: &mut fidl::encoding::Encoder<'_, D>,
19695            offset: usize,
19696            mut depth: fidl::encoding::Depth,
19697        ) -> fidl::Result<()> {
19698            encoder.debug_check_bounds::<PacketHeader>(offset);
19699            // Vector header
19700            let max_ordinal: u64 = self.max_ordinal_present();
19701            encoder.write_num(max_ordinal, offset);
19702            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19703            // Calling encoder.out_of_line_offset(0) is not allowed.
19704            if max_ordinal == 0 {
19705                return Ok(());
19706            }
19707            depth.increment()?;
19708            let envelope_size = 8;
19709            let bytes_len = max_ordinal as usize * envelope_size;
19710            #[allow(unused_variables)]
19711            let offset = encoder.out_of_line_offset(bytes_len);
19712            let mut _prev_end_offset: usize = 0;
19713            if 1 > max_ordinal {
19714                return Ok(());
19715            }
19716
19717            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19718            // are envelope_size bytes.
19719            let cur_offset: usize = (1 - 1) * envelope_size;
19720
19721            // Zero reserved fields.
19722            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19723
19724            // Safety:
19725            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19726            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19727            //   envelope_size bytes, there is always sufficient room.
19728            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19729                self.buffer_lifetime_ordinal
19730                    .as_ref()
19731                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19732                encoder,
19733                offset + cur_offset,
19734                depth,
19735            )?;
19736
19737            _prev_end_offset = cur_offset + envelope_size;
19738            if 2 > max_ordinal {
19739                return Ok(());
19740            }
19741
19742            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19743            // are envelope_size bytes.
19744            let cur_offset: usize = (2 - 1) * envelope_size;
19745
19746            // Zero reserved fields.
19747            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19748
19749            // Safety:
19750            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19751            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19752            //   envelope_size bytes, there is always sufficient room.
19753            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19754                self.packet_index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19755                encoder,
19756                offset + cur_offset,
19757                depth,
19758            )?;
19759
19760            _prev_end_offset = cur_offset + envelope_size;
19761
19762            Ok(())
19763        }
19764    }
19765
19766    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PacketHeader {
19767        #[inline(always)]
19768        fn new_empty() -> Self {
19769            Self::default()
19770        }
19771
19772        unsafe fn decode(
19773            &mut self,
19774            decoder: &mut fidl::encoding::Decoder<'_, D>,
19775            offset: usize,
19776            mut depth: fidl::encoding::Depth,
19777        ) -> fidl::Result<()> {
19778            decoder.debug_check_bounds::<Self>(offset);
19779            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19780                None => return Err(fidl::Error::NotNullable),
19781                Some(len) => len,
19782            };
19783            // Calling decoder.out_of_line_offset(0) is not allowed.
19784            if len == 0 {
19785                return Ok(());
19786            };
19787            depth.increment()?;
19788            let envelope_size = 8;
19789            let bytes_len = len * envelope_size;
19790            let offset = decoder.out_of_line_offset(bytes_len)?;
19791            // Decode the envelope for each type.
19792            let mut _next_ordinal_to_read = 0;
19793            let mut next_offset = offset;
19794            let end_offset = offset + bytes_len;
19795            _next_ordinal_to_read += 1;
19796            if next_offset >= end_offset {
19797                return Ok(());
19798            }
19799
19800            // Decode unknown envelopes for gaps in ordinals.
19801            while _next_ordinal_to_read < 1 {
19802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19803                _next_ordinal_to_read += 1;
19804                next_offset += envelope_size;
19805            }
19806
19807            let next_out_of_line = decoder.next_out_of_line();
19808            let handles_before = decoder.remaining_handles();
19809            if let Some((inlined, num_bytes, num_handles)) =
19810                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19811            {
19812                let member_inline_size =
19813                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19814                if inlined != (member_inline_size <= 4) {
19815                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19816                }
19817                let inner_offset;
19818                let mut inner_depth = depth.clone();
19819                if inlined {
19820                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19821                    inner_offset = next_offset;
19822                } else {
19823                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19824                    inner_depth.increment()?;
19825                }
19826                let val_ref =
19827                    self.buffer_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
19828                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19829                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19830                {
19831                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19832                }
19833                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19834                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19835                }
19836            }
19837
19838            next_offset += envelope_size;
19839            _next_ordinal_to_read += 1;
19840            if next_offset >= end_offset {
19841                return Ok(());
19842            }
19843
19844            // Decode unknown envelopes for gaps in ordinals.
19845            while _next_ordinal_to_read < 2 {
19846                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19847                _next_ordinal_to_read += 1;
19848                next_offset += envelope_size;
19849            }
19850
19851            let next_out_of_line = decoder.next_out_of_line();
19852            let handles_before = decoder.remaining_handles();
19853            if let Some((inlined, num_bytes, num_handles)) =
19854                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19855            {
19856                let member_inline_size =
19857                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19858                if inlined != (member_inline_size <= 4) {
19859                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19860                }
19861                let inner_offset;
19862                let mut inner_depth = depth.clone();
19863                if inlined {
19864                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19865                    inner_offset = next_offset;
19866                } else {
19867                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19868                    inner_depth.increment()?;
19869                }
19870                let val_ref = self.packet_index.get_or_insert_with(|| fidl::new_empty!(u32, D));
19871                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19872                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19873                {
19874                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19875                }
19876                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19877                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19878                }
19879            }
19880
19881            next_offset += envelope_size;
19882
19883            // Decode the remaining unknown envelopes.
19884            while next_offset < end_offset {
19885                _next_ordinal_to_read += 1;
19886                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19887                next_offset += envelope_size;
19888            }
19889
19890            Ok(())
19891        }
19892    }
19893
19894    impl StreamBufferConstraints {
19895        #[inline(always)]
19896        fn max_ordinal_present(&self) -> u64 {
19897            if let Some(_) = self.is_physically_contiguous_required {
19898                return 13;
19899            }
19900            if let Some(_) = self.single_buffer_mode_allowed {
19901                return 12;
19902            }
19903            if let Some(_) = self.packet_count_for_client_max {
19904                return 11;
19905            }
19906            if let Some(_) = self.packet_count_for_client_min {
19907                return 10;
19908            }
19909            if let Some(_) = self.packet_count_for_server_max {
19910                return 9;
19911            }
19912            if let Some(_) = self.packet_count_for_server_recommended_max {
19913                return 8;
19914            }
19915            if let Some(_) = self.packet_count_for_server_recommended {
19916                return 7;
19917            }
19918            if let Some(_) = self.packet_count_for_server_min {
19919                return 6;
19920            }
19921            if let Some(_) = self.per_packet_buffer_bytes_max {
19922                return 5;
19923            }
19924            if let Some(_) = self.per_packet_buffer_bytes_recommended {
19925                return 4;
19926            }
19927            if let Some(_) = self.per_packet_buffer_bytes_min {
19928                return 3;
19929            }
19930            if let Some(_) = self.default_settings {
19931                return 2;
19932            }
19933            if let Some(_) = self.buffer_constraints_version_ordinal {
19934                return 1;
19935            }
19936            0
19937        }
19938    }
19939
19940    impl fidl::encoding::ValueTypeMarker for StreamBufferConstraints {
19941        type Borrowed<'a> = &'a Self;
19942        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19943            value
19944        }
19945    }
19946
19947    unsafe impl fidl::encoding::TypeMarker for StreamBufferConstraints {
19948        type Owned = Self;
19949
19950        #[inline(always)]
19951        fn inline_align(_context: fidl::encoding::Context) -> usize {
19952            8
19953        }
19954
19955        #[inline(always)]
19956        fn inline_size(_context: fidl::encoding::Context) -> usize {
19957            16
19958        }
19959    }
19960
19961    unsafe impl<D: fidl::encoding::ResourceDialect>
19962        fidl::encoding::Encode<StreamBufferConstraints, D> for &StreamBufferConstraints
19963    {
19964        unsafe fn encode(
19965            self,
19966            encoder: &mut fidl::encoding::Encoder<'_, D>,
19967            offset: usize,
19968            mut depth: fidl::encoding::Depth,
19969        ) -> fidl::Result<()> {
19970            encoder.debug_check_bounds::<StreamBufferConstraints>(offset);
19971            // Vector header
19972            let max_ordinal: u64 = self.max_ordinal_present();
19973            encoder.write_num(max_ordinal, offset);
19974            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19975            // Calling encoder.out_of_line_offset(0) is not allowed.
19976            if max_ordinal == 0 {
19977                return Ok(());
19978            }
19979            depth.increment()?;
19980            let envelope_size = 8;
19981            let bytes_len = max_ordinal as usize * envelope_size;
19982            #[allow(unused_variables)]
19983            let offset = encoder.out_of_line_offset(bytes_len);
19984            let mut _prev_end_offset: usize = 0;
19985            if 1 > max_ordinal {
19986                return Ok(());
19987            }
19988
19989            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19990            // are envelope_size bytes.
19991            let cur_offset: usize = (1 - 1) * envelope_size;
19992
19993            // Zero reserved fields.
19994            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19995
19996            // Safety:
19997            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19998            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19999            //   envelope_size bytes, there is always sufficient room.
20000            fidl::encoding::encode_in_envelope_optional::<u64, D>(
20001                self.buffer_constraints_version_ordinal
20002                    .as_ref()
20003                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
20004                encoder,
20005                offset + cur_offset,
20006                depth,
20007            )?;
20008
20009            _prev_end_offset = cur_offset + envelope_size;
20010            if 2 > max_ordinal {
20011                return Ok(());
20012            }
20013
20014            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20015            // are envelope_size bytes.
20016            let cur_offset: usize = (2 - 1) * envelope_size;
20017
20018            // Zero reserved fields.
20019            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20020
20021            // Safety:
20022            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20023            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20024            //   envelope_size bytes, there is always sufficient room.
20025            fidl::encoding::encode_in_envelope_optional::<StreamBufferSettings, D>(
20026                self.default_settings
20027                    .as_ref()
20028                    .map(<StreamBufferSettings as fidl::encoding::ValueTypeMarker>::borrow),
20029                encoder,
20030                offset + cur_offset,
20031                depth,
20032            )?;
20033
20034            _prev_end_offset = cur_offset + envelope_size;
20035            if 3 > max_ordinal {
20036                return Ok(());
20037            }
20038
20039            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20040            // are envelope_size bytes.
20041            let cur_offset: usize = (3 - 1) * envelope_size;
20042
20043            // Zero reserved fields.
20044            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20045
20046            // Safety:
20047            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20048            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20049            //   envelope_size bytes, there is always sufficient room.
20050            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20051                self.per_packet_buffer_bytes_min
20052                    .as_ref()
20053                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20054                encoder,
20055                offset + cur_offset,
20056                depth,
20057            )?;
20058
20059            _prev_end_offset = cur_offset + envelope_size;
20060            if 4 > max_ordinal {
20061                return Ok(());
20062            }
20063
20064            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20065            // are envelope_size bytes.
20066            let cur_offset: usize = (4 - 1) * envelope_size;
20067
20068            // Zero reserved fields.
20069            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20070
20071            // Safety:
20072            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20073            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20074            //   envelope_size bytes, there is always sufficient room.
20075            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20076                self.per_packet_buffer_bytes_recommended
20077                    .as_ref()
20078                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20079                encoder,
20080                offset + cur_offset,
20081                depth,
20082            )?;
20083
20084            _prev_end_offset = cur_offset + envelope_size;
20085            if 5 > max_ordinal {
20086                return Ok(());
20087            }
20088
20089            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20090            // are envelope_size bytes.
20091            let cur_offset: usize = (5 - 1) * envelope_size;
20092
20093            // Zero reserved fields.
20094            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20095
20096            // Safety:
20097            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20098            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20099            //   envelope_size bytes, there is always sufficient room.
20100            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20101                self.per_packet_buffer_bytes_max
20102                    .as_ref()
20103                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20104                encoder,
20105                offset + cur_offset,
20106                depth,
20107            )?;
20108
20109            _prev_end_offset = cur_offset + envelope_size;
20110            if 6 > max_ordinal {
20111                return Ok(());
20112            }
20113
20114            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20115            // are envelope_size bytes.
20116            let cur_offset: usize = (6 - 1) * envelope_size;
20117
20118            // Zero reserved fields.
20119            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20120
20121            // Safety:
20122            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20123            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20124            //   envelope_size bytes, there is always sufficient room.
20125            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20126                self.packet_count_for_server_min
20127                    .as_ref()
20128                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20129                encoder,
20130                offset + cur_offset,
20131                depth,
20132            )?;
20133
20134            _prev_end_offset = cur_offset + envelope_size;
20135            if 7 > max_ordinal {
20136                return Ok(());
20137            }
20138
20139            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20140            // are envelope_size bytes.
20141            let cur_offset: usize = (7 - 1) * envelope_size;
20142
20143            // Zero reserved fields.
20144            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20145
20146            // Safety:
20147            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20148            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20149            //   envelope_size bytes, there is always sufficient room.
20150            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20151                self.packet_count_for_server_recommended
20152                    .as_ref()
20153                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20154                encoder,
20155                offset + cur_offset,
20156                depth,
20157            )?;
20158
20159            _prev_end_offset = cur_offset + envelope_size;
20160            if 8 > max_ordinal {
20161                return Ok(());
20162            }
20163
20164            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20165            // are envelope_size bytes.
20166            let cur_offset: usize = (8 - 1) * envelope_size;
20167
20168            // Zero reserved fields.
20169            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20170
20171            // Safety:
20172            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20173            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20174            //   envelope_size bytes, there is always sufficient room.
20175            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20176                self.packet_count_for_server_recommended_max
20177                    .as_ref()
20178                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20179                encoder,
20180                offset + cur_offset,
20181                depth,
20182            )?;
20183
20184            _prev_end_offset = cur_offset + envelope_size;
20185            if 9 > max_ordinal {
20186                return Ok(());
20187            }
20188
20189            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20190            // are envelope_size bytes.
20191            let cur_offset: usize = (9 - 1) * envelope_size;
20192
20193            // Zero reserved fields.
20194            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20195
20196            // Safety:
20197            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20198            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20199            //   envelope_size bytes, there is always sufficient room.
20200            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20201                self.packet_count_for_server_max
20202                    .as_ref()
20203                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20204                encoder,
20205                offset + cur_offset,
20206                depth,
20207            )?;
20208
20209            _prev_end_offset = cur_offset + envelope_size;
20210            if 10 > max_ordinal {
20211                return Ok(());
20212            }
20213
20214            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20215            // are envelope_size bytes.
20216            let cur_offset: usize = (10 - 1) * envelope_size;
20217
20218            // Zero reserved fields.
20219            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20220
20221            // Safety:
20222            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20223            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20224            //   envelope_size bytes, there is always sufficient room.
20225            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20226                self.packet_count_for_client_min
20227                    .as_ref()
20228                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20229                encoder,
20230                offset + cur_offset,
20231                depth,
20232            )?;
20233
20234            _prev_end_offset = cur_offset + envelope_size;
20235            if 11 > max_ordinal {
20236                return Ok(());
20237            }
20238
20239            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20240            // are envelope_size bytes.
20241            let cur_offset: usize = (11 - 1) * envelope_size;
20242
20243            // Zero reserved fields.
20244            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20245
20246            // Safety:
20247            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20248            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20249            //   envelope_size bytes, there is always sufficient room.
20250            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20251                self.packet_count_for_client_max
20252                    .as_ref()
20253                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20254                encoder,
20255                offset + cur_offset,
20256                depth,
20257            )?;
20258
20259            _prev_end_offset = cur_offset + envelope_size;
20260            if 12 > max_ordinal {
20261                return Ok(());
20262            }
20263
20264            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20265            // are envelope_size bytes.
20266            let cur_offset: usize = (12 - 1) * envelope_size;
20267
20268            // Zero reserved fields.
20269            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20270
20271            // Safety:
20272            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20273            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20274            //   envelope_size bytes, there is always sufficient room.
20275            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20276                self.single_buffer_mode_allowed
20277                    .as_ref()
20278                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20279                encoder,
20280                offset + cur_offset,
20281                depth,
20282            )?;
20283
20284            _prev_end_offset = cur_offset + envelope_size;
20285            if 13 > max_ordinal {
20286                return Ok(());
20287            }
20288
20289            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20290            // are envelope_size bytes.
20291            let cur_offset: usize = (13 - 1) * envelope_size;
20292
20293            // Zero reserved fields.
20294            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20295
20296            // Safety:
20297            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20298            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20299            //   envelope_size bytes, there is always sufficient room.
20300            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20301                self.is_physically_contiguous_required
20302                    .as_ref()
20303                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20304                encoder,
20305                offset + cur_offset,
20306                depth,
20307            )?;
20308
20309            _prev_end_offset = cur_offset + envelope_size;
20310
20311            Ok(())
20312        }
20313    }
20314
20315    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
20316        for StreamBufferConstraints
20317    {
20318        #[inline(always)]
20319        fn new_empty() -> Self {
20320            Self::default()
20321        }
20322
20323        unsafe fn decode(
20324            &mut self,
20325            decoder: &mut fidl::encoding::Decoder<'_, D>,
20326            offset: usize,
20327            mut depth: fidl::encoding::Depth,
20328        ) -> fidl::Result<()> {
20329            decoder.debug_check_bounds::<Self>(offset);
20330            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20331                None => return Err(fidl::Error::NotNullable),
20332                Some(len) => len,
20333            };
20334            // Calling decoder.out_of_line_offset(0) is not allowed.
20335            if len == 0 {
20336                return Ok(());
20337            };
20338            depth.increment()?;
20339            let envelope_size = 8;
20340            let bytes_len = len * envelope_size;
20341            let offset = decoder.out_of_line_offset(bytes_len)?;
20342            // Decode the envelope for each type.
20343            let mut _next_ordinal_to_read = 0;
20344            let mut next_offset = offset;
20345            let end_offset = offset + bytes_len;
20346            _next_ordinal_to_read += 1;
20347            if next_offset >= end_offset {
20348                return Ok(());
20349            }
20350
20351            // Decode unknown envelopes for gaps in ordinals.
20352            while _next_ordinal_to_read < 1 {
20353                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20354                _next_ordinal_to_read += 1;
20355                next_offset += envelope_size;
20356            }
20357
20358            let next_out_of_line = decoder.next_out_of_line();
20359            let handles_before = decoder.remaining_handles();
20360            if let Some((inlined, num_bytes, num_handles)) =
20361                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20362            {
20363                let member_inline_size =
20364                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20365                if inlined != (member_inline_size <= 4) {
20366                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20367                }
20368                let inner_offset;
20369                let mut inner_depth = depth.clone();
20370                if inlined {
20371                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20372                    inner_offset = next_offset;
20373                } else {
20374                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20375                    inner_depth.increment()?;
20376                }
20377                let val_ref = self
20378                    .buffer_constraints_version_ordinal
20379                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
20380                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
20381                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20382                {
20383                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20384                }
20385                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20386                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20387                }
20388            }
20389
20390            next_offset += envelope_size;
20391            _next_ordinal_to_read += 1;
20392            if next_offset >= end_offset {
20393                return Ok(());
20394            }
20395
20396            // Decode unknown envelopes for gaps in ordinals.
20397            while _next_ordinal_to_read < 2 {
20398                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20399                _next_ordinal_to_read += 1;
20400                next_offset += envelope_size;
20401            }
20402
20403            let next_out_of_line = decoder.next_out_of_line();
20404            let handles_before = decoder.remaining_handles();
20405            if let Some((inlined, num_bytes, num_handles)) =
20406                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20407            {
20408                let member_inline_size =
20409                    <StreamBufferSettings as fidl::encoding::TypeMarker>::inline_size(
20410                        decoder.context,
20411                    );
20412                if inlined != (member_inline_size <= 4) {
20413                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20414                }
20415                let inner_offset;
20416                let mut inner_depth = depth.clone();
20417                if inlined {
20418                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20419                    inner_offset = next_offset;
20420                } else {
20421                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20422                    inner_depth.increment()?;
20423                }
20424                let val_ref = self
20425                    .default_settings
20426                    .get_or_insert_with(|| fidl::new_empty!(StreamBufferSettings, D));
20427                fidl::decode!(
20428                    StreamBufferSettings,
20429                    D,
20430                    val_ref,
20431                    decoder,
20432                    inner_offset,
20433                    inner_depth
20434                )?;
20435                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20436                {
20437                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20438                }
20439                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20440                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20441                }
20442            }
20443
20444            next_offset += envelope_size;
20445            _next_ordinal_to_read += 1;
20446            if next_offset >= end_offset {
20447                return Ok(());
20448            }
20449
20450            // Decode unknown envelopes for gaps in ordinals.
20451            while _next_ordinal_to_read < 3 {
20452                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20453                _next_ordinal_to_read += 1;
20454                next_offset += envelope_size;
20455            }
20456
20457            let next_out_of_line = decoder.next_out_of_line();
20458            let handles_before = decoder.remaining_handles();
20459            if let Some((inlined, num_bytes, num_handles)) =
20460                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20461            {
20462                let member_inline_size =
20463                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20464                if inlined != (member_inline_size <= 4) {
20465                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20466                }
20467                let inner_offset;
20468                let mut inner_depth = depth.clone();
20469                if inlined {
20470                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20471                    inner_offset = next_offset;
20472                } else {
20473                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20474                    inner_depth.increment()?;
20475                }
20476                let val_ref = self
20477                    .per_packet_buffer_bytes_min
20478                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20479                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20480                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20481                {
20482                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20483                }
20484                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20485                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20486                }
20487            }
20488
20489            next_offset += envelope_size;
20490            _next_ordinal_to_read += 1;
20491            if next_offset >= end_offset {
20492                return Ok(());
20493            }
20494
20495            // Decode unknown envelopes for gaps in ordinals.
20496            while _next_ordinal_to_read < 4 {
20497                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20498                _next_ordinal_to_read += 1;
20499                next_offset += envelope_size;
20500            }
20501
20502            let next_out_of_line = decoder.next_out_of_line();
20503            let handles_before = decoder.remaining_handles();
20504            if let Some((inlined, num_bytes, num_handles)) =
20505                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20506            {
20507                let member_inline_size =
20508                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20509                if inlined != (member_inline_size <= 4) {
20510                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20511                }
20512                let inner_offset;
20513                let mut inner_depth = depth.clone();
20514                if inlined {
20515                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20516                    inner_offset = next_offset;
20517                } else {
20518                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20519                    inner_depth.increment()?;
20520                }
20521                let val_ref = self
20522                    .per_packet_buffer_bytes_recommended
20523                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20524                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20525                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20526                {
20527                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20528                }
20529                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20530                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20531                }
20532            }
20533
20534            next_offset += envelope_size;
20535            _next_ordinal_to_read += 1;
20536            if next_offset >= end_offset {
20537                return Ok(());
20538            }
20539
20540            // Decode unknown envelopes for gaps in ordinals.
20541            while _next_ordinal_to_read < 5 {
20542                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20543                _next_ordinal_to_read += 1;
20544                next_offset += envelope_size;
20545            }
20546
20547            let next_out_of_line = decoder.next_out_of_line();
20548            let handles_before = decoder.remaining_handles();
20549            if let Some((inlined, num_bytes, num_handles)) =
20550                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20551            {
20552                let member_inline_size =
20553                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20554                if inlined != (member_inline_size <= 4) {
20555                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20556                }
20557                let inner_offset;
20558                let mut inner_depth = depth.clone();
20559                if inlined {
20560                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20561                    inner_offset = next_offset;
20562                } else {
20563                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20564                    inner_depth.increment()?;
20565                }
20566                let val_ref = self
20567                    .per_packet_buffer_bytes_max
20568                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20569                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20570                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20571                {
20572                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20573                }
20574                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20575                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20576                }
20577            }
20578
20579            next_offset += envelope_size;
20580            _next_ordinal_to_read += 1;
20581            if next_offset >= end_offset {
20582                return Ok(());
20583            }
20584
20585            // Decode unknown envelopes for gaps in ordinals.
20586            while _next_ordinal_to_read < 6 {
20587                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20588                _next_ordinal_to_read += 1;
20589                next_offset += envelope_size;
20590            }
20591
20592            let next_out_of_line = decoder.next_out_of_line();
20593            let handles_before = decoder.remaining_handles();
20594            if let Some((inlined, num_bytes, num_handles)) =
20595                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20596            {
20597                let member_inline_size =
20598                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20599                if inlined != (member_inline_size <= 4) {
20600                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20601                }
20602                let inner_offset;
20603                let mut inner_depth = depth.clone();
20604                if inlined {
20605                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20606                    inner_offset = next_offset;
20607                } else {
20608                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20609                    inner_depth.increment()?;
20610                }
20611                let val_ref = self
20612                    .packet_count_for_server_min
20613                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20614                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20615                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20616                {
20617                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20618                }
20619                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20620                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20621                }
20622            }
20623
20624            next_offset += envelope_size;
20625            _next_ordinal_to_read += 1;
20626            if next_offset >= end_offset {
20627                return Ok(());
20628            }
20629
20630            // Decode unknown envelopes for gaps in ordinals.
20631            while _next_ordinal_to_read < 7 {
20632                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20633                _next_ordinal_to_read += 1;
20634                next_offset += envelope_size;
20635            }
20636
20637            let next_out_of_line = decoder.next_out_of_line();
20638            let handles_before = decoder.remaining_handles();
20639            if let Some((inlined, num_bytes, num_handles)) =
20640                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20641            {
20642                let member_inline_size =
20643                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20644                if inlined != (member_inline_size <= 4) {
20645                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20646                }
20647                let inner_offset;
20648                let mut inner_depth = depth.clone();
20649                if inlined {
20650                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20651                    inner_offset = next_offset;
20652                } else {
20653                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20654                    inner_depth.increment()?;
20655                }
20656                let val_ref = self
20657                    .packet_count_for_server_recommended
20658                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20659                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20660                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20661                {
20662                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20663                }
20664                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20665                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20666                }
20667            }
20668
20669            next_offset += envelope_size;
20670            _next_ordinal_to_read += 1;
20671            if next_offset >= end_offset {
20672                return Ok(());
20673            }
20674
20675            // Decode unknown envelopes for gaps in ordinals.
20676            while _next_ordinal_to_read < 8 {
20677                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20678                _next_ordinal_to_read += 1;
20679                next_offset += envelope_size;
20680            }
20681
20682            let next_out_of_line = decoder.next_out_of_line();
20683            let handles_before = decoder.remaining_handles();
20684            if let Some((inlined, num_bytes, num_handles)) =
20685                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20686            {
20687                let member_inline_size =
20688                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20689                if inlined != (member_inline_size <= 4) {
20690                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20691                }
20692                let inner_offset;
20693                let mut inner_depth = depth.clone();
20694                if inlined {
20695                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20696                    inner_offset = next_offset;
20697                } else {
20698                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20699                    inner_depth.increment()?;
20700                }
20701                let val_ref = self
20702                    .packet_count_for_server_recommended_max
20703                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20704                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20705                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20706                {
20707                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20708                }
20709                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20710                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20711                }
20712            }
20713
20714            next_offset += envelope_size;
20715            _next_ordinal_to_read += 1;
20716            if next_offset >= end_offset {
20717                return Ok(());
20718            }
20719
20720            // Decode unknown envelopes for gaps in ordinals.
20721            while _next_ordinal_to_read < 9 {
20722                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20723                _next_ordinal_to_read += 1;
20724                next_offset += envelope_size;
20725            }
20726
20727            let next_out_of_line = decoder.next_out_of_line();
20728            let handles_before = decoder.remaining_handles();
20729            if let Some((inlined, num_bytes, num_handles)) =
20730                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20731            {
20732                let member_inline_size =
20733                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20734                if inlined != (member_inline_size <= 4) {
20735                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20736                }
20737                let inner_offset;
20738                let mut inner_depth = depth.clone();
20739                if inlined {
20740                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20741                    inner_offset = next_offset;
20742                } else {
20743                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20744                    inner_depth.increment()?;
20745                }
20746                let val_ref = self
20747                    .packet_count_for_server_max
20748                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20749                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20750                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20751                {
20752                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20753                }
20754                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20755                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20756                }
20757            }
20758
20759            next_offset += envelope_size;
20760            _next_ordinal_to_read += 1;
20761            if next_offset >= end_offset {
20762                return Ok(());
20763            }
20764
20765            // Decode unknown envelopes for gaps in ordinals.
20766            while _next_ordinal_to_read < 10 {
20767                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20768                _next_ordinal_to_read += 1;
20769                next_offset += envelope_size;
20770            }
20771
20772            let next_out_of_line = decoder.next_out_of_line();
20773            let handles_before = decoder.remaining_handles();
20774            if let Some((inlined, num_bytes, num_handles)) =
20775                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20776            {
20777                let member_inline_size =
20778                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20779                if inlined != (member_inline_size <= 4) {
20780                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20781                }
20782                let inner_offset;
20783                let mut inner_depth = depth.clone();
20784                if inlined {
20785                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20786                    inner_offset = next_offset;
20787                } else {
20788                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20789                    inner_depth.increment()?;
20790                }
20791                let val_ref = self
20792                    .packet_count_for_client_min
20793                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20794                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20795                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20796                {
20797                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20798                }
20799                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20800                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20801                }
20802            }
20803
20804            next_offset += envelope_size;
20805            _next_ordinal_to_read += 1;
20806            if next_offset >= end_offset {
20807                return Ok(());
20808            }
20809
20810            // Decode unknown envelopes for gaps in ordinals.
20811            while _next_ordinal_to_read < 11 {
20812                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20813                _next_ordinal_to_read += 1;
20814                next_offset += envelope_size;
20815            }
20816
20817            let next_out_of_line = decoder.next_out_of_line();
20818            let handles_before = decoder.remaining_handles();
20819            if let Some((inlined, num_bytes, num_handles)) =
20820                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20821            {
20822                let member_inline_size =
20823                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20824                if inlined != (member_inline_size <= 4) {
20825                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20826                }
20827                let inner_offset;
20828                let mut inner_depth = depth.clone();
20829                if inlined {
20830                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20831                    inner_offset = next_offset;
20832                } else {
20833                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20834                    inner_depth.increment()?;
20835                }
20836                let val_ref = self
20837                    .packet_count_for_client_max
20838                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20839                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20840                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20841                {
20842                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20843                }
20844                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20845                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20846                }
20847            }
20848
20849            next_offset += envelope_size;
20850            _next_ordinal_to_read += 1;
20851            if next_offset >= end_offset {
20852                return Ok(());
20853            }
20854
20855            // Decode unknown envelopes for gaps in ordinals.
20856            while _next_ordinal_to_read < 12 {
20857                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20858                _next_ordinal_to_read += 1;
20859                next_offset += envelope_size;
20860            }
20861
20862            let next_out_of_line = decoder.next_out_of_line();
20863            let handles_before = decoder.remaining_handles();
20864            if let Some((inlined, num_bytes, num_handles)) =
20865                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20866            {
20867                let member_inline_size =
20868                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20869                if inlined != (member_inline_size <= 4) {
20870                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20871                }
20872                let inner_offset;
20873                let mut inner_depth = depth.clone();
20874                if inlined {
20875                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20876                    inner_offset = next_offset;
20877                } else {
20878                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20879                    inner_depth.increment()?;
20880                }
20881                let val_ref = self
20882                    .single_buffer_mode_allowed
20883                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
20884                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
20885                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20886                {
20887                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20888                }
20889                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20890                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20891                }
20892            }
20893
20894            next_offset += envelope_size;
20895            _next_ordinal_to_read += 1;
20896            if next_offset >= end_offset {
20897                return Ok(());
20898            }
20899
20900            // Decode unknown envelopes for gaps in ordinals.
20901            while _next_ordinal_to_read < 13 {
20902                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20903                _next_ordinal_to_read += 1;
20904                next_offset += envelope_size;
20905            }
20906
20907            let next_out_of_line = decoder.next_out_of_line();
20908            let handles_before = decoder.remaining_handles();
20909            if let Some((inlined, num_bytes, num_handles)) =
20910                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20911            {
20912                let member_inline_size =
20913                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20914                if inlined != (member_inline_size <= 4) {
20915                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20916                }
20917                let inner_offset;
20918                let mut inner_depth = depth.clone();
20919                if inlined {
20920                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20921                    inner_offset = next_offset;
20922                } else {
20923                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20924                    inner_depth.increment()?;
20925                }
20926                let val_ref = self
20927                    .is_physically_contiguous_required
20928                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
20929                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
20930                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20931                {
20932                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20933                }
20934                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20935                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20936                }
20937            }
20938
20939            next_offset += envelope_size;
20940
20941            // Decode the remaining unknown envelopes.
20942            while next_offset < end_offset {
20943                _next_ordinal_to_read += 1;
20944                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20945                next_offset += envelope_size;
20946            }
20947
20948            Ok(())
20949        }
20950    }
20951
20952    impl StreamBufferSettings {
20953        #[inline(always)]
20954        fn max_ordinal_present(&self) -> u64 {
20955            if let Some(_) = self.single_buffer_mode {
20956                return 6;
20957            }
20958            if let Some(_) = self.per_packet_buffer_bytes {
20959                return 5;
20960            }
20961            if let Some(_) = self.packet_count_for_client {
20962                return 4;
20963            }
20964            if let Some(_) = self.packet_count_for_server {
20965                return 3;
20966            }
20967            if let Some(_) = self.buffer_constraints_version_ordinal {
20968                return 2;
20969            }
20970            if let Some(_) = self.buffer_lifetime_ordinal {
20971                return 1;
20972            }
20973            0
20974        }
20975    }
20976
20977    impl fidl::encoding::ValueTypeMarker for StreamBufferSettings {
20978        type Borrowed<'a> = &'a Self;
20979        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20980            value
20981        }
20982    }
20983
20984    unsafe impl fidl::encoding::TypeMarker for StreamBufferSettings {
20985        type Owned = Self;
20986
20987        #[inline(always)]
20988        fn inline_align(_context: fidl::encoding::Context) -> usize {
20989            8
20990        }
20991
20992        #[inline(always)]
20993        fn inline_size(_context: fidl::encoding::Context) -> usize {
20994            16
20995        }
20996    }
20997
20998    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamBufferSettings, D>
20999        for &StreamBufferSettings
21000    {
21001        unsafe fn encode(
21002            self,
21003            encoder: &mut fidl::encoding::Encoder<'_, D>,
21004            offset: usize,
21005            mut depth: fidl::encoding::Depth,
21006        ) -> fidl::Result<()> {
21007            encoder.debug_check_bounds::<StreamBufferSettings>(offset);
21008            // Vector header
21009            let max_ordinal: u64 = self.max_ordinal_present();
21010            encoder.write_num(max_ordinal, offset);
21011            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21012            // Calling encoder.out_of_line_offset(0) is not allowed.
21013            if max_ordinal == 0 {
21014                return Ok(());
21015            }
21016            depth.increment()?;
21017            let envelope_size = 8;
21018            let bytes_len = max_ordinal as usize * envelope_size;
21019            #[allow(unused_variables)]
21020            let offset = encoder.out_of_line_offset(bytes_len);
21021            let mut _prev_end_offset: usize = 0;
21022            if 1 > max_ordinal {
21023                return Ok(());
21024            }
21025
21026            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21027            // are envelope_size bytes.
21028            let cur_offset: usize = (1 - 1) * envelope_size;
21029
21030            // Zero reserved fields.
21031            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21032
21033            // Safety:
21034            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21035            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21036            //   envelope_size bytes, there is always sufficient room.
21037            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21038                self.buffer_lifetime_ordinal
21039                    .as_ref()
21040                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21041                encoder,
21042                offset + cur_offset,
21043                depth,
21044            )?;
21045
21046            _prev_end_offset = cur_offset + envelope_size;
21047            if 2 > max_ordinal {
21048                return Ok(());
21049            }
21050
21051            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21052            // are envelope_size bytes.
21053            let cur_offset: usize = (2 - 1) * envelope_size;
21054
21055            // Zero reserved fields.
21056            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21057
21058            // Safety:
21059            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21060            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21061            //   envelope_size bytes, there is always sufficient room.
21062            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21063                self.buffer_constraints_version_ordinal
21064                    .as_ref()
21065                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21066                encoder,
21067                offset + cur_offset,
21068                depth,
21069            )?;
21070
21071            _prev_end_offset = cur_offset + envelope_size;
21072            if 3 > max_ordinal {
21073                return Ok(());
21074            }
21075
21076            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21077            // are envelope_size bytes.
21078            let cur_offset: usize = (3 - 1) * envelope_size;
21079
21080            // Zero reserved fields.
21081            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21082
21083            // Safety:
21084            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21085            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21086            //   envelope_size bytes, there is always sufficient room.
21087            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21088                self.packet_count_for_server
21089                    .as_ref()
21090                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21091                encoder,
21092                offset + cur_offset,
21093                depth,
21094            )?;
21095
21096            _prev_end_offset = cur_offset + envelope_size;
21097            if 4 > max_ordinal {
21098                return Ok(());
21099            }
21100
21101            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21102            // are envelope_size bytes.
21103            let cur_offset: usize = (4 - 1) * envelope_size;
21104
21105            // Zero reserved fields.
21106            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21107
21108            // Safety:
21109            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21110            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21111            //   envelope_size bytes, there is always sufficient room.
21112            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21113                self.packet_count_for_client
21114                    .as_ref()
21115                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21116                encoder,
21117                offset + cur_offset,
21118                depth,
21119            )?;
21120
21121            _prev_end_offset = cur_offset + envelope_size;
21122            if 5 > max_ordinal {
21123                return Ok(());
21124            }
21125
21126            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21127            // are envelope_size bytes.
21128            let cur_offset: usize = (5 - 1) * envelope_size;
21129
21130            // Zero reserved fields.
21131            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21132
21133            // Safety:
21134            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21135            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21136            //   envelope_size bytes, there is always sufficient room.
21137            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21138                self.per_packet_buffer_bytes
21139                    .as_ref()
21140                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21141                encoder,
21142                offset + cur_offset,
21143                depth,
21144            )?;
21145
21146            _prev_end_offset = cur_offset + envelope_size;
21147            if 6 > max_ordinal {
21148                return Ok(());
21149            }
21150
21151            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21152            // are envelope_size bytes.
21153            let cur_offset: usize = (6 - 1) * envelope_size;
21154
21155            // Zero reserved fields.
21156            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21157
21158            // Safety:
21159            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21160            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21161            //   envelope_size bytes, there is always sufficient room.
21162            fidl::encoding::encode_in_envelope_optional::<bool, D>(
21163                self.single_buffer_mode
21164                    .as_ref()
21165                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
21166                encoder,
21167                offset + cur_offset,
21168                depth,
21169            )?;
21170
21171            _prev_end_offset = cur_offset + envelope_size;
21172
21173            Ok(())
21174        }
21175    }
21176
21177    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamBufferSettings {
21178        #[inline(always)]
21179        fn new_empty() -> Self {
21180            Self::default()
21181        }
21182
21183        unsafe fn decode(
21184            &mut self,
21185            decoder: &mut fidl::encoding::Decoder<'_, D>,
21186            offset: usize,
21187            mut depth: fidl::encoding::Depth,
21188        ) -> fidl::Result<()> {
21189            decoder.debug_check_bounds::<Self>(offset);
21190            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21191                None => return Err(fidl::Error::NotNullable),
21192                Some(len) => len,
21193            };
21194            // Calling decoder.out_of_line_offset(0) is not allowed.
21195            if len == 0 {
21196                return Ok(());
21197            };
21198            depth.increment()?;
21199            let envelope_size = 8;
21200            let bytes_len = len * envelope_size;
21201            let offset = decoder.out_of_line_offset(bytes_len)?;
21202            // Decode the envelope for each type.
21203            let mut _next_ordinal_to_read = 0;
21204            let mut next_offset = offset;
21205            let end_offset = offset + bytes_len;
21206            _next_ordinal_to_read += 1;
21207            if next_offset >= end_offset {
21208                return Ok(());
21209            }
21210
21211            // Decode unknown envelopes for gaps in ordinals.
21212            while _next_ordinal_to_read < 1 {
21213                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21214                _next_ordinal_to_read += 1;
21215                next_offset += envelope_size;
21216            }
21217
21218            let next_out_of_line = decoder.next_out_of_line();
21219            let handles_before = decoder.remaining_handles();
21220            if let Some((inlined, num_bytes, num_handles)) =
21221                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21222            {
21223                let member_inline_size =
21224                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21225                if inlined != (member_inline_size <= 4) {
21226                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21227                }
21228                let inner_offset;
21229                let mut inner_depth = depth.clone();
21230                if inlined {
21231                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21232                    inner_offset = next_offset;
21233                } else {
21234                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21235                    inner_depth.increment()?;
21236                }
21237                let val_ref =
21238                    self.buffer_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
21239                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21240                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21241                {
21242                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21243                }
21244                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21245                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21246                }
21247            }
21248
21249            next_offset += envelope_size;
21250            _next_ordinal_to_read += 1;
21251            if next_offset >= end_offset {
21252                return Ok(());
21253            }
21254
21255            // Decode unknown envelopes for gaps in ordinals.
21256            while _next_ordinal_to_read < 2 {
21257                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21258                _next_ordinal_to_read += 1;
21259                next_offset += envelope_size;
21260            }
21261
21262            let next_out_of_line = decoder.next_out_of_line();
21263            let handles_before = decoder.remaining_handles();
21264            if let Some((inlined, num_bytes, num_handles)) =
21265                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21266            {
21267                let member_inline_size =
21268                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21269                if inlined != (member_inline_size <= 4) {
21270                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21271                }
21272                let inner_offset;
21273                let mut inner_depth = depth.clone();
21274                if inlined {
21275                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21276                    inner_offset = next_offset;
21277                } else {
21278                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21279                    inner_depth.increment()?;
21280                }
21281                let val_ref = self
21282                    .buffer_constraints_version_ordinal
21283                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
21284                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21285                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21286                {
21287                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21288                }
21289                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21290                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21291                }
21292            }
21293
21294            next_offset += envelope_size;
21295            _next_ordinal_to_read += 1;
21296            if next_offset >= end_offset {
21297                return Ok(());
21298            }
21299
21300            // Decode unknown envelopes for gaps in ordinals.
21301            while _next_ordinal_to_read < 3 {
21302                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21303                _next_ordinal_to_read += 1;
21304                next_offset += envelope_size;
21305            }
21306
21307            let next_out_of_line = decoder.next_out_of_line();
21308            let handles_before = decoder.remaining_handles();
21309            if let Some((inlined, num_bytes, num_handles)) =
21310                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21311            {
21312                let member_inline_size =
21313                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21314                if inlined != (member_inline_size <= 4) {
21315                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21316                }
21317                let inner_offset;
21318                let mut inner_depth = depth.clone();
21319                if inlined {
21320                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21321                    inner_offset = next_offset;
21322                } else {
21323                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21324                    inner_depth.increment()?;
21325                }
21326                let val_ref =
21327                    self.packet_count_for_server.get_or_insert_with(|| fidl::new_empty!(u32, D));
21328                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21329                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21330                {
21331                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21332                }
21333                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21334                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21335                }
21336            }
21337
21338            next_offset += envelope_size;
21339            _next_ordinal_to_read += 1;
21340            if next_offset >= end_offset {
21341                return Ok(());
21342            }
21343
21344            // Decode unknown envelopes for gaps in ordinals.
21345            while _next_ordinal_to_read < 4 {
21346                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21347                _next_ordinal_to_read += 1;
21348                next_offset += envelope_size;
21349            }
21350
21351            let next_out_of_line = decoder.next_out_of_line();
21352            let handles_before = decoder.remaining_handles();
21353            if let Some((inlined, num_bytes, num_handles)) =
21354                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21355            {
21356                let member_inline_size =
21357                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21358                if inlined != (member_inline_size <= 4) {
21359                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21360                }
21361                let inner_offset;
21362                let mut inner_depth = depth.clone();
21363                if inlined {
21364                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21365                    inner_offset = next_offset;
21366                } else {
21367                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21368                    inner_depth.increment()?;
21369                }
21370                let val_ref =
21371                    self.packet_count_for_client.get_or_insert_with(|| fidl::new_empty!(u32, D));
21372                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21373                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21374                {
21375                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21376                }
21377                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21378                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21379                }
21380            }
21381
21382            next_offset += envelope_size;
21383            _next_ordinal_to_read += 1;
21384            if next_offset >= end_offset {
21385                return Ok(());
21386            }
21387
21388            // Decode unknown envelopes for gaps in ordinals.
21389            while _next_ordinal_to_read < 5 {
21390                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21391                _next_ordinal_to_read += 1;
21392                next_offset += envelope_size;
21393            }
21394
21395            let next_out_of_line = decoder.next_out_of_line();
21396            let handles_before = decoder.remaining_handles();
21397            if let Some((inlined, num_bytes, num_handles)) =
21398                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21399            {
21400                let member_inline_size =
21401                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21402                if inlined != (member_inline_size <= 4) {
21403                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21404                }
21405                let inner_offset;
21406                let mut inner_depth = depth.clone();
21407                if inlined {
21408                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21409                    inner_offset = next_offset;
21410                } else {
21411                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21412                    inner_depth.increment()?;
21413                }
21414                let val_ref =
21415                    self.per_packet_buffer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
21416                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21417                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21418                {
21419                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21420                }
21421                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21422                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21423                }
21424            }
21425
21426            next_offset += envelope_size;
21427            _next_ordinal_to_read += 1;
21428            if next_offset >= end_offset {
21429                return Ok(());
21430            }
21431
21432            // Decode unknown envelopes for gaps in ordinals.
21433            while _next_ordinal_to_read < 6 {
21434                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21435                _next_ordinal_to_read += 1;
21436                next_offset += envelope_size;
21437            }
21438
21439            let next_out_of_line = decoder.next_out_of_line();
21440            let handles_before = decoder.remaining_handles();
21441            if let Some((inlined, num_bytes, num_handles)) =
21442                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21443            {
21444                let member_inline_size =
21445                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21446                if inlined != (member_inline_size <= 4) {
21447                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21448                }
21449                let inner_offset;
21450                let mut inner_depth = depth.clone();
21451                if inlined {
21452                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21453                    inner_offset = next_offset;
21454                } else {
21455                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21456                    inner_depth.increment()?;
21457                }
21458                let val_ref =
21459                    self.single_buffer_mode.get_or_insert_with(|| fidl::new_empty!(bool, D));
21460                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21461                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21462                {
21463                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21464                }
21465                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21466                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21467                }
21468            }
21469
21470            next_offset += envelope_size;
21471
21472            // Decode the remaining unknown envelopes.
21473            while next_offset < end_offset {
21474                _next_ordinal_to_read += 1;
21475                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21476                next_offset += envelope_size;
21477            }
21478
21479            Ok(())
21480        }
21481    }
21482
21483    impl StreamOutputConstraints {
21484        #[inline(always)]
21485        fn max_ordinal_present(&self) -> u64 {
21486            if let Some(_) = self.buffer_constraints {
21487                return 3;
21488            }
21489            if let Some(_) = self.buffer_constraints_action_required {
21490                return 2;
21491            }
21492            if let Some(_) = self.stream_lifetime_ordinal {
21493                return 1;
21494            }
21495            0
21496        }
21497    }
21498
21499    impl fidl::encoding::ValueTypeMarker for StreamOutputConstraints {
21500        type Borrowed<'a> = &'a Self;
21501        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21502            value
21503        }
21504    }
21505
21506    unsafe impl fidl::encoding::TypeMarker for StreamOutputConstraints {
21507        type Owned = Self;
21508
21509        #[inline(always)]
21510        fn inline_align(_context: fidl::encoding::Context) -> usize {
21511            8
21512        }
21513
21514        #[inline(always)]
21515        fn inline_size(_context: fidl::encoding::Context) -> usize {
21516            16
21517        }
21518    }
21519
21520    unsafe impl<D: fidl::encoding::ResourceDialect>
21521        fidl::encoding::Encode<StreamOutputConstraints, D> for &StreamOutputConstraints
21522    {
21523        unsafe fn encode(
21524            self,
21525            encoder: &mut fidl::encoding::Encoder<'_, D>,
21526            offset: usize,
21527            mut depth: fidl::encoding::Depth,
21528        ) -> fidl::Result<()> {
21529            encoder.debug_check_bounds::<StreamOutputConstraints>(offset);
21530            // Vector header
21531            let max_ordinal: u64 = self.max_ordinal_present();
21532            encoder.write_num(max_ordinal, offset);
21533            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21534            // Calling encoder.out_of_line_offset(0) is not allowed.
21535            if max_ordinal == 0 {
21536                return Ok(());
21537            }
21538            depth.increment()?;
21539            let envelope_size = 8;
21540            let bytes_len = max_ordinal as usize * envelope_size;
21541            #[allow(unused_variables)]
21542            let offset = encoder.out_of_line_offset(bytes_len);
21543            let mut _prev_end_offset: usize = 0;
21544            if 1 > max_ordinal {
21545                return Ok(());
21546            }
21547
21548            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21549            // are envelope_size bytes.
21550            let cur_offset: usize = (1 - 1) * envelope_size;
21551
21552            // Zero reserved fields.
21553            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21554
21555            // Safety:
21556            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21557            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21558            //   envelope_size bytes, there is always sufficient room.
21559            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21560                self.stream_lifetime_ordinal
21561                    .as_ref()
21562                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21563                encoder,
21564                offset + cur_offset,
21565                depth,
21566            )?;
21567
21568            _prev_end_offset = cur_offset + envelope_size;
21569            if 2 > max_ordinal {
21570                return Ok(());
21571            }
21572
21573            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21574            // are envelope_size bytes.
21575            let cur_offset: usize = (2 - 1) * envelope_size;
21576
21577            // Zero reserved fields.
21578            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21579
21580            // Safety:
21581            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21582            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21583            //   envelope_size bytes, there is always sufficient room.
21584            fidl::encoding::encode_in_envelope_optional::<bool, D>(
21585                self.buffer_constraints_action_required
21586                    .as_ref()
21587                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
21588                encoder,
21589                offset + cur_offset,
21590                depth,
21591            )?;
21592
21593            _prev_end_offset = cur_offset + envelope_size;
21594            if 3 > max_ordinal {
21595                return Ok(());
21596            }
21597
21598            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21599            // are envelope_size bytes.
21600            let cur_offset: usize = (3 - 1) * envelope_size;
21601
21602            // Zero reserved fields.
21603            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21604
21605            // Safety:
21606            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21607            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21608            //   envelope_size bytes, there is always sufficient room.
21609            fidl::encoding::encode_in_envelope_optional::<StreamBufferConstraints, D>(
21610                self.buffer_constraints
21611                    .as_ref()
21612                    .map(<StreamBufferConstraints as fidl::encoding::ValueTypeMarker>::borrow),
21613                encoder,
21614                offset + cur_offset,
21615                depth,
21616            )?;
21617
21618            _prev_end_offset = cur_offset + envelope_size;
21619
21620            Ok(())
21621        }
21622    }
21623
21624    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
21625        for StreamOutputConstraints
21626    {
21627        #[inline(always)]
21628        fn new_empty() -> Self {
21629            Self::default()
21630        }
21631
21632        unsafe fn decode(
21633            &mut self,
21634            decoder: &mut fidl::encoding::Decoder<'_, D>,
21635            offset: usize,
21636            mut depth: fidl::encoding::Depth,
21637        ) -> fidl::Result<()> {
21638            decoder.debug_check_bounds::<Self>(offset);
21639            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21640                None => return Err(fidl::Error::NotNullable),
21641                Some(len) => len,
21642            };
21643            // Calling decoder.out_of_line_offset(0) is not allowed.
21644            if len == 0 {
21645                return Ok(());
21646            };
21647            depth.increment()?;
21648            let envelope_size = 8;
21649            let bytes_len = len * envelope_size;
21650            let offset = decoder.out_of_line_offset(bytes_len)?;
21651            // Decode the envelope for each type.
21652            let mut _next_ordinal_to_read = 0;
21653            let mut next_offset = offset;
21654            let end_offset = offset + bytes_len;
21655            _next_ordinal_to_read += 1;
21656            if next_offset >= end_offset {
21657                return Ok(());
21658            }
21659
21660            // Decode unknown envelopes for gaps in ordinals.
21661            while _next_ordinal_to_read < 1 {
21662                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21663                _next_ordinal_to_read += 1;
21664                next_offset += envelope_size;
21665            }
21666
21667            let next_out_of_line = decoder.next_out_of_line();
21668            let handles_before = decoder.remaining_handles();
21669            if let Some((inlined, num_bytes, num_handles)) =
21670                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21671            {
21672                let member_inline_size =
21673                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21674                if inlined != (member_inline_size <= 4) {
21675                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21676                }
21677                let inner_offset;
21678                let mut inner_depth = depth.clone();
21679                if inlined {
21680                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21681                    inner_offset = next_offset;
21682                } else {
21683                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21684                    inner_depth.increment()?;
21685                }
21686                let val_ref =
21687                    self.stream_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
21688                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21689                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21690                {
21691                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21692                }
21693                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21694                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21695                }
21696            }
21697
21698            next_offset += envelope_size;
21699            _next_ordinal_to_read += 1;
21700            if next_offset >= end_offset {
21701                return Ok(());
21702            }
21703
21704            // Decode unknown envelopes for gaps in ordinals.
21705            while _next_ordinal_to_read < 2 {
21706                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21707                _next_ordinal_to_read += 1;
21708                next_offset += envelope_size;
21709            }
21710
21711            let next_out_of_line = decoder.next_out_of_line();
21712            let handles_before = decoder.remaining_handles();
21713            if let Some((inlined, num_bytes, num_handles)) =
21714                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21715            {
21716                let member_inline_size =
21717                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21718                if inlined != (member_inline_size <= 4) {
21719                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21720                }
21721                let inner_offset;
21722                let mut inner_depth = depth.clone();
21723                if inlined {
21724                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21725                    inner_offset = next_offset;
21726                } else {
21727                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21728                    inner_depth.increment()?;
21729                }
21730                let val_ref = self
21731                    .buffer_constraints_action_required
21732                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
21733                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21734                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21735                {
21736                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21737                }
21738                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21739                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21740                }
21741            }
21742
21743            next_offset += envelope_size;
21744            _next_ordinal_to_read += 1;
21745            if next_offset >= end_offset {
21746                return Ok(());
21747            }
21748
21749            // Decode unknown envelopes for gaps in ordinals.
21750            while _next_ordinal_to_read < 3 {
21751                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21752                _next_ordinal_to_read += 1;
21753                next_offset += envelope_size;
21754            }
21755
21756            let next_out_of_line = decoder.next_out_of_line();
21757            let handles_before = decoder.remaining_handles();
21758            if let Some((inlined, num_bytes, num_handles)) =
21759                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21760            {
21761                let member_inline_size =
21762                    <StreamBufferConstraints as fidl::encoding::TypeMarker>::inline_size(
21763                        decoder.context,
21764                    );
21765                if inlined != (member_inline_size <= 4) {
21766                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21767                }
21768                let inner_offset;
21769                let mut inner_depth = depth.clone();
21770                if inlined {
21771                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21772                    inner_offset = next_offset;
21773                } else {
21774                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21775                    inner_depth.increment()?;
21776                }
21777                let val_ref = self
21778                    .buffer_constraints
21779                    .get_or_insert_with(|| fidl::new_empty!(StreamBufferConstraints, D));
21780                fidl::decode!(
21781                    StreamBufferConstraints,
21782                    D,
21783                    val_ref,
21784                    decoder,
21785                    inner_offset,
21786                    inner_depth
21787                )?;
21788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21789                {
21790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21791                }
21792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21794                }
21795            }
21796
21797            next_offset += envelope_size;
21798
21799            // Decode the remaining unknown envelopes.
21800            while next_offset < end_offset {
21801                _next_ordinal_to_read += 1;
21802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21803                next_offset += envelope_size;
21804            }
21805
21806            Ok(())
21807        }
21808    }
21809
21810    impl StreamOutputFormat {
21811        #[inline(always)]
21812        fn max_ordinal_present(&self) -> u64 {
21813            if let Some(_) = self.format_details {
21814                return 2;
21815            }
21816            if let Some(_) = self.stream_lifetime_ordinal {
21817                return 1;
21818            }
21819            0
21820        }
21821    }
21822
21823    impl fidl::encoding::ValueTypeMarker for StreamOutputFormat {
21824        type Borrowed<'a> = &'a Self;
21825        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21826            value
21827        }
21828    }
21829
21830    unsafe impl fidl::encoding::TypeMarker for StreamOutputFormat {
21831        type Owned = Self;
21832
21833        #[inline(always)]
21834        fn inline_align(_context: fidl::encoding::Context) -> usize {
21835            8
21836        }
21837
21838        #[inline(always)]
21839        fn inline_size(_context: fidl::encoding::Context) -> usize {
21840            16
21841        }
21842    }
21843
21844    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamOutputFormat, D>
21845        for &StreamOutputFormat
21846    {
21847        unsafe fn encode(
21848            self,
21849            encoder: &mut fidl::encoding::Encoder<'_, D>,
21850            offset: usize,
21851            mut depth: fidl::encoding::Depth,
21852        ) -> fidl::Result<()> {
21853            encoder.debug_check_bounds::<StreamOutputFormat>(offset);
21854            // Vector header
21855            let max_ordinal: u64 = self.max_ordinal_present();
21856            encoder.write_num(max_ordinal, offset);
21857            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21858            // Calling encoder.out_of_line_offset(0) is not allowed.
21859            if max_ordinal == 0 {
21860                return Ok(());
21861            }
21862            depth.increment()?;
21863            let envelope_size = 8;
21864            let bytes_len = max_ordinal as usize * envelope_size;
21865            #[allow(unused_variables)]
21866            let offset = encoder.out_of_line_offset(bytes_len);
21867            let mut _prev_end_offset: usize = 0;
21868            if 1 > max_ordinal {
21869                return Ok(());
21870            }
21871
21872            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21873            // are envelope_size bytes.
21874            let cur_offset: usize = (1 - 1) * envelope_size;
21875
21876            // Zero reserved fields.
21877            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21878
21879            // Safety:
21880            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21881            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21882            //   envelope_size bytes, there is always sufficient room.
21883            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21884                self.stream_lifetime_ordinal
21885                    .as_ref()
21886                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21887                encoder,
21888                offset + cur_offset,
21889                depth,
21890            )?;
21891
21892            _prev_end_offset = cur_offset + envelope_size;
21893            if 2 > max_ordinal {
21894                return Ok(());
21895            }
21896
21897            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21898            // are envelope_size bytes.
21899            let cur_offset: usize = (2 - 1) * envelope_size;
21900
21901            // Zero reserved fields.
21902            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21903
21904            // Safety:
21905            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21906            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21907            //   envelope_size bytes, there is always sufficient room.
21908            fidl::encoding::encode_in_envelope_optional::<FormatDetails, D>(
21909                self.format_details
21910                    .as_ref()
21911                    .map(<FormatDetails as fidl::encoding::ValueTypeMarker>::borrow),
21912                encoder,
21913                offset + cur_offset,
21914                depth,
21915            )?;
21916
21917            _prev_end_offset = cur_offset + envelope_size;
21918
21919            Ok(())
21920        }
21921    }
21922
21923    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamOutputFormat {
21924        #[inline(always)]
21925        fn new_empty() -> Self {
21926            Self::default()
21927        }
21928
21929        unsafe fn decode(
21930            &mut self,
21931            decoder: &mut fidl::encoding::Decoder<'_, D>,
21932            offset: usize,
21933            mut depth: fidl::encoding::Depth,
21934        ) -> fidl::Result<()> {
21935            decoder.debug_check_bounds::<Self>(offset);
21936            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21937                None => return Err(fidl::Error::NotNullable),
21938                Some(len) => len,
21939            };
21940            // Calling decoder.out_of_line_offset(0) is not allowed.
21941            if len == 0 {
21942                return Ok(());
21943            };
21944            depth.increment()?;
21945            let envelope_size = 8;
21946            let bytes_len = len * envelope_size;
21947            let offset = decoder.out_of_line_offset(bytes_len)?;
21948            // Decode the envelope for each type.
21949            let mut _next_ordinal_to_read = 0;
21950            let mut next_offset = offset;
21951            let end_offset = offset + bytes_len;
21952            _next_ordinal_to_read += 1;
21953            if next_offset >= end_offset {
21954                return Ok(());
21955            }
21956
21957            // Decode unknown envelopes for gaps in ordinals.
21958            while _next_ordinal_to_read < 1 {
21959                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21960                _next_ordinal_to_read += 1;
21961                next_offset += envelope_size;
21962            }
21963
21964            let next_out_of_line = decoder.next_out_of_line();
21965            let handles_before = decoder.remaining_handles();
21966            if let Some((inlined, num_bytes, num_handles)) =
21967                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21968            {
21969                let member_inline_size =
21970                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21971                if inlined != (member_inline_size <= 4) {
21972                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21973                }
21974                let inner_offset;
21975                let mut inner_depth = depth.clone();
21976                if inlined {
21977                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21978                    inner_offset = next_offset;
21979                } else {
21980                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21981                    inner_depth.increment()?;
21982                }
21983                let val_ref =
21984                    self.stream_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
21985                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21987                {
21988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21989                }
21990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21992                }
21993            }
21994
21995            next_offset += envelope_size;
21996            _next_ordinal_to_read += 1;
21997            if next_offset >= end_offset {
21998                return Ok(());
21999            }
22000
22001            // Decode unknown envelopes for gaps in ordinals.
22002            while _next_ordinal_to_read < 2 {
22003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22004                _next_ordinal_to_read += 1;
22005                next_offset += envelope_size;
22006            }
22007
22008            let next_out_of_line = decoder.next_out_of_line();
22009            let handles_before = decoder.remaining_handles();
22010            if let Some((inlined, num_bytes, num_handles)) =
22011                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22012            {
22013                let member_inline_size =
22014                    <FormatDetails as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22015                if inlined != (member_inline_size <= 4) {
22016                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22017                }
22018                let inner_offset;
22019                let mut inner_depth = depth.clone();
22020                if inlined {
22021                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22022                    inner_offset = next_offset;
22023                } else {
22024                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22025                    inner_depth.increment()?;
22026                }
22027                let val_ref =
22028                    self.format_details.get_or_insert_with(|| fidl::new_empty!(FormatDetails, D));
22029                fidl::decode!(FormatDetails, D, val_ref, decoder, inner_offset, inner_depth)?;
22030                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22031                {
22032                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22033                }
22034                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22035                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22036                }
22037            }
22038
22039            next_offset += envelope_size;
22040
22041            // Decode the remaining unknown envelopes.
22042            while next_offset < end_offset {
22043                _next_ordinal_to_read += 1;
22044                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22045                next_offset += envelope_size;
22046            }
22047
22048            Ok(())
22049        }
22050    }
22051
22052    impl UsageStateDucked {
22053        #[inline(always)]
22054        fn max_ordinal_present(&self) -> u64 {
22055            0
22056        }
22057    }
22058
22059    impl fidl::encoding::ValueTypeMarker for UsageStateDucked {
22060        type Borrowed<'a> = &'a Self;
22061        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22062            value
22063        }
22064    }
22065
22066    unsafe impl fidl::encoding::TypeMarker for UsageStateDucked {
22067        type Owned = Self;
22068
22069        #[inline(always)]
22070        fn inline_align(_context: fidl::encoding::Context) -> usize {
22071            8
22072        }
22073
22074        #[inline(always)]
22075        fn inline_size(_context: fidl::encoding::Context) -> usize {
22076            16
22077        }
22078    }
22079
22080    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageStateDucked, D>
22081        for &UsageStateDucked
22082    {
22083        unsafe fn encode(
22084            self,
22085            encoder: &mut fidl::encoding::Encoder<'_, D>,
22086            offset: usize,
22087            mut depth: fidl::encoding::Depth,
22088        ) -> fidl::Result<()> {
22089            encoder.debug_check_bounds::<UsageStateDucked>(offset);
22090            // Vector header
22091            let max_ordinal: u64 = self.max_ordinal_present();
22092            encoder.write_num(max_ordinal, offset);
22093            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22094            // Calling encoder.out_of_line_offset(0) is not allowed.
22095            if max_ordinal == 0 {
22096                return Ok(());
22097            }
22098            depth.increment()?;
22099            let envelope_size = 8;
22100            let bytes_len = max_ordinal as usize * envelope_size;
22101            #[allow(unused_variables)]
22102            let offset = encoder.out_of_line_offset(bytes_len);
22103            let mut _prev_end_offset: usize = 0;
22104
22105            Ok(())
22106        }
22107    }
22108
22109    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageStateDucked {
22110        #[inline(always)]
22111        fn new_empty() -> Self {
22112            Self::default()
22113        }
22114
22115        unsafe fn decode(
22116            &mut self,
22117            decoder: &mut fidl::encoding::Decoder<'_, D>,
22118            offset: usize,
22119            mut depth: fidl::encoding::Depth,
22120        ) -> fidl::Result<()> {
22121            decoder.debug_check_bounds::<Self>(offset);
22122            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22123                None => return Err(fidl::Error::NotNullable),
22124                Some(len) => len,
22125            };
22126            // Calling decoder.out_of_line_offset(0) is not allowed.
22127            if len == 0 {
22128                return Ok(());
22129            };
22130            depth.increment()?;
22131            let envelope_size = 8;
22132            let bytes_len = len * envelope_size;
22133            let offset = decoder.out_of_line_offset(bytes_len)?;
22134            // Decode the envelope for each type.
22135            let mut _next_ordinal_to_read = 0;
22136            let mut next_offset = offset;
22137            let end_offset = offset + bytes_len;
22138
22139            // Decode the remaining unknown envelopes.
22140            while next_offset < end_offset {
22141                _next_ordinal_to_read += 1;
22142                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22143                next_offset += envelope_size;
22144            }
22145
22146            Ok(())
22147        }
22148    }
22149
22150    impl UsageStateMuted {
22151        #[inline(always)]
22152        fn max_ordinal_present(&self) -> u64 {
22153            0
22154        }
22155    }
22156
22157    impl fidl::encoding::ValueTypeMarker for UsageStateMuted {
22158        type Borrowed<'a> = &'a Self;
22159        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22160            value
22161        }
22162    }
22163
22164    unsafe impl fidl::encoding::TypeMarker for UsageStateMuted {
22165        type Owned = Self;
22166
22167        #[inline(always)]
22168        fn inline_align(_context: fidl::encoding::Context) -> usize {
22169            8
22170        }
22171
22172        #[inline(always)]
22173        fn inline_size(_context: fidl::encoding::Context) -> usize {
22174            16
22175        }
22176    }
22177
22178    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageStateMuted, D>
22179        for &UsageStateMuted
22180    {
22181        unsafe fn encode(
22182            self,
22183            encoder: &mut fidl::encoding::Encoder<'_, D>,
22184            offset: usize,
22185            mut depth: fidl::encoding::Depth,
22186        ) -> fidl::Result<()> {
22187            encoder.debug_check_bounds::<UsageStateMuted>(offset);
22188            // Vector header
22189            let max_ordinal: u64 = self.max_ordinal_present();
22190            encoder.write_num(max_ordinal, offset);
22191            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22192            // Calling encoder.out_of_line_offset(0) is not allowed.
22193            if max_ordinal == 0 {
22194                return Ok(());
22195            }
22196            depth.increment()?;
22197            let envelope_size = 8;
22198            let bytes_len = max_ordinal as usize * envelope_size;
22199            #[allow(unused_variables)]
22200            let offset = encoder.out_of_line_offset(bytes_len);
22201            let mut _prev_end_offset: usize = 0;
22202
22203            Ok(())
22204        }
22205    }
22206
22207    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageStateMuted {
22208        #[inline(always)]
22209        fn new_empty() -> Self {
22210            Self::default()
22211        }
22212
22213        unsafe fn decode(
22214            &mut self,
22215            decoder: &mut fidl::encoding::Decoder<'_, D>,
22216            offset: usize,
22217            mut depth: fidl::encoding::Depth,
22218        ) -> fidl::Result<()> {
22219            decoder.debug_check_bounds::<Self>(offset);
22220            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22221                None => return Err(fidl::Error::NotNullable),
22222                Some(len) => len,
22223            };
22224            // Calling decoder.out_of_line_offset(0) is not allowed.
22225            if len == 0 {
22226                return Ok(());
22227            };
22228            depth.increment()?;
22229            let envelope_size = 8;
22230            let bytes_len = len * envelope_size;
22231            let offset = decoder.out_of_line_offset(bytes_len)?;
22232            // Decode the envelope for each type.
22233            let mut _next_ordinal_to_read = 0;
22234            let mut next_offset = offset;
22235            let end_offset = offset + bytes_len;
22236
22237            // Decode the remaining unknown envelopes.
22238            while next_offset < end_offset {
22239                _next_ordinal_to_read += 1;
22240                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22241                next_offset += envelope_size;
22242            }
22243
22244            Ok(())
22245        }
22246    }
22247
22248    impl UsageStateUnadjusted {
22249        #[inline(always)]
22250        fn max_ordinal_present(&self) -> u64 {
22251            0
22252        }
22253    }
22254
22255    impl fidl::encoding::ValueTypeMarker for UsageStateUnadjusted {
22256        type Borrowed<'a> = &'a Self;
22257        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22258            value
22259        }
22260    }
22261
22262    unsafe impl fidl::encoding::TypeMarker for UsageStateUnadjusted {
22263        type Owned = Self;
22264
22265        #[inline(always)]
22266        fn inline_align(_context: fidl::encoding::Context) -> usize {
22267            8
22268        }
22269
22270        #[inline(always)]
22271        fn inline_size(_context: fidl::encoding::Context) -> usize {
22272            16
22273        }
22274    }
22275
22276    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageStateUnadjusted, D>
22277        for &UsageStateUnadjusted
22278    {
22279        unsafe fn encode(
22280            self,
22281            encoder: &mut fidl::encoding::Encoder<'_, D>,
22282            offset: usize,
22283            mut depth: fidl::encoding::Depth,
22284        ) -> fidl::Result<()> {
22285            encoder.debug_check_bounds::<UsageStateUnadjusted>(offset);
22286            // Vector header
22287            let max_ordinal: u64 = self.max_ordinal_present();
22288            encoder.write_num(max_ordinal, offset);
22289            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22290            // Calling encoder.out_of_line_offset(0) is not allowed.
22291            if max_ordinal == 0 {
22292                return Ok(());
22293            }
22294            depth.increment()?;
22295            let envelope_size = 8;
22296            let bytes_len = max_ordinal as usize * envelope_size;
22297            #[allow(unused_variables)]
22298            let offset = encoder.out_of_line_offset(bytes_len);
22299            let mut _prev_end_offset: usize = 0;
22300
22301            Ok(())
22302        }
22303    }
22304
22305    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageStateUnadjusted {
22306        #[inline(always)]
22307        fn new_empty() -> Self {
22308            Self::default()
22309        }
22310
22311        unsafe fn decode(
22312            &mut self,
22313            decoder: &mut fidl::encoding::Decoder<'_, D>,
22314            offset: usize,
22315            mut depth: fidl::encoding::Depth,
22316        ) -> fidl::Result<()> {
22317            decoder.debug_check_bounds::<Self>(offset);
22318            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22319                None => return Err(fidl::Error::NotNullable),
22320                Some(len) => len,
22321            };
22322            // Calling decoder.out_of_line_offset(0) is not allowed.
22323            if len == 0 {
22324                return Ok(());
22325            };
22326            depth.increment()?;
22327            let envelope_size = 8;
22328            let bytes_len = len * envelope_size;
22329            let offset = decoder.out_of_line_offset(bytes_len)?;
22330            // Decode the envelope for each type.
22331            let mut _next_ordinal_to_read = 0;
22332            let mut next_offset = offset;
22333            let end_offset = offset + bytes_len;
22334
22335            // Decode the remaining unknown envelopes.
22336            while next_offset < end_offset {
22337                _next_ordinal_to_read += 1;
22338                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22339                next_offset += envelope_size;
22340            }
22341
22342            Ok(())
22343        }
22344    }
22345
22346    impl fidl::encoding::ValueTypeMarker for AacBitRate {
22347        type Borrowed<'a> = &'a Self;
22348        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22349            value
22350        }
22351    }
22352
22353    unsafe impl fidl::encoding::TypeMarker for AacBitRate {
22354        type Owned = Self;
22355
22356        #[inline(always)]
22357        fn inline_align(_context: fidl::encoding::Context) -> usize {
22358            8
22359        }
22360
22361        #[inline(always)]
22362        fn inline_size(_context: fidl::encoding::Context) -> usize {
22363            16
22364        }
22365    }
22366
22367    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacBitRate, D>
22368        for &AacBitRate
22369    {
22370        #[inline]
22371        unsafe fn encode(
22372            self,
22373            encoder: &mut fidl::encoding::Encoder<'_, D>,
22374            offset: usize,
22375            _depth: fidl::encoding::Depth,
22376        ) -> fidl::Result<()> {
22377            encoder.debug_check_bounds::<AacBitRate>(offset);
22378            encoder.write_num::<u64>(self.ordinal(), offset);
22379            match self {
22380                AacBitRate::Constant(ref val) => {
22381                    fidl::encoding::encode_in_envelope::<AacConstantBitRate, D>(
22382                        <AacConstantBitRate as fidl::encoding::ValueTypeMarker>::borrow(val),
22383                        encoder,
22384                        offset + 8,
22385                        _depth,
22386                    )
22387                }
22388                AacBitRate::Variable(ref val) => {
22389                    fidl::encoding::encode_in_envelope::<AacVariableBitRate, D>(
22390                        <AacVariableBitRate as fidl::encoding::ValueTypeMarker>::borrow(val),
22391                        encoder,
22392                        offset + 8,
22393                        _depth,
22394                    )
22395                }
22396            }
22397        }
22398    }
22399
22400    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacBitRate {
22401        #[inline(always)]
22402        fn new_empty() -> Self {
22403            Self::Constant(fidl::new_empty!(AacConstantBitRate, D))
22404        }
22405
22406        #[inline]
22407        unsafe fn decode(
22408            &mut self,
22409            decoder: &mut fidl::encoding::Decoder<'_, D>,
22410            offset: usize,
22411            mut depth: fidl::encoding::Depth,
22412        ) -> fidl::Result<()> {
22413            decoder.debug_check_bounds::<Self>(offset);
22414            #[allow(unused_variables)]
22415            let next_out_of_line = decoder.next_out_of_line();
22416            let handles_before = decoder.remaining_handles();
22417            let (ordinal, inlined, num_bytes, num_handles) =
22418                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22419
22420            let member_inline_size = match ordinal {
22421                1 => {
22422                    <AacConstantBitRate as fidl::encoding::TypeMarker>::inline_size(decoder.context)
22423                }
22424                2 => {
22425                    <AacVariableBitRate as fidl::encoding::TypeMarker>::inline_size(decoder.context)
22426                }
22427                _ => return Err(fidl::Error::UnknownUnionTag),
22428            };
22429
22430            if inlined != (member_inline_size <= 4) {
22431                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22432            }
22433            let _inner_offset;
22434            if inlined {
22435                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22436                _inner_offset = offset + 8;
22437            } else {
22438                depth.increment()?;
22439                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22440            }
22441            match ordinal {
22442                1 => {
22443                    #[allow(irrefutable_let_patterns)]
22444                    if let AacBitRate::Constant(_) = self {
22445                        // Do nothing, read the value into the object
22446                    } else {
22447                        // Initialize `self` to the right variant
22448                        *self = AacBitRate::Constant(fidl::new_empty!(AacConstantBitRate, D));
22449                    }
22450                    #[allow(irrefutable_let_patterns)]
22451                    if let AacBitRate::Constant(ref mut val) = self {
22452                        fidl::decode!(AacConstantBitRate, D, val, decoder, _inner_offset, depth)?;
22453                    } else {
22454                        unreachable!()
22455                    }
22456                }
22457                2 => {
22458                    #[allow(irrefutable_let_patterns)]
22459                    if let AacBitRate::Variable(_) = self {
22460                        // Do nothing, read the value into the object
22461                    } else {
22462                        // Initialize `self` to the right variant
22463                        *self = AacBitRate::Variable(fidl::new_empty!(AacVariableBitRate, D));
22464                    }
22465                    #[allow(irrefutable_let_patterns)]
22466                    if let AacBitRate::Variable(ref mut val) = self {
22467                        fidl::decode!(AacVariableBitRate, D, val, decoder, _inner_offset, depth)?;
22468                    } else {
22469                        unreachable!()
22470                    }
22471                }
22472                ordinal => panic!("unexpected ordinal {:?}", ordinal),
22473            }
22474            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22475                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22476            }
22477            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22478                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22479            }
22480            Ok(())
22481        }
22482    }
22483
22484    impl fidl::encoding::ValueTypeMarker for AacTransport {
22485        type Borrowed<'a> = &'a Self;
22486        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22487            value
22488        }
22489    }
22490
22491    unsafe impl fidl::encoding::TypeMarker for AacTransport {
22492        type Owned = Self;
22493
22494        #[inline(always)]
22495        fn inline_align(_context: fidl::encoding::Context) -> usize {
22496            8
22497        }
22498
22499        #[inline(always)]
22500        fn inline_size(_context: fidl::encoding::Context) -> usize {
22501            16
22502        }
22503    }
22504
22505    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransport, D>
22506        for &AacTransport
22507    {
22508        #[inline]
22509        unsafe fn encode(
22510            self,
22511            encoder: &mut fidl::encoding::Encoder<'_, D>,
22512            offset: usize,
22513            _depth: fidl::encoding::Depth,
22514        ) -> fidl::Result<()> {
22515            encoder.debug_check_bounds::<AacTransport>(offset);
22516            encoder.write_num::<u64>(self.ordinal(), offset);
22517            match self {
22518                AacTransport::Raw(ref val) => {
22519                    fidl::encoding::encode_in_envelope::<AacTransportRaw, D>(
22520                        <AacTransportRaw as fidl::encoding::ValueTypeMarker>::borrow(val),
22521                        encoder,
22522                        offset + 8,
22523                        _depth,
22524                    )
22525                }
22526                AacTransport::Latm(ref val) => {
22527                    fidl::encoding::encode_in_envelope::<AacTransportLatm, D>(
22528                        <AacTransportLatm as fidl::encoding::ValueTypeMarker>::borrow(val),
22529                        encoder,
22530                        offset + 8,
22531                        _depth,
22532                    )
22533                }
22534                AacTransport::Adts(ref val) => {
22535                    fidl::encoding::encode_in_envelope::<AacTransportAdts, D>(
22536                        <AacTransportAdts as fidl::encoding::ValueTypeMarker>::borrow(val),
22537                        encoder,
22538                        offset + 8,
22539                        _depth,
22540                    )
22541                }
22542                AacTransport::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
22543            }
22544        }
22545    }
22546
22547    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransport {
22548        #[inline(always)]
22549        fn new_empty() -> Self {
22550            Self::__SourceBreaking { unknown_ordinal: 0 }
22551        }
22552
22553        #[inline]
22554        unsafe fn decode(
22555            &mut self,
22556            decoder: &mut fidl::encoding::Decoder<'_, D>,
22557            offset: usize,
22558            mut depth: fidl::encoding::Depth,
22559        ) -> fidl::Result<()> {
22560            decoder.debug_check_bounds::<Self>(offset);
22561            #[allow(unused_variables)]
22562            let next_out_of_line = decoder.next_out_of_line();
22563            let handles_before = decoder.remaining_handles();
22564            let (ordinal, inlined, num_bytes, num_handles) =
22565                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22566
22567            let member_inline_size = match ordinal {
22568                1 => <AacTransportRaw as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22569                2 => <AacTransportLatm as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22570                3 => <AacTransportAdts as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22571                0 => return Err(fidl::Error::UnknownUnionTag),
22572                _ => num_bytes as usize,
22573            };
22574
22575            if inlined != (member_inline_size <= 4) {
22576                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22577            }
22578            let _inner_offset;
22579            if inlined {
22580                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22581                _inner_offset = offset + 8;
22582            } else {
22583                depth.increment()?;
22584                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22585            }
22586            match ordinal {
22587                1 => {
22588                    #[allow(irrefutable_let_patterns)]
22589                    if let AacTransport::Raw(_) = self {
22590                        // Do nothing, read the value into the object
22591                    } else {
22592                        // Initialize `self` to the right variant
22593                        *self = AacTransport::Raw(fidl::new_empty!(AacTransportRaw, D));
22594                    }
22595                    #[allow(irrefutable_let_patterns)]
22596                    if let AacTransport::Raw(ref mut val) = self {
22597                        fidl::decode!(AacTransportRaw, D, val, decoder, _inner_offset, depth)?;
22598                    } else {
22599                        unreachable!()
22600                    }
22601                }
22602                2 => {
22603                    #[allow(irrefutable_let_patterns)]
22604                    if let AacTransport::Latm(_) = self {
22605                        // Do nothing, read the value into the object
22606                    } else {
22607                        // Initialize `self` to the right variant
22608                        *self = AacTransport::Latm(fidl::new_empty!(AacTransportLatm, D));
22609                    }
22610                    #[allow(irrefutable_let_patterns)]
22611                    if let AacTransport::Latm(ref mut val) = self {
22612                        fidl::decode!(AacTransportLatm, D, val, decoder, _inner_offset, depth)?;
22613                    } else {
22614                        unreachable!()
22615                    }
22616                }
22617                3 => {
22618                    #[allow(irrefutable_let_patterns)]
22619                    if let AacTransport::Adts(_) = self {
22620                        // Do nothing, read the value into the object
22621                    } else {
22622                        // Initialize `self` to the right variant
22623                        *self = AacTransport::Adts(fidl::new_empty!(AacTransportAdts, D));
22624                    }
22625                    #[allow(irrefutable_let_patterns)]
22626                    if let AacTransport::Adts(ref mut val) = self {
22627                        fidl::decode!(AacTransportAdts, D, val, decoder, _inner_offset, depth)?;
22628                    } else {
22629                        unreachable!()
22630                    }
22631                }
22632                #[allow(deprecated)]
22633                ordinal => {
22634                    for _ in 0..num_handles {
22635                        decoder.drop_next_handle()?;
22636                    }
22637                    *self = AacTransport::__SourceBreaking { unknown_ordinal: ordinal };
22638                }
22639            }
22640            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22641                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22642            }
22643            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22644                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22645            }
22646            Ok(())
22647        }
22648    }
22649
22650    impl fidl::encoding::ValueTypeMarker for AudioCapturerConfiguration {
22651        type Borrowed<'a> = &'a Self;
22652        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22653            value
22654        }
22655    }
22656
22657    unsafe impl fidl::encoding::TypeMarker for AudioCapturerConfiguration {
22658        type Owned = Self;
22659
22660        #[inline(always)]
22661        fn inline_align(_context: fidl::encoding::Context) -> usize {
22662            8
22663        }
22664
22665        #[inline(always)]
22666        fn inline_size(_context: fidl::encoding::Context) -> usize {
22667            16
22668        }
22669    }
22670
22671    unsafe impl<D: fidl::encoding::ResourceDialect>
22672        fidl::encoding::Encode<AudioCapturerConfiguration, D> for &AudioCapturerConfiguration
22673    {
22674        #[inline]
22675        unsafe fn encode(
22676            self,
22677            encoder: &mut fidl::encoding::Encoder<'_, D>,
22678            offset: usize,
22679            _depth: fidl::encoding::Depth,
22680        ) -> fidl::Result<()> {
22681            encoder.debug_check_bounds::<AudioCapturerConfiguration>(offset);
22682            encoder.write_num::<u64>(self.ordinal(), offset);
22683            match self {
22684                AudioCapturerConfiguration::Loopback(ref val) => fidl::encoding::encode_in_envelope::<
22685                    LoopbackAudioCapturerConfiguration,
22686                    D,
22687                >(
22688                    <LoopbackAudioCapturerConfiguration as fidl::encoding::ValueTypeMarker>::borrow(
22689                        val,
22690                    ),
22691                    encoder,
22692                    offset + 8,
22693                    _depth,
22694                ),
22695                AudioCapturerConfiguration::Input(ref val) => fidl::encoding::encode_in_envelope::<
22696                    InputAudioCapturerConfiguration,
22697                    D,
22698                >(
22699                    <InputAudioCapturerConfiguration as fidl::encoding::ValueTypeMarker>::borrow(
22700                        val,
22701                    ),
22702                    encoder,
22703                    offset + 8,
22704                    _depth,
22705                ),
22706            }
22707        }
22708    }
22709
22710    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
22711        for AudioCapturerConfiguration
22712    {
22713        #[inline(always)]
22714        fn new_empty() -> Self {
22715            Self::Loopback(fidl::new_empty!(LoopbackAudioCapturerConfiguration, D))
22716        }
22717
22718        #[inline]
22719        unsafe fn decode(
22720            &mut self,
22721            decoder: &mut fidl::encoding::Decoder<'_, D>,
22722            offset: usize,
22723            mut depth: fidl::encoding::Depth,
22724        ) -> fidl::Result<()> {
22725            decoder.debug_check_bounds::<Self>(offset);
22726            #[allow(unused_variables)]
22727            let next_out_of_line = decoder.next_out_of_line();
22728            let handles_before = decoder.remaining_handles();
22729            let (ordinal, inlined, num_bytes, num_handles) =
22730                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22731
22732            let member_inline_size = match ordinal {
22733                1 => {
22734                    <LoopbackAudioCapturerConfiguration as fidl::encoding::TypeMarker>::inline_size(
22735                        decoder.context,
22736                    )
22737                }
22738                2 => <InputAudioCapturerConfiguration as fidl::encoding::TypeMarker>::inline_size(
22739                    decoder.context,
22740                ),
22741                _ => return Err(fidl::Error::UnknownUnionTag),
22742            };
22743
22744            if inlined != (member_inline_size <= 4) {
22745                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22746            }
22747            let _inner_offset;
22748            if inlined {
22749                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22750                _inner_offset = offset + 8;
22751            } else {
22752                depth.increment()?;
22753                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22754            }
22755            match ordinal {
22756                1 => {
22757                    #[allow(irrefutable_let_patterns)]
22758                    if let AudioCapturerConfiguration::Loopback(_) = self {
22759                        // Do nothing, read the value into the object
22760                    } else {
22761                        // Initialize `self` to the right variant
22762                        *self = AudioCapturerConfiguration::Loopback(fidl::new_empty!(
22763                            LoopbackAudioCapturerConfiguration,
22764                            D
22765                        ));
22766                    }
22767                    #[allow(irrefutable_let_patterns)]
22768                    if let AudioCapturerConfiguration::Loopback(ref mut val) = self {
22769                        fidl::decode!(
22770                            LoopbackAudioCapturerConfiguration,
22771                            D,
22772                            val,
22773                            decoder,
22774                            _inner_offset,
22775                            depth
22776                        )?;
22777                    } else {
22778                        unreachable!()
22779                    }
22780                }
22781                2 => {
22782                    #[allow(irrefutable_let_patterns)]
22783                    if let AudioCapturerConfiguration::Input(_) = self {
22784                        // Do nothing, read the value into the object
22785                    } else {
22786                        // Initialize `self` to the right variant
22787                        *self = AudioCapturerConfiguration::Input(fidl::new_empty!(
22788                            InputAudioCapturerConfiguration,
22789                            D
22790                        ));
22791                    }
22792                    #[allow(irrefutable_let_patterns)]
22793                    if let AudioCapturerConfiguration::Input(ref mut val) = self {
22794                        fidl::decode!(
22795                            InputAudioCapturerConfiguration,
22796                            D,
22797                            val,
22798                            decoder,
22799                            _inner_offset,
22800                            depth
22801                        )?;
22802                    } else {
22803                        unreachable!()
22804                    }
22805                }
22806                ordinal => panic!("unexpected ordinal {:?}", ordinal),
22807            }
22808            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22809                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22810            }
22811            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22812                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22813            }
22814            Ok(())
22815        }
22816    }
22817
22818    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormat {
22819        type Borrowed<'a> = &'a Self;
22820        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22821            value
22822        }
22823    }
22824
22825    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormat {
22826        type Owned = Self;
22827
22828        #[inline(always)]
22829        fn inline_align(_context: fidl::encoding::Context) -> usize {
22830            8
22831        }
22832
22833        #[inline(always)]
22834        fn inline_size(_context: fidl::encoding::Context) -> usize {
22835            16
22836        }
22837    }
22838
22839    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioCompressedFormat, D>
22840        for &AudioCompressedFormat
22841    {
22842        #[inline]
22843        unsafe fn encode(
22844            self,
22845            encoder: &mut fidl::encoding::Encoder<'_, D>,
22846            offset: usize,
22847            _depth: fidl::encoding::Depth,
22848        ) -> fidl::Result<()> {
22849            encoder.debug_check_bounds::<AudioCompressedFormat>(offset);
22850            encoder.write_num::<u64>(self.ordinal(), offset);
22851            match self {
22852                AudioCompressedFormat::Aac(ref val) => {
22853                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatAac, D>(
22854                        <AudioCompressedFormatAac as fidl::encoding::ValueTypeMarker>::borrow(val),
22855                        encoder,
22856                        offset + 8,
22857                        _depth,
22858                    )
22859                }
22860                AudioCompressedFormat::Sbc(ref val) => {
22861                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatSbc, D>(
22862                        <AudioCompressedFormatSbc as fidl::encoding::ValueTypeMarker>::borrow(val),
22863                        encoder,
22864                        offset + 8,
22865                        _depth,
22866                    )
22867                }
22868                AudioCompressedFormat::Cvsd(ref val) => {
22869                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatCvsd, D>(
22870                        <AudioCompressedFormatCvsd as fidl::encoding::ValueTypeMarker>::borrow(val),
22871                        encoder,
22872                        offset + 8,
22873                        _depth,
22874                    )
22875                }
22876                AudioCompressedFormat::Lc3(ref val) => {
22877                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatLc3, D>(
22878                        <AudioCompressedFormatLc3 as fidl::encoding::ValueTypeMarker>::borrow(val),
22879                        encoder,
22880                        offset + 8,
22881                        _depth,
22882                    )
22883                }
22884                AudioCompressedFormat::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
22885            }
22886        }
22887    }
22888
22889    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioCompressedFormat {
22890        #[inline(always)]
22891        fn new_empty() -> Self {
22892            Self::__SourceBreaking { unknown_ordinal: 0 }
22893        }
22894
22895        #[inline]
22896        unsafe fn decode(
22897            &mut self,
22898            decoder: &mut fidl::encoding::Decoder<'_, D>,
22899            offset: usize,
22900            mut depth: fidl::encoding::Depth,
22901        ) -> fidl::Result<()> {
22902            decoder.debug_check_bounds::<Self>(offset);
22903            #[allow(unused_variables)]
22904            let next_out_of_line = decoder.next_out_of_line();
22905            let handles_before = decoder.remaining_handles();
22906            let (ordinal, inlined, num_bytes, num_handles) =
22907                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22908
22909            let member_inline_size = match ordinal {
22910                1 => <AudioCompressedFormatAac as fidl::encoding::TypeMarker>::inline_size(
22911                    decoder.context,
22912                ),
22913                2 => <AudioCompressedFormatSbc as fidl::encoding::TypeMarker>::inline_size(
22914                    decoder.context,
22915                ),
22916                3 => <AudioCompressedFormatCvsd as fidl::encoding::TypeMarker>::inline_size(
22917                    decoder.context,
22918                ),
22919                4 => <AudioCompressedFormatLc3 as fidl::encoding::TypeMarker>::inline_size(
22920                    decoder.context,
22921                ),
22922                0 => return Err(fidl::Error::UnknownUnionTag),
22923                _ => num_bytes as usize,
22924            };
22925
22926            if inlined != (member_inline_size <= 4) {
22927                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22928            }
22929            let _inner_offset;
22930            if inlined {
22931                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22932                _inner_offset = offset + 8;
22933            } else {
22934                depth.increment()?;
22935                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22936            }
22937            match ordinal {
22938                1 => {
22939                    #[allow(irrefutable_let_patterns)]
22940                    if let AudioCompressedFormat::Aac(_) = self {
22941                        // Do nothing, read the value into the object
22942                    } else {
22943                        // Initialize `self` to the right variant
22944                        *self = AudioCompressedFormat::Aac(fidl::new_empty!(
22945                            AudioCompressedFormatAac,
22946                            D
22947                        ));
22948                    }
22949                    #[allow(irrefutable_let_patterns)]
22950                    if let AudioCompressedFormat::Aac(ref mut val) = self {
22951                        fidl::decode!(
22952                            AudioCompressedFormatAac,
22953                            D,
22954                            val,
22955                            decoder,
22956                            _inner_offset,
22957                            depth
22958                        )?;
22959                    } else {
22960                        unreachable!()
22961                    }
22962                }
22963                2 => {
22964                    #[allow(irrefutable_let_patterns)]
22965                    if let AudioCompressedFormat::Sbc(_) = self {
22966                        // Do nothing, read the value into the object
22967                    } else {
22968                        // Initialize `self` to the right variant
22969                        *self = AudioCompressedFormat::Sbc(fidl::new_empty!(
22970                            AudioCompressedFormatSbc,
22971                            D
22972                        ));
22973                    }
22974                    #[allow(irrefutable_let_patterns)]
22975                    if let AudioCompressedFormat::Sbc(ref mut val) = self {
22976                        fidl::decode!(
22977                            AudioCompressedFormatSbc,
22978                            D,
22979                            val,
22980                            decoder,
22981                            _inner_offset,
22982                            depth
22983                        )?;
22984                    } else {
22985                        unreachable!()
22986                    }
22987                }
22988                3 => {
22989                    #[allow(irrefutable_let_patterns)]
22990                    if let AudioCompressedFormat::Cvsd(_) = self {
22991                        // Do nothing, read the value into the object
22992                    } else {
22993                        // Initialize `self` to the right variant
22994                        *self = AudioCompressedFormat::Cvsd(fidl::new_empty!(
22995                            AudioCompressedFormatCvsd,
22996                            D
22997                        ));
22998                    }
22999                    #[allow(irrefutable_let_patterns)]
23000                    if let AudioCompressedFormat::Cvsd(ref mut val) = self {
23001                        fidl::decode!(
23002                            AudioCompressedFormatCvsd,
23003                            D,
23004                            val,
23005                            decoder,
23006                            _inner_offset,
23007                            depth
23008                        )?;
23009                    } else {
23010                        unreachable!()
23011                    }
23012                }
23013                4 => {
23014                    #[allow(irrefutable_let_patterns)]
23015                    if let AudioCompressedFormat::Lc3(_) = self {
23016                        // Do nothing, read the value into the object
23017                    } else {
23018                        // Initialize `self` to the right variant
23019                        *self = AudioCompressedFormat::Lc3(fidl::new_empty!(
23020                            AudioCompressedFormatLc3,
23021                            D
23022                        ));
23023                    }
23024                    #[allow(irrefutable_let_patterns)]
23025                    if let AudioCompressedFormat::Lc3(ref mut val) = self {
23026                        fidl::decode!(
23027                            AudioCompressedFormatLc3,
23028                            D,
23029                            val,
23030                            decoder,
23031                            _inner_offset,
23032                            depth
23033                        )?;
23034                    } else {
23035                        unreachable!()
23036                    }
23037                }
23038                #[allow(deprecated)]
23039                ordinal => {
23040                    for _ in 0..num_handles {
23041                        decoder.drop_next_handle()?;
23042                    }
23043                    *self = AudioCompressedFormat::__SourceBreaking { unknown_ordinal: ordinal };
23044                }
23045            }
23046            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23047                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23048            }
23049            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23050                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23051            }
23052            Ok(())
23053        }
23054    }
23055
23056    impl fidl::encoding::ValueTypeMarker for AudioConsumerError {
23057        type Borrowed<'a> = &'a Self;
23058        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23059            value
23060        }
23061    }
23062
23063    unsafe impl fidl::encoding::TypeMarker for AudioConsumerError {
23064        type Owned = Self;
23065
23066        #[inline(always)]
23067        fn inline_align(_context: fidl::encoding::Context) -> usize {
23068            8
23069        }
23070
23071        #[inline(always)]
23072        fn inline_size(_context: fidl::encoding::Context) -> usize {
23073            16
23074        }
23075    }
23076
23077    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioConsumerError, D>
23078        for &AudioConsumerError
23079    {
23080        #[inline]
23081        unsafe fn encode(
23082            self,
23083            encoder: &mut fidl::encoding::Encoder<'_, D>,
23084            offset: usize,
23085            _depth: fidl::encoding::Depth,
23086        ) -> fidl::Result<()> {
23087            encoder.debug_check_bounds::<AudioConsumerError>(offset);
23088            encoder.write_num::<u64>(self.ordinal(), offset);
23089            match self {
23090                AudioConsumerError::PlaceHolder(ref val) => {
23091                    fidl::encoding::encode_in_envelope::<Void, D>(
23092                        <Void as fidl::encoding::ValueTypeMarker>::borrow(val),
23093                        encoder,
23094                        offset + 8,
23095                        _depth,
23096                    )
23097                }
23098            }
23099        }
23100    }
23101
23102    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioConsumerError {
23103        #[inline(always)]
23104        fn new_empty() -> Self {
23105            Self::PlaceHolder(fidl::new_empty!(Void, D))
23106        }
23107
23108        #[inline]
23109        unsafe fn decode(
23110            &mut self,
23111            decoder: &mut fidl::encoding::Decoder<'_, D>,
23112            offset: usize,
23113            mut depth: fidl::encoding::Depth,
23114        ) -> fidl::Result<()> {
23115            decoder.debug_check_bounds::<Self>(offset);
23116            #[allow(unused_variables)]
23117            let next_out_of_line = decoder.next_out_of_line();
23118            let handles_before = decoder.remaining_handles();
23119            let (ordinal, inlined, num_bytes, num_handles) =
23120                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23121
23122            let member_inline_size = match ordinal {
23123                1 => <Void as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23124                _ => return Err(fidl::Error::UnknownUnionTag),
23125            };
23126
23127            if inlined != (member_inline_size <= 4) {
23128                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23129            }
23130            let _inner_offset;
23131            if inlined {
23132                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23133                _inner_offset = offset + 8;
23134            } else {
23135                depth.increment()?;
23136                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23137            }
23138            match ordinal {
23139                1 => {
23140                    #[allow(irrefutable_let_patterns)]
23141                    if let AudioConsumerError::PlaceHolder(_) = self {
23142                        // Do nothing, read the value into the object
23143                    } else {
23144                        // Initialize `self` to the right variant
23145                        *self = AudioConsumerError::PlaceHolder(fidl::new_empty!(Void, D));
23146                    }
23147                    #[allow(irrefutable_let_patterns)]
23148                    if let AudioConsumerError::PlaceHolder(ref mut val) = self {
23149                        fidl::decode!(Void, D, val, decoder, _inner_offset, depth)?;
23150                    } else {
23151                        unreachable!()
23152                    }
23153                }
23154                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23155            }
23156            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23157                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23158            }
23159            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23160                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23161            }
23162            Ok(())
23163        }
23164    }
23165
23166    impl fidl::encoding::ValueTypeMarker for AudioFormat {
23167        type Borrowed<'a> = &'a Self;
23168        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23169            value
23170        }
23171    }
23172
23173    unsafe impl fidl::encoding::TypeMarker for AudioFormat {
23174        type Owned = Self;
23175
23176        #[inline(always)]
23177        fn inline_align(_context: fidl::encoding::Context) -> usize {
23178            8
23179        }
23180
23181        #[inline(always)]
23182        fn inline_size(_context: fidl::encoding::Context) -> usize {
23183            16
23184        }
23185    }
23186
23187    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioFormat, D>
23188        for &AudioFormat
23189    {
23190        #[inline]
23191        unsafe fn encode(
23192            self,
23193            encoder: &mut fidl::encoding::Encoder<'_, D>,
23194            offset: usize,
23195            _depth: fidl::encoding::Depth,
23196        ) -> fidl::Result<()> {
23197            encoder.debug_check_bounds::<AudioFormat>(offset);
23198            encoder.write_num::<u64>(self.ordinal(), offset);
23199            match self {
23200                AudioFormat::Compressed(ref val) => {
23201                    fidl::encoding::encode_in_envelope::<AudioCompressedFormat, D>(
23202                        <AudioCompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23203                        encoder,
23204                        offset + 8,
23205                        _depth,
23206                    )
23207                }
23208                AudioFormat::Uncompressed(ref val) => {
23209                    fidl::encoding::encode_in_envelope::<AudioUncompressedFormat, D>(
23210                        <AudioUncompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23211                        encoder,
23212                        offset + 8,
23213                        _depth,
23214                    )
23215                }
23216            }
23217        }
23218    }
23219
23220    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioFormat {
23221        #[inline(always)]
23222        fn new_empty() -> Self {
23223            Self::Compressed(fidl::new_empty!(AudioCompressedFormat, D))
23224        }
23225
23226        #[inline]
23227        unsafe fn decode(
23228            &mut self,
23229            decoder: &mut fidl::encoding::Decoder<'_, D>,
23230            offset: usize,
23231            mut depth: fidl::encoding::Depth,
23232        ) -> fidl::Result<()> {
23233            decoder.debug_check_bounds::<Self>(offset);
23234            #[allow(unused_variables)]
23235            let next_out_of_line = decoder.next_out_of_line();
23236            let handles_before = decoder.remaining_handles();
23237            let (ordinal, inlined, num_bytes, num_handles) =
23238                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23239
23240            let member_inline_size = match ordinal {
23241                1 => <AudioCompressedFormat as fidl::encoding::TypeMarker>::inline_size(
23242                    decoder.context,
23243                ),
23244                2 => <AudioUncompressedFormat as fidl::encoding::TypeMarker>::inline_size(
23245                    decoder.context,
23246                ),
23247                _ => return Err(fidl::Error::UnknownUnionTag),
23248            };
23249
23250            if inlined != (member_inline_size <= 4) {
23251                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23252            }
23253            let _inner_offset;
23254            if inlined {
23255                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23256                _inner_offset = offset + 8;
23257            } else {
23258                depth.increment()?;
23259                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23260            }
23261            match ordinal {
23262                1 => {
23263                    #[allow(irrefutable_let_patterns)]
23264                    if let AudioFormat::Compressed(_) = self {
23265                        // Do nothing, read the value into the object
23266                    } else {
23267                        // Initialize `self` to the right variant
23268                        *self = AudioFormat::Compressed(fidl::new_empty!(AudioCompressedFormat, D));
23269                    }
23270                    #[allow(irrefutable_let_patterns)]
23271                    if let AudioFormat::Compressed(ref mut val) = self {
23272                        fidl::decode!(
23273                            AudioCompressedFormat,
23274                            D,
23275                            val,
23276                            decoder,
23277                            _inner_offset,
23278                            depth
23279                        )?;
23280                    } else {
23281                        unreachable!()
23282                    }
23283                }
23284                2 => {
23285                    #[allow(irrefutable_let_patterns)]
23286                    if let AudioFormat::Uncompressed(_) = self {
23287                        // Do nothing, read the value into the object
23288                    } else {
23289                        // Initialize `self` to the right variant
23290                        *self =
23291                            AudioFormat::Uncompressed(fidl::new_empty!(AudioUncompressedFormat, D));
23292                    }
23293                    #[allow(irrefutable_let_patterns)]
23294                    if let AudioFormat::Uncompressed(ref mut val) = self {
23295                        fidl::decode!(
23296                            AudioUncompressedFormat,
23297                            D,
23298                            val,
23299                            decoder,
23300                            _inner_offset,
23301                            depth
23302                        )?;
23303                    } else {
23304                        unreachable!()
23305                    }
23306                }
23307                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23308            }
23309            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23310                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23311            }
23312            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23313                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23314            }
23315            Ok(())
23316        }
23317    }
23318
23319    impl fidl::encoding::ValueTypeMarker for AudioUncompressedFormat {
23320        type Borrowed<'a> = &'a Self;
23321        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23322            value
23323        }
23324    }
23325
23326    unsafe impl fidl::encoding::TypeMarker for AudioUncompressedFormat {
23327        type Owned = Self;
23328
23329        #[inline(always)]
23330        fn inline_align(_context: fidl::encoding::Context) -> usize {
23331            8
23332        }
23333
23334        #[inline(always)]
23335        fn inline_size(_context: fidl::encoding::Context) -> usize {
23336            16
23337        }
23338    }
23339
23340    unsafe impl<D: fidl::encoding::ResourceDialect>
23341        fidl::encoding::Encode<AudioUncompressedFormat, D> for &AudioUncompressedFormat
23342    {
23343        #[inline]
23344        unsafe fn encode(
23345            self,
23346            encoder: &mut fidl::encoding::Encoder<'_, D>,
23347            offset: usize,
23348            _depth: fidl::encoding::Depth,
23349        ) -> fidl::Result<()> {
23350            encoder.debug_check_bounds::<AudioUncompressedFormat>(offset);
23351            encoder.write_num::<u64>(self.ordinal(), offset);
23352            match self {
23353                AudioUncompressedFormat::Pcm(ref val) => {
23354                    fidl::encoding::encode_in_envelope::<PcmFormat, D>(
23355                        <PcmFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23356                        encoder,
23357                        offset + 8,
23358                        _depth,
23359                    )
23360                }
23361            }
23362        }
23363    }
23364
23365    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
23366        for AudioUncompressedFormat
23367    {
23368        #[inline(always)]
23369        fn new_empty() -> Self {
23370            Self::Pcm(fidl::new_empty!(PcmFormat, D))
23371        }
23372
23373        #[inline]
23374        unsafe fn decode(
23375            &mut self,
23376            decoder: &mut fidl::encoding::Decoder<'_, D>,
23377            offset: usize,
23378            mut depth: fidl::encoding::Depth,
23379        ) -> fidl::Result<()> {
23380            decoder.debug_check_bounds::<Self>(offset);
23381            #[allow(unused_variables)]
23382            let next_out_of_line = decoder.next_out_of_line();
23383            let handles_before = decoder.remaining_handles();
23384            let (ordinal, inlined, num_bytes, num_handles) =
23385                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23386
23387            let member_inline_size = match ordinal {
23388                1 => <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23389                _ => return Err(fidl::Error::UnknownUnionTag),
23390            };
23391
23392            if inlined != (member_inline_size <= 4) {
23393                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23394            }
23395            let _inner_offset;
23396            if inlined {
23397                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23398                _inner_offset = offset + 8;
23399            } else {
23400                depth.increment()?;
23401                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23402            }
23403            match ordinal {
23404                1 => {
23405                    #[allow(irrefutable_let_patterns)]
23406                    if let AudioUncompressedFormat::Pcm(_) = self {
23407                        // Do nothing, read the value into the object
23408                    } else {
23409                        // Initialize `self` to the right variant
23410                        *self = AudioUncompressedFormat::Pcm(fidl::new_empty!(PcmFormat, D));
23411                    }
23412                    #[allow(irrefutable_let_patterns)]
23413                    if let AudioUncompressedFormat::Pcm(ref mut val) = self {
23414                        fidl::decode!(PcmFormat, D, val, decoder, _inner_offset, depth)?;
23415                    } else {
23416                        unreachable!()
23417                    }
23418                }
23419                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23420            }
23421            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23422                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23423            }
23424            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23425                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23426            }
23427            Ok(())
23428        }
23429    }
23430
23431    impl fidl::encoding::ValueTypeMarker for CryptoFormat {
23432        type Borrowed<'a> = &'a Self;
23433        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23434            value
23435        }
23436    }
23437
23438    unsafe impl fidl::encoding::TypeMarker for CryptoFormat {
23439        type Owned = Self;
23440
23441        #[inline(always)]
23442        fn inline_align(_context: fidl::encoding::Context) -> usize {
23443            8
23444        }
23445
23446        #[inline(always)]
23447        fn inline_size(_context: fidl::encoding::Context) -> usize {
23448            16
23449        }
23450    }
23451
23452    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CryptoFormat, D>
23453        for &CryptoFormat
23454    {
23455        #[inline]
23456        unsafe fn encode(
23457            self,
23458            encoder: &mut fidl::encoding::Encoder<'_, D>,
23459            offset: usize,
23460            _depth: fidl::encoding::Depth,
23461        ) -> fidl::Result<()> {
23462            encoder.debug_check_bounds::<CryptoFormat>(offset);
23463            encoder.write_num::<u64>(self.ordinal(), offset);
23464            match self {
23465                CryptoFormat::Encrypted(ref val) => {
23466                    fidl::encoding::encode_in_envelope::<EncryptedFormat, D>(
23467                        <EncryptedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23468                        encoder,
23469                        offset + 8,
23470                        _depth,
23471                    )
23472                }
23473                CryptoFormat::Decrypted(ref val) => {
23474                    fidl::encoding::encode_in_envelope::<DecryptedFormat, D>(
23475                        <DecryptedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23476                        encoder,
23477                        offset + 8,
23478                        _depth,
23479                    )
23480                }
23481                CryptoFormat::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
23482            }
23483        }
23484    }
23485
23486    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CryptoFormat {
23487        #[inline(always)]
23488        fn new_empty() -> Self {
23489            Self::__SourceBreaking { unknown_ordinal: 0 }
23490        }
23491
23492        #[inline]
23493        unsafe fn decode(
23494            &mut self,
23495            decoder: &mut fidl::encoding::Decoder<'_, D>,
23496            offset: usize,
23497            mut depth: fidl::encoding::Depth,
23498        ) -> fidl::Result<()> {
23499            decoder.debug_check_bounds::<Self>(offset);
23500            #[allow(unused_variables)]
23501            let next_out_of_line = decoder.next_out_of_line();
23502            let handles_before = decoder.remaining_handles();
23503            let (ordinal, inlined, num_bytes, num_handles) =
23504                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23505
23506            let member_inline_size = match ordinal {
23507                1 => <EncryptedFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23508                2 => <DecryptedFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23509                0 => return Err(fidl::Error::UnknownUnionTag),
23510                _ => num_bytes as usize,
23511            };
23512
23513            if inlined != (member_inline_size <= 4) {
23514                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23515            }
23516            let _inner_offset;
23517            if inlined {
23518                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23519                _inner_offset = offset + 8;
23520            } else {
23521                depth.increment()?;
23522                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23523            }
23524            match ordinal {
23525                1 => {
23526                    #[allow(irrefutable_let_patterns)]
23527                    if let CryptoFormat::Encrypted(_) = self {
23528                        // Do nothing, read the value into the object
23529                    } else {
23530                        // Initialize `self` to the right variant
23531                        *self = CryptoFormat::Encrypted(fidl::new_empty!(EncryptedFormat, D));
23532                    }
23533                    #[allow(irrefutable_let_patterns)]
23534                    if let CryptoFormat::Encrypted(ref mut val) = self {
23535                        fidl::decode!(EncryptedFormat, D, val, decoder, _inner_offset, depth)?;
23536                    } else {
23537                        unreachable!()
23538                    }
23539                }
23540                2 => {
23541                    #[allow(irrefutable_let_patterns)]
23542                    if let CryptoFormat::Decrypted(_) = self {
23543                        // Do nothing, read the value into the object
23544                    } else {
23545                        // Initialize `self` to the right variant
23546                        *self = CryptoFormat::Decrypted(fidl::new_empty!(DecryptedFormat, D));
23547                    }
23548                    #[allow(irrefutable_let_patterns)]
23549                    if let CryptoFormat::Decrypted(ref mut val) = self {
23550                        fidl::decode!(DecryptedFormat, D, val, decoder, _inner_offset, depth)?;
23551                    } else {
23552                        unreachable!()
23553                    }
23554                }
23555                #[allow(deprecated)]
23556                ordinal => {
23557                    for _ in 0..num_handles {
23558                        decoder.drop_next_handle()?;
23559                    }
23560                    *self = CryptoFormat::__SourceBreaking { unknown_ordinal: ordinal };
23561                }
23562            }
23563            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23564                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23565            }
23566            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23567                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23568            }
23569            Ok(())
23570        }
23571    }
23572
23573    impl fidl::encoding::ValueTypeMarker for DomainFormat {
23574        type Borrowed<'a> = &'a Self;
23575        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23576            value
23577        }
23578    }
23579
23580    unsafe impl fidl::encoding::TypeMarker for DomainFormat {
23581        type Owned = Self;
23582
23583        #[inline(always)]
23584        fn inline_align(_context: fidl::encoding::Context) -> usize {
23585            8
23586        }
23587
23588        #[inline(always)]
23589        fn inline_size(_context: fidl::encoding::Context) -> usize {
23590            16
23591        }
23592    }
23593
23594    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DomainFormat, D>
23595        for &DomainFormat
23596    {
23597        #[inline]
23598        unsafe fn encode(
23599            self,
23600            encoder: &mut fidl::encoding::Encoder<'_, D>,
23601            offset: usize,
23602            _depth: fidl::encoding::Depth,
23603        ) -> fidl::Result<()> {
23604            encoder.debug_check_bounds::<DomainFormat>(offset);
23605            encoder.write_num::<u64>(self.ordinal(), offset);
23606            match self {
23607                DomainFormat::Audio(ref val) => {
23608                    fidl::encoding::encode_in_envelope::<AudioFormat, D>(
23609                        <AudioFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23610                        encoder,
23611                        offset + 8,
23612                        _depth,
23613                    )
23614                }
23615                DomainFormat::Video(ref val) => {
23616                    fidl::encoding::encode_in_envelope::<VideoFormat, D>(
23617                        <VideoFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23618                        encoder,
23619                        offset + 8,
23620                        _depth,
23621                    )
23622                }
23623                DomainFormat::Crypto(ref val) => {
23624                    fidl::encoding::encode_in_envelope::<CryptoFormat, D>(
23625                        <CryptoFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23626                        encoder,
23627                        offset + 8,
23628                        _depth,
23629                    )
23630                }
23631            }
23632        }
23633    }
23634
23635    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DomainFormat {
23636        #[inline(always)]
23637        fn new_empty() -> Self {
23638            Self::Audio(fidl::new_empty!(AudioFormat, D))
23639        }
23640
23641        #[inline]
23642        unsafe fn decode(
23643            &mut self,
23644            decoder: &mut fidl::encoding::Decoder<'_, D>,
23645            offset: usize,
23646            mut depth: fidl::encoding::Depth,
23647        ) -> fidl::Result<()> {
23648            decoder.debug_check_bounds::<Self>(offset);
23649            #[allow(unused_variables)]
23650            let next_out_of_line = decoder.next_out_of_line();
23651            let handles_before = decoder.remaining_handles();
23652            let (ordinal, inlined, num_bytes, num_handles) =
23653                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23654
23655            let member_inline_size = match ordinal {
23656                1 => <AudioFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23657                2 => <VideoFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23658                3 => <CryptoFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23659                _ => return Err(fidl::Error::UnknownUnionTag),
23660            };
23661
23662            if inlined != (member_inline_size <= 4) {
23663                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23664            }
23665            let _inner_offset;
23666            if inlined {
23667                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23668                _inner_offset = offset + 8;
23669            } else {
23670                depth.increment()?;
23671                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23672            }
23673            match ordinal {
23674                1 => {
23675                    #[allow(irrefutable_let_patterns)]
23676                    if let DomainFormat::Audio(_) = self {
23677                        // Do nothing, read the value into the object
23678                    } else {
23679                        // Initialize `self` to the right variant
23680                        *self = DomainFormat::Audio(fidl::new_empty!(AudioFormat, D));
23681                    }
23682                    #[allow(irrefutable_let_patterns)]
23683                    if let DomainFormat::Audio(ref mut val) = self {
23684                        fidl::decode!(AudioFormat, D, val, decoder, _inner_offset, depth)?;
23685                    } else {
23686                        unreachable!()
23687                    }
23688                }
23689                2 => {
23690                    #[allow(irrefutable_let_patterns)]
23691                    if let DomainFormat::Video(_) = self {
23692                        // Do nothing, read the value into the object
23693                    } else {
23694                        // Initialize `self` to the right variant
23695                        *self = DomainFormat::Video(fidl::new_empty!(VideoFormat, D));
23696                    }
23697                    #[allow(irrefutable_let_patterns)]
23698                    if let DomainFormat::Video(ref mut val) = self {
23699                        fidl::decode!(VideoFormat, D, val, decoder, _inner_offset, depth)?;
23700                    } else {
23701                        unreachable!()
23702                    }
23703                }
23704                3 => {
23705                    #[allow(irrefutable_let_patterns)]
23706                    if let DomainFormat::Crypto(_) = self {
23707                        // Do nothing, read the value into the object
23708                    } else {
23709                        // Initialize `self` to the right variant
23710                        *self = DomainFormat::Crypto(fidl::new_empty!(CryptoFormat, D));
23711                    }
23712                    #[allow(irrefutable_let_patterns)]
23713                    if let DomainFormat::Crypto(ref mut val) = self {
23714                        fidl::decode!(CryptoFormat, D, val, decoder, _inner_offset, depth)?;
23715                    } else {
23716                        unreachable!()
23717                    }
23718                }
23719                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23720            }
23721            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23722                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23723            }
23724            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23725                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23726            }
23727            Ok(())
23728        }
23729    }
23730
23731    impl fidl::encoding::ValueTypeMarker for EncoderSettings {
23732        type Borrowed<'a> = &'a Self;
23733        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23734            value
23735        }
23736    }
23737
23738    unsafe impl fidl::encoding::TypeMarker for EncoderSettings {
23739        type Owned = Self;
23740
23741        #[inline(always)]
23742        fn inline_align(_context: fidl::encoding::Context) -> usize {
23743            8
23744        }
23745
23746        #[inline(always)]
23747        fn inline_size(_context: fidl::encoding::Context) -> usize {
23748            16
23749        }
23750    }
23751
23752    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncoderSettings, D>
23753        for &EncoderSettings
23754    {
23755        #[inline]
23756        unsafe fn encode(
23757            self,
23758            encoder: &mut fidl::encoding::Encoder<'_, D>,
23759            offset: usize,
23760            _depth: fidl::encoding::Depth,
23761        ) -> fidl::Result<()> {
23762            encoder.debug_check_bounds::<EncoderSettings>(offset);
23763            encoder.write_num::<u64>(self.ordinal(), offset);
23764            match self {
23765                EncoderSettings::Sbc(ref val) => {
23766                    fidl::encoding::encode_in_envelope::<SbcEncoderSettings, D>(
23767                        <SbcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23768                        encoder,
23769                        offset + 8,
23770                        _depth,
23771                    )
23772                }
23773                EncoderSettings::Aac(ref val) => {
23774                    fidl::encoding::encode_in_envelope::<AacEncoderSettings, D>(
23775                        <AacEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23776                        encoder,
23777                        offset + 8,
23778                        _depth,
23779                    )
23780                }
23781                EncoderSettings::H264(ref val) => {
23782                    fidl::encoding::encode_in_envelope::<H264EncoderSettings, D>(
23783                        <H264EncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23784                        encoder,
23785                        offset + 8,
23786                        _depth,
23787                    )
23788                }
23789                EncoderSettings::Hevc(ref val) => {
23790                    fidl::encoding::encode_in_envelope::<HevcEncoderSettings, D>(
23791                        <HevcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23792                        encoder,
23793                        offset + 8,
23794                        _depth,
23795                    )
23796                }
23797                EncoderSettings::Cvsd(ref val) => {
23798                    fidl::encoding::encode_in_envelope::<CvsdEncoderSettings, D>(
23799                        <CvsdEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23800                        encoder,
23801                        offset + 8,
23802                        _depth,
23803                    )
23804                }
23805                EncoderSettings::Lc3(ref val) => {
23806                    fidl::encoding::encode_in_envelope::<Lc3EncoderSettings, D>(
23807                        <Lc3EncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23808                        encoder,
23809                        offset + 8,
23810                        _depth,
23811                    )
23812                }
23813                EncoderSettings::Msbc(ref val) => {
23814                    fidl::encoding::encode_in_envelope::<MSbcEncoderSettings, D>(
23815                        <MSbcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23816                        encoder,
23817                        offset + 8,
23818                        _depth,
23819                    )
23820                }
23821                EncoderSettings::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
23822            }
23823        }
23824    }
23825
23826    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncoderSettings {
23827        #[inline(always)]
23828        fn new_empty() -> Self {
23829            Self::__SourceBreaking { unknown_ordinal: 0 }
23830        }
23831
23832        #[inline]
23833        unsafe fn decode(
23834            &mut self,
23835            decoder: &mut fidl::encoding::Decoder<'_, D>,
23836            offset: usize,
23837            mut depth: fidl::encoding::Depth,
23838        ) -> fidl::Result<()> {
23839            decoder.debug_check_bounds::<Self>(offset);
23840            #[allow(unused_variables)]
23841            let next_out_of_line = decoder.next_out_of_line();
23842            let handles_before = decoder.remaining_handles();
23843            let (ordinal, inlined, num_bytes, num_handles) =
23844                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23845
23846            let member_inline_size = match ordinal {
23847                1 => {
23848                    <SbcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
23849                }
23850                2 => {
23851                    <AacEncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
23852                }
23853                3 => <H264EncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23854                    decoder.context,
23855                ),
23856                4 => <HevcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23857                    decoder.context,
23858                ),
23859                5 => <CvsdEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23860                    decoder.context,
23861                ),
23862                6 => {
23863                    <Lc3EncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
23864                }
23865                7 => <MSbcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23866                    decoder.context,
23867                ),
23868                0 => return Err(fidl::Error::UnknownUnionTag),
23869                _ => num_bytes as usize,
23870            };
23871
23872            if inlined != (member_inline_size <= 4) {
23873                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23874            }
23875            let _inner_offset;
23876            if inlined {
23877                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23878                _inner_offset = offset + 8;
23879            } else {
23880                depth.increment()?;
23881                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23882            }
23883            match ordinal {
23884                1 => {
23885                    #[allow(irrefutable_let_patterns)]
23886                    if let EncoderSettings::Sbc(_) = self {
23887                        // Do nothing, read the value into the object
23888                    } else {
23889                        // Initialize `self` to the right variant
23890                        *self = EncoderSettings::Sbc(fidl::new_empty!(SbcEncoderSettings, D));
23891                    }
23892                    #[allow(irrefutable_let_patterns)]
23893                    if let EncoderSettings::Sbc(ref mut val) = self {
23894                        fidl::decode!(SbcEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23895                    } else {
23896                        unreachable!()
23897                    }
23898                }
23899                2 => {
23900                    #[allow(irrefutable_let_patterns)]
23901                    if let EncoderSettings::Aac(_) = self {
23902                        // Do nothing, read the value into the object
23903                    } else {
23904                        // Initialize `self` to the right variant
23905                        *self = EncoderSettings::Aac(fidl::new_empty!(AacEncoderSettings, D));
23906                    }
23907                    #[allow(irrefutable_let_patterns)]
23908                    if let EncoderSettings::Aac(ref mut val) = self {
23909                        fidl::decode!(AacEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23910                    } else {
23911                        unreachable!()
23912                    }
23913                }
23914                3 => {
23915                    #[allow(irrefutable_let_patterns)]
23916                    if let EncoderSettings::H264(_) = self {
23917                        // Do nothing, read the value into the object
23918                    } else {
23919                        // Initialize `self` to the right variant
23920                        *self = EncoderSettings::H264(fidl::new_empty!(H264EncoderSettings, D));
23921                    }
23922                    #[allow(irrefutable_let_patterns)]
23923                    if let EncoderSettings::H264(ref mut val) = self {
23924                        fidl::decode!(H264EncoderSettings, D, val, decoder, _inner_offset, depth)?;
23925                    } else {
23926                        unreachable!()
23927                    }
23928                }
23929                4 => {
23930                    #[allow(irrefutable_let_patterns)]
23931                    if let EncoderSettings::Hevc(_) = self {
23932                        // Do nothing, read the value into the object
23933                    } else {
23934                        // Initialize `self` to the right variant
23935                        *self = EncoderSettings::Hevc(fidl::new_empty!(HevcEncoderSettings, D));
23936                    }
23937                    #[allow(irrefutable_let_patterns)]
23938                    if let EncoderSettings::Hevc(ref mut val) = self {
23939                        fidl::decode!(HevcEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23940                    } else {
23941                        unreachable!()
23942                    }
23943                }
23944                5 => {
23945                    #[allow(irrefutable_let_patterns)]
23946                    if let EncoderSettings::Cvsd(_) = self {
23947                        // Do nothing, read the value into the object
23948                    } else {
23949                        // Initialize `self` to the right variant
23950                        *self = EncoderSettings::Cvsd(fidl::new_empty!(CvsdEncoderSettings, D));
23951                    }
23952                    #[allow(irrefutable_let_patterns)]
23953                    if let EncoderSettings::Cvsd(ref mut val) = self {
23954                        fidl::decode!(CvsdEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23955                    } else {
23956                        unreachable!()
23957                    }
23958                }
23959                6 => {
23960                    #[allow(irrefutable_let_patterns)]
23961                    if let EncoderSettings::Lc3(_) = self {
23962                        // Do nothing, read the value into the object
23963                    } else {
23964                        // Initialize `self` to the right variant
23965                        *self = EncoderSettings::Lc3(fidl::new_empty!(Lc3EncoderSettings, D));
23966                    }
23967                    #[allow(irrefutable_let_patterns)]
23968                    if let EncoderSettings::Lc3(ref mut val) = self {
23969                        fidl::decode!(Lc3EncoderSettings, D, val, decoder, _inner_offset, depth)?;
23970                    } else {
23971                        unreachable!()
23972                    }
23973                }
23974                7 => {
23975                    #[allow(irrefutable_let_patterns)]
23976                    if let EncoderSettings::Msbc(_) = self {
23977                        // Do nothing, read the value into the object
23978                    } else {
23979                        // Initialize `self` to the right variant
23980                        *self = EncoderSettings::Msbc(fidl::new_empty!(MSbcEncoderSettings, D));
23981                    }
23982                    #[allow(irrefutable_let_patterns)]
23983                    if let EncoderSettings::Msbc(ref mut val) = self {
23984                        fidl::decode!(MSbcEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23985                    } else {
23986                        unreachable!()
23987                    }
23988                }
23989                #[allow(deprecated)]
23990                ordinal => {
23991                    for _ in 0..num_handles {
23992                        decoder.drop_next_handle()?;
23993                    }
23994                    *self = EncoderSettings::__SourceBreaking { unknown_ordinal: ordinal };
23995                }
23996            }
23997            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23998                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23999            }
24000            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24001                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24002            }
24003            Ok(())
24004        }
24005    }
24006
24007    impl fidl::encoding::ValueTypeMarker for MediumSpecificStreamType {
24008        type Borrowed<'a> = &'a Self;
24009        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24010            value
24011        }
24012    }
24013
24014    unsafe impl fidl::encoding::TypeMarker for MediumSpecificStreamType {
24015        type Owned = Self;
24016
24017        #[inline(always)]
24018        fn inline_align(_context: fidl::encoding::Context) -> usize {
24019            8
24020        }
24021
24022        #[inline(always)]
24023        fn inline_size(_context: fidl::encoding::Context) -> usize {
24024            16
24025        }
24026    }
24027
24028    unsafe impl<D: fidl::encoding::ResourceDialect>
24029        fidl::encoding::Encode<MediumSpecificStreamType, D> for &MediumSpecificStreamType
24030    {
24031        #[inline]
24032        unsafe fn encode(
24033            self,
24034            encoder: &mut fidl::encoding::Encoder<'_, D>,
24035            offset: usize,
24036            _depth: fidl::encoding::Depth,
24037        ) -> fidl::Result<()> {
24038            encoder.debug_check_bounds::<MediumSpecificStreamType>(offset);
24039            encoder.write_num::<u64>(self.ordinal(), offset);
24040            match self {
24041                MediumSpecificStreamType::Audio(ref val) => {
24042                    fidl::encoding::encode_in_envelope::<AudioStreamType, D>(
24043                        <AudioStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
24044                        encoder,
24045                        offset + 8,
24046                        _depth,
24047                    )
24048                }
24049                MediumSpecificStreamType::Video(ref val) => {
24050                    fidl::encoding::encode_in_envelope::<VideoStreamType, D>(
24051                        <VideoStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
24052                        encoder,
24053                        offset + 8,
24054                        _depth,
24055                    )
24056                }
24057                MediumSpecificStreamType::Text(ref val) => {
24058                    fidl::encoding::encode_in_envelope::<TextStreamType, D>(
24059                        <TextStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
24060                        encoder,
24061                        offset + 8,
24062                        _depth,
24063                    )
24064                }
24065                MediumSpecificStreamType::Subpicture(ref val) => {
24066                    fidl::encoding::encode_in_envelope::<SubpictureStreamType, D>(
24067                        <SubpictureStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
24068                        encoder,
24069                        offset + 8,
24070                        _depth,
24071                    )
24072                }
24073            }
24074        }
24075    }
24076
24077    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
24078        for MediumSpecificStreamType
24079    {
24080        #[inline(always)]
24081        fn new_empty() -> Self {
24082            Self::Audio(fidl::new_empty!(AudioStreamType, D))
24083        }
24084
24085        #[inline]
24086        unsafe fn decode(
24087            &mut self,
24088            decoder: &mut fidl::encoding::Decoder<'_, D>,
24089            offset: usize,
24090            mut depth: fidl::encoding::Depth,
24091        ) -> fidl::Result<()> {
24092            decoder.debug_check_bounds::<Self>(offset);
24093            #[allow(unused_variables)]
24094            let next_out_of_line = decoder.next_out_of_line();
24095            let handles_before = decoder.remaining_handles();
24096            let (ordinal, inlined, num_bytes, num_handles) =
24097                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24098
24099            let member_inline_size = match ordinal {
24100                1 => <AudioStreamType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24101                2 => <VideoStreamType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24102                3 => <TextStreamType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24103                4 => <SubpictureStreamType as fidl::encoding::TypeMarker>::inline_size(
24104                    decoder.context,
24105                ),
24106                _ => return Err(fidl::Error::UnknownUnionTag),
24107            };
24108
24109            if inlined != (member_inline_size <= 4) {
24110                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24111            }
24112            let _inner_offset;
24113            if inlined {
24114                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24115                _inner_offset = offset + 8;
24116            } else {
24117                depth.increment()?;
24118                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24119            }
24120            match ordinal {
24121                1 => {
24122                    #[allow(irrefutable_let_patterns)]
24123                    if let MediumSpecificStreamType::Audio(_) = self {
24124                        // Do nothing, read the value into the object
24125                    } else {
24126                        // Initialize `self` to the right variant
24127                        *self =
24128                            MediumSpecificStreamType::Audio(fidl::new_empty!(AudioStreamType, D));
24129                    }
24130                    #[allow(irrefutable_let_patterns)]
24131                    if let MediumSpecificStreamType::Audio(ref mut val) = self {
24132                        fidl::decode!(AudioStreamType, D, val, decoder, _inner_offset, depth)?;
24133                    } else {
24134                        unreachable!()
24135                    }
24136                }
24137                2 => {
24138                    #[allow(irrefutable_let_patterns)]
24139                    if let MediumSpecificStreamType::Video(_) = self {
24140                        // Do nothing, read the value into the object
24141                    } else {
24142                        // Initialize `self` to the right variant
24143                        *self =
24144                            MediumSpecificStreamType::Video(fidl::new_empty!(VideoStreamType, D));
24145                    }
24146                    #[allow(irrefutable_let_patterns)]
24147                    if let MediumSpecificStreamType::Video(ref mut val) = self {
24148                        fidl::decode!(VideoStreamType, D, val, decoder, _inner_offset, depth)?;
24149                    } else {
24150                        unreachable!()
24151                    }
24152                }
24153                3 => {
24154                    #[allow(irrefutable_let_patterns)]
24155                    if let MediumSpecificStreamType::Text(_) = self {
24156                        // Do nothing, read the value into the object
24157                    } else {
24158                        // Initialize `self` to the right variant
24159                        *self = MediumSpecificStreamType::Text(fidl::new_empty!(TextStreamType, D));
24160                    }
24161                    #[allow(irrefutable_let_patterns)]
24162                    if let MediumSpecificStreamType::Text(ref mut val) = self {
24163                        fidl::decode!(TextStreamType, D, val, decoder, _inner_offset, depth)?;
24164                    } else {
24165                        unreachable!()
24166                    }
24167                }
24168                4 => {
24169                    #[allow(irrefutable_let_patterns)]
24170                    if let MediumSpecificStreamType::Subpicture(_) = self {
24171                        // Do nothing, read the value into the object
24172                    } else {
24173                        // Initialize `self` to the right variant
24174                        *self = MediumSpecificStreamType::Subpicture(fidl::new_empty!(
24175                            SubpictureStreamType,
24176                            D
24177                        ));
24178                    }
24179                    #[allow(irrefutable_let_patterns)]
24180                    if let MediumSpecificStreamType::Subpicture(ref mut val) = self {
24181                        fidl::decode!(SubpictureStreamType, D, val, decoder, _inner_offset, depth)?;
24182                    } else {
24183                        unreachable!()
24184                    }
24185                }
24186                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24187            }
24188            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24189                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24190            }
24191            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24192                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24193            }
24194            Ok(())
24195        }
24196    }
24197
24198    impl fidl::encoding::ValueTypeMarker for Usage {
24199        type Borrowed<'a> = &'a Self;
24200        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24201            value
24202        }
24203    }
24204
24205    unsafe impl fidl::encoding::TypeMarker for Usage {
24206        type Owned = Self;
24207
24208        #[inline(always)]
24209        fn inline_align(_context: fidl::encoding::Context) -> usize {
24210            8
24211        }
24212
24213        #[inline(always)]
24214        fn inline_size(_context: fidl::encoding::Context) -> usize {
24215            16
24216        }
24217    }
24218
24219    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Usage, D> for &Usage {
24220        #[inline]
24221        unsafe fn encode(
24222            self,
24223            encoder: &mut fidl::encoding::Encoder<'_, D>,
24224            offset: usize,
24225            _depth: fidl::encoding::Depth,
24226        ) -> fidl::Result<()> {
24227            encoder.debug_check_bounds::<Usage>(offset);
24228            encoder.write_num::<u64>(self.ordinal(), offset);
24229            match self {
24230                Usage::RenderUsage(ref val) => {
24231                    fidl::encoding::encode_in_envelope::<AudioRenderUsage, D>(
24232                        <AudioRenderUsage as fidl::encoding::ValueTypeMarker>::borrow(val),
24233                        encoder,
24234                        offset + 8,
24235                        _depth,
24236                    )
24237                }
24238                Usage::CaptureUsage(ref val) => {
24239                    fidl::encoding::encode_in_envelope::<AudioCaptureUsage, D>(
24240                        <AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow(val),
24241                        encoder,
24242                        offset + 8,
24243                        _depth,
24244                    )
24245                }
24246            }
24247        }
24248    }
24249
24250    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Usage {
24251        #[inline(always)]
24252        fn new_empty() -> Self {
24253            Self::RenderUsage(fidl::new_empty!(AudioRenderUsage, D))
24254        }
24255
24256        #[inline]
24257        unsafe fn decode(
24258            &mut self,
24259            decoder: &mut fidl::encoding::Decoder<'_, D>,
24260            offset: usize,
24261            mut depth: fidl::encoding::Depth,
24262        ) -> fidl::Result<()> {
24263            decoder.debug_check_bounds::<Self>(offset);
24264            #[allow(unused_variables)]
24265            let next_out_of_line = decoder.next_out_of_line();
24266            let handles_before = decoder.remaining_handles();
24267            let (ordinal, inlined, num_bytes, num_handles) =
24268                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24269
24270            let member_inline_size = match ordinal {
24271                1 => <AudioRenderUsage as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24272                2 => {
24273                    <AudioCaptureUsage as fidl::encoding::TypeMarker>::inline_size(decoder.context)
24274                }
24275                _ => return Err(fidl::Error::UnknownUnionTag),
24276            };
24277
24278            if inlined != (member_inline_size <= 4) {
24279                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24280            }
24281            let _inner_offset;
24282            if inlined {
24283                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24284                _inner_offset = offset + 8;
24285            } else {
24286                depth.increment()?;
24287                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24288            }
24289            match ordinal {
24290                1 => {
24291                    #[allow(irrefutable_let_patterns)]
24292                    if let Usage::RenderUsage(_) = self {
24293                        // Do nothing, read the value into the object
24294                    } else {
24295                        // Initialize `self` to the right variant
24296                        *self = Usage::RenderUsage(fidl::new_empty!(AudioRenderUsage, D));
24297                    }
24298                    #[allow(irrefutable_let_patterns)]
24299                    if let Usage::RenderUsage(ref mut val) = self {
24300                        fidl::decode!(AudioRenderUsage, D, val, decoder, _inner_offset, depth)?;
24301                    } else {
24302                        unreachable!()
24303                    }
24304                }
24305                2 => {
24306                    #[allow(irrefutable_let_patterns)]
24307                    if let Usage::CaptureUsage(_) = self {
24308                        // Do nothing, read the value into the object
24309                    } else {
24310                        // Initialize `self` to the right variant
24311                        *self = Usage::CaptureUsage(fidl::new_empty!(AudioCaptureUsage, D));
24312                    }
24313                    #[allow(irrefutable_let_patterns)]
24314                    if let Usage::CaptureUsage(ref mut val) = self {
24315                        fidl::decode!(AudioCaptureUsage, D, val, decoder, _inner_offset, depth)?;
24316                    } else {
24317                        unreachable!()
24318                    }
24319                }
24320                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24321            }
24322            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24323                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24324            }
24325            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24326                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24327            }
24328            Ok(())
24329        }
24330    }
24331
24332    impl fidl::encoding::ValueTypeMarker for Usage2 {
24333        type Borrowed<'a> = &'a Self;
24334        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24335            value
24336        }
24337    }
24338
24339    unsafe impl fidl::encoding::TypeMarker for Usage2 {
24340        type Owned = Self;
24341
24342        #[inline(always)]
24343        fn inline_align(_context: fidl::encoding::Context) -> usize {
24344            8
24345        }
24346
24347        #[inline(always)]
24348        fn inline_size(_context: fidl::encoding::Context) -> usize {
24349            16
24350        }
24351    }
24352
24353    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Usage2, D> for &Usage2 {
24354        #[inline]
24355        unsafe fn encode(
24356            self,
24357            encoder: &mut fidl::encoding::Encoder<'_, D>,
24358            offset: usize,
24359            _depth: fidl::encoding::Depth,
24360        ) -> fidl::Result<()> {
24361            encoder.debug_check_bounds::<Usage2>(offset);
24362            encoder.write_num::<u64>(self.ordinal(), offset);
24363            match self {
24364                Usage2::RenderUsage(ref val) => {
24365                    fidl::encoding::encode_in_envelope::<AudioRenderUsage2, D>(
24366                        <AudioRenderUsage2 as fidl::encoding::ValueTypeMarker>::borrow(val),
24367                        encoder,
24368                        offset + 8,
24369                        _depth,
24370                    )
24371                }
24372                Usage2::CaptureUsage(ref val) => {
24373                    fidl::encoding::encode_in_envelope::<AudioCaptureUsage2, D>(
24374                        <AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow(val),
24375                        encoder,
24376                        offset + 8,
24377                        _depth,
24378                    )
24379                }
24380                Usage2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
24381            }
24382        }
24383    }
24384
24385    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Usage2 {
24386        #[inline(always)]
24387        fn new_empty() -> Self {
24388            Self::__SourceBreaking { unknown_ordinal: 0 }
24389        }
24390
24391        #[inline]
24392        unsafe fn decode(
24393            &mut self,
24394            decoder: &mut fidl::encoding::Decoder<'_, D>,
24395            offset: usize,
24396            mut depth: fidl::encoding::Depth,
24397        ) -> fidl::Result<()> {
24398            decoder.debug_check_bounds::<Self>(offset);
24399            #[allow(unused_variables)]
24400            let next_out_of_line = decoder.next_out_of_line();
24401            let handles_before = decoder.remaining_handles();
24402            let (ordinal, inlined, num_bytes, num_handles) =
24403                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24404
24405            let member_inline_size = match ordinal {
24406                1 => {
24407                    <AudioRenderUsage2 as fidl::encoding::TypeMarker>::inline_size(decoder.context)
24408                }
24409                2 => {
24410                    <AudioCaptureUsage2 as fidl::encoding::TypeMarker>::inline_size(decoder.context)
24411                }
24412                0 => return Err(fidl::Error::UnknownUnionTag),
24413                _ => num_bytes as usize,
24414            };
24415
24416            if inlined != (member_inline_size <= 4) {
24417                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24418            }
24419            let _inner_offset;
24420            if inlined {
24421                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24422                _inner_offset = offset + 8;
24423            } else {
24424                depth.increment()?;
24425                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24426            }
24427            match ordinal {
24428                1 => {
24429                    #[allow(irrefutable_let_patterns)]
24430                    if let Usage2::RenderUsage(_) = self {
24431                        // Do nothing, read the value into the object
24432                    } else {
24433                        // Initialize `self` to the right variant
24434                        *self = Usage2::RenderUsage(fidl::new_empty!(AudioRenderUsage2, D));
24435                    }
24436                    #[allow(irrefutable_let_patterns)]
24437                    if let Usage2::RenderUsage(ref mut val) = self {
24438                        fidl::decode!(AudioRenderUsage2, D, val, decoder, _inner_offset, depth)?;
24439                    } else {
24440                        unreachable!()
24441                    }
24442                }
24443                2 => {
24444                    #[allow(irrefutable_let_patterns)]
24445                    if let Usage2::CaptureUsage(_) = self {
24446                        // Do nothing, read the value into the object
24447                    } else {
24448                        // Initialize `self` to the right variant
24449                        *self = Usage2::CaptureUsage(fidl::new_empty!(AudioCaptureUsage2, D));
24450                    }
24451                    #[allow(irrefutable_let_patterns)]
24452                    if let Usage2::CaptureUsage(ref mut val) = self {
24453                        fidl::decode!(AudioCaptureUsage2, D, val, decoder, _inner_offset, depth)?;
24454                    } else {
24455                        unreachable!()
24456                    }
24457                }
24458                #[allow(deprecated)]
24459                ordinal => {
24460                    for _ in 0..num_handles {
24461                        decoder.drop_next_handle()?;
24462                    }
24463                    *self = Usage2::__SourceBreaking { unknown_ordinal: ordinal };
24464                }
24465            }
24466            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24467                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24468            }
24469            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24470                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24471            }
24472            Ok(())
24473        }
24474    }
24475
24476    impl fidl::encoding::ValueTypeMarker for UsageState {
24477        type Borrowed<'a> = &'a Self;
24478        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24479            value
24480        }
24481    }
24482
24483    unsafe impl fidl::encoding::TypeMarker for UsageState {
24484        type Owned = Self;
24485
24486        #[inline(always)]
24487        fn inline_align(_context: fidl::encoding::Context) -> usize {
24488            8
24489        }
24490
24491        #[inline(always)]
24492        fn inline_size(_context: fidl::encoding::Context) -> usize {
24493            16
24494        }
24495    }
24496
24497    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageState, D>
24498        for &UsageState
24499    {
24500        #[inline]
24501        unsafe fn encode(
24502            self,
24503            encoder: &mut fidl::encoding::Encoder<'_, D>,
24504            offset: usize,
24505            _depth: fidl::encoding::Depth,
24506        ) -> fidl::Result<()> {
24507            encoder.debug_check_bounds::<UsageState>(offset);
24508            encoder.write_num::<u64>(self.ordinal(), offset);
24509            match self {
24510                UsageState::Unadjusted(ref val) => {
24511                    fidl::encoding::encode_in_envelope::<UsageStateUnadjusted, D>(
24512                        <UsageStateUnadjusted as fidl::encoding::ValueTypeMarker>::borrow(val),
24513                        encoder,
24514                        offset + 8,
24515                        _depth,
24516                    )
24517                }
24518                UsageState::Ducked(ref val) => {
24519                    fidl::encoding::encode_in_envelope::<UsageStateDucked, D>(
24520                        <UsageStateDucked as fidl::encoding::ValueTypeMarker>::borrow(val),
24521                        encoder,
24522                        offset + 8,
24523                        _depth,
24524                    )
24525                }
24526                UsageState::Muted(ref val) => {
24527                    fidl::encoding::encode_in_envelope::<UsageStateMuted, D>(
24528                        <UsageStateMuted as fidl::encoding::ValueTypeMarker>::borrow(val),
24529                        encoder,
24530                        offset + 8,
24531                        _depth,
24532                    )
24533                }
24534                UsageState::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
24535            }
24536        }
24537    }
24538
24539    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageState {
24540        #[inline(always)]
24541        fn new_empty() -> Self {
24542            Self::__SourceBreaking { unknown_ordinal: 0 }
24543        }
24544
24545        #[inline]
24546        unsafe fn decode(
24547            &mut self,
24548            decoder: &mut fidl::encoding::Decoder<'_, D>,
24549            offset: usize,
24550            mut depth: fidl::encoding::Depth,
24551        ) -> fidl::Result<()> {
24552            decoder.debug_check_bounds::<Self>(offset);
24553            #[allow(unused_variables)]
24554            let next_out_of_line = decoder.next_out_of_line();
24555            let handles_before = decoder.remaining_handles();
24556            let (ordinal, inlined, num_bytes, num_handles) =
24557                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24558
24559            let member_inline_size = match ordinal {
24560                1 => <UsageStateUnadjusted as fidl::encoding::TypeMarker>::inline_size(
24561                    decoder.context,
24562                ),
24563                2 => <UsageStateDucked as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24564                3 => <UsageStateMuted as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24565                0 => return Err(fidl::Error::UnknownUnionTag),
24566                _ => num_bytes as usize,
24567            };
24568
24569            if inlined != (member_inline_size <= 4) {
24570                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24571            }
24572            let _inner_offset;
24573            if inlined {
24574                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24575                _inner_offset = offset + 8;
24576            } else {
24577                depth.increment()?;
24578                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24579            }
24580            match ordinal {
24581                1 => {
24582                    #[allow(irrefutable_let_patterns)]
24583                    if let UsageState::Unadjusted(_) = self {
24584                        // Do nothing, read the value into the object
24585                    } else {
24586                        // Initialize `self` to the right variant
24587                        *self = UsageState::Unadjusted(fidl::new_empty!(UsageStateUnadjusted, D));
24588                    }
24589                    #[allow(irrefutable_let_patterns)]
24590                    if let UsageState::Unadjusted(ref mut val) = self {
24591                        fidl::decode!(UsageStateUnadjusted, D, val, decoder, _inner_offset, depth)?;
24592                    } else {
24593                        unreachable!()
24594                    }
24595                }
24596                2 => {
24597                    #[allow(irrefutable_let_patterns)]
24598                    if let UsageState::Ducked(_) = self {
24599                        // Do nothing, read the value into the object
24600                    } else {
24601                        // Initialize `self` to the right variant
24602                        *self = UsageState::Ducked(fidl::new_empty!(UsageStateDucked, D));
24603                    }
24604                    #[allow(irrefutable_let_patterns)]
24605                    if let UsageState::Ducked(ref mut val) = self {
24606                        fidl::decode!(UsageStateDucked, D, val, decoder, _inner_offset, depth)?;
24607                    } else {
24608                        unreachable!()
24609                    }
24610                }
24611                3 => {
24612                    #[allow(irrefutable_let_patterns)]
24613                    if let UsageState::Muted(_) = self {
24614                        // Do nothing, read the value into the object
24615                    } else {
24616                        // Initialize `self` to the right variant
24617                        *self = UsageState::Muted(fidl::new_empty!(UsageStateMuted, D));
24618                    }
24619                    #[allow(irrefutable_let_patterns)]
24620                    if let UsageState::Muted(ref mut val) = self {
24621                        fidl::decode!(UsageStateMuted, D, val, decoder, _inner_offset, depth)?;
24622                    } else {
24623                        unreachable!()
24624                    }
24625                }
24626                #[allow(deprecated)]
24627                ordinal => {
24628                    for _ in 0..num_handles {
24629                        decoder.drop_next_handle()?;
24630                    }
24631                    *self = UsageState::__SourceBreaking { unknown_ordinal: ordinal };
24632                }
24633            }
24634            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24635                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24636            }
24637            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24638                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24639            }
24640            Ok(())
24641        }
24642    }
24643
24644    impl fidl::encoding::ValueTypeMarker for Value {
24645        type Borrowed<'a> = &'a Self;
24646        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24647            value
24648        }
24649    }
24650
24651    unsafe impl fidl::encoding::TypeMarker for Value {
24652        type Owned = Self;
24653
24654        #[inline(always)]
24655        fn inline_align(_context: fidl::encoding::Context) -> usize {
24656            8
24657        }
24658
24659        #[inline(always)]
24660        fn inline_size(_context: fidl::encoding::Context) -> usize {
24661            16
24662        }
24663    }
24664
24665    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Value, D> for &Value {
24666        #[inline]
24667        unsafe fn encode(
24668            self,
24669            encoder: &mut fidl::encoding::Encoder<'_, D>,
24670            offset: usize,
24671            _depth: fidl::encoding::Depth,
24672        ) -> fidl::Result<()> {
24673            encoder.debug_check_bounds::<Value>(offset);
24674            encoder.write_num::<u64>(self.ordinal(), offset);
24675            match self {
24676            Value::BoolValue(ref val) => {
24677                fidl::encoding::encode_in_envelope::<bool, D>(
24678                    <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
24679                    encoder, offset + 8, _depth
24680                )
24681            }
24682            Value::Uint64Value(ref val) => {
24683                fidl::encoding::encode_in_envelope::<u64, D>(
24684                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
24685                    encoder, offset + 8, _depth
24686                )
24687            }
24688            Value::Int64Value(ref val) => {
24689                fidl::encoding::encode_in_envelope::<i64, D>(
24690                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
24691                    encoder, offset + 8, _depth
24692                )
24693            }
24694            Value::StringValue(ref val) => {
24695                fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedString, D>(
24696                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(val),
24697                    encoder, offset + 8, _depth
24698                )
24699            }
24700            Value::BytesValue(ref val) => {
24701                fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedVector<u8>, D>(
24702                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(val),
24703                    encoder, offset + 8, _depth
24704                )
24705            }
24706        }
24707        }
24708    }
24709
24710    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Value {
24711        #[inline(always)]
24712        fn new_empty() -> Self {
24713            Self::BoolValue(fidl::new_empty!(bool, D))
24714        }
24715
24716        #[inline]
24717        unsafe fn decode(
24718            &mut self,
24719            decoder: &mut fidl::encoding::Decoder<'_, D>,
24720            offset: usize,
24721            mut depth: fidl::encoding::Depth,
24722        ) -> fidl::Result<()> {
24723            decoder.debug_check_bounds::<Self>(offset);
24724            #[allow(unused_variables)]
24725            let next_out_of_line = decoder.next_out_of_line();
24726            let handles_before = decoder.remaining_handles();
24727            let (ordinal, inlined, num_bytes, num_handles) =
24728                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24729
24730            let member_inline_size = match ordinal {
24731                1 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24732                2 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24733                3 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24734                4 => <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
24735                    decoder.context,
24736                ),
24737                5 => {
24738                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(
24739                        decoder.context,
24740                    )
24741                }
24742                _ => return Err(fidl::Error::UnknownUnionTag),
24743            };
24744
24745            if inlined != (member_inline_size <= 4) {
24746                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24747            }
24748            let _inner_offset;
24749            if inlined {
24750                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24751                _inner_offset = offset + 8;
24752            } else {
24753                depth.increment()?;
24754                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24755            }
24756            match ordinal {
24757                1 => {
24758                    #[allow(irrefutable_let_patterns)]
24759                    if let Value::BoolValue(_) = self {
24760                        // Do nothing, read the value into the object
24761                    } else {
24762                        // Initialize `self` to the right variant
24763                        *self = Value::BoolValue(fidl::new_empty!(bool, D));
24764                    }
24765                    #[allow(irrefutable_let_patterns)]
24766                    if let Value::BoolValue(ref mut val) = self {
24767                        fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
24768                    } else {
24769                        unreachable!()
24770                    }
24771                }
24772                2 => {
24773                    #[allow(irrefutable_let_patterns)]
24774                    if let Value::Uint64Value(_) = self {
24775                        // Do nothing, read the value into the object
24776                    } else {
24777                        // Initialize `self` to the right variant
24778                        *self = Value::Uint64Value(fidl::new_empty!(u64, D));
24779                    }
24780                    #[allow(irrefutable_let_patterns)]
24781                    if let Value::Uint64Value(ref mut val) = self {
24782                        fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
24783                    } else {
24784                        unreachable!()
24785                    }
24786                }
24787                3 => {
24788                    #[allow(irrefutable_let_patterns)]
24789                    if let Value::Int64Value(_) = self {
24790                        // Do nothing, read the value into the object
24791                    } else {
24792                        // Initialize `self` to the right variant
24793                        *self = Value::Int64Value(fidl::new_empty!(i64, D));
24794                    }
24795                    #[allow(irrefutable_let_patterns)]
24796                    if let Value::Int64Value(ref mut val) = self {
24797                        fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
24798                    } else {
24799                        unreachable!()
24800                    }
24801                }
24802                4 => {
24803                    #[allow(irrefutable_let_patterns)]
24804                    if let Value::StringValue(_) = self {
24805                        // Do nothing, read the value into the object
24806                    } else {
24807                        // Initialize `self` to the right variant
24808                        *self = Value::StringValue(fidl::new_empty!(
24809                            fidl::encoding::UnboundedString,
24810                            D
24811                        ));
24812                    }
24813                    #[allow(irrefutable_let_patterns)]
24814                    if let Value::StringValue(ref mut val) = self {
24815                        fidl::decode!(
24816                            fidl::encoding::UnboundedString,
24817                            D,
24818                            val,
24819                            decoder,
24820                            _inner_offset,
24821                            depth
24822                        )?;
24823                    } else {
24824                        unreachable!()
24825                    }
24826                }
24827                5 => {
24828                    #[allow(irrefutable_let_patterns)]
24829                    if let Value::BytesValue(_) = self {
24830                        // Do nothing, read the value into the object
24831                    } else {
24832                        // Initialize `self` to the right variant
24833                        *self = Value::BytesValue(fidl::new_empty!(
24834                            fidl::encoding::UnboundedVector<u8>,
24835                            D
24836                        ));
24837                    }
24838                    #[allow(irrefutable_let_patterns)]
24839                    if let Value::BytesValue(ref mut val) = self {
24840                        fidl::decode!(
24841                            fidl::encoding::UnboundedVector<u8>,
24842                            D,
24843                            val,
24844                            decoder,
24845                            _inner_offset,
24846                            depth
24847                        )?;
24848                    } else {
24849                        unreachable!()
24850                    }
24851                }
24852                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24853            }
24854            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24855                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24856            }
24857            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24858                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24859            }
24860            Ok(())
24861        }
24862    }
24863
24864    impl fidl::encoding::ValueTypeMarker for VideoCompressedFormat {
24865        type Borrowed<'a> = &'a Self;
24866        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24867            value
24868        }
24869    }
24870
24871    unsafe impl fidl::encoding::TypeMarker for VideoCompressedFormat {
24872        type Owned = Self;
24873
24874        #[inline(always)]
24875        fn inline_align(_context: fidl::encoding::Context) -> usize {
24876            8
24877        }
24878
24879        #[inline(always)]
24880        fn inline_size(_context: fidl::encoding::Context) -> usize {
24881            16
24882        }
24883    }
24884
24885    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VideoCompressedFormat, D>
24886        for &VideoCompressedFormat
24887    {
24888        #[inline]
24889        unsafe fn encode(
24890            self,
24891            encoder: &mut fidl::encoding::Encoder<'_, D>,
24892            offset: usize,
24893            _depth: fidl::encoding::Depth,
24894        ) -> fidl::Result<()> {
24895            encoder.debug_check_bounds::<VideoCompressedFormat>(offset);
24896            encoder.write_num::<u64>(self.ordinal(), offset);
24897            match self {
24898                VideoCompressedFormat::TempFieldTodoRemove(ref val) => {
24899                    fidl::encoding::encode_in_envelope::<u32, D>(
24900                        <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
24901                        encoder,
24902                        offset + 8,
24903                        _depth,
24904                    )
24905                }
24906            }
24907        }
24908    }
24909
24910    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoCompressedFormat {
24911        #[inline(always)]
24912        fn new_empty() -> Self {
24913            Self::TempFieldTodoRemove(fidl::new_empty!(u32, D))
24914        }
24915
24916        #[inline]
24917        unsafe fn decode(
24918            &mut self,
24919            decoder: &mut fidl::encoding::Decoder<'_, D>,
24920            offset: usize,
24921            mut depth: fidl::encoding::Depth,
24922        ) -> fidl::Result<()> {
24923            decoder.debug_check_bounds::<Self>(offset);
24924            #[allow(unused_variables)]
24925            let next_out_of_line = decoder.next_out_of_line();
24926            let handles_before = decoder.remaining_handles();
24927            let (ordinal, inlined, num_bytes, num_handles) =
24928                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24929
24930            let member_inline_size = match ordinal {
24931                1 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24932                _ => return Err(fidl::Error::UnknownUnionTag),
24933            };
24934
24935            if inlined != (member_inline_size <= 4) {
24936                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24937            }
24938            let _inner_offset;
24939            if inlined {
24940                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24941                _inner_offset = offset + 8;
24942            } else {
24943                depth.increment()?;
24944                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24945            }
24946            match ordinal {
24947                1 => {
24948                    #[allow(irrefutable_let_patterns)]
24949                    if let VideoCompressedFormat::TempFieldTodoRemove(_) = self {
24950                        // Do nothing, read the value into the object
24951                    } else {
24952                        // Initialize `self` to the right variant
24953                        *self =
24954                            VideoCompressedFormat::TempFieldTodoRemove(fidl::new_empty!(u32, D));
24955                    }
24956                    #[allow(irrefutable_let_patterns)]
24957                    if let VideoCompressedFormat::TempFieldTodoRemove(ref mut val) = self {
24958                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
24959                    } else {
24960                        unreachable!()
24961                    }
24962                }
24963                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24964            }
24965            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24966                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24967            }
24968            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24969                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24970            }
24971            Ok(())
24972        }
24973    }
24974
24975    impl fidl::encoding::ValueTypeMarker for VideoFormat {
24976        type Borrowed<'a> = &'a Self;
24977        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24978            value
24979        }
24980    }
24981
24982    unsafe impl fidl::encoding::TypeMarker for VideoFormat {
24983        type Owned = Self;
24984
24985        #[inline(always)]
24986        fn inline_align(_context: fidl::encoding::Context) -> usize {
24987            8
24988        }
24989
24990        #[inline(always)]
24991        fn inline_size(_context: fidl::encoding::Context) -> usize {
24992            16
24993        }
24994    }
24995
24996    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VideoFormat, D>
24997        for &VideoFormat
24998    {
24999        #[inline]
25000        unsafe fn encode(
25001            self,
25002            encoder: &mut fidl::encoding::Encoder<'_, D>,
25003            offset: usize,
25004            _depth: fidl::encoding::Depth,
25005        ) -> fidl::Result<()> {
25006            encoder.debug_check_bounds::<VideoFormat>(offset);
25007            encoder.write_num::<u64>(self.ordinal(), offset);
25008            match self {
25009                VideoFormat::Compressed(ref val) => {
25010                    fidl::encoding::encode_in_envelope::<VideoCompressedFormat, D>(
25011                        <VideoCompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
25012                        encoder,
25013                        offset + 8,
25014                        _depth,
25015                    )
25016                }
25017                VideoFormat::Uncompressed(ref val) => {
25018                    fidl::encoding::encode_in_envelope::<VideoUncompressedFormat, D>(
25019                        <VideoUncompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
25020                        encoder,
25021                        offset + 8,
25022                        _depth,
25023                    )
25024                }
25025            }
25026        }
25027    }
25028
25029    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoFormat {
25030        #[inline(always)]
25031        fn new_empty() -> Self {
25032            Self::Compressed(fidl::new_empty!(VideoCompressedFormat, D))
25033        }
25034
25035        #[inline]
25036        unsafe fn decode(
25037            &mut self,
25038            decoder: &mut fidl::encoding::Decoder<'_, D>,
25039            offset: usize,
25040            mut depth: fidl::encoding::Depth,
25041        ) -> fidl::Result<()> {
25042            decoder.debug_check_bounds::<Self>(offset);
25043            #[allow(unused_variables)]
25044            let next_out_of_line = decoder.next_out_of_line();
25045            let handles_before = decoder.remaining_handles();
25046            let (ordinal, inlined, num_bytes, num_handles) =
25047                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
25048
25049            let member_inline_size = match ordinal {
25050                1 => <VideoCompressedFormat as fidl::encoding::TypeMarker>::inline_size(
25051                    decoder.context,
25052                ),
25053                2 => <VideoUncompressedFormat as fidl::encoding::TypeMarker>::inline_size(
25054                    decoder.context,
25055                ),
25056                _ => return Err(fidl::Error::UnknownUnionTag),
25057            };
25058
25059            if inlined != (member_inline_size <= 4) {
25060                return Err(fidl::Error::InvalidInlineBitInEnvelope);
25061            }
25062            let _inner_offset;
25063            if inlined {
25064                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
25065                _inner_offset = offset + 8;
25066            } else {
25067                depth.increment()?;
25068                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25069            }
25070            match ordinal {
25071                1 => {
25072                    #[allow(irrefutable_let_patterns)]
25073                    if let VideoFormat::Compressed(_) = self {
25074                        // Do nothing, read the value into the object
25075                    } else {
25076                        // Initialize `self` to the right variant
25077                        *self = VideoFormat::Compressed(fidl::new_empty!(VideoCompressedFormat, D));
25078                    }
25079                    #[allow(irrefutable_let_patterns)]
25080                    if let VideoFormat::Compressed(ref mut val) = self {
25081                        fidl::decode!(
25082                            VideoCompressedFormat,
25083                            D,
25084                            val,
25085                            decoder,
25086                            _inner_offset,
25087                            depth
25088                        )?;
25089                    } else {
25090                        unreachable!()
25091                    }
25092                }
25093                2 => {
25094                    #[allow(irrefutable_let_patterns)]
25095                    if let VideoFormat::Uncompressed(_) = self {
25096                        // Do nothing, read the value into the object
25097                    } else {
25098                        // Initialize `self` to the right variant
25099                        *self =
25100                            VideoFormat::Uncompressed(fidl::new_empty!(VideoUncompressedFormat, D));
25101                    }
25102                    #[allow(irrefutable_let_patterns)]
25103                    if let VideoFormat::Uncompressed(ref mut val) = self {
25104                        fidl::decode!(
25105                            VideoUncompressedFormat,
25106                            D,
25107                            val,
25108                            decoder,
25109                            _inner_offset,
25110                            depth
25111                        )?;
25112                    } else {
25113                        unreachable!()
25114                    }
25115                }
25116                ordinal => panic!("unexpected ordinal {:?}", ordinal),
25117            }
25118            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
25119                return Err(fidl::Error::InvalidNumBytesInEnvelope);
25120            }
25121            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25122                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25123            }
25124            Ok(())
25125        }
25126    }
25127}