Skip to main content

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    pub subject_time: i64,
1990    pub reference_time: i64,
1991    pub subject_delta: u32,
1992    pub reference_delta: u32,
1993}
1994
1995impl fidl::Persistable for TimelineFunction {}
1996
1997#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1998pub struct UsageGainListenerOnGainMuteChangedRequest {
1999    pub muted: bool,
2000    pub gain_dbfs: f32,
2001}
2002
2003impl fidl::Persistable for UsageGainListenerOnGainMuteChangedRequest {}
2004
2005#[derive(Clone, Debug, PartialEq)]
2006pub struct UsageWatcher2OnStateChangedRequest {
2007    pub usage: Usage2,
2008    pub state: UsageState,
2009}
2010
2011impl fidl::Persistable for UsageWatcher2OnStateChangedRequest {}
2012
2013#[derive(Clone, Debug, PartialEq)]
2014pub struct UsageWatcherOnStateChangedRequest {
2015    pub usage: Usage,
2016    pub state: UsageState,
2017}
2018
2019impl fidl::Persistable for UsageWatcherOnStateChangedRequest {}
2020
2021/// Describes the type of a video elementary stream.
2022#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2023pub struct VideoStreamType {
2024    pub pixel_format: fidl_fuchsia_images__common::PixelFormat,
2025    pub color_space: ColorSpace,
2026    /// Dimensions of the video frames as displayed in pixels.
2027    pub width: u32,
2028    pub height: u32,
2029    /// Dimensions of the video frames as encoded in pixels. These values must
2030    /// be equal to or greater than the respective width/height values.
2031    pub coded_width: u32,
2032    pub coded_height: u32,
2033    /// The aspect ratio of a single pixel as frames are intended to be
2034    /// displayed.
2035    pub pixel_aspect_ratio_width: u32,
2036    pub pixel_aspect_ratio_height: u32,
2037    /// The number of bytes per 'coded' row in the primary video plane.
2038    pub stride: u32,
2039}
2040
2041impl fidl::Persistable for VideoStreamType {}
2042
2043/// VideoUncompressedFormat
2044///
2045/// Uncompressed video format details.
2046#[derive(Clone, Debug, PartialEq)]
2047pub struct VideoUncompressedFormat {
2048    pub image_format: fidl_fuchsia_sysmem__common::ImageFormat2,
2049    pub fourcc: u32,
2050    pub primary_width_pixels: u32,
2051    pub primary_height_pixels: u32,
2052    pub secondary_width_pixels: u32,
2053    pub secondary_height_pixels: u32,
2054    pub planar: bool,
2055    pub swizzled: bool,
2056    pub primary_line_stride_bytes: u32,
2057    pub secondary_line_stride_bytes: u32,
2058    pub primary_start_offset: u32,
2059    pub secondary_start_offset: u32,
2060    pub tertiary_start_offset: u32,
2061    pub primary_pixel_stride: u32,
2062    pub secondary_pixel_stride: u32,
2063    pub primary_display_width_pixels: u32,
2064    pub primary_display_height_pixels: u32,
2065    pub has_pixel_aspect_ratio: bool,
2066    pub pixel_aspect_ratio_width: u32,
2067    pub pixel_aspect_ratio_height: u32,
2068}
2069
2070impl fidl::Persistable for VideoUncompressedFormat {}
2071
2072#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2073pub struct Void;
2074
2075impl fidl::Persistable for Void {}
2076
2077/// AudioCompressedFormatCvsd contains no fields for now since we will be
2078/// using the parameter values recommended by Bluetooth Core Spec v5.3
2079/// section 9.2.
2080#[derive(Clone, Debug, Default, PartialEq)]
2081pub struct AudioCompressedFormatCvsd {
2082    #[doc(hidden)]
2083    pub __source_breaking: fidl::marker::SourceBreaking,
2084}
2085
2086impl fidl::Persistable for AudioCompressedFormatCvsd {}
2087
2088/// AudioCompressedFormatLc3 contains no fields. The required parameters
2089/// for setting up the decoder would be embedded as Codec_Specific_Configuration
2090/// (Assigned Numbers section 6.12.5) in `FormatDetails.oob_bytes`.
2091#[derive(Clone, Debug, Default, PartialEq)]
2092pub struct AudioCompressedFormatLc3 {
2093    #[doc(hidden)]
2094    pub __source_breaking: fidl::marker::SourceBreaking,
2095}
2096
2097impl fidl::Persistable for AudioCompressedFormatLc3 {}
2098
2099/// Represents the status of the consumer. In the initial status, `error` and
2100/// `presentation_timeline` are absent. The lead time fields are always present.
2101#[derive(Clone, Debug, Default, PartialEq)]
2102pub struct AudioConsumerStatus {
2103    /// If present, indicates an error condition currently in effect. Absent if no error.
2104    pub error: Option<AudioConsumerError>,
2105    /// If present, indicates the current relationship between the presentation timeline
2106    /// and local monotonic clock, both in nanosecond units. If not present,
2107    /// indicates there is no relationship. Absent initially.
2108    ///
2109    /// 'Presentation timeline' refers to the `pts` (presentation timestamp) values on the packets.
2110    /// This timeline function can be used to determine the local monotonic clock time that a
2111    /// packet will be presented based on that packet's `pts` value.
2112    pub presentation_timeline: Option<TimelineFunction>,
2113    /// Indicates the minimum lead time in nanoseconds supported by this
2114    /// `AudioConsumer`.  Or in other words, how small of a gap between the
2115    /// `media_time` provided to `AudioConsumer.Start` and the pts on the first
2116    /// packet can be. Values outside this range will be clipped.
2117    pub min_lead_time: Option<u64>,
2118    /// Indicates the maximum lead time in nanoseconds supported by this
2119    /// `AudioConsumer`.  Or in other words, how large 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 max_lead_time: Option<u64>,
2123    #[doc(hidden)]
2124    pub __source_breaking: fidl::marker::SourceBreaking,
2125}
2126
2127impl fidl::Persistable for AudioConsumerStatus {}
2128
2129/// Settings for CVSD Encoders. It contains no fields for now since we will be
2130/// using the parameter values recommended by Bluetooth Core Spec v5.3
2131/// section 9.2.
2132#[derive(Clone, Debug, Default, PartialEq)]
2133pub struct CvsdEncoderSettings {
2134    #[doc(hidden)]
2135    pub __source_breaking: fidl::marker::SourceBreaking,
2136}
2137
2138impl fidl::Persistable for CvsdEncoderSettings {}
2139
2140/// DecryptedFormat
2141///
2142/// This describes the format of the decrypted content. It is required to be
2143/// sent by the StreamProcessor server prior to the delivery of output packets.
2144/// Currently, there is no additional format details for decrypted output.
2145#[derive(Clone, Debug, Default, PartialEq)]
2146pub struct DecryptedFormat {
2147    pub ignore_this_field: Option<bool>,
2148    #[doc(hidden)]
2149    pub __source_breaking: fidl::marker::SourceBreaking,
2150}
2151
2152impl fidl::Persistable for DecryptedFormat {}
2153
2154/// EncryptedFormat
2155///
2156/// The stream format details payload of a decrypting stream processor. This is
2157/// a sparsely populated table to specify parameters necessary for decryption
2158/// other than the data stream. It is only necessary to update fields if they
2159/// changed, but not an error if the same value is repeated.
2160#[derive(Clone, Debug, Default, PartialEq)]
2161pub struct EncryptedFormat {
2162    /// `init_vector` is used in combination with a key and a block of content
2163    /// to create the first cipher block in a chain and derive subsequent cipher
2164    /// blocks in a cipher block chain.
2165    /// Usage:
2166    ///  - It is required to be set prior to the delivery of input packets to a
2167    ///    decryptor.
2168    ///  - This may be changed multiple times during a data stream.
2169    pub init_vector: Option<Vec<u8>>,
2170    /// `subsamples` is used to identify the clear and encrypted portions of a
2171    /// subsample.
2172    /// Usage:
2173    ///  - For whole sample encryption, this parameter should not be sent.
2174    ///  - This may be changed multiple times during a data stream.
2175    pub subsamples: Option<Vec<SubsampleEntry>>,
2176    /// `pattern` is used to identify the clear and encrypted blocks for pattern
2177    /// based encryption.
2178    /// Usage:
2179    /// - This is not allowed for CENC and CBC1 and required for CENS and CBCS.
2180    /// - If required, it must be set prior to the delivery of input packets to
2181    ///   a decryptor.
2182    /// - This may be changed multiple times during a data stream.
2183    pub pattern: Option<EncryptionPattern>,
2184    /// `scheme` specifies which encryption scheme to use, such as
2185    /// `fuchsia.media.ENCRYPTION_SCHEME_CENC`.
2186    /// Usage:
2187    ///  - It is required to be set prior to delivery of input packets.
2188    ///  - Changing the scheme mid-stream is only permitted in some scenarios.
2189    ///    Once an encrypted scheme is selected for a stream, the scheme may
2190    ///    only be set to `fuchsia.media.ENCRYPTION_SCHEME_UNENCRYPTED` or that
2191    ///    same initial encrypted scheme. The scheme may be set to
2192    ///    `fuchsia.media.ENCRYPTION_SCHEME_UNENCRYPTED` at any point.
2193    pub scheme: Option<String>,
2194    /// `key_id` identifies the key that should be used for decrypting
2195    /// subsequent data.
2196    /// Usage:
2197    ///  - It is required to be set prior to delivery of input packets to a
2198    ///    decryptor.
2199    ///  - This may be changed multiple times during a data stream.
2200    pub key_id: Option<Vec<u8>>,
2201    #[doc(hidden)]
2202    pub __source_breaking: fidl::marker::SourceBreaking,
2203}
2204
2205impl fidl::Persistable for EncryptedFormat {}
2206
2207/// FormatDetails
2208///
2209/// This describes/details the format on input or output of a StreamProcessor
2210/// (separate instances for input vs. output).
2211#[derive(Clone, Debug, Default, PartialEq)]
2212pub struct FormatDetails {
2213    pub format_details_version_ordinal: Option<u64>,
2214    pub mime_type: Option<String>,
2215    pub oob_bytes: Option<Vec<u8>>,
2216    pub domain: Option<DomainFormat>,
2217    pub pass_through_parameters: Option<Vec<Parameter>>,
2218    /// Instructs an encoder on how to encode raw data.
2219    ///
2220    /// Decoders may ignore this field but are entitled to rejected requests with
2221    /// this field set because it doesn't make sense.
2222    pub encoder_settings: Option<EncoderSettings>,
2223    /// The number of ticks of the timebase of input packet timestamp_ish values
2224    /// per second.
2225    ///
2226    /// The timebase is only used used for optional extrapolation of timestamp_ish
2227    /// values when an input timestamp which applies to byte 0 of the valid portion
2228    /// of the input packet does not correspond directly to byte 0 of the valid
2229    /// portion of any output packet.
2230    ///
2231    /// Leave unset if timestamp extrapolation is not needed, either due to lack of
2232    /// timestamps on input, or due to input being provided in increments of the
2233    /// encoder's input chunk size (based on the encoder settings and calculated
2234    /// independently by the client).  Set if timestamp extrapolation is known to be
2235    /// needed or known to be acceptable to the client.
2236    pub timebase: Option<u64>,
2237    /// The codec profile for the given encoder or decoder.
2238    ///
2239    /// For encoders: This value is completely optional. A client may want to specify the codec
2240    /// profile used for protocol compatibility reasons (i.e. WebRTC). However if the value is not
2241    /// set then the the encoder is free to choose any supported codec profile.
2242    ///
2243    /// For decoders: This value is optional but providing it is best practice (at least of
2244    /// unencrypted streams). Container formats include the encoded profile and this should be
2245    /// provided to the decoder. Certain formats like VP9 and AV1 include the encoded profile in
2246    /// their elementary bitstream so it is possible for those decoders to figure out the profile
2247    /// the stream is encoded in. Regardless, clients should provide the encoded profile if
2248    /// possible.
2249    pub profile: Option<CodecProfile>,
2250    #[doc(hidden)]
2251    pub __source_breaking: fidl::marker::SourceBreaking,
2252}
2253
2254impl fidl::Persistable for FormatDetails {}
2255
2256/// Settings for H264 Encoders.
2257#[derive(Clone, Debug, Default, PartialEq)]
2258pub struct H264EncoderSettings {
2259    /// Target bits per second for encoded stream.
2260    /// If omitted, interpreted as 200,000.
2261    pub bit_rate: Option<u32>,
2262    /// Target frames per second for encoded stream.
2263    /// If omitted, interpreted as 30.
2264    pub frame_rate: Option<u32>,
2265    /// Number of pictures per keyframe.  Setting to 0 will disable key frame
2266    /// encoding, except for if force_key_frame is set to true.
2267    /// If omitted, interpreted as 8.
2268    pub gop_size: Option<u32>,
2269    /// Whether to enable frame rate adjustments in order to meet target bitrate.
2270    /// If omitted, interpreted as false.
2271    pub variable_frame_rate: Option<bool>,
2272    /// Lowest frame rate allowed if `variable_frame_rate` is enabled. If
2273    /// omitted, interpreted as 10.
2274    pub min_frame_rate: Option<u32>,
2275    /// If true, next frame encoded will be a key frame. If omitted, interpreted
2276    /// as false.
2277    pub force_key_frame: Option<bool>,
2278    /// Allow customization of quantization parameters for encoding. Each frame
2279    /// submitted after setting this will use the new values. If omitted, no
2280    /// change from encoder defaults is made.
2281    pub quantization_params: Option<H264QuantizationParameters>,
2282    #[doc(hidden)]
2283    pub __source_breaking: fidl::marker::SourceBreaking,
2284}
2285
2286impl fidl::Persistable for H264EncoderSettings {}
2287
2288/// Customization of h264 encoder parameters for macroblock quantization. The values
2289/// can range from 0 to 51, with lower numbers indicating higher
2290/// quality/bitrate. While encoders should support these fields if feasible,
2291/// some encoders may ignore these fields. It's ok to not set this table, or
2292/// not set some of the fields in this table, as encoders can determine their
2293/// own defaults. If the targeted bitrate can't be achieved with the specified values,
2294/// then the user should expect the resulting encoded stream bitrate to differ from
2295/// the requested bitrate.
2296#[derive(Clone, Debug, Default, PartialEq)]
2297pub struct H264QuantizationParameters {
2298    /// Starting value for quantization of key frames.
2299    pub i_base: Option<u32>,
2300    /// Smallest allowed value for quantization of key frames.
2301    pub i_min: Option<u32>,
2302    /// Largest allowed value for quantization of key frames.
2303    pub i_max: Option<u32>,
2304    /// Starting value for quantization of predicted frames.
2305    pub p_base: Option<u32>,
2306    /// Smallest allowed value for quantization of predicted frames.
2307    pub p_min: Option<u32>,
2308    /// Largest allowed value for quantization of predicted frames.
2309    pub p_max: Option<u32>,
2310    #[doc(hidden)]
2311    pub __source_breaking: fidl::marker::SourceBreaking,
2312}
2313
2314impl fidl::Persistable for H264QuantizationParameters {}
2315
2316/// Settings for HEVC/H265 Encoders.
2317#[derive(Clone, Debug, Default, PartialEq)]
2318pub struct HevcEncoderSettings {
2319    /// Target bits per second for encoded stream. Defaults to 200,000 if
2320    /// omitted.
2321    pub bit_rate: Option<u32>,
2322    /// Target frames per second for encoded stream. Defaults to 30 if omitted.
2323    pub frame_rate: Option<u32>,
2324    /// Number of pictures per keyframe. Defaults to 8 if omitted.
2325    pub gop_size: Option<u32>,
2326    #[doc(hidden)]
2327    pub __source_breaking: fidl::marker::SourceBreaking,
2328}
2329
2330impl fidl::Persistable for HevcEncoderSettings {}
2331
2332/// Configuration for a capturer which will receive a stream from an
2333/// input device.
2334#[derive(Clone, Debug, Default, PartialEq)]
2335pub struct InputAudioCapturerConfiguration {
2336    pub usage: Option<AudioCaptureUsage>,
2337    pub usage2: Option<AudioCaptureUsage2>,
2338    #[doc(hidden)]
2339    pub __source_breaking: fidl::marker::SourceBreaking,
2340}
2341
2342impl fidl::Persistable for InputAudioCapturerConfiguration {}
2343
2344/// Settings for LC3 Encoders. Contains parameters stated in LC3 Specification v1.0.
2345/// Contains fields that are not represented by PcmFormat.
2346#[derive(Clone, Debug, Default, PartialEq)]
2347pub struct Lc3EncoderSettings {
2348    /// External byte count values to be used for the frame encoding of audio.
2349    /// According to the LC3 Specification v1.0, each audio channel could have different
2350    /// output byte size value, but for Fuchsia use case, we use the same `nbytes` value
2351    /// for all channels.
2352    pub nbytes: Option<u16>,
2353    /// Frame duration is used together with sampling frequency to determine the
2354    /// frame size.
2355    pub frame_duration: Option<Lc3FrameDuration>,
2356    #[doc(hidden)]
2357    pub __source_breaking: fidl::marker::SourceBreaking,
2358}
2359
2360impl fidl::Persistable for Lc3EncoderSettings {}
2361
2362/// Configuration for a capturer which will receive a loopback stream
2363/// a system output.
2364#[derive(Clone, Debug, Default, PartialEq)]
2365pub struct LoopbackAudioCapturerConfiguration {
2366    #[doc(hidden)]
2367    pub __source_breaking: fidl::marker::SourceBreaking,
2368}
2369
2370impl fidl::Persistable for LoopbackAudioCapturerConfiguration {}
2371
2372/// Settings for the mSBC encoder. There are no settings as the mSBC encoder uses the values
2373/// required by HFP Spec v1.8.
2374#[derive(Clone, Debug, Default, PartialEq)]
2375pub struct MSbcEncoderSettings {
2376    #[doc(hidden)]
2377    pub __source_breaking: fidl::marker::SourceBreaking,
2378}
2379
2380impl fidl::Persistable for MSbcEncoderSettings {}
2381
2382/// A Packet represents a chunk of input or output data to or from a stream
2383/// processor.
2384///
2385/// stream processor output:
2386///
2387/// While the Packet is outstanding with the client via OnOutputPacket(), the
2388/// stream processor will avoid modifying the referenced output data.  After the
2389/// client calls RecycleOutputPacket(packet_index), the stream processor is
2390/// notified that the client is again ok with the referenced data changing.
2391///
2392/// stream processor input:
2393///
2394/// The client initially has all packet_index(es) available to fill, and later
2395/// gets packet_index(s) that are again ready to fill via OnFreeInputPacket().
2396/// The client must not modify the referenced data in between QueueInputPacket()
2397/// and OnFreeInputPacket().
2398#[derive(Clone, Debug, Default, PartialEq)]
2399pub struct Packet {
2400    pub header: Option<PacketHeader>,
2401    /// Which buffer this packet refers to.  For single-buffer mode this will
2402    /// always be 0, but for multi-buffer mode, a given in-flight interval of a
2403    /// packet can refer to any buffer.  The packet has an associated buffer only
2404    /// while the packet is in-flight, not while the packet is free.
2405    ///
2406    /// The default value makes accidental inappropriate use of index 0 less
2407    /// likely (will tend to complain in an obvious way if not filled out
2408    /// instead of a non-obvious data corruption when decoding buffer 0
2409    /// repeatedly instead of the correct buffers).
2410    ///
2411    /// TODO(dustingreen): Try to make FIDL table defaults have meaning, and not
2412    /// complain about !has when accessing the field.  For now the default
2413    /// specified here does nothing.
2414    pub buffer_index: Option<u32>,
2415    /// The value 1 is the lowest permitted value after stream processor
2416    /// creation.  Values sent by the client must be odd.  Values must only
2417    /// increase.
2418    ///
2419    /// A stream_lifetime_ordinal represents the lifetime of a stream.  All
2420    /// messages that are specific to a stream have the stream_lifetime_ordinal
2421    /// value and the value is the same for all messages relating to a given
2422    /// stream.
2423    pub stream_lifetime_ordinal: Option<u64>,
2424    /// Which part of the relevant buffer is this packet using.  These are valid
2425    /// for input data that's in-flight to the stream processor, and are valid
2426    /// for output data from the stream processor.
2427    ///
2428    /// For compressed formats and uncompressed audio, the data in
2429    /// [start_offset, start_offset + valid_length_bytes) is the contiguously
2430    /// valid data referred to by this packet.
2431    ///
2432    /// For uncompressed video frames, FormatDetails is the primary means of
2433    /// determining which bytes are relevant.  The offsets in FormatDetails
2434    /// are relative to the start_offset here.  The valid_length_bytes must be
2435    /// large enough to include the full last line of pixel data, including the
2436    /// full line stride of the last line (not just the width in pixels of the
2437    /// last line).
2438    ///
2439    /// Despite these being filled out, some uncompressed video buffers are of
2440    /// types that are not readable by the CPU.  These fields being here don't
2441    /// imply there's any way for the CPU to read an uncompressed frame.
2442    pub start_offset: Option<u32>,
2443    /// This must be > 0.
2444    ///
2445    /// The semantics for valid data per packet vary depending on data type as
2446    /// follows.
2447    ///
2448    /// uncompressed video - A video frame can't be split across packets.  Each
2449    /// packet is one video frame.
2450    ///
2451    /// uncompressed audio - Regardless of float or int, linear or uLaw, or
2452    /// number of channels, a packet must contain an non-negative number of
2453    /// complete audio frames, where a single audio frame consists of data for
2454    /// all the channels for the same single point in time.  Any
2455    /// stream-processor-specific internal details re. lower rate sampling for
2456    /// LFE channel or the like should be hidden by the StreamProcessor server
2457    /// implementation.
2458    ///
2459    /// compressed data input - A packet must contain at least one byte of data.
2460    /// See also stream_input_bytes_min.  Splitting AUs at arbitrary byte
2461    /// boundaries is permitted, including at boundaries that are in AU headers.
2462    ///
2463    /// compressed data output - The stream processor is not required to fully
2464    /// fill each output packet's buffer.
2465    pub valid_length_bytes: Option<u32>,
2466    /// This value is not strictly speaking a timestamp.  It is an arbitrary
2467    /// unsigned 64-bit number that, under some circumstances, will be passed by
2468    /// a stream processor unmodified from an input packet to the
2469    /// exactly-corresponding output packet.
2470    ///
2471    /// For timestamp_ish values to be propagated from input to output the
2472    /// following conditions must be true:
2473    ///  * promise_separate_access_units_on_input must be true
2474    ///  * has_timestamp_ish must be true for a given input packet, to have that
2475    ///    timestamp_ish value (potentially) propagate through to an output
2476    ///  * the StreamProcessor instance itself decides (async) that the input
2477    ///    packet generates an output packet - if a given input never generates
2478    ///    an output packet then the timestamp_ish value on the input will never
2479    ///    show up on any output packet - depending on the characteristics of the
2480    ///    input and output formats, and whether a decoder is willing to join
2481    ///    mid-stream, etc this can be more or less likely to occur, but clients
2482    ///    should be written to accommodate timestamp_ish values that are fed on
2483    ///    input but never show up on output, at least to a reasonable degree
2484    ///    (not crashing, not treating as an error).
2485    pub timestamp_ish: Option<u64>,
2486    /// If promise_separate_access_units_on_input (TODO(dustingreen): or any
2487    /// similar mode for output) is true, this bool must be set appropriately
2488    /// depending on whether byte 0 _is_ or _is not_ the start of an access
2489    /// unit. The client is required to know, and required to set this boolean
2490    /// properly. The server is allowed to infer that when this boolean is
2491    /// false, byte 0 is the first byte of a continuation of a
2492    /// previously-started AU.  (The byte at start_offset is "byte 0".)
2493    ///
2494    /// If promise_separate_access_units_on_input is false, this boolean is
2495    /// ignored.
2496    pub start_access_unit: Option<bool>,
2497    /// A client is never required to set this boolean to true.
2498    ///
2499    /// If promise_separate_access_units_on_input is true, for input data, this
2500    /// boolean must be false if the last byte of this packet is not the last
2501    /// byte of an AU, and this boolean _may_ be true if the last byte of this
2502    /// packet is the last byte of an AU.  A client delivering one AU at a time
2503    /// that's interested in the lowest possible latency via the decoder should
2504    /// set this boolean to true when it can be set to true.
2505    ///
2506    /// If promise_separate_access_units_on_input is false, this boolean is
2507    /// ignored.
2508    pub known_end_access_unit: Option<bool>,
2509    /// Used for compressed video packets. If not present should be assumed to
2510    /// be unknown. If false, indicates the packet is not part of a key frame. If
2511    /// true, indicates the packet is part of a key frame.
2512    pub key_frame: Option<bool>,
2513    #[doc(hidden)]
2514    pub __source_breaking: fidl::marker::SourceBreaking,
2515}
2516
2517impl fidl::Persistable for Packet {}
2518
2519/// PacketHeader
2520///
2521/// When referring to a free packet, we use PacketHeader alone instead of
2522/// Packet, since while a packet is free it doesn't really have meaningful
2523/// offset or length etc.
2524///
2525/// A populated Packet also has a PacketHeader.
2526#[derive(Clone, Debug, Default, PartialEq)]
2527pub struct PacketHeader {
2528    /// This is which buffer configuration lifetime this header is referring to.
2529    ///
2530    /// A packet_index is only really meaningful with respect to a particular
2531    /// buffer_lifetime_ordinal.
2532    ///
2533    /// See StreamBufferPartialSettings.buffer_lifetime_ordinal.
2534    ///
2535    /// For QueueInputPacket(), a server receiving a buffer_lifetime_ordinal that
2536    /// isn't the current input buffer_lifetime_ordinal will close the channel.
2537    ///
2538    /// For OnFreeInputPacket() and RecycleOutputPacket(), the receiver (client
2539    /// or server) must ignore a message with stale buffer_lifetime_ordinal.
2540    pub buffer_lifetime_ordinal: Option<u64>,
2541    /// The overall set of packet_index values is densely packed from 0..count-1
2542    /// for input and output separately.  They can be queued in any order.
2543    ///
2544    /// Both the client and server should validate the packet_index against the
2545    /// known bound and disconnect if it's out of bounds.
2546    ///
2547    /// When running in single-buffer mode, the buffer index is always 0.
2548    ///
2549    /// The packet_index values don't imply anything about order of use of
2550    /// packets. The client should not expect the ordering to remain the same
2551    /// over time - the stream processor is free to hold on to an input or
2552    /// output packet for a while during which other packet_index values may be
2553    /// used multiple times.
2554    ///
2555    /// For a given properly-functioning StreamProcessor instance, packet_index
2556    /// values will be unique among concurrently-outstanding packets.  Servers
2557    /// should validate that a client isn't double-using a packet and clients
2558    /// should validate as necessary to avoid undefined or unexpected client
2559    /// behavior.
2560    pub packet_index: Option<u32>,
2561    #[doc(hidden)]
2562    pub __source_breaking: fidl::marker::SourceBreaking,
2563}
2564
2565impl fidl::Persistable for PacketHeader {}
2566
2567/// This struct conveys the buffer_constraints_version_ordinal.
2568///
2569/// Historically this table conveyed more fields than it currently does, but
2570/// those fields are all deprecated in favor of using sysmem instead.
2571///
2572/// There are separate instances of this struct for stream input and stream
2573/// output.
2574///
2575/// Notes about fields:
2576///
2577/// For uncompressed video, separate and complete frames in their
2578/// separate buffers (buffer-per-packet mode) are always a requirement.
2579#[derive(Clone, Debug, Default, PartialEq)]
2580pub struct StreamBufferConstraints {
2581    /// This is a version number the server sets on the constraints to allow the
2582    /// server to determine when the client has caught up with the latest
2583    /// constraints sent by the server.  The server won't emit output data until
2584    /// the client has configured output settings and buffers with a
2585    /// buffer_constraints_version_ordinal >= the latest
2586    /// buffer_constraints_version_ordinal that had
2587    /// buffer_constraints_action_required true.  See
2588    /// buffer_constraints_action_required comments for more.
2589    ///
2590    /// A buffer_constraints_version_ordinal of 0 is not permitted, to simplify
2591    /// initial state handling.  Other than 0, both odd and even version ordinals
2592    /// are allowed (in contrast to the stream_lifetime_ordinal, neither the
2593    /// client nor server ever has a reason to consider the latest version to be
2594    /// stale, so there would be no benefit to disallowing even values).
2595    pub buffer_constraints_version_ordinal: Option<u64>,
2596    pub default_settings: Option<StreamBufferSettings>,
2597    pub per_packet_buffer_bytes_min: Option<u32>,
2598    pub per_packet_buffer_bytes_recommended: Option<u32>,
2599    pub per_packet_buffer_bytes_max: Option<u32>,
2600    pub packet_count_for_server_min: Option<u32>,
2601    pub packet_count_for_server_recommended: Option<u32>,
2602    pub packet_count_for_server_recommended_max: Option<u32>,
2603    pub packet_count_for_server_max: Option<u32>,
2604    pub packet_count_for_client_min: Option<u32>,
2605    pub packet_count_for_client_max: Option<u32>,
2606    pub single_buffer_mode_allowed: Option<bool>,
2607    pub is_physically_contiguous_required: Option<bool>,
2608    #[doc(hidden)]
2609    pub __source_breaking: fidl::marker::SourceBreaking,
2610}
2611
2612impl fidl::Persistable for StreamBufferConstraints {}
2613
2614/// Deprecated.  Use SetStreamBufferPartialSettings() and
2615/// StreamBufferPartialSettings instead.
2616#[derive(Clone, Debug, Default, PartialEq)]
2617pub struct StreamBufferSettings {
2618    pub buffer_lifetime_ordinal: Option<u64>,
2619    pub buffer_constraints_version_ordinal: Option<u64>,
2620    pub packet_count_for_server: Option<u32>,
2621    pub packet_count_for_client: Option<u32>,
2622    pub per_packet_buffer_bytes: Option<u32>,
2623    pub single_buffer_mode: Option<bool>,
2624    #[doc(hidden)]
2625    pub __source_breaking: fidl::marker::SourceBreaking,
2626}
2627
2628impl fidl::Persistable for StreamBufferSettings {}
2629
2630/// The stream-processor-controlled output configuration, including both
2631/// StreamBufferConstraints for the output and FormatDetails for the output.
2632#[derive(Clone, Debug, Default, PartialEq)]
2633pub struct StreamOutputConstraints {
2634    /// A client which always immediately re-configures output buffers on
2635    /// receipt of OnOutputConstraints() with buffer_constraints_action_required
2636    /// true can safely ignore this field.
2637    ///
2638    /// A client is permitted to ignore an OnOutputConstraints() message even with
2639    /// buffer_constraints_action_required true if the client knows the server
2640    /// has already been told to discard the remainder of the stream with the
2641    /// same stream_lifetime_ordinal or if this stream_lifetime_ordinal field is
2642    /// set to 0.  The server is required to re-send needed output config via
2643    /// OnOutputConstraints() with new stream_lifetime_ordinal and
2644    /// buffer_constraints_action_required true, if the most recent completed
2645    /// server-side output config isn't what the server wants/needs yet for the
2646    /// new stream.
2647    pub stream_lifetime_ordinal: Option<u64>,
2648    /// When the buffer constraints are delivered, they indicate whether action
2649    /// is required.  A false value here permits delivery of constraints which
2650    /// are fresher without forcing a buffer reconfiguration.  If this is false,
2651    /// a client cannot assume that it's safe to immediately re-configure output
2652    /// buffers.  If this is true, the client can assume it's safe to
2653    /// immediately configure output buffers once.
2654    ///
2655    /// A client is permitted to ignore buffer constraint versions which have
2656    /// buffer_constraints_action_required false.  The server is not permitted
2657    /// to change buffer_constraints_action_required from false to true for the
2658    /// same buffer_constraints_version_ordinal.
2659    ///
2660    /// For each configuration, a client must use new buffers, never buffers
2661    /// that were previously used for anything else, and never buffers
2662    /// previously used for any other StreamProcessor purposes.  This rule
2663    /// exists for multiple good reasons, relevant to both mid-stream changes,
2664    /// and changes on stream boundaries. A client should just use new buffers
2665    /// each time.
2666    ///
2667    /// When this is true, the server has already de-refed as many low-level
2668    /// output buffers as the server can while still performing efficient
2669    /// transition to the new buffers and will de-ref the rest asap.  A Sync()
2670    /// is not necessary to achieve non-overlap of resource usage to the extent
2671    /// efficiently permitted by the formats involved.
2672    ///
2673    /// If buffer_constraints_action_required is true, the server _must_ not
2674    /// deliver more output data until after output buffers have been configured
2675    /// (or re-configured) by the client.
2676    pub buffer_constraints_action_required: Option<bool>,
2677    pub buffer_constraints: Option<StreamBufferConstraints>,
2678    #[doc(hidden)]
2679    pub __source_breaking: fidl::marker::SourceBreaking,
2680}
2681
2682impl fidl::Persistable for StreamOutputConstraints {}
2683
2684#[derive(Clone, Debug, Default, PartialEq)]
2685pub struct StreamOutputFormat {
2686    /// A client is permitted to ignore an OnOutputFormat() message even with
2687    /// buffer_constraints_action_required true if the client knows the server
2688    /// has already been told to discard the remainder of the stream with the
2689    /// same stream_lifetime_ordinal or if this stream_lifetime_ordinal field is
2690    /// set to 0.  The server is required to re-send needed output config via
2691    /// OnOutputConstraints() with new stream_lifetime_ordinal and
2692    /// buffer_constraints_action_required true, if the most recent completed
2693    /// server-side output config isn't what the server wants/needs yet for the
2694    /// new stream.
2695    ///
2696    /// The server is required to send an OnOutputFormat() before the first
2697    /// output packet of a stream.
2698    pub stream_lifetime_ordinal: Option<u64>,
2699    /// If format_details.format_details_version_ordinal changes, the client
2700    /// should inspect the new format details and determine if it must adjust to
2701    /// the new format. The server guarantees that if the format has changed, then
2702    /// format_details.format_details_version_ordinal will change, but a change
2703    /// to format_details.format_details_version_ordinal does not guarantee that
2704    /// the format details actually changed.  Servers are strongly encouraged to
2705    /// not change format_details.format_details_version_ordinal other than
2706    /// before the first output data of a stream unless there is a real
2707    /// mid-stream format change in the stream.  Unnecessary mid-stream format
2708    /// changes can cause simpler clients that have no need to handle mid-stream
2709    /// format changes to just close the channel.  Format changes before the
2710    /// first output data of a stream are not "mid-stream" in this context -
2711    /// those can be useful for stream format detection / setup reasons.
2712    ///
2713    /// Note that in case output buffers don't really need to be re-configured
2714    /// despite a format change, a server is encouraged, but not required, to
2715    /// set buffer_constraints_action_required false on the message that conveys
2716    /// the new format details.  Simpler servers may just treat the whole output
2717    /// situation as one big thing and demand output buffer reconfiguration on
2718    /// any change in the output situation.
2719    ///
2720    /// A client may or may not actually handle a new buffer_constraints with
2721    /// buffer_constraints_action_required false, but the client should always
2722    /// track the latest format_details.
2723    ///
2724    /// An updated format_details is ordered with respect to emitted output
2725    /// packets, and applies to all subsequent packets until the next
2726    /// format_details with larger version_ordinal.  A simple client that does
2727    /// not intend to handle mid-stream format changes should still keep track
2728    /// of the most recently received format_details until the first output
2729    /// packet arrives, then lock down the format details, handle those format
2730    /// details, and verify that any
2731    /// format_details.format_details_version_ordinal received from the server
2732    /// is the same as the locked-down format_details, until the client is done
2733    /// with the stream.  Even such a simple client must tolerate
2734    /// format_details.format_details_version_ordinal changing multiple times
2735    /// before the start of data output from a stream (any stream - the first
2736    /// stream or a subsequent stream).  This allows a stream processor to
2737    /// request that output buffers and output format be configured
2738    /// speculatively, and for the output config to be optionally adjusted by
2739    /// the server before the first data output from a stream after the server
2740    /// knows everything it needs to know to fully establish the initial output
2741    /// format details.  This simplifies stream processor server implementation,
2742    /// and allows a clever stream processor server to guess it's output config
2743    /// for lower latency before any input data, while still being able to fix
2744    /// the output config (including format details) if the guess turns out to
2745    /// be wrong.
2746    ///
2747    /// Whether the format_details.format_details_version_ordinal will actually
2748    /// change mid-stream is a per-stream-processor and per-stream detail that
2749    /// is not specified in comments here, and in most cases also depends on
2750    /// whether the format changes on the input to the stream processor.
2751    /// Probably it'll be fairly common for a client to use a format which
2752    /// technically supports mid-stream format change, but the client happens to
2753    /// know that none of the streams the client intends to process will ever
2754    /// have a mid-stream format change.
2755    pub format_details: Option<FormatDetails>,
2756    #[doc(hidden)]
2757    pub __source_breaking: fidl::marker::SourceBreaking,
2758}
2759
2760impl fidl::Persistable for StreamOutputFormat {}
2761
2762/// A state of audio usages in which a policy decision has been made to temporarily
2763/// lower the volume of all streams with this usage.
2764#[derive(Clone, Debug, Default, PartialEq)]
2765pub struct UsageStateDucked {
2766    #[doc(hidden)]
2767    pub __source_breaking: fidl::marker::SourceBreaking,
2768}
2769
2770impl fidl::Persistable for UsageStateDucked {}
2771
2772/// A state of audio usages in which a policy decision has been made to temporarily
2773/// mute the volume of all streams with this usage.
2774#[derive(Clone, Debug, Default, PartialEq)]
2775pub struct UsageStateMuted {
2776    #[doc(hidden)]
2777    pub __source_breaking: fidl::marker::SourceBreaking,
2778}
2779
2780impl fidl::Persistable for UsageStateMuted {}
2781
2782/// A state of audio usages in which no policy actions are taken on any streams with the usage.
2783#[derive(Clone, Debug, Default, PartialEq)]
2784pub struct UsageStateUnadjusted {
2785    #[doc(hidden)]
2786    pub __source_breaking: fidl::marker::SourceBreaking,
2787}
2788
2789impl fidl::Persistable for UsageStateUnadjusted {}
2790
2791#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2792pub enum AacBitRate {
2793    Constant(AacConstantBitRate),
2794    Variable(AacVariableBitRate),
2795}
2796
2797impl AacBitRate {
2798    #[inline]
2799    pub fn ordinal(&self) -> u64 {
2800        match *self {
2801            Self::Constant(_) => 1,
2802            Self::Variable(_) => 2,
2803        }
2804    }
2805}
2806
2807impl fidl::Persistable for AacBitRate {}
2808
2809#[derive(Clone, Debug)]
2810pub enum AacTransport {
2811    Raw(AacTransportRaw),
2812    Latm(AacTransportLatm),
2813    Adts(AacTransportAdts),
2814    #[doc(hidden)]
2815    __SourceBreaking {
2816        unknown_ordinal: u64,
2817    },
2818}
2819
2820/// Pattern that matches an unknown `AacTransport` member.
2821#[macro_export]
2822macro_rules! AacTransportUnknown {
2823    () => {
2824        _
2825    };
2826}
2827
2828// Custom PartialEq so that unknown variants are not equal to themselves.
2829impl PartialEq for AacTransport {
2830    fn eq(&self, other: &Self) -> bool {
2831        match (self, other) {
2832            (Self::Raw(x), Self::Raw(y)) => *x == *y,
2833            (Self::Latm(x), Self::Latm(y)) => *x == *y,
2834            (Self::Adts(x), Self::Adts(y)) => *x == *y,
2835            _ => false,
2836        }
2837    }
2838}
2839
2840impl AacTransport {
2841    #[inline]
2842    pub fn ordinal(&self) -> u64 {
2843        match *self {
2844            Self::Raw(_) => 1,
2845            Self::Latm(_) => 2,
2846            Self::Adts(_) => 3,
2847            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2848        }
2849    }
2850
2851    #[inline]
2852    pub fn unknown_variant_for_testing() -> Self {
2853        Self::__SourceBreaking { unknown_ordinal: 0 }
2854    }
2855
2856    #[inline]
2857    pub fn is_unknown(&self) -> bool {
2858        match self {
2859            Self::__SourceBreaking { .. } => true,
2860            _ => false,
2861        }
2862    }
2863}
2864
2865impl fidl::Persistable for AacTransport {}
2866
2867/// Configuration for an audio Capturer.
2868#[derive(Clone, Debug, PartialEq)]
2869pub enum AudioCapturerConfiguration {
2870    Loopback(LoopbackAudioCapturerConfiguration),
2871    Input(InputAudioCapturerConfiguration),
2872}
2873
2874impl AudioCapturerConfiguration {
2875    #[inline]
2876    pub fn ordinal(&self) -> u64 {
2877        match *self {
2878            Self::Loopback(_) => 1,
2879            Self::Input(_) => 2,
2880        }
2881    }
2882}
2883
2884impl fidl::Persistable for AudioCapturerConfiguration {}
2885
2886#[derive(Clone, Debug)]
2887pub enum AudioCompressedFormat {
2888    Aac(AudioCompressedFormatAac),
2889    Sbc(AudioCompressedFormatSbc),
2890    Cvsd(AudioCompressedFormatCvsd),
2891    Lc3(AudioCompressedFormatLc3),
2892    #[doc(hidden)]
2893    __SourceBreaking {
2894        unknown_ordinal: u64,
2895    },
2896}
2897
2898/// Pattern that matches an unknown `AudioCompressedFormat` member.
2899#[macro_export]
2900macro_rules! AudioCompressedFormatUnknown {
2901    () => {
2902        _
2903    };
2904}
2905
2906// Custom PartialEq so that unknown variants are not equal to themselves.
2907impl PartialEq for AudioCompressedFormat {
2908    fn eq(&self, other: &Self) -> bool {
2909        match (self, other) {
2910            (Self::Aac(x), Self::Aac(y)) => *x == *y,
2911            (Self::Sbc(x), Self::Sbc(y)) => *x == *y,
2912            (Self::Cvsd(x), Self::Cvsd(y)) => *x == *y,
2913            (Self::Lc3(x), Self::Lc3(y)) => *x == *y,
2914            _ => false,
2915        }
2916    }
2917}
2918
2919impl AudioCompressedFormat {
2920    #[inline]
2921    pub fn ordinal(&self) -> u64 {
2922        match *self {
2923            Self::Aac(_) => 1,
2924            Self::Sbc(_) => 2,
2925            Self::Cvsd(_) => 3,
2926            Self::Lc3(_) => 4,
2927            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
2928        }
2929    }
2930
2931    #[inline]
2932    pub fn unknown_variant_for_testing() -> Self {
2933        Self::__SourceBreaking { unknown_ordinal: 0 }
2934    }
2935
2936    #[inline]
2937    pub fn is_unknown(&self) -> bool {
2938        match self {
2939            Self::__SourceBreaking { .. } => true,
2940            _ => false,
2941        }
2942    }
2943}
2944
2945impl fidl::Persistable for AudioCompressedFormat {}
2946
2947/// Represents a `AudioConsumer` error condition.
2948#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2949pub enum AudioConsumerError {
2950    PlaceHolder(Void),
2951}
2952
2953impl AudioConsumerError {
2954    #[inline]
2955    pub fn ordinal(&self) -> u64 {
2956        match *self {
2957            Self::PlaceHolder(_) => 1,
2958        }
2959    }
2960}
2961
2962impl fidl::Persistable for AudioConsumerError {}
2963
2964/// AudioFormat
2965#[derive(Clone, Debug, PartialEq)]
2966pub enum AudioFormat {
2967    Compressed(AudioCompressedFormat),
2968    Uncompressed(AudioUncompressedFormat),
2969}
2970
2971impl AudioFormat {
2972    #[inline]
2973    pub fn ordinal(&self) -> u64 {
2974        match *self {
2975            Self::Compressed(_) => 1,
2976            Self::Uncompressed(_) => 2,
2977        }
2978    }
2979}
2980
2981impl fidl::Persistable for AudioFormat {}
2982
2983/// AudioUncompressedFormat
2984#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
2985pub enum AudioUncompressedFormat {
2986    Pcm(PcmFormat),
2987}
2988
2989impl AudioUncompressedFormat {
2990    #[inline]
2991    pub fn ordinal(&self) -> u64 {
2992        match *self {
2993            Self::Pcm(_) => 1,
2994        }
2995    }
2996}
2997
2998impl fidl::Persistable for AudioUncompressedFormat {}
2999
3000/// CryptoFormat
3001///
3002/// Crypto (encrypted or decrypted) format details.
3003#[derive(Clone, Debug)]
3004pub enum CryptoFormat {
3005    Encrypted(EncryptedFormat),
3006    Decrypted(DecryptedFormat),
3007    #[doc(hidden)]
3008    __SourceBreaking {
3009        unknown_ordinal: u64,
3010    },
3011}
3012
3013/// Pattern that matches an unknown `CryptoFormat` member.
3014#[macro_export]
3015macro_rules! CryptoFormatUnknown {
3016    () => {
3017        _
3018    };
3019}
3020
3021// Custom PartialEq so that unknown variants are not equal to themselves.
3022impl PartialEq for CryptoFormat {
3023    fn eq(&self, other: &Self) -> bool {
3024        match (self, other) {
3025            (Self::Encrypted(x), Self::Encrypted(y)) => *x == *y,
3026            (Self::Decrypted(x), Self::Decrypted(y)) => *x == *y,
3027            _ => false,
3028        }
3029    }
3030}
3031
3032impl CryptoFormat {
3033    #[inline]
3034    pub fn ordinal(&self) -> u64 {
3035        match *self {
3036            Self::Encrypted(_) => 1,
3037            Self::Decrypted(_) => 2,
3038            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3039        }
3040    }
3041
3042    #[inline]
3043    pub fn unknown_variant_for_testing() -> Self {
3044        Self::__SourceBreaking { unknown_ordinal: 0 }
3045    }
3046
3047    #[inline]
3048    pub fn is_unknown(&self) -> bool {
3049        match self {
3050            Self::__SourceBreaking { .. } => true,
3051            _ => false,
3052        }
3053    }
3054}
3055
3056impl fidl::Persistable for CryptoFormat {}
3057
3058/// DomainFormat
3059#[derive(Clone, Debug, PartialEq)]
3060pub enum DomainFormat {
3061    Audio(AudioFormat),
3062    Video(VideoFormat),
3063    Crypto(CryptoFormat),
3064}
3065
3066impl DomainFormat {
3067    #[inline]
3068    pub fn ordinal(&self) -> u64 {
3069        match *self {
3070            Self::Audio(_) => 1,
3071            Self::Video(_) => 2,
3072            Self::Crypto(_) => 3,
3073        }
3074    }
3075}
3076
3077impl fidl::Persistable for DomainFormat {}
3078
3079/// Settings for encoders that tell them how to encode raw
3080/// formats.
3081#[derive(Clone, Debug)]
3082pub enum EncoderSettings {
3083    Sbc(SbcEncoderSettings),
3084    Aac(AacEncoderSettings),
3085    H264(H264EncoderSettings),
3086    Hevc(HevcEncoderSettings),
3087    Cvsd(CvsdEncoderSettings),
3088    Lc3(Lc3EncoderSettings),
3089    Msbc(MSbcEncoderSettings),
3090    #[doc(hidden)]
3091    __SourceBreaking {
3092        unknown_ordinal: u64,
3093    },
3094}
3095
3096/// Pattern that matches an unknown `EncoderSettings` member.
3097#[macro_export]
3098macro_rules! EncoderSettingsUnknown {
3099    () => {
3100        _
3101    };
3102}
3103
3104// Custom PartialEq so that unknown variants are not equal to themselves.
3105impl PartialEq for EncoderSettings {
3106    fn eq(&self, other: &Self) -> bool {
3107        match (self, other) {
3108            (Self::Sbc(x), Self::Sbc(y)) => *x == *y,
3109            (Self::Aac(x), Self::Aac(y)) => *x == *y,
3110            (Self::H264(x), Self::H264(y)) => *x == *y,
3111            (Self::Hevc(x), Self::Hevc(y)) => *x == *y,
3112            (Self::Cvsd(x), Self::Cvsd(y)) => *x == *y,
3113            (Self::Lc3(x), Self::Lc3(y)) => *x == *y,
3114            (Self::Msbc(x), Self::Msbc(y)) => *x == *y,
3115            _ => false,
3116        }
3117    }
3118}
3119
3120impl EncoderSettings {
3121    #[inline]
3122    pub fn ordinal(&self) -> u64 {
3123        match *self {
3124            Self::Sbc(_) => 1,
3125            Self::Aac(_) => 2,
3126            Self::H264(_) => 3,
3127            Self::Hevc(_) => 4,
3128            Self::Cvsd(_) => 5,
3129            Self::Lc3(_) => 6,
3130            Self::Msbc(_) => 7,
3131            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3132        }
3133    }
3134
3135    #[inline]
3136    pub fn unknown_variant_for_testing() -> Self {
3137        Self::__SourceBreaking { unknown_ordinal: 0 }
3138    }
3139
3140    #[inline]
3141    pub fn is_unknown(&self) -> bool {
3142        match self {
3143            Self::__SourceBreaking { .. } => true,
3144            _ => false,
3145        }
3146    }
3147}
3148
3149impl fidl::Persistable for EncoderSettings {}
3150
3151/// A union of all medium-specific stream type structs.
3152#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3153pub enum MediumSpecificStreamType {
3154    Audio(AudioStreamType),
3155    Video(VideoStreamType),
3156    Text(TextStreamType),
3157    Subpicture(SubpictureStreamType),
3158}
3159
3160impl MediumSpecificStreamType {
3161    #[inline]
3162    pub fn ordinal(&self) -> u64 {
3163        match *self {
3164            Self::Audio(_) => 1,
3165            Self::Video(_) => 2,
3166            Self::Text(_) => 3,
3167            Self::Subpicture(_) => 4,
3168        }
3169    }
3170}
3171
3172impl fidl::Persistable for MediumSpecificStreamType {}
3173
3174#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3175pub enum Usage {
3176    RenderUsage(AudioRenderUsage),
3177    CaptureUsage(AudioCaptureUsage),
3178}
3179
3180impl Usage {
3181    #[inline]
3182    pub fn ordinal(&self) -> u64 {
3183        match *self {
3184            Self::RenderUsage(_) => 1,
3185            Self::CaptureUsage(_) => 2,
3186        }
3187    }
3188}
3189
3190impl fidl::Persistable for Usage {}
3191
3192#[derive(Clone, Debug)]
3193pub enum Usage2 {
3194    RenderUsage(AudioRenderUsage2),
3195    CaptureUsage(AudioCaptureUsage2),
3196    #[doc(hidden)]
3197    __SourceBreaking {
3198        unknown_ordinal: u64,
3199    },
3200}
3201
3202/// Pattern that matches an unknown `Usage2` member.
3203#[macro_export]
3204macro_rules! Usage2Unknown {
3205    () => {
3206        _
3207    };
3208}
3209
3210// Custom PartialEq so that unknown variants are not equal to themselves.
3211impl PartialEq for Usage2 {
3212    fn eq(&self, other: &Self) -> bool {
3213        match (self, other) {
3214            (Self::RenderUsage(x), Self::RenderUsage(y)) => *x == *y,
3215            (Self::CaptureUsage(x), Self::CaptureUsage(y)) => *x == *y,
3216            _ => false,
3217        }
3218    }
3219}
3220
3221impl Usage2 {
3222    #[inline]
3223    pub fn ordinal(&self) -> u64 {
3224        match *self {
3225            Self::RenderUsage(_) => 1,
3226            Self::CaptureUsage(_) => 2,
3227            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3228        }
3229    }
3230
3231    #[inline]
3232    pub fn unknown_variant_for_testing() -> Self {
3233        Self::__SourceBreaking { unknown_ordinal: 0 }
3234    }
3235
3236    #[inline]
3237    pub fn is_unknown(&self) -> bool {
3238        match self {
3239            Self::__SourceBreaking { .. } => true,
3240            _ => false,
3241        }
3242    }
3243}
3244
3245impl fidl::Persistable for Usage2 {}
3246
3247/// The state of audio policy enforcement on a stream or set of streams.
3248#[derive(Clone, Debug)]
3249pub enum UsageState {
3250    Unadjusted(UsageStateUnadjusted),
3251    Ducked(UsageStateDucked),
3252    Muted(UsageStateMuted),
3253    #[doc(hidden)]
3254    __SourceBreaking {
3255        unknown_ordinal: u64,
3256    },
3257}
3258
3259/// Pattern that matches an unknown `UsageState` member.
3260#[macro_export]
3261macro_rules! UsageStateUnknown {
3262    () => {
3263        _
3264    };
3265}
3266
3267// Custom PartialEq so that unknown variants are not equal to themselves.
3268impl PartialEq for UsageState {
3269    fn eq(&self, other: &Self) -> bool {
3270        match (self, other) {
3271            (Self::Unadjusted(x), Self::Unadjusted(y)) => *x == *y,
3272            (Self::Ducked(x), Self::Ducked(y)) => *x == *y,
3273            (Self::Muted(x), Self::Muted(y)) => *x == *y,
3274            _ => false,
3275        }
3276    }
3277}
3278
3279impl UsageState {
3280    #[inline]
3281    pub fn ordinal(&self) -> u64 {
3282        match *self {
3283            Self::Unadjusted(_) => 1,
3284            Self::Ducked(_) => 2,
3285            Self::Muted(_) => 3,
3286            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
3287        }
3288    }
3289
3290    #[inline]
3291    pub fn unknown_variant_for_testing() -> Self {
3292        Self::__SourceBreaking { unknown_ordinal: 0 }
3293    }
3294
3295    #[inline]
3296    pub fn is_unknown(&self) -> bool {
3297        match self {
3298            Self::__SourceBreaking { .. } => true,
3299            _ => false,
3300        }
3301    }
3302}
3303
3304impl fidl::Persistable for UsageState {}
3305
3306/// Value
3307///
3308/// Generic "value" for use within generic "Parameter" struct.
3309#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3310pub enum Value {
3311    BoolValue(bool),
3312    Uint64Value(u64),
3313    Int64Value(i64),
3314    StringValue(String),
3315    BytesValue(Vec<u8>),
3316}
3317
3318impl Value {
3319    #[inline]
3320    pub fn ordinal(&self) -> u64 {
3321        match *self {
3322            Self::BoolValue(_) => 1,
3323            Self::Uint64Value(_) => 2,
3324            Self::Int64Value(_) => 3,
3325            Self::StringValue(_) => 4,
3326            Self::BytesValue(_) => 5,
3327        }
3328    }
3329}
3330
3331impl fidl::Persistable for Value {}
3332
3333/// VideoCompressedFormat
3334///
3335/// Compressed video format details.
3336#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
3337pub enum VideoCompressedFormat {
3338    TempFieldTodoRemove(u32),
3339}
3340
3341impl VideoCompressedFormat {
3342    #[inline]
3343    pub fn ordinal(&self) -> u64 {
3344        match *self {
3345            Self::TempFieldTodoRemove(_) => 1,
3346        }
3347    }
3348}
3349
3350impl fidl::Persistable for VideoCompressedFormat {}
3351
3352/// VideoFormat
3353///
3354/// Video (compress or uncompressed) format details.  In this context,
3355/// "uncompressed" can include block-based image compression formats that still
3356/// permit fairly fast random access to image data.
3357#[derive(Clone, Debug, PartialEq)]
3358pub enum VideoFormat {
3359    Compressed(VideoCompressedFormat),
3360    Uncompressed(VideoUncompressedFormat),
3361}
3362
3363impl VideoFormat {
3364    #[inline]
3365    pub fn ordinal(&self) -> u64 {
3366        match *self {
3367            Self::Compressed(_) => 1,
3368            Self::Uncompressed(_) => 2,
3369        }
3370    }
3371}
3372
3373impl fidl::Persistable for VideoFormat {}
3374
3375pub mod activity_reporter_ordinals {
3376    pub const WATCH_RENDER_ACTIVITY: u64 = 0x2974e9f5880b2f1f;
3377    pub const WATCH_RENDER_ACTIVITY2: u64 = 0x484236fc11b363e6;
3378    pub const WATCH_CAPTURE_ACTIVITY: u64 = 0x70e7038e9658e128;
3379    pub const WATCH_CAPTURE_ACTIVITY2: u64 = 0x3d137e0364f9d550;
3380}
3381
3382pub mod audio_ordinals {
3383    pub const CREATE_AUDIO_RENDERER: u64 = 0x572f413566fd58f1;
3384    pub const CREATE_AUDIO_CAPTURER: u64 = 0x44660fc63a6202f;
3385}
3386
3387pub mod audio_capturer_ordinals {
3388    pub const ADD_PAYLOAD_BUFFER: u64 = 0x3b3a37fc34fe5b56;
3389    pub const REMOVE_PAYLOAD_BUFFER: u64 = 0x5d1e4f74c3658262;
3390    pub const ON_PACKET_PRODUCED: u64 = 0x6bbe69746a3c8bd9;
3391    pub const ON_END_OF_STREAM: u64 = 0x550e69b41d03e2c2;
3392    pub const RELEASE_PACKET: u64 = 0x7a7b57f0f7d9e4bb;
3393    pub const DISCARD_ALL_PACKETS: u64 = 0x27afd605e97b09d2;
3394    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x35f9d721e905b831;
3395    pub const SET_PCM_STREAM_TYPE: u64 = 0x1531ea9ea2c852cd;
3396    pub const CAPTURE_AT: u64 = 0x784e25df72cea780;
3397    pub const START_ASYNC_CAPTURE: u64 = 0x7768adbb1ccfd7a6;
3398    pub const STOP_ASYNC_CAPTURE: u64 = 0x5bfc8790a8cef8cb;
3399    pub const STOP_ASYNC_CAPTURE_NO_REPLY: u64 = 0x33223cb2962c95e3;
3400    pub const BIND_GAIN_CONTROL: u64 = 0x658a6a17ddb3a8e0;
3401    pub const GET_REFERENCE_CLOCK: u64 = 0x50d037aa5a4b4d71;
3402    pub const SET_REFERENCE_CLOCK: u64 = 0x732b2c496d521bcf;
3403    pub const SET_USAGE: u64 = 0x42a16f392bd21b25;
3404    pub const SET_USAGE2: u64 = 0x7a73e251b8d2382b;
3405    pub const GET_STREAM_TYPE: u64 = 0x5dcaaa670b433088;
3406}
3407
3408pub mod audio_consumer_ordinals {
3409    pub const CREATE_STREAM_SINK: u64 = 0x525b3b97fdf7d884;
3410    pub const ON_END_OF_STREAM: u64 = 0x53a64e6d0e8f8a20;
3411    pub const START: u64 = 0x4fdbd44b3f2a3a3c;
3412    pub const STOP: u64 = 0x3d46c3741686c40d;
3413    pub const SET_RATE: u64 = 0x45342b73968bfafe;
3414    pub const BIND_VOLUME_CONTROL: u64 = 0x6f1b01fd887f5748;
3415    pub const WATCH_STATUS: u64 = 0x35cf702c721e2cc6;
3416}
3417
3418pub mod audio_core_ordinals {
3419    pub const CREATE_AUDIO_RENDERER: u64 = 0x2ac9beba47f83435;
3420    pub const CREATE_AUDIO_CAPTURER_WITH_CONFIGURATION: u64 = 0x459de383b0d76d97;
3421    pub const CREATE_AUDIO_CAPTURER: u64 = 0x787db169df99aed0;
3422    pub const SET_RENDER_USAGE_GAIN: u64 = 0x48097f45f6e2b8e7;
3423    pub const SET_RENDER_USAGE_GAIN2: u64 = 0x779b1531dc9e64f4;
3424    pub const SET_CAPTURE_USAGE_GAIN: u64 = 0x457d29217d4ea248;
3425    pub const SET_CAPTURE_USAGE_GAIN2: u64 = 0x15065ee308f44af0;
3426    pub const BIND_USAGE_VOLUME_CONTROL: u64 = 0x7225be116aadc137;
3427    pub const BIND_USAGE_VOLUME_CONTROL2: u64 = 0x729dff93019d055;
3428    pub const GET_VOLUME_FROM_DB: u64 = 0x50e3ca45509770bf;
3429    pub const GET_VOLUME_FROM_DB2: u64 = 0x165c811091ef99da;
3430    pub const GET_DB_FROM_VOLUME: u64 = 0x3e8eec27dd5a8bda;
3431    pub const GET_DB_FROM_VOLUME2: u64 = 0x5f421a8ebf265bf3;
3432    pub const SET_INTERACTION: u64 = 0x7bfed14345ece7b7;
3433    pub const SET_INTERACTION2: u64 = 0x7226c7c6e6edc62f;
3434    pub const RESET_INTERACTIONS: u64 = 0x65bd94d9d0a28b5e;
3435    pub const LOAD_DEFAULTS: u64 = 0x54a0bebca85f6b31;
3436}
3437
3438pub mod audio_device_enumerator_ordinals {
3439    pub const GET_DEVICES: u64 = 0x4ce1aa218aeb12a6;
3440    pub const ON_DEVICE_ADDED: u64 = 0xe0fbe40057c4b44;
3441    pub const ON_DEVICE_REMOVED: u64 = 0x6f3b7574463d9ff8;
3442    pub const ON_DEVICE_GAIN_CHANGED: u64 = 0x14aefcbbb076b0e9;
3443    pub const ON_DEFAULT_DEVICE_CHANGED: u64 = 0x16357b42d4c16e11;
3444    pub const GET_DEVICE_GAIN: u64 = 0x25dd4723403c414b;
3445    pub const SET_DEVICE_GAIN: u64 = 0x5bdabc8ebe83591;
3446    pub const ADD_DEVICE_BY_CHANNEL: u64 = 0x72cdbada4d70ed67;
3447}
3448
3449pub mod audio_renderer_ordinals {
3450    pub const ADD_PAYLOAD_BUFFER: u64 = 0x3b3a37fc34fe5b56;
3451    pub const REMOVE_PAYLOAD_BUFFER: u64 = 0x5d1e4f74c3658262;
3452    pub const SEND_PACKET: u64 = 0x67cddd607442775f;
3453    pub const SEND_PACKET_NO_REPLY: u64 = 0x8d9b8b413ceba9d;
3454    pub const END_OF_STREAM: u64 = 0x6180fd6f7e793b71;
3455    pub const DISCARD_ALL_PACKETS: u64 = 0x6f4dad7af2917665;
3456    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x50d36d0d23081bc4;
3457    pub const BIND_GAIN_CONTROL: u64 = 0x293f5c7f8fba2bdc;
3458    pub const SET_PTS_UNITS: u64 = 0xf68cd108785a27c;
3459    pub const SET_PTS_CONTINUITY_THRESHOLD: u64 = 0x2849ba571d1971ba;
3460    pub const GET_REFERENCE_CLOCK: u64 = 0x2f7a7f011a172f7e;
3461    pub const SET_REFERENCE_CLOCK: u64 = 0x39acd05d832b5fed;
3462    pub const SET_USAGE: u64 = 0x3994bd23b55a733e;
3463    pub const SET_USAGE2: u64 = 0x2904035c7132b103;
3464    pub const SET_PCM_STREAM_TYPE: u64 = 0x27aa715d8901fa19;
3465    pub const ENABLE_MIN_LEAD_TIME_EVENTS: u64 = 0x62808dfad72bf890;
3466    pub const ON_MIN_LEAD_TIME_CHANGED: u64 = 0x4feff7d278978c4e;
3467    pub const GET_MIN_LEAD_TIME: u64 = 0x1cf3c3ecd8fec26b;
3468    pub const PLAY: u64 = 0x3c0162db084f74a3;
3469    pub const PLAY_NO_REPLY: u64 = 0x1b7fe832b68c22ef;
3470    pub const PAUSE: u64 = 0x41d557588d93d153;
3471    pub const PAUSE_NO_REPLY: u64 = 0x24cc45d4f3855ab;
3472}
3473
3474pub mod profile_provider_ordinals {
3475    pub const REGISTER_HANDLER_WITH_CAPACITY: u64 = 0x60459ecef7458176;
3476    pub const UNREGISTER_HANDLER: u64 = 0x724d9d5fd8ef544c;
3477    pub const REGISTER_MEMORY_RANGE: u64 = 0x2f509d3523e9562d;
3478    pub const UNREGISTER_MEMORY_RANGE: u64 = 0x2dc313d6aa81ad27;
3479}
3480
3481pub mod session_audio_consumer_factory_ordinals {
3482    pub const CREATE_AUDIO_CONSUMER: u64 = 0x6fab96f988e7d7fb;
3483}
3484
3485pub mod simple_stream_sink_ordinals {
3486    pub const ADD_PAYLOAD_BUFFER: u64 = 0x3b3a37fc34fe5b56;
3487    pub const REMOVE_PAYLOAD_BUFFER: u64 = 0x5d1e4f74c3658262;
3488    pub const SEND_PACKET: u64 = 0x67cddd607442775f;
3489    pub const SEND_PACKET_NO_REPLY: u64 = 0x8d9b8b413ceba9d;
3490    pub const END_OF_STREAM: u64 = 0x6180fd6f7e793b71;
3491    pub const DISCARD_ALL_PACKETS: u64 = 0x6f4dad7af2917665;
3492    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x50d36d0d23081bc4;
3493}
3494
3495pub mod stream_buffer_set_ordinals {
3496    pub const ADD_PAYLOAD_BUFFER: u64 = 0x3b3a37fc34fe5b56;
3497    pub const REMOVE_PAYLOAD_BUFFER: u64 = 0x5d1e4f74c3658262;
3498}
3499
3500pub mod stream_processor_ordinals {
3501    pub const ENABLE_ON_STREAM_FAILED: u64 = 0x3940929617dbf02b;
3502    pub const ON_STREAM_FAILED: u64 = 0x77ccf70bb061cf8e;
3503    pub const ON_INPUT_CONSTRAINTS: u64 = 0x211da9966a8ca0;
3504    pub const SET_INPUT_BUFFER_PARTIAL_SETTINGS: u64 = 0xb02e0663a40e4c4;
3505    pub const ON_OUTPUT_CONSTRAINTS: u64 = 0x40d8234504c170f3;
3506    pub const ON_OUTPUT_FORMAT: u64 = 0x131b77ae120360bc;
3507    pub const SET_OUTPUT_BUFFER_PARTIAL_SETTINGS: u64 = 0x118bb8c819a7bbbb;
3508    pub const COMPLETE_OUTPUT_BUFFER_PARTIAL_SETTINGS: u64 = 0x50529e5c680ae3ab;
3509    pub const FLUSH_END_OF_STREAM_AND_CLOSE_STREAM: u64 = 0x2b62c3e26d0667e6;
3510    pub const CLOSE_CURRENT_STREAM: u64 = 0x1d8a67522170ca07;
3511    pub const SYNC: u64 = 0x4b3e44300b0ec6aa;
3512    pub const ON_OUTPUT_PACKET: u64 = 0x5c2029be1090ce93;
3513    pub const RECYCLE_OUTPUT_PACKET: u64 = 0x32763632b94e0bd5;
3514    pub const ON_OUTPUT_END_OF_STREAM: u64 = 0x3bb65d237cfa50e6;
3515    pub const QUEUE_INPUT_FORMAT_DETAILS: u64 = 0x170dc0979d52231;
3516    pub const QUEUE_INPUT_PACKET: u64 = 0x47173d2652d9df3b;
3517    pub const ON_FREE_INPUT_PACKET: u64 = 0xeef799b28708bbd;
3518    pub const QUEUE_INPUT_END_OF_STREAM: u64 = 0x2051b6ad00f20b37;
3519}
3520
3521pub mod stream_sink_ordinals {
3522    pub const SEND_PACKET: u64 = 0x67cddd607442775f;
3523    pub const SEND_PACKET_NO_REPLY: u64 = 0x8d9b8b413ceba9d;
3524    pub const END_OF_STREAM: u64 = 0x6180fd6f7e793b71;
3525    pub const DISCARD_ALL_PACKETS: u64 = 0x6f4dad7af2917665;
3526    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x50d36d0d23081bc4;
3527}
3528
3529pub mod stream_source_ordinals {
3530    pub const ON_PACKET_PRODUCED: u64 = 0x6bbe69746a3c8bd9;
3531    pub const ON_END_OF_STREAM: u64 = 0x550e69b41d03e2c2;
3532    pub const RELEASE_PACKET: u64 = 0x7a7b57f0f7d9e4bb;
3533    pub const DISCARD_ALL_PACKETS: u64 = 0x27afd605e97b09d2;
3534    pub const DISCARD_ALL_PACKETS_NO_REPLY: u64 = 0x35f9d721e905b831;
3535}
3536
3537pub mod usage2_audio_consumer_factory_ordinals {
3538    pub const CREATE_AUDIO_CONSUMER: u64 = 0x767722302a171873;
3539}
3540
3541pub mod usage_audio_consumer_factory_ordinals {
3542    pub const CREATE_AUDIO_CONSUMER: u64 = 0x4d975ca9b8f625a3;
3543}
3544
3545pub mod usage_gain_listener_ordinals {
3546    pub const ON_GAIN_MUTE_CHANGED: u64 = 0x681570258eac3a8d;
3547}
3548
3549pub mod usage_gain_reporter_ordinals {
3550    pub const REGISTER_LISTENER: u64 = 0x767107c168c226af;
3551    pub const REGISTER_LISTENER2: u64 = 0x760a8e1c5873629c;
3552}
3553
3554pub mod usage_reporter_ordinals {
3555    pub const WATCH: u64 = 0x769e6fb17075c959;
3556    pub const WATCH2: u64 = 0x4a43c4c82f5d8ce8;
3557}
3558
3559pub mod usage_watcher_ordinals {
3560    pub const ON_STATE_CHANGED: u64 = 0x5b955c5768ec75c5;
3561}
3562
3563pub mod usage_watcher2_ordinals {
3564    pub const ON_STATE_CHANGED: u64 = 0xca31a8b13c324d4;
3565}
3566
3567mod internal {
3568    use super::*;
3569    unsafe impl fidl::encoding::TypeMarker for AudioConsumerStartFlags {
3570        type Owned = Self;
3571
3572        #[inline(always)]
3573        fn inline_align(_context: fidl::encoding::Context) -> usize {
3574            4
3575        }
3576
3577        #[inline(always)]
3578        fn inline_size(_context: fidl::encoding::Context) -> usize {
3579            4
3580        }
3581    }
3582
3583    impl fidl::encoding::ValueTypeMarker for AudioConsumerStartFlags {
3584        type Borrowed<'a> = Self;
3585        #[inline(always)]
3586        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3587            *value
3588        }
3589    }
3590
3591    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3592        for AudioConsumerStartFlags
3593    {
3594        #[inline]
3595        unsafe fn encode(
3596            self,
3597            encoder: &mut fidl::encoding::Encoder<'_, D>,
3598            offset: usize,
3599            _depth: fidl::encoding::Depth,
3600        ) -> fidl::Result<()> {
3601            encoder.debug_check_bounds::<Self>(offset);
3602            if self.bits() & Self::all().bits() != self.bits() {
3603                return Err(fidl::Error::InvalidBitsValue);
3604            }
3605            encoder.write_num(self.bits(), offset);
3606            Ok(())
3607        }
3608    }
3609
3610    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3611        for AudioConsumerStartFlags
3612    {
3613        #[inline(always)]
3614        fn new_empty() -> Self {
3615            Self::empty()
3616        }
3617
3618        #[inline]
3619        unsafe fn decode(
3620            &mut self,
3621            decoder: &mut fidl::encoding::Decoder<'_, D>,
3622            offset: usize,
3623            _depth: fidl::encoding::Depth,
3624        ) -> fidl::Result<()> {
3625            decoder.debug_check_bounds::<Self>(offset);
3626            let prim = decoder.read_num::<u32>(offset);
3627            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
3628            Ok(())
3629        }
3630    }
3631    unsafe impl fidl::encoding::TypeMarker for AudioGainInfoFlags {
3632        type Owned = Self;
3633
3634        #[inline(always)]
3635        fn inline_align(_context: fidl::encoding::Context) -> usize {
3636            4
3637        }
3638
3639        #[inline(always)]
3640        fn inline_size(_context: fidl::encoding::Context) -> usize {
3641            4
3642        }
3643    }
3644
3645    impl fidl::encoding::ValueTypeMarker for AudioGainInfoFlags {
3646        type Borrowed<'a> = Self;
3647        #[inline(always)]
3648        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3649            *value
3650        }
3651    }
3652
3653    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3654        for AudioGainInfoFlags
3655    {
3656        #[inline]
3657        unsafe fn encode(
3658            self,
3659            encoder: &mut fidl::encoding::Encoder<'_, D>,
3660            offset: usize,
3661            _depth: fidl::encoding::Depth,
3662        ) -> fidl::Result<()> {
3663            encoder.debug_check_bounds::<Self>(offset);
3664            if self.bits() & Self::all().bits() != self.bits() {
3665                return Err(fidl::Error::InvalidBitsValue);
3666            }
3667            encoder.write_num(self.bits(), offset);
3668            Ok(())
3669        }
3670    }
3671
3672    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioGainInfoFlags {
3673        #[inline(always)]
3674        fn new_empty() -> Self {
3675            Self::empty()
3676        }
3677
3678        #[inline]
3679        unsafe fn decode(
3680            &mut self,
3681            decoder: &mut fidl::encoding::Decoder<'_, D>,
3682            offset: usize,
3683            _depth: fidl::encoding::Depth,
3684        ) -> fidl::Result<()> {
3685            decoder.debug_check_bounds::<Self>(offset);
3686            let prim = decoder.read_num::<u32>(offset);
3687            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
3688            Ok(())
3689        }
3690    }
3691    unsafe impl fidl::encoding::TypeMarker for AudioGainValidFlags {
3692        type Owned = Self;
3693
3694        #[inline(always)]
3695        fn inline_align(_context: fidl::encoding::Context) -> usize {
3696            4
3697        }
3698
3699        #[inline(always)]
3700        fn inline_size(_context: fidl::encoding::Context) -> usize {
3701            4
3702        }
3703    }
3704
3705    impl fidl::encoding::ValueTypeMarker for AudioGainValidFlags {
3706        type Borrowed<'a> = Self;
3707        #[inline(always)]
3708        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3709            *value
3710        }
3711    }
3712
3713    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3714        for AudioGainValidFlags
3715    {
3716        #[inline]
3717        unsafe fn encode(
3718            self,
3719            encoder: &mut fidl::encoding::Encoder<'_, D>,
3720            offset: usize,
3721            _depth: fidl::encoding::Depth,
3722        ) -> fidl::Result<()> {
3723            encoder.debug_check_bounds::<Self>(offset);
3724            if self.bits() & Self::all().bits() != self.bits() {
3725                return Err(fidl::Error::InvalidBitsValue);
3726            }
3727            encoder.write_num(self.bits(), offset);
3728            Ok(())
3729        }
3730    }
3731
3732    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioGainValidFlags {
3733        #[inline(always)]
3734        fn new_empty() -> Self {
3735            Self::empty()
3736        }
3737
3738        #[inline]
3739        unsafe fn decode(
3740            &mut self,
3741            decoder: &mut fidl::encoding::Decoder<'_, D>,
3742            offset: usize,
3743            _depth: fidl::encoding::Depth,
3744        ) -> fidl::Result<()> {
3745            decoder.debug_check_bounds::<Self>(offset);
3746            let prim = decoder.read_num::<u32>(offset);
3747            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
3748            Ok(())
3749        }
3750    }
3751    unsafe impl fidl::encoding::TypeMarker for AacAudioObjectType {
3752        type Owned = Self;
3753
3754        #[inline(always)]
3755        fn inline_align(_context: fidl::encoding::Context) -> usize {
3756            std::mem::align_of::<u32>()
3757        }
3758
3759        #[inline(always)]
3760        fn inline_size(_context: fidl::encoding::Context) -> usize {
3761            std::mem::size_of::<u32>()
3762        }
3763
3764        #[inline(always)]
3765        fn encode_is_copy() -> bool {
3766            true
3767        }
3768
3769        #[inline(always)]
3770        fn decode_is_copy() -> bool {
3771            false
3772        }
3773    }
3774
3775    impl fidl::encoding::ValueTypeMarker for AacAudioObjectType {
3776        type Borrowed<'a> = Self;
3777        #[inline(always)]
3778        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3779            *value
3780        }
3781    }
3782
3783    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3784        for AacAudioObjectType
3785    {
3786        #[inline]
3787        unsafe fn encode(
3788            self,
3789            encoder: &mut fidl::encoding::Encoder<'_, D>,
3790            offset: usize,
3791            _depth: fidl::encoding::Depth,
3792        ) -> fidl::Result<()> {
3793            encoder.debug_check_bounds::<Self>(offset);
3794            encoder.write_num(self.into_primitive(), offset);
3795            Ok(())
3796        }
3797    }
3798
3799    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacAudioObjectType {
3800        #[inline(always)]
3801        fn new_empty() -> Self {
3802            Self::Mpeg2AacLc
3803        }
3804
3805        #[inline]
3806        unsafe fn decode(
3807            &mut self,
3808            decoder: &mut fidl::encoding::Decoder<'_, D>,
3809            offset: usize,
3810            _depth: fidl::encoding::Depth,
3811        ) -> fidl::Result<()> {
3812            decoder.debug_check_bounds::<Self>(offset);
3813            let prim = decoder.read_num::<u32>(offset);
3814
3815            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3816            Ok(())
3817        }
3818    }
3819    unsafe impl fidl::encoding::TypeMarker for AacChannelMode {
3820        type Owned = Self;
3821
3822        #[inline(always)]
3823        fn inline_align(_context: fidl::encoding::Context) -> usize {
3824            std::mem::align_of::<u32>()
3825        }
3826
3827        #[inline(always)]
3828        fn inline_size(_context: fidl::encoding::Context) -> usize {
3829            std::mem::size_of::<u32>()
3830        }
3831
3832        #[inline(always)]
3833        fn encode_is_copy() -> bool {
3834            true
3835        }
3836
3837        #[inline(always)]
3838        fn decode_is_copy() -> bool {
3839            false
3840        }
3841    }
3842
3843    impl fidl::encoding::ValueTypeMarker for AacChannelMode {
3844        type Borrowed<'a> = Self;
3845        #[inline(always)]
3846        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3847            *value
3848        }
3849    }
3850
3851    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AacChannelMode {
3852        #[inline]
3853        unsafe fn encode(
3854            self,
3855            encoder: &mut fidl::encoding::Encoder<'_, D>,
3856            offset: usize,
3857            _depth: fidl::encoding::Depth,
3858        ) -> fidl::Result<()> {
3859            encoder.debug_check_bounds::<Self>(offset);
3860            encoder.write_num(self.into_primitive(), offset);
3861            Ok(())
3862        }
3863    }
3864
3865    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacChannelMode {
3866        #[inline(always)]
3867        fn new_empty() -> Self {
3868            Self::Mono
3869        }
3870
3871        #[inline]
3872        unsafe fn decode(
3873            &mut self,
3874            decoder: &mut fidl::encoding::Decoder<'_, D>,
3875            offset: usize,
3876            _depth: fidl::encoding::Depth,
3877        ) -> fidl::Result<()> {
3878            decoder.debug_check_bounds::<Self>(offset);
3879            let prim = decoder.read_num::<u32>(offset);
3880
3881            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3882            Ok(())
3883        }
3884    }
3885    unsafe impl fidl::encoding::TypeMarker for AacVariableBitRate {
3886        type Owned = Self;
3887
3888        #[inline(always)]
3889        fn inline_align(_context: fidl::encoding::Context) -> usize {
3890            std::mem::align_of::<u32>()
3891        }
3892
3893        #[inline(always)]
3894        fn inline_size(_context: fidl::encoding::Context) -> usize {
3895            std::mem::size_of::<u32>()
3896        }
3897
3898        #[inline(always)]
3899        fn encode_is_copy() -> bool {
3900            true
3901        }
3902
3903        #[inline(always)]
3904        fn decode_is_copy() -> bool {
3905            false
3906        }
3907    }
3908
3909    impl fidl::encoding::ValueTypeMarker for AacVariableBitRate {
3910        type Borrowed<'a> = Self;
3911        #[inline(always)]
3912        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3913            *value
3914        }
3915    }
3916
3917    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3918        for AacVariableBitRate
3919    {
3920        #[inline]
3921        unsafe fn encode(
3922            self,
3923            encoder: &mut fidl::encoding::Encoder<'_, D>,
3924            offset: usize,
3925            _depth: fidl::encoding::Depth,
3926        ) -> fidl::Result<()> {
3927            encoder.debug_check_bounds::<Self>(offset);
3928            encoder.write_num(self.into_primitive(), offset);
3929            Ok(())
3930        }
3931    }
3932
3933    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacVariableBitRate {
3934        #[inline(always)]
3935        fn new_empty() -> Self {
3936            Self::V1
3937        }
3938
3939        #[inline]
3940        unsafe fn decode(
3941            &mut self,
3942            decoder: &mut fidl::encoding::Decoder<'_, D>,
3943            offset: usize,
3944            _depth: fidl::encoding::Depth,
3945        ) -> fidl::Result<()> {
3946            decoder.debug_check_bounds::<Self>(offset);
3947            let prim = decoder.read_num::<u32>(offset);
3948
3949            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3950            Ok(())
3951        }
3952    }
3953    unsafe impl fidl::encoding::TypeMarker for AudioBitrateMode {
3954        type Owned = Self;
3955
3956        #[inline(always)]
3957        fn inline_align(_context: fidl::encoding::Context) -> usize {
3958            std::mem::align_of::<u32>()
3959        }
3960
3961        #[inline(always)]
3962        fn inline_size(_context: fidl::encoding::Context) -> usize {
3963            std::mem::size_of::<u32>()
3964        }
3965
3966        #[inline(always)]
3967        fn encode_is_copy() -> bool {
3968            true
3969        }
3970
3971        #[inline(always)]
3972        fn decode_is_copy() -> bool {
3973            false
3974        }
3975    }
3976
3977    impl fidl::encoding::ValueTypeMarker for AudioBitrateMode {
3978        type Borrowed<'a> = Self;
3979        #[inline(always)]
3980        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3981            *value
3982        }
3983    }
3984
3985    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3986        for AudioBitrateMode
3987    {
3988        #[inline]
3989        unsafe fn encode(
3990            self,
3991            encoder: &mut fidl::encoding::Encoder<'_, D>,
3992            offset: usize,
3993            _depth: fidl::encoding::Depth,
3994        ) -> fidl::Result<()> {
3995            encoder.debug_check_bounds::<Self>(offset);
3996            encoder.write_num(self.into_primitive(), offset);
3997            Ok(())
3998        }
3999    }
4000
4001    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioBitrateMode {
4002        #[inline(always)]
4003        fn new_empty() -> Self {
4004            Self::Unspecified
4005        }
4006
4007        #[inline]
4008        unsafe fn decode(
4009            &mut self,
4010            decoder: &mut fidl::encoding::Decoder<'_, D>,
4011            offset: usize,
4012            _depth: fidl::encoding::Depth,
4013        ) -> fidl::Result<()> {
4014            decoder.debug_check_bounds::<Self>(offset);
4015            let prim = decoder.read_num::<u32>(offset);
4016
4017            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4018            Ok(())
4019        }
4020    }
4021    unsafe impl fidl::encoding::TypeMarker for AudioCaptureUsage {
4022        type Owned = Self;
4023
4024        #[inline(always)]
4025        fn inline_align(_context: fidl::encoding::Context) -> usize {
4026            std::mem::align_of::<u32>()
4027        }
4028
4029        #[inline(always)]
4030        fn inline_size(_context: fidl::encoding::Context) -> usize {
4031            std::mem::size_of::<u32>()
4032        }
4033
4034        #[inline(always)]
4035        fn encode_is_copy() -> bool {
4036            true
4037        }
4038
4039        #[inline(always)]
4040        fn decode_is_copy() -> bool {
4041            false
4042        }
4043    }
4044
4045    impl fidl::encoding::ValueTypeMarker for AudioCaptureUsage {
4046        type Borrowed<'a> = Self;
4047        #[inline(always)]
4048        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4049            *value
4050        }
4051    }
4052
4053    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4054        for AudioCaptureUsage
4055    {
4056        #[inline]
4057        unsafe fn encode(
4058            self,
4059            encoder: &mut fidl::encoding::Encoder<'_, D>,
4060            offset: usize,
4061            _depth: fidl::encoding::Depth,
4062        ) -> fidl::Result<()> {
4063            encoder.debug_check_bounds::<Self>(offset);
4064            encoder.write_num(self.into_primitive(), offset);
4065            Ok(())
4066        }
4067    }
4068
4069    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioCaptureUsage {
4070        #[inline(always)]
4071        fn new_empty() -> Self {
4072            Self::Background
4073        }
4074
4075        #[inline]
4076        unsafe fn decode(
4077            &mut self,
4078            decoder: &mut fidl::encoding::Decoder<'_, D>,
4079            offset: usize,
4080            _depth: fidl::encoding::Depth,
4081        ) -> fidl::Result<()> {
4082            decoder.debug_check_bounds::<Self>(offset);
4083            let prim = decoder.read_num::<u32>(offset);
4084
4085            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4086            Ok(())
4087        }
4088    }
4089    unsafe impl fidl::encoding::TypeMarker for AudioCaptureUsage2 {
4090        type Owned = Self;
4091
4092        #[inline(always)]
4093        fn inline_align(_context: fidl::encoding::Context) -> usize {
4094            std::mem::align_of::<u32>()
4095        }
4096
4097        #[inline(always)]
4098        fn inline_size(_context: fidl::encoding::Context) -> usize {
4099            std::mem::size_of::<u32>()
4100        }
4101
4102        #[inline(always)]
4103        fn encode_is_copy() -> bool {
4104            false
4105        }
4106
4107        #[inline(always)]
4108        fn decode_is_copy() -> bool {
4109            false
4110        }
4111    }
4112
4113    impl fidl::encoding::ValueTypeMarker for AudioCaptureUsage2 {
4114        type Borrowed<'a> = Self;
4115        #[inline(always)]
4116        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4117            *value
4118        }
4119    }
4120
4121    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4122        for AudioCaptureUsage2
4123    {
4124        #[inline]
4125        unsafe fn encode(
4126            self,
4127            encoder: &mut fidl::encoding::Encoder<'_, D>,
4128            offset: usize,
4129            _depth: fidl::encoding::Depth,
4130        ) -> fidl::Result<()> {
4131            encoder.debug_check_bounds::<Self>(offset);
4132            encoder.write_num(self.into_primitive(), offset);
4133            Ok(())
4134        }
4135    }
4136
4137    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioCaptureUsage2 {
4138        #[inline(always)]
4139        fn new_empty() -> Self {
4140            Self::unknown()
4141        }
4142
4143        #[inline]
4144        unsafe fn decode(
4145            &mut self,
4146            decoder: &mut fidl::encoding::Decoder<'_, D>,
4147            offset: usize,
4148            _depth: fidl::encoding::Depth,
4149        ) -> fidl::Result<()> {
4150            decoder.debug_check_bounds::<Self>(offset);
4151            let prim = decoder.read_num::<u32>(offset);
4152
4153            *self = Self::from_primitive_allow_unknown(prim);
4154            Ok(())
4155        }
4156    }
4157    unsafe impl fidl::encoding::TypeMarker for AudioChannelId {
4158        type Owned = Self;
4159
4160        #[inline(always)]
4161        fn inline_align(_context: fidl::encoding::Context) -> usize {
4162            std::mem::align_of::<u32>()
4163        }
4164
4165        #[inline(always)]
4166        fn inline_size(_context: fidl::encoding::Context) -> usize {
4167            std::mem::size_of::<u32>()
4168        }
4169
4170        #[inline(always)]
4171        fn encode_is_copy() -> bool {
4172            true
4173        }
4174
4175        #[inline(always)]
4176        fn decode_is_copy() -> bool {
4177            false
4178        }
4179    }
4180
4181    impl fidl::encoding::ValueTypeMarker for AudioChannelId {
4182        type Borrowed<'a> = Self;
4183        #[inline(always)]
4184        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4185            *value
4186        }
4187    }
4188
4189    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AudioChannelId {
4190        #[inline]
4191        unsafe fn encode(
4192            self,
4193            encoder: &mut fidl::encoding::Encoder<'_, D>,
4194            offset: usize,
4195            _depth: fidl::encoding::Depth,
4196        ) -> fidl::Result<()> {
4197            encoder.debug_check_bounds::<Self>(offset);
4198            encoder.write_num(self.into_primitive(), offset);
4199            Ok(())
4200        }
4201    }
4202
4203    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioChannelId {
4204        #[inline(always)]
4205        fn new_empty() -> Self {
4206            Self::Skip
4207        }
4208
4209        #[inline]
4210        unsafe fn decode(
4211            &mut self,
4212            decoder: &mut fidl::encoding::Decoder<'_, D>,
4213            offset: usize,
4214            _depth: fidl::encoding::Depth,
4215        ) -> fidl::Result<()> {
4216            decoder.debug_check_bounds::<Self>(offset);
4217            let prim = decoder.read_num::<u32>(offset);
4218
4219            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4220            Ok(())
4221        }
4222    }
4223    unsafe impl fidl::encoding::TypeMarker for AudioOutputRoutingPolicy {
4224        type Owned = Self;
4225
4226        #[inline(always)]
4227        fn inline_align(_context: fidl::encoding::Context) -> usize {
4228            std::mem::align_of::<u32>()
4229        }
4230
4231        #[inline(always)]
4232        fn inline_size(_context: fidl::encoding::Context) -> usize {
4233            std::mem::size_of::<u32>()
4234        }
4235
4236        #[inline(always)]
4237        fn encode_is_copy() -> bool {
4238            true
4239        }
4240
4241        #[inline(always)]
4242        fn decode_is_copy() -> bool {
4243            false
4244        }
4245    }
4246
4247    impl fidl::encoding::ValueTypeMarker for AudioOutputRoutingPolicy {
4248        type Borrowed<'a> = Self;
4249        #[inline(always)]
4250        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4251            *value
4252        }
4253    }
4254
4255    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4256        for AudioOutputRoutingPolicy
4257    {
4258        #[inline]
4259        unsafe fn encode(
4260            self,
4261            encoder: &mut fidl::encoding::Encoder<'_, D>,
4262            offset: usize,
4263            _depth: fidl::encoding::Depth,
4264        ) -> fidl::Result<()> {
4265            encoder.debug_check_bounds::<Self>(offset);
4266            encoder.write_num(self.into_primitive(), offset);
4267            Ok(())
4268        }
4269    }
4270
4271    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4272        for AudioOutputRoutingPolicy
4273    {
4274        #[inline(always)]
4275        fn new_empty() -> Self {
4276            Self::AllPluggedOutputs
4277        }
4278
4279        #[inline]
4280        unsafe fn decode(
4281            &mut self,
4282            decoder: &mut fidl::encoding::Decoder<'_, D>,
4283            offset: usize,
4284            _depth: fidl::encoding::Depth,
4285        ) -> fidl::Result<()> {
4286            decoder.debug_check_bounds::<Self>(offset);
4287            let prim = decoder.read_num::<u32>(offset);
4288
4289            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4290            Ok(())
4291        }
4292    }
4293    unsafe impl fidl::encoding::TypeMarker for AudioPcmMode {
4294        type Owned = Self;
4295
4296        #[inline(always)]
4297        fn inline_align(_context: fidl::encoding::Context) -> usize {
4298            std::mem::align_of::<u32>()
4299        }
4300
4301        #[inline(always)]
4302        fn inline_size(_context: fidl::encoding::Context) -> usize {
4303            std::mem::size_of::<u32>()
4304        }
4305
4306        #[inline(always)]
4307        fn encode_is_copy() -> bool {
4308            true
4309        }
4310
4311        #[inline(always)]
4312        fn decode_is_copy() -> bool {
4313            false
4314        }
4315    }
4316
4317    impl fidl::encoding::ValueTypeMarker for AudioPcmMode {
4318        type Borrowed<'a> = Self;
4319        #[inline(always)]
4320        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4321            *value
4322        }
4323    }
4324
4325    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AudioPcmMode {
4326        #[inline]
4327        unsafe fn encode(
4328            self,
4329            encoder: &mut fidl::encoding::Encoder<'_, D>,
4330            offset: usize,
4331            _depth: fidl::encoding::Depth,
4332        ) -> fidl::Result<()> {
4333            encoder.debug_check_bounds::<Self>(offset);
4334            encoder.write_num(self.into_primitive(), offset);
4335            Ok(())
4336        }
4337    }
4338
4339    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioPcmMode {
4340        #[inline(always)]
4341        fn new_empty() -> Self {
4342            Self::Linear
4343        }
4344
4345        #[inline]
4346        unsafe fn decode(
4347            &mut self,
4348            decoder: &mut fidl::encoding::Decoder<'_, D>,
4349            offset: usize,
4350            _depth: fidl::encoding::Depth,
4351        ) -> fidl::Result<()> {
4352            decoder.debug_check_bounds::<Self>(offset);
4353            let prim = decoder.read_num::<u32>(offset);
4354
4355            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4356            Ok(())
4357        }
4358    }
4359    unsafe impl fidl::encoding::TypeMarker for AudioRenderUsage {
4360        type Owned = Self;
4361
4362        #[inline(always)]
4363        fn inline_align(_context: fidl::encoding::Context) -> usize {
4364            std::mem::align_of::<u32>()
4365        }
4366
4367        #[inline(always)]
4368        fn inline_size(_context: fidl::encoding::Context) -> usize {
4369            std::mem::size_of::<u32>()
4370        }
4371
4372        #[inline(always)]
4373        fn encode_is_copy() -> bool {
4374            true
4375        }
4376
4377        #[inline(always)]
4378        fn decode_is_copy() -> bool {
4379            false
4380        }
4381    }
4382
4383    impl fidl::encoding::ValueTypeMarker for AudioRenderUsage {
4384        type Borrowed<'a> = Self;
4385        #[inline(always)]
4386        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4387            *value
4388        }
4389    }
4390
4391    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4392        for AudioRenderUsage
4393    {
4394        #[inline]
4395        unsafe fn encode(
4396            self,
4397            encoder: &mut fidl::encoding::Encoder<'_, D>,
4398            offset: usize,
4399            _depth: fidl::encoding::Depth,
4400        ) -> fidl::Result<()> {
4401            encoder.debug_check_bounds::<Self>(offset);
4402            encoder.write_num(self.into_primitive(), offset);
4403            Ok(())
4404        }
4405    }
4406
4407    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioRenderUsage {
4408        #[inline(always)]
4409        fn new_empty() -> Self {
4410            Self::Background
4411        }
4412
4413        #[inline]
4414        unsafe fn decode(
4415            &mut self,
4416            decoder: &mut fidl::encoding::Decoder<'_, D>,
4417            offset: usize,
4418            _depth: fidl::encoding::Depth,
4419        ) -> fidl::Result<()> {
4420            decoder.debug_check_bounds::<Self>(offset);
4421            let prim = decoder.read_num::<u32>(offset);
4422
4423            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4424            Ok(())
4425        }
4426    }
4427    unsafe impl fidl::encoding::TypeMarker for AudioRenderUsage2 {
4428        type Owned = Self;
4429
4430        #[inline(always)]
4431        fn inline_align(_context: fidl::encoding::Context) -> usize {
4432            std::mem::align_of::<u32>()
4433        }
4434
4435        #[inline(always)]
4436        fn inline_size(_context: fidl::encoding::Context) -> usize {
4437            std::mem::size_of::<u32>()
4438        }
4439
4440        #[inline(always)]
4441        fn encode_is_copy() -> bool {
4442            false
4443        }
4444
4445        #[inline(always)]
4446        fn decode_is_copy() -> bool {
4447            false
4448        }
4449    }
4450
4451    impl fidl::encoding::ValueTypeMarker for AudioRenderUsage2 {
4452        type Borrowed<'a> = Self;
4453        #[inline(always)]
4454        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4455            *value
4456        }
4457    }
4458
4459    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4460        for AudioRenderUsage2
4461    {
4462        #[inline]
4463        unsafe fn encode(
4464            self,
4465            encoder: &mut fidl::encoding::Encoder<'_, D>,
4466            offset: usize,
4467            _depth: fidl::encoding::Depth,
4468        ) -> fidl::Result<()> {
4469            encoder.debug_check_bounds::<Self>(offset);
4470            encoder.write_num(self.into_primitive(), offset);
4471            Ok(())
4472        }
4473    }
4474
4475    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioRenderUsage2 {
4476        #[inline(always)]
4477        fn new_empty() -> Self {
4478            Self::unknown()
4479        }
4480
4481        #[inline]
4482        unsafe fn decode(
4483            &mut self,
4484            decoder: &mut fidl::encoding::Decoder<'_, D>,
4485            offset: usize,
4486            _depth: fidl::encoding::Depth,
4487        ) -> fidl::Result<()> {
4488            decoder.debug_check_bounds::<Self>(offset);
4489            let prim = decoder.read_num::<u32>(offset);
4490
4491            *self = Self::from_primitive_allow_unknown(prim);
4492            Ok(())
4493        }
4494    }
4495    unsafe impl fidl::encoding::TypeMarker for AudioSampleFormat {
4496        type Owned = Self;
4497
4498        #[inline(always)]
4499        fn inline_align(_context: fidl::encoding::Context) -> usize {
4500            std::mem::align_of::<u32>()
4501        }
4502
4503        #[inline(always)]
4504        fn inline_size(_context: fidl::encoding::Context) -> usize {
4505            std::mem::size_of::<u32>()
4506        }
4507
4508        #[inline(always)]
4509        fn encode_is_copy() -> bool {
4510            true
4511        }
4512
4513        #[inline(always)]
4514        fn decode_is_copy() -> bool {
4515            false
4516        }
4517    }
4518
4519    impl fidl::encoding::ValueTypeMarker for AudioSampleFormat {
4520        type Borrowed<'a> = Self;
4521        #[inline(always)]
4522        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4523            *value
4524        }
4525    }
4526
4527    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4528        for AudioSampleFormat
4529    {
4530        #[inline]
4531        unsafe fn encode(
4532            self,
4533            encoder: &mut fidl::encoding::Encoder<'_, D>,
4534            offset: usize,
4535            _depth: fidl::encoding::Depth,
4536        ) -> fidl::Result<()> {
4537            encoder.debug_check_bounds::<Self>(offset);
4538            encoder.write_num(self.into_primitive(), offset);
4539            Ok(())
4540        }
4541    }
4542
4543    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioSampleFormat {
4544        #[inline(always)]
4545        fn new_empty() -> Self {
4546            Self::Unsigned8
4547        }
4548
4549        #[inline]
4550        unsafe fn decode(
4551            &mut self,
4552            decoder: &mut fidl::encoding::Decoder<'_, D>,
4553            offset: usize,
4554            _depth: fidl::encoding::Depth,
4555        ) -> fidl::Result<()> {
4556            decoder.debug_check_bounds::<Self>(offset);
4557            let prim = decoder.read_num::<u32>(offset);
4558
4559            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4560            Ok(())
4561        }
4562    }
4563    unsafe impl fidl::encoding::TypeMarker for Behavior {
4564        type Owned = Self;
4565
4566        #[inline(always)]
4567        fn inline_align(_context: fidl::encoding::Context) -> usize {
4568            std::mem::align_of::<u32>()
4569        }
4570
4571        #[inline(always)]
4572        fn inline_size(_context: fidl::encoding::Context) -> usize {
4573            std::mem::size_of::<u32>()
4574        }
4575
4576        #[inline(always)]
4577        fn encode_is_copy() -> bool {
4578            false
4579        }
4580
4581        #[inline(always)]
4582        fn decode_is_copy() -> bool {
4583            false
4584        }
4585    }
4586
4587    impl fidl::encoding::ValueTypeMarker for Behavior {
4588        type Borrowed<'a> = Self;
4589        #[inline(always)]
4590        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4591            *value
4592        }
4593    }
4594
4595    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Behavior {
4596        #[inline]
4597        unsafe fn encode(
4598            self,
4599            encoder: &mut fidl::encoding::Encoder<'_, D>,
4600            offset: usize,
4601            _depth: fidl::encoding::Depth,
4602        ) -> fidl::Result<()> {
4603            encoder.debug_check_bounds::<Self>(offset);
4604            encoder.write_num(self.into_primitive(), offset);
4605            Ok(())
4606        }
4607    }
4608
4609    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Behavior {
4610        #[inline(always)]
4611        fn new_empty() -> Self {
4612            Self::unknown()
4613        }
4614
4615        #[inline]
4616        unsafe fn decode(
4617            &mut self,
4618            decoder: &mut fidl::encoding::Decoder<'_, D>,
4619            offset: usize,
4620            _depth: fidl::encoding::Depth,
4621        ) -> fidl::Result<()> {
4622            decoder.debug_check_bounds::<Self>(offset);
4623            let prim = decoder.read_num::<u32>(offset);
4624
4625            *self = Self::from_primitive_allow_unknown(prim);
4626            Ok(())
4627        }
4628    }
4629    unsafe impl fidl::encoding::TypeMarker for CodecProfile {
4630        type Owned = Self;
4631
4632        #[inline(always)]
4633        fn inline_align(_context: fidl::encoding::Context) -> usize {
4634            std::mem::align_of::<u32>()
4635        }
4636
4637        #[inline(always)]
4638        fn inline_size(_context: fidl::encoding::Context) -> usize {
4639            std::mem::size_of::<u32>()
4640        }
4641
4642        #[inline(always)]
4643        fn encode_is_copy() -> bool {
4644            false
4645        }
4646
4647        #[inline(always)]
4648        fn decode_is_copy() -> bool {
4649            false
4650        }
4651    }
4652
4653    impl fidl::encoding::ValueTypeMarker for CodecProfile {
4654        type Borrowed<'a> = Self;
4655        #[inline(always)]
4656        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4657            *value
4658        }
4659    }
4660
4661    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for CodecProfile {
4662        #[inline]
4663        unsafe fn encode(
4664            self,
4665            encoder: &mut fidl::encoding::Encoder<'_, D>,
4666            offset: usize,
4667            _depth: fidl::encoding::Depth,
4668        ) -> fidl::Result<()> {
4669            encoder.debug_check_bounds::<Self>(offset);
4670            encoder.write_num(self.into_primitive(), offset);
4671            Ok(())
4672        }
4673    }
4674
4675    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecProfile {
4676        #[inline(always)]
4677        fn new_empty() -> Self {
4678            Self::unknown()
4679        }
4680
4681        #[inline]
4682        unsafe fn decode(
4683            &mut self,
4684            decoder: &mut fidl::encoding::Decoder<'_, D>,
4685            offset: usize,
4686            _depth: fidl::encoding::Depth,
4687        ) -> fidl::Result<()> {
4688            decoder.debug_check_bounds::<Self>(offset);
4689            let prim = decoder.read_num::<u32>(offset);
4690
4691            *self = Self::from_primitive_allow_unknown(prim);
4692            Ok(())
4693        }
4694    }
4695    unsafe impl fidl::encoding::TypeMarker for ColorSpace {
4696        type Owned = Self;
4697
4698        #[inline(always)]
4699        fn inline_align(_context: fidl::encoding::Context) -> usize {
4700            std::mem::align_of::<u32>()
4701        }
4702
4703        #[inline(always)]
4704        fn inline_size(_context: fidl::encoding::Context) -> usize {
4705            std::mem::size_of::<u32>()
4706        }
4707
4708        #[inline(always)]
4709        fn encode_is_copy() -> bool {
4710            true
4711        }
4712
4713        #[inline(always)]
4714        fn decode_is_copy() -> bool {
4715            false
4716        }
4717    }
4718
4719    impl fidl::encoding::ValueTypeMarker for ColorSpace {
4720        type Borrowed<'a> = Self;
4721        #[inline(always)]
4722        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4723            *value
4724        }
4725    }
4726
4727    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ColorSpace {
4728        #[inline]
4729        unsafe fn encode(
4730            self,
4731            encoder: &mut fidl::encoding::Encoder<'_, D>,
4732            offset: usize,
4733            _depth: fidl::encoding::Depth,
4734        ) -> fidl::Result<()> {
4735            encoder.debug_check_bounds::<Self>(offset);
4736            encoder.write_num(self.into_primitive(), offset);
4737            Ok(())
4738        }
4739    }
4740
4741    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ColorSpace {
4742        #[inline(always)]
4743        fn new_empty() -> Self {
4744            Self::Unknown
4745        }
4746
4747        #[inline]
4748        unsafe fn decode(
4749            &mut self,
4750            decoder: &mut fidl::encoding::Decoder<'_, D>,
4751            offset: usize,
4752            _depth: fidl::encoding::Depth,
4753        ) -> fidl::Result<()> {
4754            decoder.debug_check_bounds::<Self>(offset);
4755            let prim = decoder.read_num::<u32>(offset);
4756
4757            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4758            Ok(())
4759        }
4760    }
4761    unsafe impl fidl::encoding::TypeMarker for Lc3FrameDuration {
4762        type Owned = Self;
4763
4764        #[inline(always)]
4765        fn inline_align(_context: fidl::encoding::Context) -> usize {
4766            std::mem::align_of::<u32>()
4767        }
4768
4769        #[inline(always)]
4770        fn inline_size(_context: fidl::encoding::Context) -> usize {
4771            std::mem::size_of::<u32>()
4772        }
4773
4774        #[inline(always)]
4775        fn encode_is_copy() -> bool {
4776            false
4777        }
4778
4779        #[inline(always)]
4780        fn decode_is_copy() -> bool {
4781            false
4782        }
4783    }
4784
4785    impl fidl::encoding::ValueTypeMarker for Lc3FrameDuration {
4786        type Borrowed<'a> = Self;
4787        #[inline(always)]
4788        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4789            *value
4790        }
4791    }
4792
4793    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
4794        for Lc3FrameDuration
4795    {
4796        #[inline]
4797        unsafe fn encode(
4798            self,
4799            encoder: &mut fidl::encoding::Encoder<'_, D>,
4800            offset: usize,
4801            _depth: fidl::encoding::Depth,
4802        ) -> fidl::Result<()> {
4803            encoder.debug_check_bounds::<Self>(offset);
4804            encoder.write_num(self.into_primitive(), offset);
4805            Ok(())
4806        }
4807    }
4808
4809    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Lc3FrameDuration {
4810        #[inline(always)]
4811        fn new_empty() -> Self {
4812            Self::unknown()
4813        }
4814
4815        #[inline]
4816        unsafe fn decode(
4817            &mut self,
4818            decoder: &mut fidl::encoding::Decoder<'_, D>,
4819            offset: usize,
4820            _depth: fidl::encoding::Depth,
4821        ) -> fidl::Result<()> {
4822            decoder.debug_check_bounds::<Self>(offset);
4823            let prim = decoder.read_num::<u32>(offset);
4824
4825            *self = Self::from_primitive_allow_unknown(prim);
4826            Ok(())
4827        }
4828    }
4829    unsafe impl fidl::encoding::TypeMarker for SbcAllocation {
4830        type Owned = Self;
4831
4832        #[inline(always)]
4833        fn inline_align(_context: fidl::encoding::Context) -> usize {
4834            std::mem::align_of::<u32>()
4835        }
4836
4837        #[inline(always)]
4838        fn inline_size(_context: fidl::encoding::Context) -> usize {
4839            std::mem::size_of::<u32>()
4840        }
4841
4842        #[inline(always)]
4843        fn encode_is_copy() -> bool {
4844            true
4845        }
4846
4847        #[inline(always)]
4848        fn decode_is_copy() -> bool {
4849            false
4850        }
4851    }
4852
4853    impl fidl::encoding::ValueTypeMarker for SbcAllocation {
4854        type Borrowed<'a> = Self;
4855        #[inline(always)]
4856        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4857            *value
4858        }
4859    }
4860
4861    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcAllocation {
4862        #[inline]
4863        unsafe fn encode(
4864            self,
4865            encoder: &mut fidl::encoding::Encoder<'_, D>,
4866            offset: usize,
4867            _depth: fidl::encoding::Depth,
4868        ) -> fidl::Result<()> {
4869            encoder.debug_check_bounds::<Self>(offset);
4870            encoder.write_num(self.into_primitive(), offset);
4871            Ok(())
4872        }
4873    }
4874
4875    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcAllocation {
4876        #[inline(always)]
4877        fn new_empty() -> Self {
4878            Self::AllocLoudness
4879        }
4880
4881        #[inline]
4882        unsafe fn decode(
4883            &mut self,
4884            decoder: &mut fidl::encoding::Decoder<'_, D>,
4885            offset: usize,
4886            _depth: fidl::encoding::Depth,
4887        ) -> fidl::Result<()> {
4888            decoder.debug_check_bounds::<Self>(offset);
4889            let prim = decoder.read_num::<u32>(offset);
4890
4891            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4892            Ok(())
4893        }
4894    }
4895    unsafe impl fidl::encoding::TypeMarker for SbcBlockCount {
4896        type Owned = Self;
4897
4898        #[inline(always)]
4899        fn inline_align(_context: fidl::encoding::Context) -> usize {
4900            std::mem::align_of::<u32>()
4901        }
4902
4903        #[inline(always)]
4904        fn inline_size(_context: fidl::encoding::Context) -> usize {
4905            std::mem::size_of::<u32>()
4906        }
4907
4908        #[inline(always)]
4909        fn encode_is_copy() -> bool {
4910            true
4911        }
4912
4913        #[inline(always)]
4914        fn decode_is_copy() -> bool {
4915            false
4916        }
4917    }
4918
4919    impl fidl::encoding::ValueTypeMarker for SbcBlockCount {
4920        type Borrowed<'a> = Self;
4921        #[inline(always)]
4922        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4923            *value
4924        }
4925    }
4926
4927    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcBlockCount {
4928        #[inline]
4929        unsafe fn encode(
4930            self,
4931            encoder: &mut fidl::encoding::Encoder<'_, D>,
4932            offset: usize,
4933            _depth: fidl::encoding::Depth,
4934        ) -> fidl::Result<()> {
4935            encoder.debug_check_bounds::<Self>(offset);
4936            encoder.write_num(self.into_primitive(), offset);
4937            Ok(())
4938        }
4939    }
4940
4941    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcBlockCount {
4942        #[inline(always)]
4943        fn new_empty() -> Self {
4944            Self::BlockCount4
4945        }
4946
4947        #[inline]
4948        unsafe fn decode(
4949            &mut self,
4950            decoder: &mut fidl::encoding::Decoder<'_, D>,
4951            offset: usize,
4952            _depth: fidl::encoding::Depth,
4953        ) -> fidl::Result<()> {
4954            decoder.debug_check_bounds::<Self>(offset);
4955            let prim = decoder.read_num::<u32>(offset);
4956
4957            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
4958            Ok(())
4959        }
4960    }
4961    unsafe impl fidl::encoding::TypeMarker for SbcChannelMode {
4962        type Owned = Self;
4963
4964        #[inline(always)]
4965        fn inline_align(_context: fidl::encoding::Context) -> usize {
4966            std::mem::align_of::<u32>()
4967        }
4968
4969        #[inline(always)]
4970        fn inline_size(_context: fidl::encoding::Context) -> usize {
4971            std::mem::size_of::<u32>()
4972        }
4973
4974        #[inline(always)]
4975        fn encode_is_copy() -> bool {
4976            true
4977        }
4978
4979        #[inline(always)]
4980        fn decode_is_copy() -> bool {
4981            false
4982        }
4983    }
4984
4985    impl fidl::encoding::ValueTypeMarker for SbcChannelMode {
4986        type Borrowed<'a> = Self;
4987        #[inline(always)]
4988        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4989            *value
4990        }
4991    }
4992
4993    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcChannelMode {
4994        #[inline]
4995        unsafe fn encode(
4996            self,
4997            encoder: &mut fidl::encoding::Encoder<'_, D>,
4998            offset: usize,
4999            _depth: fidl::encoding::Depth,
5000        ) -> fidl::Result<()> {
5001            encoder.debug_check_bounds::<Self>(offset);
5002            encoder.write_num(self.into_primitive(), offset);
5003            Ok(())
5004        }
5005    }
5006
5007    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcChannelMode {
5008        #[inline(always)]
5009        fn new_empty() -> Self {
5010            Self::Mono
5011        }
5012
5013        #[inline]
5014        unsafe fn decode(
5015            &mut self,
5016            decoder: &mut fidl::encoding::Decoder<'_, D>,
5017            offset: usize,
5018            _depth: fidl::encoding::Depth,
5019        ) -> fidl::Result<()> {
5020            decoder.debug_check_bounds::<Self>(offset);
5021            let prim = decoder.read_num::<u32>(offset);
5022
5023            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
5024            Ok(())
5025        }
5026    }
5027    unsafe impl fidl::encoding::TypeMarker for SbcSubBands {
5028        type Owned = Self;
5029
5030        #[inline(always)]
5031        fn inline_align(_context: fidl::encoding::Context) -> usize {
5032            std::mem::align_of::<u32>()
5033        }
5034
5035        #[inline(always)]
5036        fn inline_size(_context: fidl::encoding::Context) -> usize {
5037            std::mem::size_of::<u32>()
5038        }
5039
5040        #[inline(always)]
5041        fn encode_is_copy() -> bool {
5042            true
5043        }
5044
5045        #[inline(always)]
5046        fn decode_is_copy() -> bool {
5047            false
5048        }
5049    }
5050
5051    impl fidl::encoding::ValueTypeMarker for SbcSubBands {
5052        type Borrowed<'a> = Self;
5053        #[inline(always)]
5054        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5055            *value
5056        }
5057    }
5058
5059    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SbcSubBands {
5060        #[inline]
5061        unsafe fn encode(
5062            self,
5063            encoder: &mut fidl::encoding::Encoder<'_, D>,
5064            offset: usize,
5065            _depth: fidl::encoding::Depth,
5066        ) -> fidl::Result<()> {
5067            encoder.debug_check_bounds::<Self>(offset);
5068            encoder.write_num(self.into_primitive(), offset);
5069            Ok(())
5070        }
5071    }
5072
5073    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcSubBands {
5074        #[inline(always)]
5075        fn new_empty() -> Self {
5076            Self::SubBands4
5077        }
5078
5079        #[inline]
5080        unsafe fn decode(
5081            &mut self,
5082            decoder: &mut fidl::encoding::Decoder<'_, D>,
5083            offset: usize,
5084            _depth: fidl::encoding::Depth,
5085        ) -> fidl::Result<()> {
5086            decoder.debug_check_bounds::<Self>(offset);
5087            let prim = decoder.read_num::<u32>(offset);
5088
5089            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
5090            Ok(())
5091        }
5092    }
5093    unsafe impl fidl::encoding::TypeMarker for StreamError {
5094        type Owned = Self;
5095
5096        #[inline(always)]
5097        fn inline_align(_context: fidl::encoding::Context) -> usize {
5098            std::mem::align_of::<u32>()
5099        }
5100
5101        #[inline(always)]
5102        fn inline_size(_context: fidl::encoding::Context) -> usize {
5103            std::mem::size_of::<u32>()
5104        }
5105
5106        #[inline(always)]
5107        fn encode_is_copy() -> bool {
5108            true
5109        }
5110
5111        #[inline(always)]
5112        fn decode_is_copy() -> bool {
5113            false
5114        }
5115    }
5116
5117    impl fidl::encoding::ValueTypeMarker for StreamError {
5118        type Borrowed<'a> = Self;
5119        #[inline(always)]
5120        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5121            *value
5122        }
5123    }
5124
5125    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for StreamError {
5126        #[inline]
5127        unsafe fn encode(
5128            self,
5129            encoder: &mut fidl::encoding::Encoder<'_, D>,
5130            offset: usize,
5131            _depth: fidl::encoding::Depth,
5132        ) -> fidl::Result<()> {
5133            encoder.debug_check_bounds::<Self>(offset);
5134            encoder.write_num(self.into_primitive(), offset);
5135            Ok(())
5136        }
5137    }
5138
5139    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamError {
5140        #[inline(always)]
5141        fn new_empty() -> Self {
5142            Self::Unknown
5143        }
5144
5145        #[inline]
5146        unsafe fn decode(
5147            &mut self,
5148            decoder: &mut fidl::encoding::Decoder<'_, D>,
5149            offset: usize,
5150            _depth: fidl::encoding::Depth,
5151        ) -> fidl::Result<()> {
5152            decoder.debug_check_bounds::<Self>(offset);
5153            let prim = decoder.read_num::<u32>(offset);
5154
5155            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
5156            Ok(())
5157        }
5158    }
5159    unsafe impl fidl::encoding::TypeMarker for VideoColorSpace {
5160        type Owned = Self;
5161
5162        #[inline(always)]
5163        fn inline_align(_context: fidl::encoding::Context) -> usize {
5164            std::mem::align_of::<u32>()
5165        }
5166
5167        #[inline(always)]
5168        fn inline_size(_context: fidl::encoding::Context) -> usize {
5169            std::mem::size_of::<u32>()
5170        }
5171
5172        #[inline(always)]
5173        fn encode_is_copy() -> bool {
5174            true
5175        }
5176
5177        #[inline(always)]
5178        fn decode_is_copy() -> bool {
5179            false
5180        }
5181    }
5182
5183    impl fidl::encoding::ValueTypeMarker for VideoColorSpace {
5184        type Borrowed<'a> = Self;
5185        #[inline(always)]
5186        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5187            *value
5188        }
5189    }
5190
5191    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
5192        for VideoColorSpace
5193    {
5194        #[inline]
5195        unsafe fn encode(
5196            self,
5197            encoder: &mut fidl::encoding::Encoder<'_, D>,
5198            offset: usize,
5199            _depth: fidl::encoding::Depth,
5200        ) -> fidl::Result<()> {
5201            encoder.debug_check_bounds::<Self>(offset);
5202            encoder.write_num(self.into_primitive(), offset);
5203            Ok(())
5204        }
5205    }
5206
5207    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoColorSpace {
5208        #[inline(always)]
5209        fn new_empty() -> Self {
5210            Self::Invalid
5211        }
5212
5213        #[inline]
5214        unsafe fn decode(
5215            &mut self,
5216            decoder: &mut fidl::encoding::Decoder<'_, D>,
5217            offset: usize,
5218            _depth: fidl::encoding::Depth,
5219        ) -> fidl::Result<()> {
5220            decoder.debug_check_bounds::<Self>(offset);
5221            let prim = decoder.read_num::<u32>(offset);
5222
5223            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
5224            Ok(())
5225        }
5226    }
5227
5228    impl fidl::encoding::ValueTypeMarker for AacConstantBitRate {
5229        type Borrowed<'a> = &'a Self;
5230        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5231            value
5232        }
5233    }
5234
5235    unsafe impl fidl::encoding::TypeMarker for AacConstantBitRate {
5236        type Owned = Self;
5237
5238        #[inline(always)]
5239        fn inline_align(_context: fidl::encoding::Context) -> usize {
5240            4
5241        }
5242
5243        #[inline(always)]
5244        fn inline_size(_context: fidl::encoding::Context) -> usize {
5245            4
5246        }
5247        #[inline(always)]
5248        fn encode_is_copy() -> bool {
5249            true
5250        }
5251
5252        #[inline(always)]
5253        fn decode_is_copy() -> bool {
5254            true
5255        }
5256    }
5257
5258    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacConstantBitRate, D>
5259        for &AacConstantBitRate
5260    {
5261        #[inline]
5262        unsafe fn encode(
5263            self,
5264            encoder: &mut fidl::encoding::Encoder<'_, D>,
5265            offset: usize,
5266            _depth: fidl::encoding::Depth,
5267        ) -> fidl::Result<()> {
5268            encoder.debug_check_bounds::<AacConstantBitRate>(offset);
5269            unsafe {
5270                // Copy the object into the buffer.
5271                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5272                (buf_ptr as *mut AacConstantBitRate)
5273                    .write_unaligned((self as *const AacConstantBitRate).read());
5274                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5275                // done second because the memcpy will write garbage to these bytes.
5276            }
5277            Ok(())
5278        }
5279    }
5280    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
5281        fidl::encoding::Encode<AacConstantBitRate, D> for (T0,)
5282    {
5283        #[inline]
5284        unsafe fn encode(
5285            self,
5286            encoder: &mut fidl::encoding::Encoder<'_, D>,
5287            offset: usize,
5288            depth: fidl::encoding::Depth,
5289        ) -> fidl::Result<()> {
5290            encoder.debug_check_bounds::<AacConstantBitRate>(offset);
5291            // Zero out padding regions. There's no need to apply masks
5292            // because the unmasked parts will be overwritten by fields.
5293            // Write the fields.
5294            self.0.encode(encoder, offset + 0, depth)?;
5295            Ok(())
5296        }
5297    }
5298
5299    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacConstantBitRate {
5300        #[inline(always)]
5301        fn new_empty() -> Self {
5302            Self { bit_rate: fidl::new_empty!(u32, D) }
5303        }
5304
5305        #[inline]
5306        unsafe fn decode(
5307            &mut self,
5308            decoder: &mut fidl::encoding::Decoder<'_, D>,
5309            offset: usize,
5310            _depth: fidl::encoding::Depth,
5311        ) -> fidl::Result<()> {
5312            decoder.debug_check_bounds::<Self>(offset);
5313            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5314            // Verify that padding bytes are zero.
5315            // Copy from the buffer into the object.
5316            unsafe {
5317                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
5318            }
5319            Ok(())
5320        }
5321    }
5322
5323    impl fidl::encoding::ValueTypeMarker for AacEncoderSettings {
5324        type Borrowed<'a> = &'a Self;
5325        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5326            value
5327        }
5328    }
5329
5330    unsafe impl fidl::encoding::TypeMarker for AacEncoderSettings {
5331        type Owned = Self;
5332
5333        #[inline(always)]
5334        fn inline_align(_context: fidl::encoding::Context) -> usize {
5335            8
5336        }
5337
5338        #[inline(always)]
5339        fn inline_size(_context: fidl::encoding::Context) -> usize {
5340            48
5341        }
5342    }
5343
5344    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacEncoderSettings, D>
5345        for &AacEncoderSettings
5346    {
5347        #[inline]
5348        unsafe fn encode(
5349            self,
5350            encoder: &mut fidl::encoding::Encoder<'_, D>,
5351            offset: usize,
5352            _depth: fidl::encoding::Depth,
5353        ) -> fidl::Result<()> {
5354            encoder.debug_check_bounds::<AacEncoderSettings>(offset);
5355            // Delegate to tuple encoding.
5356            fidl::encoding::Encode::<AacEncoderSettings, D>::encode(
5357                (
5358                    <AacTransport as fidl::encoding::ValueTypeMarker>::borrow(&self.transport),
5359                    <AacChannelMode as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_mode),
5360                    <AacBitRate as fidl::encoding::ValueTypeMarker>::borrow(&self.bit_rate),
5361                    <AacAudioObjectType as fidl::encoding::ValueTypeMarker>::borrow(&self.aot),
5362                ),
5363                encoder,
5364                offset,
5365                _depth,
5366            )
5367        }
5368    }
5369    unsafe impl<
5370        D: fidl::encoding::ResourceDialect,
5371        T0: fidl::encoding::Encode<AacTransport, D>,
5372        T1: fidl::encoding::Encode<AacChannelMode, D>,
5373        T2: fidl::encoding::Encode<AacBitRate, D>,
5374        T3: fidl::encoding::Encode<AacAudioObjectType, D>,
5375    > fidl::encoding::Encode<AacEncoderSettings, D> for (T0, T1, T2, T3)
5376    {
5377        #[inline]
5378        unsafe fn encode(
5379            self,
5380            encoder: &mut fidl::encoding::Encoder<'_, D>,
5381            offset: usize,
5382            depth: fidl::encoding::Depth,
5383        ) -> fidl::Result<()> {
5384            encoder.debug_check_bounds::<AacEncoderSettings>(offset);
5385            // Zero out padding regions. There's no need to apply masks
5386            // because the unmasked parts will be overwritten by fields.
5387            unsafe {
5388                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
5389                (ptr as *mut u64).write_unaligned(0);
5390            }
5391            unsafe {
5392                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
5393                (ptr as *mut u64).write_unaligned(0);
5394            }
5395            // Write the fields.
5396            self.0.encode(encoder, offset + 0, depth)?;
5397            self.1.encode(encoder, offset + 16, depth)?;
5398            self.2.encode(encoder, offset + 24, depth)?;
5399            self.3.encode(encoder, offset + 40, depth)?;
5400            Ok(())
5401        }
5402    }
5403
5404    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacEncoderSettings {
5405        #[inline(always)]
5406        fn new_empty() -> Self {
5407            Self {
5408                transport: fidl::new_empty!(AacTransport, D),
5409                channel_mode: fidl::new_empty!(AacChannelMode, D),
5410                bit_rate: fidl::new_empty!(AacBitRate, D),
5411                aot: fidl::new_empty!(AacAudioObjectType, D),
5412            }
5413        }
5414
5415        #[inline]
5416        unsafe fn decode(
5417            &mut self,
5418            decoder: &mut fidl::encoding::Decoder<'_, D>,
5419            offset: usize,
5420            _depth: fidl::encoding::Depth,
5421        ) -> fidl::Result<()> {
5422            decoder.debug_check_bounds::<Self>(offset);
5423            // Verify that padding bytes are zero.
5424            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
5425            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5426            let mask = 0xffffffff00000000u64;
5427            let maskedval = padval & mask;
5428            if maskedval != 0 {
5429                return Err(fidl::Error::NonZeroPadding {
5430                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
5431                });
5432            }
5433            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
5434            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5435            let mask = 0xffffffff00000000u64;
5436            let maskedval = padval & mask;
5437            if maskedval != 0 {
5438                return Err(fidl::Error::NonZeroPadding {
5439                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
5440                });
5441            }
5442            fidl::decode!(AacTransport, D, &mut self.transport, decoder, offset + 0, _depth)?;
5443            fidl::decode!(AacChannelMode, D, &mut self.channel_mode, decoder, offset + 16, _depth)?;
5444            fidl::decode!(AacBitRate, D, &mut self.bit_rate, decoder, offset + 24, _depth)?;
5445            fidl::decode!(AacAudioObjectType, D, &mut self.aot, decoder, offset + 40, _depth)?;
5446            Ok(())
5447        }
5448    }
5449
5450    impl fidl::encoding::ValueTypeMarker for AacTransportAdts {
5451        type Borrowed<'a> = &'a Self;
5452        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5453            value
5454        }
5455    }
5456
5457    unsafe impl fidl::encoding::TypeMarker for AacTransportAdts {
5458        type Owned = Self;
5459
5460        #[inline(always)]
5461        fn inline_align(_context: fidl::encoding::Context) -> usize {
5462            1
5463        }
5464
5465        #[inline(always)]
5466        fn inline_size(_context: fidl::encoding::Context) -> usize {
5467            1
5468        }
5469    }
5470
5471    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransportAdts, D>
5472        for &AacTransportAdts
5473    {
5474        #[inline]
5475        unsafe fn encode(
5476            self,
5477            encoder: &mut fidl::encoding::Encoder<'_, D>,
5478            offset: usize,
5479            _depth: fidl::encoding::Depth,
5480        ) -> fidl::Result<()> {
5481            encoder.debug_check_bounds::<AacTransportAdts>(offset);
5482            encoder.write_num(0u8, offset);
5483            Ok(())
5484        }
5485    }
5486
5487    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransportAdts {
5488        #[inline(always)]
5489        fn new_empty() -> Self {
5490            Self
5491        }
5492
5493        #[inline]
5494        unsafe fn decode(
5495            &mut self,
5496            decoder: &mut fidl::encoding::Decoder<'_, D>,
5497            offset: usize,
5498            _depth: fidl::encoding::Depth,
5499        ) -> fidl::Result<()> {
5500            decoder.debug_check_bounds::<Self>(offset);
5501            match decoder.read_num::<u8>(offset) {
5502                0 => Ok(()),
5503                _ => Err(fidl::Error::Invalid),
5504            }
5505        }
5506    }
5507
5508    impl fidl::encoding::ValueTypeMarker for AacTransportLatm {
5509        type Borrowed<'a> = &'a Self;
5510        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5511            value
5512        }
5513    }
5514
5515    unsafe impl fidl::encoding::TypeMarker for AacTransportLatm {
5516        type Owned = Self;
5517
5518        #[inline(always)]
5519        fn inline_align(_context: fidl::encoding::Context) -> usize {
5520            1
5521        }
5522
5523        #[inline(always)]
5524        fn inline_size(_context: fidl::encoding::Context) -> usize {
5525            1
5526        }
5527    }
5528
5529    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransportLatm, D>
5530        for &AacTransportLatm
5531    {
5532        #[inline]
5533        unsafe fn encode(
5534            self,
5535            encoder: &mut fidl::encoding::Encoder<'_, D>,
5536            offset: usize,
5537            _depth: fidl::encoding::Depth,
5538        ) -> fidl::Result<()> {
5539            encoder.debug_check_bounds::<AacTransportLatm>(offset);
5540            // Delegate to tuple encoding.
5541            fidl::encoding::Encode::<AacTransportLatm, D>::encode(
5542                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.mux_config_present),),
5543                encoder,
5544                offset,
5545                _depth,
5546            )
5547        }
5548    }
5549    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
5550        fidl::encoding::Encode<AacTransportLatm, D> for (T0,)
5551    {
5552        #[inline]
5553        unsafe fn encode(
5554            self,
5555            encoder: &mut fidl::encoding::Encoder<'_, D>,
5556            offset: usize,
5557            depth: fidl::encoding::Depth,
5558        ) -> fidl::Result<()> {
5559            encoder.debug_check_bounds::<AacTransportLatm>(offset);
5560            // Zero out padding regions. There's no need to apply masks
5561            // because the unmasked parts will be overwritten by fields.
5562            // Write the fields.
5563            self.0.encode(encoder, offset + 0, depth)?;
5564            Ok(())
5565        }
5566    }
5567
5568    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransportLatm {
5569        #[inline(always)]
5570        fn new_empty() -> Self {
5571            Self { mux_config_present: fidl::new_empty!(bool, D) }
5572        }
5573
5574        #[inline]
5575        unsafe fn decode(
5576            &mut self,
5577            decoder: &mut fidl::encoding::Decoder<'_, D>,
5578            offset: usize,
5579            _depth: fidl::encoding::Depth,
5580        ) -> fidl::Result<()> {
5581            decoder.debug_check_bounds::<Self>(offset);
5582            // Verify that padding bytes are zero.
5583            fidl::decode!(bool, D, &mut self.mux_config_present, decoder, offset + 0, _depth)?;
5584            Ok(())
5585        }
5586    }
5587
5588    impl fidl::encoding::ValueTypeMarker for AacTransportRaw {
5589        type Borrowed<'a> = &'a Self;
5590        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5591            value
5592        }
5593    }
5594
5595    unsafe impl fidl::encoding::TypeMarker for AacTransportRaw {
5596        type Owned = Self;
5597
5598        #[inline(always)]
5599        fn inline_align(_context: fidl::encoding::Context) -> usize {
5600            1
5601        }
5602
5603        #[inline(always)]
5604        fn inline_size(_context: fidl::encoding::Context) -> usize {
5605            1
5606        }
5607    }
5608
5609    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransportRaw, D>
5610        for &AacTransportRaw
5611    {
5612        #[inline]
5613        unsafe fn encode(
5614            self,
5615            encoder: &mut fidl::encoding::Encoder<'_, D>,
5616            offset: usize,
5617            _depth: fidl::encoding::Depth,
5618        ) -> fidl::Result<()> {
5619            encoder.debug_check_bounds::<AacTransportRaw>(offset);
5620            encoder.write_num(0u8, offset);
5621            Ok(())
5622        }
5623    }
5624
5625    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransportRaw {
5626        #[inline(always)]
5627        fn new_empty() -> Self {
5628            Self
5629        }
5630
5631        #[inline]
5632        unsafe fn decode(
5633            &mut self,
5634            decoder: &mut fidl::encoding::Decoder<'_, D>,
5635            offset: usize,
5636            _depth: fidl::encoding::Depth,
5637        ) -> fidl::Result<()> {
5638            decoder.debug_check_bounds::<Self>(offset);
5639            match decoder.read_num::<u8>(offset) {
5640                0 => Ok(()),
5641                _ => Err(fidl::Error::Invalid),
5642            }
5643        }
5644    }
5645
5646    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchCaptureActivityResponse {
5647        type Borrowed<'a> = &'a Self;
5648        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5649            value
5650        }
5651    }
5652
5653    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchCaptureActivityResponse {
5654        type Owned = Self;
5655
5656        #[inline(always)]
5657        fn inline_align(_context: fidl::encoding::Context) -> usize {
5658            8
5659        }
5660
5661        #[inline(always)]
5662        fn inline_size(_context: fidl::encoding::Context) -> usize {
5663            16
5664        }
5665    }
5666
5667    unsafe impl<D: fidl::encoding::ResourceDialect>
5668        fidl::encoding::Encode<ActivityReporterWatchCaptureActivityResponse, D>
5669        for &ActivityReporterWatchCaptureActivityResponse
5670    {
5671        #[inline]
5672        unsafe fn encode(
5673            self,
5674            encoder: &mut fidl::encoding::Encoder<'_, D>,
5675            offset: usize,
5676            _depth: fidl::encoding::Depth,
5677        ) -> fidl::Result<()> {
5678            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivityResponse>(offset);
5679            // Delegate to tuple encoding.
5680            fidl::encoding::Encode::<ActivityReporterWatchCaptureActivityResponse, D>::encode(
5681                (
5682                    <fidl::encoding::Vector<AudioCaptureUsage, 4> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5683                ),
5684                encoder, offset, _depth
5685            )
5686        }
5687    }
5688    unsafe impl<
5689        D: fidl::encoding::ResourceDialect,
5690        T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioCaptureUsage, 4>, D>,
5691    > fidl::encoding::Encode<ActivityReporterWatchCaptureActivityResponse, D> for (T0,)
5692    {
5693        #[inline]
5694        unsafe fn encode(
5695            self,
5696            encoder: &mut fidl::encoding::Encoder<'_, D>,
5697            offset: usize,
5698            depth: fidl::encoding::Depth,
5699        ) -> fidl::Result<()> {
5700            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivityResponse>(offset);
5701            // Zero out padding regions. There's no need to apply masks
5702            // because the unmasked parts will be overwritten by fields.
5703            // Write the fields.
5704            self.0.encode(encoder, offset + 0, depth)?;
5705            Ok(())
5706        }
5707    }
5708
5709    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5710        for ActivityReporterWatchCaptureActivityResponse
5711    {
5712        #[inline(always)]
5713        fn new_empty() -> Self {
5714            Self {
5715                active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioCaptureUsage, 4>, D),
5716            }
5717        }
5718
5719        #[inline]
5720        unsafe fn decode(
5721            &mut self,
5722            decoder: &mut fidl::encoding::Decoder<'_, D>,
5723            offset: usize,
5724            _depth: fidl::encoding::Depth,
5725        ) -> fidl::Result<()> {
5726            decoder.debug_check_bounds::<Self>(offset);
5727            // Verify that padding bytes are zero.
5728            fidl::decode!(fidl::encoding::Vector<AudioCaptureUsage, 4>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5729            Ok(())
5730        }
5731    }
5732
5733    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchRenderActivityResponse {
5734        type Borrowed<'a> = &'a Self;
5735        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5736            value
5737        }
5738    }
5739
5740    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchRenderActivityResponse {
5741        type Owned = Self;
5742
5743        #[inline(always)]
5744        fn inline_align(_context: fidl::encoding::Context) -> usize {
5745            8
5746        }
5747
5748        #[inline(always)]
5749        fn inline_size(_context: fidl::encoding::Context) -> usize {
5750            16
5751        }
5752    }
5753
5754    unsafe impl<D: fidl::encoding::ResourceDialect>
5755        fidl::encoding::Encode<ActivityReporterWatchRenderActivityResponse, D>
5756        for &ActivityReporterWatchRenderActivityResponse
5757    {
5758        #[inline]
5759        unsafe fn encode(
5760            self,
5761            encoder: &mut fidl::encoding::Encoder<'_, D>,
5762            offset: usize,
5763            _depth: fidl::encoding::Depth,
5764        ) -> fidl::Result<()> {
5765            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivityResponse>(offset);
5766            // Delegate to tuple encoding.
5767            fidl::encoding::Encode::<ActivityReporterWatchRenderActivityResponse, D>::encode(
5768                (
5769                    <fidl::encoding::Vector<AudioRenderUsage, 5> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5770                ),
5771                encoder, offset, _depth
5772            )
5773        }
5774    }
5775    unsafe impl<
5776        D: fidl::encoding::ResourceDialect,
5777        T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioRenderUsage, 5>, D>,
5778    > fidl::encoding::Encode<ActivityReporterWatchRenderActivityResponse, D> for (T0,)
5779    {
5780        #[inline]
5781        unsafe fn encode(
5782            self,
5783            encoder: &mut fidl::encoding::Encoder<'_, D>,
5784            offset: usize,
5785            depth: fidl::encoding::Depth,
5786        ) -> fidl::Result<()> {
5787            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivityResponse>(offset);
5788            // Zero out padding regions. There's no need to apply masks
5789            // because the unmasked parts will be overwritten by fields.
5790            // Write the fields.
5791            self.0.encode(encoder, offset + 0, depth)?;
5792            Ok(())
5793        }
5794    }
5795
5796    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5797        for ActivityReporterWatchRenderActivityResponse
5798    {
5799        #[inline(always)]
5800        fn new_empty() -> Self {
5801            Self { active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioRenderUsage, 5>, D) }
5802        }
5803
5804        #[inline]
5805        unsafe fn decode(
5806            &mut self,
5807            decoder: &mut fidl::encoding::Decoder<'_, D>,
5808            offset: usize,
5809            _depth: fidl::encoding::Depth,
5810        ) -> fidl::Result<()> {
5811            decoder.debug_check_bounds::<Self>(offset);
5812            // Verify that padding bytes are zero.
5813            fidl::decode!(fidl::encoding::Vector<AudioRenderUsage, 5>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5814            Ok(())
5815        }
5816    }
5817
5818    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchCaptureActivity2Response {
5819        type Borrowed<'a> = &'a Self;
5820        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5821            value
5822        }
5823    }
5824
5825    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchCaptureActivity2Response {
5826        type Owned = Self;
5827
5828        #[inline(always)]
5829        fn inline_align(_context: fidl::encoding::Context) -> usize {
5830            8
5831        }
5832
5833        #[inline(always)]
5834        fn inline_size(_context: fidl::encoding::Context) -> usize {
5835            16
5836        }
5837    }
5838
5839    unsafe impl<D: fidl::encoding::ResourceDialect>
5840        fidl::encoding::Encode<ActivityReporterWatchCaptureActivity2Response, D>
5841        for &ActivityReporterWatchCaptureActivity2Response
5842    {
5843        #[inline]
5844        unsafe fn encode(
5845            self,
5846            encoder: &mut fidl::encoding::Encoder<'_, D>,
5847            offset: usize,
5848            _depth: fidl::encoding::Depth,
5849        ) -> fidl::Result<()> {
5850            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivity2Response>(offset);
5851            // Delegate to tuple encoding.
5852            fidl::encoding::Encode::<ActivityReporterWatchCaptureActivity2Response, D>::encode(
5853                (
5854                    <fidl::encoding::Vector<AudioCaptureUsage2, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5855                ),
5856                encoder, offset, _depth
5857            )
5858        }
5859    }
5860    unsafe impl<
5861        D: fidl::encoding::ResourceDialect,
5862        T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioCaptureUsage2, 8>, D>,
5863    > fidl::encoding::Encode<ActivityReporterWatchCaptureActivity2Response, D> for (T0,)
5864    {
5865        #[inline]
5866        unsafe fn encode(
5867            self,
5868            encoder: &mut fidl::encoding::Encoder<'_, D>,
5869            offset: usize,
5870            depth: fidl::encoding::Depth,
5871        ) -> fidl::Result<()> {
5872            encoder.debug_check_bounds::<ActivityReporterWatchCaptureActivity2Response>(offset);
5873            // Zero out padding regions. There's no need to apply masks
5874            // because the unmasked parts will be overwritten by fields.
5875            // Write the fields.
5876            self.0.encode(encoder, offset + 0, depth)?;
5877            Ok(())
5878        }
5879    }
5880
5881    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5882        for ActivityReporterWatchCaptureActivity2Response
5883    {
5884        #[inline(always)]
5885        fn new_empty() -> Self {
5886            Self {
5887                active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioCaptureUsage2, 8>, D),
5888            }
5889        }
5890
5891        #[inline]
5892        unsafe fn decode(
5893            &mut self,
5894            decoder: &mut fidl::encoding::Decoder<'_, D>,
5895            offset: usize,
5896            _depth: fidl::encoding::Depth,
5897        ) -> fidl::Result<()> {
5898            decoder.debug_check_bounds::<Self>(offset);
5899            // Verify that padding bytes are zero.
5900            fidl::decode!(fidl::encoding::Vector<AudioCaptureUsage2, 8>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5901            Ok(())
5902        }
5903    }
5904
5905    impl fidl::encoding::ValueTypeMarker for ActivityReporterWatchRenderActivity2Response {
5906        type Borrowed<'a> = &'a Self;
5907        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5908            value
5909        }
5910    }
5911
5912    unsafe impl fidl::encoding::TypeMarker for ActivityReporterWatchRenderActivity2Response {
5913        type Owned = Self;
5914
5915        #[inline(always)]
5916        fn inline_align(_context: fidl::encoding::Context) -> usize {
5917            8
5918        }
5919
5920        #[inline(always)]
5921        fn inline_size(_context: fidl::encoding::Context) -> usize {
5922            16
5923        }
5924    }
5925
5926    unsafe impl<D: fidl::encoding::ResourceDialect>
5927        fidl::encoding::Encode<ActivityReporterWatchRenderActivity2Response, D>
5928        for &ActivityReporterWatchRenderActivity2Response
5929    {
5930        #[inline]
5931        unsafe fn encode(
5932            self,
5933            encoder: &mut fidl::encoding::Encoder<'_, D>,
5934            offset: usize,
5935            _depth: fidl::encoding::Depth,
5936        ) -> fidl::Result<()> {
5937            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivity2Response>(offset);
5938            // Delegate to tuple encoding.
5939            fidl::encoding::Encode::<ActivityReporterWatchRenderActivity2Response, D>::encode(
5940                (
5941                    <fidl::encoding::Vector<AudioRenderUsage2, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.active_usages),
5942                ),
5943                encoder, offset, _depth
5944            )
5945        }
5946    }
5947    unsafe impl<
5948        D: fidl::encoding::ResourceDialect,
5949        T0: fidl::encoding::Encode<fidl::encoding::Vector<AudioRenderUsage2, 8>, D>,
5950    > fidl::encoding::Encode<ActivityReporterWatchRenderActivity2Response, D> for (T0,)
5951    {
5952        #[inline]
5953        unsafe fn encode(
5954            self,
5955            encoder: &mut fidl::encoding::Encoder<'_, D>,
5956            offset: usize,
5957            depth: fidl::encoding::Depth,
5958        ) -> fidl::Result<()> {
5959            encoder.debug_check_bounds::<ActivityReporterWatchRenderActivity2Response>(offset);
5960            // Zero out padding regions. There's no need to apply masks
5961            // because the unmasked parts will be overwritten by fields.
5962            // Write the fields.
5963            self.0.encode(encoder, offset + 0, depth)?;
5964            Ok(())
5965        }
5966    }
5967
5968    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5969        for ActivityReporterWatchRenderActivity2Response
5970    {
5971        #[inline(always)]
5972        fn new_empty() -> Self {
5973            Self {
5974                active_usages: fidl::new_empty!(fidl::encoding::Vector<AudioRenderUsage2, 8>, D),
5975            }
5976        }
5977
5978        #[inline]
5979        unsafe fn decode(
5980            &mut self,
5981            decoder: &mut fidl::encoding::Decoder<'_, D>,
5982            offset: usize,
5983            _depth: fidl::encoding::Depth,
5984        ) -> fidl::Result<()> {
5985            decoder.debug_check_bounds::<Self>(offset);
5986            // Verify that padding bytes are zero.
5987            fidl::decode!(fidl::encoding::Vector<AudioRenderUsage2, 8>, D, &mut self.active_usages, decoder, offset + 0, _depth)?;
5988            Ok(())
5989        }
5990    }
5991
5992    impl fidl::encoding::ValueTypeMarker for AudioCapturerCaptureAtRequest {
5993        type Borrowed<'a> = &'a Self;
5994        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5995            value
5996        }
5997    }
5998
5999    unsafe impl fidl::encoding::TypeMarker for AudioCapturerCaptureAtRequest {
6000        type Owned = Self;
6001
6002        #[inline(always)]
6003        fn inline_align(_context: fidl::encoding::Context) -> usize {
6004            4
6005        }
6006
6007        #[inline(always)]
6008        fn inline_size(_context: fidl::encoding::Context) -> usize {
6009            12
6010        }
6011        #[inline(always)]
6012        fn encode_is_copy() -> bool {
6013            true
6014        }
6015
6016        #[inline(always)]
6017        fn decode_is_copy() -> bool {
6018            true
6019        }
6020    }
6021
6022    unsafe impl<D: fidl::encoding::ResourceDialect>
6023        fidl::encoding::Encode<AudioCapturerCaptureAtRequest, D>
6024        for &AudioCapturerCaptureAtRequest
6025    {
6026        #[inline]
6027        unsafe fn encode(
6028            self,
6029            encoder: &mut fidl::encoding::Encoder<'_, D>,
6030            offset: usize,
6031            _depth: fidl::encoding::Depth,
6032        ) -> fidl::Result<()> {
6033            encoder.debug_check_bounds::<AudioCapturerCaptureAtRequest>(offset);
6034            unsafe {
6035                // Copy the object into the buffer.
6036                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
6037                (buf_ptr as *mut AudioCapturerCaptureAtRequest)
6038                    .write_unaligned((self as *const AudioCapturerCaptureAtRequest).read());
6039                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
6040                // done second because the memcpy will write garbage to these bytes.
6041            }
6042            Ok(())
6043        }
6044    }
6045    unsafe impl<
6046        D: fidl::encoding::ResourceDialect,
6047        T0: fidl::encoding::Encode<u32, D>,
6048        T1: fidl::encoding::Encode<u32, D>,
6049        T2: fidl::encoding::Encode<u32, D>,
6050    > fidl::encoding::Encode<AudioCapturerCaptureAtRequest, D> for (T0, T1, T2)
6051    {
6052        #[inline]
6053        unsafe fn encode(
6054            self,
6055            encoder: &mut fidl::encoding::Encoder<'_, D>,
6056            offset: usize,
6057            depth: fidl::encoding::Depth,
6058        ) -> fidl::Result<()> {
6059            encoder.debug_check_bounds::<AudioCapturerCaptureAtRequest>(offset);
6060            // Zero out padding regions. There's no need to apply masks
6061            // because the unmasked parts will be overwritten by fields.
6062            // Write the fields.
6063            self.0.encode(encoder, offset + 0, depth)?;
6064            self.1.encode(encoder, offset + 4, depth)?;
6065            self.2.encode(encoder, offset + 8, depth)?;
6066            Ok(())
6067        }
6068    }
6069
6070    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6071        for AudioCapturerCaptureAtRequest
6072    {
6073        #[inline(always)]
6074        fn new_empty() -> Self {
6075            Self {
6076                payload_buffer_id: fidl::new_empty!(u32, D),
6077                payload_offset: fidl::new_empty!(u32, D),
6078                frames: fidl::new_empty!(u32, D),
6079            }
6080        }
6081
6082        #[inline]
6083        unsafe fn decode(
6084            &mut self,
6085            decoder: &mut fidl::encoding::Decoder<'_, D>,
6086            offset: usize,
6087            _depth: fidl::encoding::Depth,
6088        ) -> fidl::Result<()> {
6089            decoder.debug_check_bounds::<Self>(offset);
6090            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
6091            // Verify that padding bytes are zero.
6092            // Copy from the buffer into the object.
6093            unsafe {
6094                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
6095            }
6096            Ok(())
6097        }
6098    }
6099
6100    impl fidl::encoding::ValueTypeMarker for AudioCapturerCaptureAtResponse {
6101        type Borrowed<'a> = &'a Self;
6102        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6103            value
6104        }
6105    }
6106
6107    unsafe impl fidl::encoding::TypeMarker for AudioCapturerCaptureAtResponse {
6108        type Owned = Self;
6109
6110        #[inline(always)]
6111        fn inline_align(_context: fidl::encoding::Context) -> usize {
6112            8
6113        }
6114
6115        #[inline(always)]
6116        fn inline_size(_context: fidl::encoding::Context) -> usize {
6117            56
6118        }
6119    }
6120
6121    unsafe impl<D: fidl::encoding::ResourceDialect>
6122        fidl::encoding::Encode<AudioCapturerCaptureAtResponse, D>
6123        for &AudioCapturerCaptureAtResponse
6124    {
6125        #[inline]
6126        unsafe fn encode(
6127            self,
6128            encoder: &mut fidl::encoding::Encoder<'_, D>,
6129            offset: usize,
6130            _depth: fidl::encoding::Depth,
6131        ) -> fidl::Result<()> {
6132            encoder.debug_check_bounds::<AudioCapturerCaptureAtResponse>(offset);
6133            unsafe {
6134                // Copy the object into the buffer.
6135                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
6136                (buf_ptr as *mut AudioCapturerCaptureAtResponse)
6137                    .write_unaligned((self as *const AudioCapturerCaptureAtResponse).read());
6138                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
6139                // done second because the memcpy will write garbage to these bytes.
6140                let padding_ptr = buf_ptr.offset(8) as *mut u64;
6141                let padding_mask = 0xffffffff00000000u64;
6142                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
6143                let padding_ptr = buf_ptr.offset(32) as *mut u64;
6144                let padding_mask = 0xffffffff00000000u64;
6145                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
6146            }
6147            Ok(())
6148        }
6149    }
6150    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
6151        fidl::encoding::Encode<AudioCapturerCaptureAtResponse, D> for (T0,)
6152    {
6153        #[inline]
6154        unsafe fn encode(
6155            self,
6156            encoder: &mut fidl::encoding::Encoder<'_, D>,
6157            offset: usize,
6158            depth: fidl::encoding::Depth,
6159        ) -> fidl::Result<()> {
6160            encoder.debug_check_bounds::<AudioCapturerCaptureAtResponse>(offset);
6161            // Zero out padding regions. There's no need to apply masks
6162            // because the unmasked parts will be overwritten by fields.
6163            // Write the fields.
6164            self.0.encode(encoder, offset + 0, depth)?;
6165            Ok(())
6166        }
6167    }
6168
6169    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6170        for AudioCapturerCaptureAtResponse
6171    {
6172        #[inline(always)]
6173        fn new_empty() -> Self {
6174            Self { captured_packet: fidl::new_empty!(StreamPacket, D) }
6175        }
6176
6177        #[inline]
6178        unsafe fn decode(
6179            &mut self,
6180            decoder: &mut fidl::encoding::Decoder<'_, D>,
6181            offset: usize,
6182            _depth: fidl::encoding::Depth,
6183        ) -> fidl::Result<()> {
6184            decoder.debug_check_bounds::<Self>(offset);
6185            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
6186            // Verify that padding bytes are zero.
6187            let ptr = unsafe { buf_ptr.offset(8) };
6188            let padval = unsafe { (ptr as *const u64).read_unaligned() };
6189            let mask = 0xffffffff00000000u64;
6190            let maskedval = padval & mask;
6191            if maskedval != 0 {
6192                return Err(fidl::Error::NonZeroPadding {
6193                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
6194                });
6195            }
6196            let ptr = unsafe { buf_ptr.offset(32) };
6197            let padval = unsafe { (ptr as *const u64).read_unaligned() };
6198            let mask = 0xffffffff00000000u64;
6199            let maskedval = padval & mask;
6200            if maskedval != 0 {
6201                return Err(fidl::Error::NonZeroPadding {
6202                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
6203                });
6204            }
6205            // Copy from the buffer into the object.
6206            unsafe {
6207                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
6208            }
6209            Ok(())
6210        }
6211    }
6212
6213    impl fidl::encoding::ValueTypeMarker for AudioCapturerGetStreamTypeResponse {
6214        type Borrowed<'a> = &'a Self;
6215        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6216            value
6217        }
6218    }
6219
6220    unsafe impl fidl::encoding::TypeMarker for AudioCapturerGetStreamTypeResponse {
6221        type Owned = Self;
6222
6223        #[inline(always)]
6224        fn inline_align(_context: fidl::encoding::Context) -> usize {
6225            8
6226        }
6227
6228        #[inline(always)]
6229        fn inline_size(_context: fidl::encoding::Context) -> usize {
6230            48
6231        }
6232    }
6233
6234    unsafe impl<D: fidl::encoding::ResourceDialect>
6235        fidl::encoding::Encode<AudioCapturerGetStreamTypeResponse, D>
6236        for &AudioCapturerGetStreamTypeResponse
6237    {
6238        #[inline]
6239        unsafe fn encode(
6240            self,
6241            encoder: &mut fidl::encoding::Encoder<'_, D>,
6242            offset: usize,
6243            _depth: fidl::encoding::Depth,
6244        ) -> fidl::Result<()> {
6245            encoder.debug_check_bounds::<AudioCapturerGetStreamTypeResponse>(offset);
6246            // Delegate to tuple encoding.
6247            fidl::encoding::Encode::<AudioCapturerGetStreamTypeResponse, D>::encode(
6248                (<StreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_type),),
6249                encoder,
6250                offset,
6251                _depth,
6252            )
6253        }
6254    }
6255    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamType, D>>
6256        fidl::encoding::Encode<AudioCapturerGetStreamTypeResponse, D> for (T0,)
6257    {
6258        #[inline]
6259        unsafe fn encode(
6260            self,
6261            encoder: &mut fidl::encoding::Encoder<'_, D>,
6262            offset: usize,
6263            depth: fidl::encoding::Depth,
6264        ) -> fidl::Result<()> {
6265            encoder.debug_check_bounds::<AudioCapturerGetStreamTypeResponse>(offset);
6266            // Zero out padding regions. There's no need to apply masks
6267            // because the unmasked parts will be overwritten by fields.
6268            // Write the fields.
6269            self.0.encode(encoder, offset + 0, depth)?;
6270            Ok(())
6271        }
6272    }
6273
6274    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6275        for AudioCapturerGetStreamTypeResponse
6276    {
6277        #[inline(always)]
6278        fn new_empty() -> Self {
6279            Self { stream_type: fidl::new_empty!(StreamType, D) }
6280        }
6281
6282        #[inline]
6283        unsafe fn decode(
6284            &mut self,
6285            decoder: &mut fidl::encoding::Decoder<'_, D>,
6286            offset: usize,
6287            _depth: fidl::encoding::Depth,
6288        ) -> fidl::Result<()> {
6289            decoder.debug_check_bounds::<Self>(offset);
6290            // Verify that padding bytes are zero.
6291            fidl::decode!(StreamType, D, &mut self.stream_type, decoder, offset + 0, _depth)?;
6292            Ok(())
6293        }
6294    }
6295
6296    impl fidl::encoding::ValueTypeMarker for AudioCapturerSetPcmStreamTypeRequest {
6297        type Borrowed<'a> = &'a Self;
6298        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6299            value
6300        }
6301    }
6302
6303    unsafe impl fidl::encoding::TypeMarker for AudioCapturerSetPcmStreamTypeRequest {
6304        type Owned = Self;
6305
6306        #[inline(always)]
6307        fn inline_align(_context: fidl::encoding::Context) -> usize {
6308            4
6309        }
6310
6311        #[inline(always)]
6312        fn inline_size(_context: fidl::encoding::Context) -> usize {
6313            12
6314        }
6315    }
6316
6317    unsafe impl<D: fidl::encoding::ResourceDialect>
6318        fidl::encoding::Encode<AudioCapturerSetPcmStreamTypeRequest, D>
6319        for &AudioCapturerSetPcmStreamTypeRequest
6320    {
6321        #[inline]
6322        unsafe fn encode(
6323            self,
6324            encoder: &mut fidl::encoding::Encoder<'_, D>,
6325            offset: usize,
6326            _depth: fidl::encoding::Depth,
6327        ) -> fidl::Result<()> {
6328            encoder.debug_check_bounds::<AudioCapturerSetPcmStreamTypeRequest>(offset);
6329            // Delegate to tuple encoding.
6330            fidl::encoding::Encode::<AudioCapturerSetPcmStreamTypeRequest, D>::encode(
6331                (<AudioStreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_type),),
6332                encoder,
6333                offset,
6334                _depth,
6335            )
6336        }
6337    }
6338    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioStreamType, D>>
6339        fidl::encoding::Encode<AudioCapturerSetPcmStreamTypeRequest, D> for (T0,)
6340    {
6341        #[inline]
6342        unsafe fn encode(
6343            self,
6344            encoder: &mut fidl::encoding::Encoder<'_, D>,
6345            offset: usize,
6346            depth: fidl::encoding::Depth,
6347        ) -> fidl::Result<()> {
6348            encoder.debug_check_bounds::<AudioCapturerSetPcmStreamTypeRequest>(offset);
6349            // Zero out padding regions. There's no need to apply masks
6350            // because the unmasked parts will be overwritten by fields.
6351            // Write the fields.
6352            self.0.encode(encoder, offset + 0, depth)?;
6353            Ok(())
6354        }
6355    }
6356
6357    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6358        for AudioCapturerSetPcmStreamTypeRequest
6359    {
6360        #[inline(always)]
6361        fn new_empty() -> Self {
6362            Self { stream_type: fidl::new_empty!(AudioStreamType, D) }
6363        }
6364
6365        #[inline]
6366        unsafe fn decode(
6367            &mut self,
6368            decoder: &mut fidl::encoding::Decoder<'_, D>,
6369            offset: usize,
6370            _depth: fidl::encoding::Depth,
6371        ) -> fidl::Result<()> {
6372            decoder.debug_check_bounds::<Self>(offset);
6373            // Verify that padding bytes are zero.
6374            fidl::decode!(AudioStreamType, D, &mut self.stream_type, decoder, offset + 0, _depth)?;
6375            Ok(())
6376        }
6377    }
6378
6379    impl fidl::encoding::ValueTypeMarker for AudioCapturerSetUsage2Request {
6380        type Borrowed<'a> = &'a Self;
6381        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6382            value
6383        }
6384    }
6385
6386    unsafe impl fidl::encoding::TypeMarker for AudioCapturerSetUsage2Request {
6387        type Owned = Self;
6388
6389        #[inline(always)]
6390        fn inline_align(_context: fidl::encoding::Context) -> usize {
6391            4
6392        }
6393
6394        #[inline(always)]
6395        fn inline_size(_context: fidl::encoding::Context) -> usize {
6396            4
6397        }
6398    }
6399
6400    unsafe impl<D: fidl::encoding::ResourceDialect>
6401        fidl::encoding::Encode<AudioCapturerSetUsage2Request, D>
6402        for &AudioCapturerSetUsage2Request
6403    {
6404        #[inline]
6405        unsafe fn encode(
6406            self,
6407            encoder: &mut fidl::encoding::Encoder<'_, D>,
6408            offset: usize,
6409            _depth: fidl::encoding::Depth,
6410        ) -> fidl::Result<()> {
6411            encoder.debug_check_bounds::<AudioCapturerSetUsage2Request>(offset);
6412            // Delegate to tuple encoding.
6413            fidl::encoding::Encode::<AudioCapturerSetUsage2Request, D>::encode(
6414                (<AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),),
6415                encoder,
6416                offset,
6417                _depth,
6418            )
6419        }
6420    }
6421    unsafe impl<
6422        D: fidl::encoding::ResourceDialect,
6423        T0: fidl::encoding::Encode<AudioCaptureUsage2, D>,
6424    > fidl::encoding::Encode<AudioCapturerSetUsage2Request, D> for (T0,)
6425    {
6426        #[inline]
6427        unsafe fn encode(
6428            self,
6429            encoder: &mut fidl::encoding::Encoder<'_, D>,
6430            offset: usize,
6431            depth: fidl::encoding::Depth,
6432        ) -> fidl::Result<()> {
6433            encoder.debug_check_bounds::<AudioCapturerSetUsage2Request>(offset);
6434            // Zero out padding regions. There's no need to apply masks
6435            // because the unmasked parts will be overwritten by fields.
6436            // Write the fields.
6437            self.0.encode(encoder, offset + 0, depth)?;
6438            Ok(())
6439        }
6440    }
6441
6442    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6443        for AudioCapturerSetUsage2Request
6444    {
6445        #[inline(always)]
6446        fn new_empty() -> Self {
6447            Self { usage: fidl::new_empty!(AudioCaptureUsage2, D) }
6448        }
6449
6450        #[inline]
6451        unsafe fn decode(
6452            &mut self,
6453            decoder: &mut fidl::encoding::Decoder<'_, D>,
6454            offset: usize,
6455            _depth: fidl::encoding::Depth,
6456        ) -> fidl::Result<()> {
6457            decoder.debug_check_bounds::<Self>(offset);
6458            // Verify that padding bytes are zero.
6459            fidl::decode!(AudioCaptureUsage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
6460            Ok(())
6461        }
6462    }
6463
6464    impl fidl::encoding::ValueTypeMarker for AudioCapturerSetUsageRequest {
6465        type Borrowed<'a> = &'a Self;
6466        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6467            value
6468        }
6469    }
6470
6471    unsafe impl fidl::encoding::TypeMarker for AudioCapturerSetUsageRequest {
6472        type Owned = Self;
6473
6474        #[inline(always)]
6475        fn inline_align(_context: fidl::encoding::Context) -> usize {
6476            4
6477        }
6478
6479        #[inline(always)]
6480        fn inline_size(_context: fidl::encoding::Context) -> usize {
6481            4
6482        }
6483    }
6484
6485    unsafe impl<D: fidl::encoding::ResourceDialect>
6486        fidl::encoding::Encode<AudioCapturerSetUsageRequest, D> for &AudioCapturerSetUsageRequest
6487    {
6488        #[inline]
6489        unsafe fn encode(
6490            self,
6491            encoder: &mut fidl::encoding::Encoder<'_, D>,
6492            offset: usize,
6493            _depth: fidl::encoding::Depth,
6494        ) -> fidl::Result<()> {
6495            encoder.debug_check_bounds::<AudioCapturerSetUsageRequest>(offset);
6496            // Delegate to tuple encoding.
6497            fidl::encoding::Encode::<AudioCapturerSetUsageRequest, D>::encode(
6498                (<AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),),
6499                encoder,
6500                offset,
6501                _depth,
6502            )
6503        }
6504    }
6505    unsafe impl<
6506        D: fidl::encoding::ResourceDialect,
6507        T0: fidl::encoding::Encode<AudioCaptureUsage, D>,
6508    > fidl::encoding::Encode<AudioCapturerSetUsageRequest, D> for (T0,)
6509    {
6510        #[inline]
6511        unsafe fn encode(
6512            self,
6513            encoder: &mut fidl::encoding::Encoder<'_, D>,
6514            offset: usize,
6515            depth: fidl::encoding::Depth,
6516        ) -> fidl::Result<()> {
6517            encoder.debug_check_bounds::<AudioCapturerSetUsageRequest>(offset);
6518            // Zero out padding regions. There's no need to apply masks
6519            // because the unmasked parts will be overwritten by fields.
6520            // Write the fields.
6521            self.0.encode(encoder, offset + 0, depth)?;
6522            Ok(())
6523        }
6524    }
6525
6526    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6527        for AudioCapturerSetUsageRequest
6528    {
6529        #[inline(always)]
6530        fn new_empty() -> Self {
6531            Self { usage: fidl::new_empty!(AudioCaptureUsage, D) }
6532        }
6533
6534        #[inline]
6535        unsafe fn decode(
6536            &mut self,
6537            decoder: &mut fidl::encoding::Decoder<'_, D>,
6538            offset: usize,
6539            _depth: fidl::encoding::Depth,
6540        ) -> fidl::Result<()> {
6541            decoder.debug_check_bounds::<Self>(offset);
6542            // Verify that padding bytes are zero.
6543            fidl::decode!(AudioCaptureUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
6544            Ok(())
6545        }
6546    }
6547
6548    impl fidl::encoding::ValueTypeMarker for AudioCapturerStartAsyncCaptureRequest {
6549        type Borrowed<'a> = &'a Self;
6550        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6551            value
6552        }
6553    }
6554
6555    unsafe impl fidl::encoding::TypeMarker for AudioCapturerStartAsyncCaptureRequest {
6556        type Owned = Self;
6557
6558        #[inline(always)]
6559        fn inline_align(_context: fidl::encoding::Context) -> usize {
6560            4
6561        }
6562
6563        #[inline(always)]
6564        fn inline_size(_context: fidl::encoding::Context) -> usize {
6565            4
6566        }
6567        #[inline(always)]
6568        fn encode_is_copy() -> bool {
6569            true
6570        }
6571
6572        #[inline(always)]
6573        fn decode_is_copy() -> bool {
6574            true
6575        }
6576    }
6577
6578    unsafe impl<D: fidl::encoding::ResourceDialect>
6579        fidl::encoding::Encode<AudioCapturerStartAsyncCaptureRequest, D>
6580        for &AudioCapturerStartAsyncCaptureRequest
6581    {
6582        #[inline]
6583        unsafe fn encode(
6584            self,
6585            encoder: &mut fidl::encoding::Encoder<'_, D>,
6586            offset: usize,
6587            _depth: fidl::encoding::Depth,
6588        ) -> fidl::Result<()> {
6589            encoder.debug_check_bounds::<AudioCapturerStartAsyncCaptureRequest>(offset);
6590            unsafe {
6591                // Copy the object into the buffer.
6592                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
6593                (buf_ptr as *mut AudioCapturerStartAsyncCaptureRequest)
6594                    .write_unaligned((self as *const AudioCapturerStartAsyncCaptureRequest).read());
6595                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
6596                // done second because the memcpy will write garbage to these bytes.
6597            }
6598            Ok(())
6599        }
6600    }
6601    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
6602        fidl::encoding::Encode<AudioCapturerStartAsyncCaptureRequest, D> for (T0,)
6603    {
6604        #[inline]
6605        unsafe fn encode(
6606            self,
6607            encoder: &mut fidl::encoding::Encoder<'_, D>,
6608            offset: usize,
6609            depth: fidl::encoding::Depth,
6610        ) -> fidl::Result<()> {
6611            encoder.debug_check_bounds::<AudioCapturerStartAsyncCaptureRequest>(offset);
6612            // Zero out padding regions. There's no need to apply masks
6613            // because the unmasked parts will be overwritten by fields.
6614            // Write the fields.
6615            self.0.encode(encoder, offset + 0, depth)?;
6616            Ok(())
6617        }
6618    }
6619
6620    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6621        for AudioCapturerStartAsyncCaptureRequest
6622    {
6623        #[inline(always)]
6624        fn new_empty() -> Self {
6625            Self { frames_per_packet: fidl::new_empty!(u32, D) }
6626        }
6627
6628        #[inline]
6629        unsafe fn decode(
6630            &mut self,
6631            decoder: &mut fidl::encoding::Decoder<'_, D>,
6632            offset: usize,
6633            _depth: fidl::encoding::Depth,
6634        ) -> fidl::Result<()> {
6635            decoder.debug_check_bounds::<Self>(offset);
6636            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
6637            // Verify that padding bytes are zero.
6638            // Copy from the buffer into the object.
6639            unsafe {
6640                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
6641            }
6642            Ok(())
6643        }
6644    }
6645
6646    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatAac {
6647        type Borrowed<'a> = &'a Self;
6648        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6649            value
6650        }
6651    }
6652
6653    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatAac {
6654        type Owned = Self;
6655
6656        #[inline(always)]
6657        fn inline_align(_context: fidl::encoding::Context) -> usize {
6658            1
6659        }
6660
6661        #[inline(always)]
6662        fn inline_size(_context: fidl::encoding::Context) -> usize {
6663            1
6664        }
6665    }
6666
6667    unsafe impl<D: fidl::encoding::ResourceDialect>
6668        fidl::encoding::Encode<AudioCompressedFormatAac, D> for &AudioCompressedFormatAac
6669    {
6670        #[inline]
6671        unsafe fn encode(
6672            self,
6673            encoder: &mut fidl::encoding::Encoder<'_, D>,
6674            offset: usize,
6675            _depth: fidl::encoding::Depth,
6676        ) -> fidl::Result<()> {
6677            encoder.debug_check_bounds::<AudioCompressedFormatAac>(offset);
6678            encoder.write_num(0u8, offset);
6679            Ok(())
6680        }
6681    }
6682
6683    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6684        for AudioCompressedFormatAac
6685    {
6686        #[inline(always)]
6687        fn new_empty() -> Self {
6688            Self
6689        }
6690
6691        #[inline]
6692        unsafe fn decode(
6693            &mut self,
6694            decoder: &mut fidl::encoding::Decoder<'_, D>,
6695            offset: usize,
6696            _depth: fidl::encoding::Depth,
6697        ) -> fidl::Result<()> {
6698            decoder.debug_check_bounds::<Self>(offset);
6699            match decoder.read_num::<u8>(offset) {
6700                0 => Ok(()),
6701                _ => Err(fidl::Error::Invalid),
6702            }
6703        }
6704    }
6705
6706    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatSbc {
6707        type Borrowed<'a> = &'a Self;
6708        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6709            value
6710        }
6711    }
6712
6713    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatSbc {
6714        type Owned = Self;
6715
6716        #[inline(always)]
6717        fn inline_align(_context: fidl::encoding::Context) -> usize {
6718            1
6719        }
6720
6721        #[inline(always)]
6722        fn inline_size(_context: fidl::encoding::Context) -> usize {
6723            1
6724        }
6725    }
6726
6727    unsafe impl<D: fidl::encoding::ResourceDialect>
6728        fidl::encoding::Encode<AudioCompressedFormatSbc, D> for &AudioCompressedFormatSbc
6729    {
6730        #[inline]
6731        unsafe fn encode(
6732            self,
6733            encoder: &mut fidl::encoding::Encoder<'_, D>,
6734            offset: usize,
6735            _depth: fidl::encoding::Depth,
6736        ) -> fidl::Result<()> {
6737            encoder.debug_check_bounds::<AudioCompressedFormatSbc>(offset);
6738            encoder.write_num(0u8, offset);
6739            Ok(())
6740        }
6741    }
6742
6743    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6744        for AudioCompressedFormatSbc
6745    {
6746        #[inline(always)]
6747        fn new_empty() -> Self {
6748            Self
6749        }
6750
6751        #[inline]
6752        unsafe fn decode(
6753            &mut self,
6754            decoder: &mut fidl::encoding::Decoder<'_, D>,
6755            offset: usize,
6756            _depth: fidl::encoding::Depth,
6757        ) -> fidl::Result<()> {
6758            decoder.debug_check_bounds::<Self>(offset);
6759            match decoder.read_num::<u8>(offset) {
6760                0 => Ok(()),
6761                _ => Err(fidl::Error::Invalid),
6762            }
6763        }
6764    }
6765
6766    impl fidl::encoding::ValueTypeMarker for AudioConsumerSetRateRequest {
6767        type Borrowed<'a> = &'a Self;
6768        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6769            value
6770        }
6771    }
6772
6773    unsafe impl fidl::encoding::TypeMarker for AudioConsumerSetRateRequest {
6774        type Owned = Self;
6775
6776        #[inline(always)]
6777        fn inline_align(_context: fidl::encoding::Context) -> usize {
6778            4
6779        }
6780
6781        #[inline(always)]
6782        fn inline_size(_context: fidl::encoding::Context) -> usize {
6783            4
6784        }
6785    }
6786
6787    unsafe impl<D: fidl::encoding::ResourceDialect>
6788        fidl::encoding::Encode<AudioConsumerSetRateRequest, D> for &AudioConsumerSetRateRequest
6789    {
6790        #[inline]
6791        unsafe fn encode(
6792            self,
6793            encoder: &mut fidl::encoding::Encoder<'_, D>,
6794            offset: usize,
6795            _depth: fidl::encoding::Depth,
6796        ) -> fidl::Result<()> {
6797            encoder.debug_check_bounds::<AudioConsumerSetRateRequest>(offset);
6798            // Delegate to tuple encoding.
6799            fidl::encoding::Encode::<AudioConsumerSetRateRequest, D>::encode(
6800                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.rate),),
6801                encoder,
6802                offset,
6803                _depth,
6804            )
6805        }
6806    }
6807    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
6808        fidl::encoding::Encode<AudioConsumerSetRateRequest, D> for (T0,)
6809    {
6810        #[inline]
6811        unsafe fn encode(
6812            self,
6813            encoder: &mut fidl::encoding::Encoder<'_, D>,
6814            offset: usize,
6815            depth: fidl::encoding::Depth,
6816        ) -> fidl::Result<()> {
6817            encoder.debug_check_bounds::<AudioConsumerSetRateRequest>(offset);
6818            // Zero out padding regions. There's no need to apply masks
6819            // because the unmasked parts will be overwritten by fields.
6820            // Write the fields.
6821            self.0.encode(encoder, offset + 0, depth)?;
6822            Ok(())
6823        }
6824    }
6825
6826    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6827        for AudioConsumerSetRateRequest
6828    {
6829        #[inline(always)]
6830        fn new_empty() -> Self {
6831            Self { rate: fidl::new_empty!(f32, D) }
6832        }
6833
6834        #[inline]
6835        unsafe fn decode(
6836            &mut self,
6837            decoder: &mut fidl::encoding::Decoder<'_, D>,
6838            offset: usize,
6839            _depth: fidl::encoding::Depth,
6840        ) -> fidl::Result<()> {
6841            decoder.debug_check_bounds::<Self>(offset);
6842            // Verify that padding bytes are zero.
6843            fidl::decode!(f32, D, &mut self.rate, decoder, offset + 0, _depth)?;
6844            Ok(())
6845        }
6846    }
6847
6848    impl fidl::encoding::ValueTypeMarker for AudioConsumerStartRequest {
6849        type Borrowed<'a> = &'a Self;
6850        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6851            value
6852        }
6853    }
6854
6855    unsafe impl fidl::encoding::TypeMarker for AudioConsumerStartRequest {
6856        type Owned = Self;
6857
6858        #[inline(always)]
6859        fn inline_align(_context: fidl::encoding::Context) -> usize {
6860            8
6861        }
6862
6863        #[inline(always)]
6864        fn inline_size(_context: fidl::encoding::Context) -> usize {
6865            24
6866        }
6867    }
6868
6869    unsafe impl<D: fidl::encoding::ResourceDialect>
6870        fidl::encoding::Encode<AudioConsumerStartRequest, D> for &AudioConsumerStartRequest
6871    {
6872        #[inline]
6873        unsafe fn encode(
6874            self,
6875            encoder: &mut fidl::encoding::Encoder<'_, D>,
6876            offset: usize,
6877            _depth: fidl::encoding::Depth,
6878        ) -> fidl::Result<()> {
6879            encoder.debug_check_bounds::<AudioConsumerStartRequest>(offset);
6880            // Delegate to tuple encoding.
6881            fidl::encoding::Encode::<AudioConsumerStartRequest, D>::encode(
6882                (
6883                    <AudioConsumerStartFlags as fidl::encoding::ValueTypeMarker>::borrow(
6884                        &self.flags,
6885                    ),
6886                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(&self.reference_time),
6887                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(&self.media_time),
6888                ),
6889                encoder,
6890                offset,
6891                _depth,
6892            )
6893        }
6894    }
6895    unsafe impl<
6896        D: fidl::encoding::ResourceDialect,
6897        T0: fidl::encoding::Encode<AudioConsumerStartFlags, D>,
6898        T1: fidl::encoding::Encode<i64, D>,
6899        T2: fidl::encoding::Encode<i64, D>,
6900    > fidl::encoding::Encode<AudioConsumerStartRequest, D> for (T0, T1, T2)
6901    {
6902        #[inline]
6903        unsafe fn encode(
6904            self,
6905            encoder: &mut fidl::encoding::Encoder<'_, D>,
6906            offset: usize,
6907            depth: fidl::encoding::Depth,
6908        ) -> fidl::Result<()> {
6909            encoder.debug_check_bounds::<AudioConsumerStartRequest>(offset);
6910            // Zero out padding regions. There's no need to apply masks
6911            // because the unmasked parts will be overwritten by fields.
6912            unsafe {
6913                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
6914                (ptr as *mut u64).write_unaligned(0);
6915            }
6916            // Write the fields.
6917            self.0.encode(encoder, offset + 0, depth)?;
6918            self.1.encode(encoder, offset + 8, depth)?;
6919            self.2.encode(encoder, offset + 16, depth)?;
6920            Ok(())
6921        }
6922    }
6923
6924    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6925        for AudioConsumerStartRequest
6926    {
6927        #[inline(always)]
6928        fn new_empty() -> Self {
6929            Self {
6930                flags: fidl::new_empty!(AudioConsumerStartFlags, D),
6931                reference_time: fidl::new_empty!(i64, D),
6932                media_time: fidl::new_empty!(i64, D),
6933            }
6934        }
6935
6936        #[inline]
6937        unsafe fn decode(
6938            &mut self,
6939            decoder: &mut fidl::encoding::Decoder<'_, D>,
6940            offset: usize,
6941            _depth: fidl::encoding::Depth,
6942        ) -> fidl::Result<()> {
6943            decoder.debug_check_bounds::<Self>(offset);
6944            // Verify that padding bytes are zero.
6945            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
6946            let padval = unsafe { (ptr as *const u64).read_unaligned() };
6947            let mask = 0xffffffff00000000u64;
6948            let maskedval = padval & mask;
6949            if maskedval != 0 {
6950                return Err(fidl::Error::NonZeroPadding {
6951                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
6952                });
6953            }
6954            fidl::decode!(
6955                AudioConsumerStartFlags,
6956                D,
6957                &mut self.flags,
6958                decoder,
6959                offset + 0,
6960                _depth
6961            )?;
6962            fidl::decode!(i64, D, &mut self.reference_time, decoder, offset + 8, _depth)?;
6963            fidl::decode!(i64, D, &mut self.media_time, decoder, offset + 16, _depth)?;
6964            Ok(())
6965        }
6966    }
6967
6968    impl fidl::encoding::ValueTypeMarker for AudioConsumerWatchStatusResponse {
6969        type Borrowed<'a> = &'a Self;
6970        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6971            value
6972        }
6973    }
6974
6975    unsafe impl fidl::encoding::TypeMarker for AudioConsumerWatchStatusResponse {
6976        type Owned = Self;
6977
6978        #[inline(always)]
6979        fn inline_align(_context: fidl::encoding::Context) -> usize {
6980            8
6981        }
6982
6983        #[inline(always)]
6984        fn inline_size(_context: fidl::encoding::Context) -> usize {
6985            16
6986        }
6987    }
6988
6989    unsafe impl<D: fidl::encoding::ResourceDialect>
6990        fidl::encoding::Encode<AudioConsumerWatchStatusResponse, D>
6991        for &AudioConsumerWatchStatusResponse
6992    {
6993        #[inline]
6994        unsafe fn encode(
6995            self,
6996            encoder: &mut fidl::encoding::Encoder<'_, D>,
6997            offset: usize,
6998            _depth: fidl::encoding::Depth,
6999        ) -> fidl::Result<()> {
7000            encoder.debug_check_bounds::<AudioConsumerWatchStatusResponse>(offset);
7001            // Delegate to tuple encoding.
7002            fidl::encoding::Encode::<AudioConsumerWatchStatusResponse, D>::encode(
7003                (<AudioConsumerStatus as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
7004                encoder,
7005                offset,
7006                _depth,
7007            )
7008        }
7009    }
7010    unsafe impl<
7011        D: fidl::encoding::ResourceDialect,
7012        T0: fidl::encoding::Encode<AudioConsumerStatus, D>,
7013    > fidl::encoding::Encode<AudioConsumerWatchStatusResponse, D> for (T0,)
7014    {
7015        #[inline]
7016        unsafe fn encode(
7017            self,
7018            encoder: &mut fidl::encoding::Encoder<'_, D>,
7019            offset: usize,
7020            depth: fidl::encoding::Depth,
7021        ) -> fidl::Result<()> {
7022            encoder.debug_check_bounds::<AudioConsumerWatchStatusResponse>(offset);
7023            // Zero out padding regions. There's no need to apply masks
7024            // because the unmasked parts will be overwritten by fields.
7025            // Write the fields.
7026            self.0.encode(encoder, offset + 0, depth)?;
7027            Ok(())
7028        }
7029    }
7030
7031    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7032        for AudioConsumerWatchStatusResponse
7033    {
7034        #[inline(always)]
7035        fn new_empty() -> Self {
7036            Self { status: fidl::new_empty!(AudioConsumerStatus, D) }
7037        }
7038
7039        #[inline]
7040        unsafe fn decode(
7041            &mut self,
7042            decoder: &mut fidl::encoding::Decoder<'_, D>,
7043            offset: usize,
7044            _depth: fidl::encoding::Depth,
7045        ) -> fidl::Result<()> {
7046            decoder.debug_check_bounds::<Self>(offset);
7047            // Verify that padding bytes are zero.
7048            fidl::decode!(AudioConsumerStatus, D, &mut self.status, decoder, offset + 0, _depth)?;
7049            Ok(())
7050        }
7051    }
7052
7053    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolume2Request {
7054        type Borrowed<'a> = &'a Self;
7055        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7056            value
7057        }
7058    }
7059
7060    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolume2Request {
7061        type Owned = Self;
7062
7063        #[inline(always)]
7064        fn inline_align(_context: fidl::encoding::Context) -> usize {
7065            8
7066        }
7067
7068        #[inline(always)]
7069        fn inline_size(_context: fidl::encoding::Context) -> usize {
7070            24
7071        }
7072    }
7073
7074    unsafe impl<D: fidl::encoding::ResourceDialect>
7075        fidl::encoding::Encode<AudioCoreGetDbFromVolume2Request, D>
7076        for &AudioCoreGetDbFromVolume2Request
7077    {
7078        #[inline]
7079        unsafe fn encode(
7080            self,
7081            encoder: &mut fidl::encoding::Encoder<'_, D>,
7082            offset: usize,
7083            _depth: fidl::encoding::Depth,
7084        ) -> fidl::Result<()> {
7085            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Request>(offset);
7086            // Delegate to tuple encoding.
7087            fidl::encoding::Encode::<AudioCoreGetDbFromVolume2Request, D>::encode(
7088                (
7089                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7090                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),
7091                ),
7092                encoder,
7093                offset,
7094                _depth,
7095            )
7096        }
7097    }
7098    unsafe impl<
7099        D: fidl::encoding::ResourceDialect,
7100        T0: fidl::encoding::Encode<Usage2, D>,
7101        T1: fidl::encoding::Encode<f32, D>,
7102    > fidl::encoding::Encode<AudioCoreGetDbFromVolume2Request, D> for (T0, T1)
7103    {
7104        #[inline]
7105        unsafe fn encode(
7106            self,
7107            encoder: &mut fidl::encoding::Encoder<'_, D>,
7108            offset: usize,
7109            depth: fidl::encoding::Depth,
7110        ) -> fidl::Result<()> {
7111            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Request>(offset);
7112            // Zero out padding regions. There's no need to apply masks
7113            // because the unmasked parts will be overwritten by fields.
7114            unsafe {
7115                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7116                (ptr as *mut u64).write_unaligned(0);
7117            }
7118            // Write the fields.
7119            self.0.encode(encoder, offset + 0, depth)?;
7120            self.1.encode(encoder, offset + 16, depth)?;
7121            Ok(())
7122        }
7123    }
7124
7125    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7126        for AudioCoreGetDbFromVolume2Request
7127    {
7128        #[inline(always)]
7129        fn new_empty() -> Self {
7130            Self { usage: fidl::new_empty!(Usage2, D), volume: fidl::new_empty!(f32, D) }
7131        }
7132
7133        #[inline]
7134        unsafe fn decode(
7135            &mut self,
7136            decoder: &mut fidl::encoding::Decoder<'_, D>,
7137            offset: usize,
7138            _depth: fidl::encoding::Depth,
7139        ) -> fidl::Result<()> {
7140            decoder.debug_check_bounds::<Self>(offset);
7141            // Verify that padding bytes are zero.
7142            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7143            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7144            let mask = 0xffffffff00000000u64;
7145            let maskedval = padval & mask;
7146            if maskedval != 0 {
7147                return Err(fidl::Error::NonZeroPadding {
7148                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7149                });
7150            }
7151            fidl::decode!(Usage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
7152            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 16, _depth)?;
7153            Ok(())
7154        }
7155    }
7156
7157    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolumeRequest {
7158        type Borrowed<'a> = &'a Self;
7159        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7160            value
7161        }
7162    }
7163
7164    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolumeRequest {
7165        type Owned = Self;
7166
7167        #[inline(always)]
7168        fn inline_align(_context: fidl::encoding::Context) -> usize {
7169            8
7170        }
7171
7172        #[inline(always)]
7173        fn inline_size(_context: fidl::encoding::Context) -> usize {
7174            24
7175        }
7176    }
7177
7178    unsafe impl<D: fidl::encoding::ResourceDialect>
7179        fidl::encoding::Encode<AudioCoreGetDbFromVolumeRequest, D>
7180        for &AudioCoreGetDbFromVolumeRequest
7181    {
7182        #[inline]
7183        unsafe fn encode(
7184            self,
7185            encoder: &mut fidl::encoding::Encoder<'_, D>,
7186            offset: usize,
7187            _depth: fidl::encoding::Depth,
7188        ) -> fidl::Result<()> {
7189            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeRequest>(offset);
7190            // Delegate to tuple encoding.
7191            fidl::encoding::Encode::<AudioCoreGetDbFromVolumeRequest, D>::encode(
7192                (
7193                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7194                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),
7195                ),
7196                encoder,
7197                offset,
7198                _depth,
7199            )
7200        }
7201    }
7202    unsafe impl<
7203        D: fidl::encoding::ResourceDialect,
7204        T0: fidl::encoding::Encode<Usage, D>,
7205        T1: fidl::encoding::Encode<f32, D>,
7206    > fidl::encoding::Encode<AudioCoreGetDbFromVolumeRequest, D> for (T0, T1)
7207    {
7208        #[inline]
7209        unsafe fn encode(
7210            self,
7211            encoder: &mut fidl::encoding::Encoder<'_, D>,
7212            offset: usize,
7213            depth: fidl::encoding::Depth,
7214        ) -> fidl::Result<()> {
7215            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeRequest>(offset);
7216            // Zero out padding regions. There's no need to apply masks
7217            // because the unmasked parts will be overwritten by fields.
7218            unsafe {
7219                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7220                (ptr as *mut u64).write_unaligned(0);
7221            }
7222            // Write the fields.
7223            self.0.encode(encoder, offset + 0, depth)?;
7224            self.1.encode(encoder, offset + 16, depth)?;
7225            Ok(())
7226        }
7227    }
7228
7229    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7230        for AudioCoreGetDbFromVolumeRequest
7231    {
7232        #[inline(always)]
7233        fn new_empty() -> Self {
7234            Self { usage: fidl::new_empty!(Usage, D), volume: fidl::new_empty!(f32, D) }
7235        }
7236
7237        #[inline]
7238        unsafe fn decode(
7239            &mut self,
7240            decoder: &mut fidl::encoding::Decoder<'_, D>,
7241            offset: usize,
7242            _depth: fidl::encoding::Depth,
7243        ) -> fidl::Result<()> {
7244            decoder.debug_check_bounds::<Self>(offset);
7245            // Verify that padding bytes are zero.
7246            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7247            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7248            let mask = 0xffffffff00000000u64;
7249            let maskedval = padval & mask;
7250            if maskedval != 0 {
7251                return Err(fidl::Error::NonZeroPadding {
7252                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7253                });
7254            }
7255            fidl::decode!(Usage, D, &mut self.usage, decoder, offset + 0, _depth)?;
7256            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 16, _depth)?;
7257            Ok(())
7258        }
7259    }
7260
7261    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolumeResponse {
7262        type Borrowed<'a> = &'a Self;
7263        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7264            value
7265        }
7266    }
7267
7268    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolumeResponse {
7269        type Owned = Self;
7270
7271        #[inline(always)]
7272        fn inline_align(_context: fidl::encoding::Context) -> usize {
7273            4
7274        }
7275
7276        #[inline(always)]
7277        fn inline_size(_context: fidl::encoding::Context) -> usize {
7278            4
7279        }
7280    }
7281
7282    unsafe impl<D: fidl::encoding::ResourceDialect>
7283        fidl::encoding::Encode<AudioCoreGetDbFromVolumeResponse, D>
7284        for &AudioCoreGetDbFromVolumeResponse
7285    {
7286        #[inline]
7287        unsafe fn encode(
7288            self,
7289            encoder: &mut fidl::encoding::Encoder<'_, D>,
7290            offset: usize,
7291            _depth: fidl::encoding::Depth,
7292        ) -> fidl::Result<()> {
7293            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeResponse>(offset);
7294            // Delegate to tuple encoding.
7295            fidl::encoding::Encode::<AudioCoreGetDbFromVolumeResponse, D>::encode(
7296                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),),
7297                encoder,
7298                offset,
7299                _depth,
7300            )
7301        }
7302    }
7303    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
7304        fidl::encoding::Encode<AudioCoreGetDbFromVolumeResponse, D> for (T0,)
7305    {
7306        #[inline]
7307        unsafe fn encode(
7308            self,
7309            encoder: &mut fidl::encoding::Encoder<'_, D>,
7310            offset: usize,
7311            depth: fidl::encoding::Depth,
7312        ) -> fidl::Result<()> {
7313            encoder.debug_check_bounds::<AudioCoreGetDbFromVolumeResponse>(offset);
7314            // Zero out padding regions. There's no need to apply masks
7315            // because the unmasked parts will be overwritten by fields.
7316            // Write the fields.
7317            self.0.encode(encoder, offset + 0, depth)?;
7318            Ok(())
7319        }
7320    }
7321
7322    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7323        for AudioCoreGetDbFromVolumeResponse
7324    {
7325        #[inline(always)]
7326        fn new_empty() -> Self {
7327            Self { gain_db: fidl::new_empty!(f32, D) }
7328        }
7329
7330        #[inline]
7331        unsafe fn decode(
7332            &mut self,
7333            decoder: &mut fidl::encoding::Decoder<'_, D>,
7334            offset: usize,
7335            _depth: fidl::encoding::Depth,
7336        ) -> fidl::Result<()> {
7337            decoder.debug_check_bounds::<Self>(offset);
7338            // Verify that padding bytes are zero.
7339            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 0, _depth)?;
7340            Ok(())
7341        }
7342    }
7343
7344    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDb2Request {
7345        type Borrowed<'a> = &'a Self;
7346        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7347            value
7348        }
7349    }
7350
7351    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDb2Request {
7352        type Owned = Self;
7353
7354        #[inline(always)]
7355        fn inline_align(_context: fidl::encoding::Context) -> usize {
7356            8
7357        }
7358
7359        #[inline(always)]
7360        fn inline_size(_context: fidl::encoding::Context) -> usize {
7361            24
7362        }
7363    }
7364
7365    unsafe impl<D: fidl::encoding::ResourceDialect>
7366        fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Request, D>
7367        for &AudioCoreGetVolumeFromDb2Request
7368    {
7369        #[inline]
7370        unsafe fn encode(
7371            self,
7372            encoder: &mut fidl::encoding::Encoder<'_, D>,
7373            offset: usize,
7374            _depth: fidl::encoding::Depth,
7375        ) -> fidl::Result<()> {
7376            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Request>(offset);
7377            // Delegate to tuple encoding.
7378            fidl::encoding::Encode::<AudioCoreGetVolumeFromDb2Request, D>::encode(
7379                (
7380                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7381                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7382                ),
7383                encoder,
7384                offset,
7385                _depth,
7386            )
7387        }
7388    }
7389    unsafe impl<
7390        D: fidl::encoding::ResourceDialect,
7391        T0: fidl::encoding::Encode<Usage2, D>,
7392        T1: fidl::encoding::Encode<f32, D>,
7393    > fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Request, D> for (T0, T1)
7394    {
7395        #[inline]
7396        unsafe fn encode(
7397            self,
7398            encoder: &mut fidl::encoding::Encoder<'_, D>,
7399            offset: usize,
7400            depth: fidl::encoding::Depth,
7401        ) -> fidl::Result<()> {
7402            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Request>(offset);
7403            // Zero out padding regions. There's no need to apply masks
7404            // because the unmasked parts will be overwritten by fields.
7405            unsafe {
7406                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7407                (ptr as *mut u64).write_unaligned(0);
7408            }
7409            // Write the fields.
7410            self.0.encode(encoder, offset + 0, depth)?;
7411            self.1.encode(encoder, offset + 16, depth)?;
7412            Ok(())
7413        }
7414    }
7415
7416    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7417        for AudioCoreGetVolumeFromDb2Request
7418    {
7419        #[inline(always)]
7420        fn new_empty() -> Self {
7421            Self { usage: fidl::new_empty!(Usage2, D), gain_db: fidl::new_empty!(f32, D) }
7422        }
7423
7424        #[inline]
7425        unsafe fn decode(
7426            &mut self,
7427            decoder: &mut fidl::encoding::Decoder<'_, D>,
7428            offset: usize,
7429            _depth: fidl::encoding::Depth,
7430        ) -> fidl::Result<()> {
7431            decoder.debug_check_bounds::<Self>(offset);
7432            // Verify that padding bytes are zero.
7433            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7434            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7435            let mask = 0xffffffff00000000u64;
7436            let maskedval = padval & mask;
7437            if maskedval != 0 {
7438                return Err(fidl::Error::NonZeroPadding {
7439                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7440                });
7441            }
7442            fidl::decode!(Usage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
7443            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 16, _depth)?;
7444            Ok(())
7445        }
7446    }
7447
7448    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDbRequest {
7449        type Borrowed<'a> = &'a Self;
7450        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7451            value
7452        }
7453    }
7454
7455    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDbRequest {
7456        type Owned = Self;
7457
7458        #[inline(always)]
7459        fn inline_align(_context: fidl::encoding::Context) -> usize {
7460            8
7461        }
7462
7463        #[inline(always)]
7464        fn inline_size(_context: fidl::encoding::Context) -> usize {
7465            24
7466        }
7467    }
7468
7469    unsafe impl<D: fidl::encoding::ResourceDialect>
7470        fidl::encoding::Encode<AudioCoreGetVolumeFromDbRequest, D>
7471        for &AudioCoreGetVolumeFromDbRequest
7472    {
7473        #[inline]
7474        unsafe fn encode(
7475            self,
7476            encoder: &mut fidl::encoding::Encoder<'_, D>,
7477            offset: usize,
7478            _depth: fidl::encoding::Depth,
7479        ) -> fidl::Result<()> {
7480            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbRequest>(offset);
7481            // Delegate to tuple encoding.
7482            fidl::encoding::Encode::<AudioCoreGetVolumeFromDbRequest, D>::encode(
7483                (
7484                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7485                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7486                ),
7487                encoder,
7488                offset,
7489                _depth,
7490            )
7491        }
7492    }
7493    unsafe impl<
7494        D: fidl::encoding::ResourceDialect,
7495        T0: fidl::encoding::Encode<Usage, D>,
7496        T1: fidl::encoding::Encode<f32, D>,
7497    > fidl::encoding::Encode<AudioCoreGetVolumeFromDbRequest, D> for (T0, T1)
7498    {
7499        #[inline]
7500        unsafe fn encode(
7501            self,
7502            encoder: &mut fidl::encoding::Encoder<'_, D>,
7503            offset: usize,
7504            depth: fidl::encoding::Depth,
7505        ) -> fidl::Result<()> {
7506            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbRequest>(offset);
7507            // Zero out padding regions. There's no need to apply masks
7508            // because the unmasked parts will be overwritten by fields.
7509            unsafe {
7510                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
7511                (ptr as *mut u64).write_unaligned(0);
7512            }
7513            // Write the fields.
7514            self.0.encode(encoder, offset + 0, depth)?;
7515            self.1.encode(encoder, offset + 16, depth)?;
7516            Ok(())
7517        }
7518    }
7519
7520    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7521        for AudioCoreGetVolumeFromDbRequest
7522    {
7523        #[inline(always)]
7524        fn new_empty() -> Self {
7525            Self { usage: fidl::new_empty!(Usage, D), gain_db: fidl::new_empty!(f32, D) }
7526        }
7527
7528        #[inline]
7529        unsafe fn decode(
7530            &mut self,
7531            decoder: &mut fidl::encoding::Decoder<'_, D>,
7532            offset: usize,
7533            _depth: fidl::encoding::Depth,
7534        ) -> fidl::Result<()> {
7535            decoder.debug_check_bounds::<Self>(offset);
7536            // Verify that padding bytes are zero.
7537            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
7538            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7539            let mask = 0xffffffff00000000u64;
7540            let maskedval = padval & mask;
7541            if maskedval != 0 {
7542                return Err(fidl::Error::NonZeroPadding {
7543                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
7544                });
7545            }
7546            fidl::decode!(Usage, D, &mut self.usage, decoder, offset + 0, _depth)?;
7547            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 16, _depth)?;
7548            Ok(())
7549        }
7550    }
7551
7552    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDbResponse {
7553        type Borrowed<'a> = &'a Self;
7554        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7555            value
7556        }
7557    }
7558
7559    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDbResponse {
7560        type Owned = Self;
7561
7562        #[inline(always)]
7563        fn inline_align(_context: fidl::encoding::Context) -> usize {
7564            4
7565        }
7566
7567        #[inline(always)]
7568        fn inline_size(_context: fidl::encoding::Context) -> usize {
7569            4
7570        }
7571    }
7572
7573    unsafe impl<D: fidl::encoding::ResourceDialect>
7574        fidl::encoding::Encode<AudioCoreGetVolumeFromDbResponse, D>
7575        for &AudioCoreGetVolumeFromDbResponse
7576    {
7577        #[inline]
7578        unsafe fn encode(
7579            self,
7580            encoder: &mut fidl::encoding::Encoder<'_, D>,
7581            offset: usize,
7582            _depth: fidl::encoding::Depth,
7583        ) -> fidl::Result<()> {
7584            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbResponse>(offset);
7585            // Delegate to tuple encoding.
7586            fidl::encoding::Encode::<AudioCoreGetVolumeFromDbResponse, D>::encode(
7587                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),),
7588                encoder,
7589                offset,
7590                _depth,
7591            )
7592        }
7593    }
7594    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
7595        fidl::encoding::Encode<AudioCoreGetVolumeFromDbResponse, D> for (T0,)
7596    {
7597        #[inline]
7598        unsafe fn encode(
7599            self,
7600            encoder: &mut fidl::encoding::Encoder<'_, D>,
7601            offset: usize,
7602            depth: fidl::encoding::Depth,
7603        ) -> fidl::Result<()> {
7604            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDbResponse>(offset);
7605            // Zero out padding regions. There's no need to apply masks
7606            // because the unmasked parts will be overwritten by fields.
7607            // Write the fields.
7608            self.0.encode(encoder, offset + 0, depth)?;
7609            Ok(())
7610        }
7611    }
7612
7613    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7614        for AudioCoreGetVolumeFromDbResponse
7615    {
7616        #[inline(always)]
7617        fn new_empty() -> Self {
7618            Self { volume: fidl::new_empty!(f32, D) }
7619        }
7620
7621        #[inline]
7622        unsafe fn decode(
7623            &mut self,
7624            decoder: &mut fidl::encoding::Decoder<'_, D>,
7625            offset: usize,
7626            _depth: fidl::encoding::Depth,
7627        ) -> fidl::Result<()> {
7628            decoder.debug_check_bounds::<Self>(offset);
7629            // Verify that padding bytes are zero.
7630            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 0, _depth)?;
7631            Ok(())
7632        }
7633    }
7634
7635    impl fidl::encoding::ValueTypeMarker for AudioCoreSetCaptureUsageGain2Request {
7636        type Borrowed<'a> = &'a Self;
7637        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7638            value
7639        }
7640    }
7641
7642    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetCaptureUsageGain2Request {
7643        type Owned = Self;
7644
7645        #[inline(always)]
7646        fn inline_align(_context: fidl::encoding::Context) -> usize {
7647            4
7648        }
7649
7650        #[inline(always)]
7651        fn inline_size(_context: fidl::encoding::Context) -> usize {
7652            8
7653        }
7654    }
7655
7656    unsafe impl<D: fidl::encoding::ResourceDialect>
7657        fidl::encoding::Encode<AudioCoreSetCaptureUsageGain2Request, D>
7658        for &AudioCoreSetCaptureUsageGain2Request
7659    {
7660        #[inline]
7661        unsafe fn encode(
7662            self,
7663            encoder: &mut fidl::encoding::Encoder<'_, D>,
7664            offset: usize,
7665            _depth: fidl::encoding::Depth,
7666        ) -> fidl::Result<()> {
7667            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGain2Request>(offset);
7668            // Delegate to tuple encoding.
7669            fidl::encoding::Encode::<AudioCoreSetCaptureUsageGain2Request, D>::encode(
7670                (
7671                    <AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7672                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7673                ),
7674                encoder,
7675                offset,
7676                _depth,
7677            )
7678        }
7679    }
7680    unsafe impl<
7681        D: fidl::encoding::ResourceDialect,
7682        T0: fidl::encoding::Encode<AudioCaptureUsage2, D>,
7683        T1: fidl::encoding::Encode<f32, D>,
7684    > fidl::encoding::Encode<AudioCoreSetCaptureUsageGain2Request, D> for (T0, T1)
7685    {
7686        #[inline]
7687        unsafe fn encode(
7688            self,
7689            encoder: &mut fidl::encoding::Encoder<'_, D>,
7690            offset: usize,
7691            depth: fidl::encoding::Depth,
7692        ) -> fidl::Result<()> {
7693            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGain2Request>(offset);
7694            // Zero out padding regions. There's no need to apply masks
7695            // because the unmasked parts will be overwritten by fields.
7696            // Write the fields.
7697            self.0.encode(encoder, offset + 0, depth)?;
7698            self.1.encode(encoder, offset + 4, depth)?;
7699            Ok(())
7700        }
7701    }
7702
7703    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7704        for AudioCoreSetCaptureUsageGain2Request
7705    {
7706        #[inline(always)]
7707        fn new_empty() -> Self {
7708            Self {
7709                usage: fidl::new_empty!(AudioCaptureUsage2, D),
7710                gain_db: fidl::new_empty!(f32, D),
7711            }
7712        }
7713
7714        #[inline]
7715        unsafe fn decode(
7716            &mut self,
7717            decoder: &mut fidl::encoding::Decoder<'_, D>,
7718            offset: usize,
7719            _depth: fidl::encoding::Depth,
7720        ) -> fidl::Result<()> {
7721            decoder.debug_check_bounds::<Self>(offset);
7722            // Verify that padding bytes are zero.
7723            fidl::decode!(AudioCaptureUsage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
7724            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
7725            Ok(())
7726        }
7727    }
7728
7729    impl fidl::encoding::ValueTypeMarker for AudioCoreSetCaptureUsageGainRequest {
7730        type Borrowed<'a> = &'a Self;
7731        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7732            value
7733        }
7734    }
7735
7736    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetCaptureUsageGainRequest {
7737        type Owned = Self;
7738
7739        #[inline(always)]
7740        fn inline_align(_context: fidl::encoding::Context) -> usize {
7741            4
7742        }
7743
7744        #[inline(always)]
7745        fn inline_size(_context: fidl::encoding::Context) -> usize {
7746            8
7747        }
7748    }
7749
7750    unsafe impl<D: fidl::encoding::ResourceDialect>
7751        fidl::encoding::Encode<AudioCoreSetCaptureUsageGainRequest, D>
7752        for &AudioCoreSetCaptureUsageGainRequest
7753    {
7754        #[inline]
7755        unsafe fn encode(
7756            self,
7757            encoder: &mut fidl::encoding::Encoder<'_, D>,
7758            offset: usize,
7759            _depth: fidl::encoding::Depth,
7760        ) -> fidl::Result<()> {
7761            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGainRequest>(offset);
7762            // Delegate to tuple encoding.
7763            fidl::encoding::Encode::<AudioCoreSetCaptureUsageGainRequest, D>::encode(
7764                (
7765                    <AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
7766                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
7767                ),
7768                encoder,
7769                offset,
7770                _depth,
7771            )
7772        }
7773    }
7774    unsafe impl<
7775        D: fidl::encoding::ResourceDialect,
7776        T0: fidl::encoding::Encode<AudioCaptureUsage, D>,
7777        T1: fidl::encoding::Encode<f32, D>,
7778    > fidl::encoding::Encode<AudioCoreSetCaptureUsageGainRequest, D> for (T0, T1)
7779    {
7780        #[inline]
7781        unsafe fn encode(
7782            self,
7783            encoder: &mut fidl::encoding::Encoder<'_, D>,
7784            offset: usize,
7785            depth: fidl::encoding::Depth,
7786        ) -> fidl::Result<()> {
7787            encoder.debug_check_bounds::<AudioCoreSetCaptureUsageGainRequest>(offset);
7788            // Zero out padding regions. There's no need to apply masks
7789            // because the unmasked parts will be overwritten by fields.
7790            // Write the fields.
7791            self.0.encode(encoder, offset + 0, depth)?;
7792            self.1.encode(encoder, offset + 4, depth)?;
7793            Ok(())
7794        }
7795    }
7796
7797    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7798        for AudioCoreSetCaptureUsageGainRequest
7799    {
7800        #[inline(always)]
7801        fn new_empty() -> Self {
7802            Self {
7803                usage: fidl::new_empty!(AudioCaptureUsage, D),
7804                gain_db: fidl::new_empty!(f32, D),
7805            }
7806        }
7807
7808        #[inline]
7809        unsafe fn decode(
7810            &mut self,
7811            decoder: &mut fidl::encoding::Decoder<'_, D>,
7812            offset: usize,
7813            _depth: fidl::encoding::Depth,
7814        ) -> fidl::Result<()> {
7815            decoder.debug_check_bounds::<Self>(offset);
7816            // Verify that padding bytes are zero.
7817            fidl::decode!(AudioCaptureUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
7818            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
7819            Ok(())
7820        }
7821    }
7822
7823    impl fidl::encoding::ValueTypeMarker for AudioCoreSetInteraction2Request {
7824        type Borrowed<'a> = &'a Self;
7825        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7826            value
7827        }
7828    }
7829
7830    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetInteraction2Request {
7831        type Owned = Self;
7832
7833        #[inline(always)]
7834        fn inline_align(_context: fidl::encoding::Context) -> usize {
7835            8
7836        }
7837
7838        #[inline(always)]
7839        fn inline_size(_context: fidl::encoding::Context) -> usize {
7840            40
7841        }
7842    }
7843
7844    unsafe impl<D: fidl::encoding::ResourceDialect>
7845        fidl::encoding::Encode<AudioCoreSetInteraction2Request, D>
7846        for &AudioCoreSetInteraction2Request
7847    {
7848        #[inline]
7849        unsafe fn encode(
7850            self,
7851            encoder: &mut fidl::encoding::Encoder<'_, D>,
7852            offset: usize,
7853            _depth: fidl::encoding::Depth,
7854        ) -> fidl::Result<()> {
7855            encoder.debug_check_bounds::<AudioCoreSetInteraction2Request>(offset);
7856            // Delegate to tuple encoding.
7857            fidl::encoding::Encode::<AudioCoreSetInteraction2Request, D>::encode(
7858                (
7859                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.active),
7860                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.affected),
7861                    <Behavior as fidl::encoding::ValueTypeMarker>::borrow(&self.behavior),
7862                ),
7863                encoder,
7864                offset,
7865                _depth,
7866            )
7867        }
7868    }
7869    unsafe impl<
7870        D: fidl::encoding::ResourceDialect,
7871        T0: fidl::encoding::Encode<Usage2, D>,
7872        T1: fidl::encoding::Encode<Usage2, D>,
7873        T2: fidl::encoding::Encode<Behavior, D>,
7874    > fidl::encoding::Encode<AudioCoreSetInteraction2Request, D> for (T0, T1, T2)
7875    {
7876        #[inline]
7877        unsafe fn encode(
7878            self,
7879            encoder: &mut fidl::encoding::Encoder<'_, D>,
7880            offset: usize,
7881            depth: fidl::encoding::Depth,
7882        ) -> fidl::Result<()> {
7883            encoder.debug_check_bounds::<AudioCoreSetInteraction2Request>(offset);
7884            // Zero out padding regions. There's no need to apply masks
7885            // because the unmasked parts will be overwritten by fields.
7886            unsafe {
7887                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
7888                (ptr as *mut u64).write_unaligned(0);
7889            }
7890            // Write the fields.
7891            self.0.encode(encoder, offset + 0, depth)?;
7892            self.1.encode(encoder, offset + 16, depth)?;
7893            self.2.encode(encoder, offset + 32, depth)?;
7894            Ok(())
7895        }
7896    }
7897
7898    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7899        for AudioCoreSetInteraction2Request
7900    {
7901        #[inline(always)]
7902        fn new_empty() -> Self {
7903            Self {
7904                active: fidl::new_empty!(Usage2, D),
7905                affected: fidl::new_empty!(Usage2, D),
7906                behavior: fidl::new_empty!(Behavior, D),
7907            }
7908        }
7909
7910        #[inline]
7911        unsafe fn decode(
7912            &mut self,
7913            decoder: &mut fidl::encoding::Decoder<'_, D>,
7914            offset: usize,
7915            _depth: fidl::encoding::Depth,
7916        ) -> fidl::Result<()> {
7917            decoder.debug_check_bounds::<Self>(offset);
7918            // Verify that padding bytes are zero.
7919            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
7920            let padval = unsafe { (ptr as *const u64).read_unaligned() };
7921            let mask = 0xffffffff00000000u64;
7922            let maskedval = padval & mask;
7923            if maskedval != 0 {
7924                return Err(fidl::Error::NonZeroPadding {
7925                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
7926                });
7927            }
7928            fidl::decode!(Usage2, D, &mut self.active, decoder, offset + 0, _depth)?;
7929            fidl::decode!(Usage2, D, &mut self.affected, decoder, offset + 16, _depth)?;
7930            fidl::decode!(Behavior, D, &mut self.behavior, decoder, offset + 32, _depth)?;
7931            Ok(())
7932        }
7933    }
7934
7935    impl fidl::encoding::ValueTypeMarker for AudioCoreSetInteractionRequest {
7936        type Borrowed<'a> = &'a Self;
7937        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7938            value
7939        }
7940    }
7941
7942    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetInteractionRequest {
7943        type Owned = Self;
7944
7945        #[inline(always)]
7946        fn inline_align(_context: fidl::encoding::Context) -> usize {
7947            8
7948        }
7949
7950        #[inline(always)]
7951        fn inline_size(_context: fidl::encoding::Context) -> usize {
7952            40
7953        }
7954    }
7955
7956    unsafe impl<D: fidl::encoding::ResourceDialect>
7957        fidl::encoding::Encode<AudioCoreSetInteractionRequest, D>
7958        for &AudioCoreSetInteractionRequest
7959    {
7960        #[inline]
7961        unsafe fn encode(
7962            self,
7963            encoder: &mut fidl::encoding::Encoder<'_, D>,
7964            offset: usize,
7965            _depth: fidl::encoding::Depth,
7966        ) -> fidl::Result<()> {
7967            encoder.debug_check_bounds::<AudioCoreSetInteractionRequest>(offset);
7968            // Delegate to tuple encoding.
7969            fidl::encoding::Encode::<AudioCoreSetInteractionRequest, D>::encode(
7970                (
7971                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.active),
7972                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.affected),
7973                    <Behavior as fidl::encoding::ValueTypeMarker>::borrow(&self.behavior),
7974                ),
7975                encoder,
7976                offset,
7977                _depth,
7978            )
7979        }
7980    }
7981    unsafe impl<
7982        D: fidl::encoding::ResourceDialect,
7983        T0: fidl::encoding::Encode<Usage, D>,
7984        T1: fidl::encoding::Encode<Usage, D>,
7985        T2: fidl::encoding::Encode<Behavior, D>,
7986    > fidl::encoding::Encode<AudioCoreSetInteractionRequest, D> for (T0, T1, T2)
7987    {
7988        #[inline]
7989        unsafe fn encode(
7990            self,
7991            encoder: &mut fidl::encoding::Encoder<'_, D>,
7992            offset: usize,
7993            depth: fidl::encoding::Depth,
7994        ) -> fidl::Result<()> {
7995            encoder.debug_check_bounds::<AudioCoreSetInteractionRequest>(offset);
7996            // Zero out padding regions. There's no need to apply masks
7997            // because the unmasked parts will be overwritten by fields.
7998            unsafe {
7999                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
8000                (ptr as *mut u64).write_unaligned(0);
8001            }
8002            // Write the fields.
8003            self.0.encode(encoder, offset + 0, depth)?;
8004            self.1.encode(encoder, offset + 16, depth)?;
8005            self.2.encode(encoder, offset + 32, depth)?;
8006            Ok(())
8007        }
8008    }
8009
8010    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8011        for AudioCoreSetInteractionRequest
8012    {
8013        #[inline(always)]
8014        fn new_empty() -> Self {
8015            Self {
8016                active: fidl::new_empty!(Usage, D),
8017                affected: fidl::new_empty!(Usage, D),
8018                behavior: fidl::new_empty!(Behavior, D),
8019            }
8020        }
8021
8022        #[inline]
8023        unsafe fn decode(
8024            &mut self,
8025            decoder: &mut fidl::encoding::Decoder<'_, D>,
8026            offset: usize,
8027            _depth: fidl::encoding::Depth,
8028        ) -> fidl::Result<()> {
8029            decoder.debug_check_bounds::<Self>(offset);
8030            // Verify that padding bytes are zero.
8031            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(32) };
8032            let padval = unsafe { (ptr as *const u64).read_unaligned() };
8033            let mask = 0xffffffff00000000u64;
8034            let maskedval = padval & mask;
8035            if maskedval != 0 {
8036                return Err(fidl::Error::NonZeroPadding {
8037                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
8038                });
8039            }
8040            fidl::decode!(Usage, D, &mut self.active, decoder, offset + 0, _depth)?;
8041            fidl::decode!(Usage, D, &mut self.affected, decoder, offset + 16, _depth)?;
8042            fidl::decode!(Behavior, D, &mut self.behavior, decoder, offset + 32, _depth)?;
8043            Ok(())
8044        }
8045    }
8046
8047    impl fidl::encoding::ValueTypeMarker for AudioCoreSetRenderUsageGain2Request {
8048        type Borrowed<'a> = &'a Self;
8049        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8050            value
8051        }
8052    }
8053
8054    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetRenderUsageGain2Request {
8055        type Owned = Self;
8056
8057        #[inline(always)]
8058        fn inline_align(_context: fidl::encoding::Context) -> usize {
8059            4
8060        }
8061
8062        #[inline(always)]
8063        fn inline_size(_context: fidl::encoding::Context) -> usize {
8064            8
8065        }
8066    }
8067
8068    unsafe impl<D: fidl::encoding::ResourceDialect>
8069        fidl::encoding::Encode<AudioCoreSetRenderUsageGain2Request, D>
8070        for &AudioCoreSetRenderUsageGain2Request
8071    {
8072        #[inline]
8073        unsafe fn encode(
8074            self,
8075            encoder: &mut fidl::encoding::Encoder<'_, D>,
8076            offset: usize,
8077            _depth: fidl::encoding::Depth,
8078        ) -> fidl::Result<()> {
8079            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGain2Request>(offset);
8080            // Delegate to tuple encoding.
8081            fidl::encoding::Encode::<AudioCoreSetRenderUsageGain2Request, D>::encode(
8082                (
8083                    <AudioRenderUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
8084                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
8085                ),
8086                encoder,
8087                offset,
8088                _depth,
8089            )
8090        }
8091    }
8092    unsafe impl<
8093        D: fidl::encoding::ResourceDialect,
8094        T0: fidl::encoding::Encode<AudioRenderUsage2, D>,
8095        T1: fidl::encoding::Encode<f32, D>,
8096    > fidl::encoding::Encode<AudioCoreSetRenderUsageGain2Request, D> for (T0, T1)
8097    {
8098        #[inline]
8099        unsafe fn encode(
8100            self,
8101            encoder: &mut fidl::encoding::Encoder<'_, D>,
8102            offset: usize,
8103            depth: fidl::encoding::Depth,
8104        ) -> fidl::Result<()> {
8105            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGain2Request>(offset);
8106            // Zero out padding regions. There's no need to apply masks
8107            // because the unmasked parts will be overwritten by fields.
8108            // Write the fields.
8109            self.0.encode(encoder, offset + 0, depth)?;
8110            self.1.encode(encoder, offset + 4, depth)?;
8111            Ok(())
8112        }
8113    }
8114
8115    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8116        for AudioCoreSetRenderUsageGain2Request
8117    {
8118        #[inline(always)]
8119        fn new_empty() -> Self {
8120            Self {
8121                usage: fidl::new_empty!(AudioRenderUsage2, D),
8122                gain_db: fidl::new_empty!(f32, D),
8123            }
8124        }
8125
8126        #[inline]
8127        unsafe fn decode(
8128            &mut self,
8129            decoder: &mut fidl::encoding::Decoder<'_, D>,
8130            offset: usize,
8131            _depth: fidl::encoding::Depth,
8132        ) -> fidl::Result<()> {
8133            decoder.debug_check_bounds::<Self>(offset);
8134            // Verify that padding bytes are zero.
8135            fidl::decode!(AudioRenderUsage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
8136            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
8137            Ok(())
8138        }
8139    }
8140
8141    impl fidl::encoding::ValueTypeMarker for AudioCoreSetRenderUsageGainRequest {
8142        type Borrowed<'a> = &'a Self;
8143        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8144            value
8145        }
8146    }
8147
8148    unsafe impl fidl::encoding::TypeMarker for AudioCoreSetRenderUsageGainRequest {
8149        type Owned = Self;
8150
8151        #[inline(always)]
8152        fn inline_align(_context: fidl::encoding::Context) -> usize {
8153            4
8154        }
8155
8156        #[inline(always)]
8157        fn inline_size(_context: fidl::encoding::Context) -> usize {
8158            8
8159        }
8160    }
8161
8162    unsafe impl<D: fidl::encoding::ResourceDialect>
8163        fidl::encoding::Encode<AudioCoreSetRenderUsageGainRequest, D>
8164        for &AudioCoreSetRenderUsageGainRequest
8165    {
8166        #[inline]
8167        unsafe fn encode(
8168            self,
8169            encoder: &mut fidl::encoding::Encoder<'_, D>,
8170            offset: usize,
8171            _depth: fidl::encoding::Depth,
8172        ) -> fidl::Result<()> {
8173            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGainRequest>(offset);
8174            // Delegate to tuple encoding.
8175            fidl::encoding::Encode::<AudioCoreSetRenderUsageGainRequest, D>::encode(
8176                (
8177                    <AudioRenderUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
8178                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
8179                ),
8180                encoder,
8181                offset,
8182                _depth,
8183            )
8184        }
8185    }
8186    unsafe impl<
8187        D: fidl::encoding::ResourceDialect,
8188        T0: fidl::encoding::Encode<AudioRenderUsage, D>,
8189        T1: fidl::encoding::Encode<f32, D>,
8190    > fidl::encoding::Encode<AudioCoreSetRenderUsageGainRequest, D> for (T0, T1)
8191    {
8192        #[inline]
8193        unsafe fn encode(
8194            self,
8195            encoder: &mut fidl::encoding::Encoder<'_, D>,
8196            offset: usize,
8197            depth: fidl::encoding::Depth,
8198        ) -> fidl::Result<()> {
8199            encoder.debug_check_bounds::<AudioCoreSetRenderUsageGainRequest>(offset);
8200            // Zero out padding regions. There's no need to apply masks
8201            // because the unmasked parts will be overwritten by fields.
8202            // Write the fields.
8203            self.0.encode(encoder, offset + 0, depth)?;
8204            self.1.encode(encoder, offset + 4, depth)?;
8205            Ok(())
8206        }
8207    }
8208
8209    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8210        for AudioCoreSetRenderUsageGainRequest
8211    {
8212        #[inline(always)]
8213        fn new_empty() -> Self {
8214            Self { usage: fidl::new_empty!(AudioRenderUsage, D), gain_db: fidl::new_empty!(f32, D) }
8215        }
8216
8217        #[inline]
8218        unsafe fn decode(
8219            &mut self,
8220            decoder: &mut fidl::encoding::Decoder<'_, D>,
8221            offset: usize,
8222            _depth: fidl::encoding::Depth,
8223        ) -> fidl::Result<()> {
8224            decoder.debug_check_bounds::<Self>(offset);
8225            // Verify that padding bytes are zero.
8226            fidl::decode!(AudioRenderUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
8227            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 4, _depth)?;
8228            Ok(())
8229        }
8230    }
8231
8232    impl fidl::encoding::ValueTypeMarker for AudioCoreGetDbFromVolume2Response {
8233        type Borrowed<'a> = &'a Self;
8234        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8235            value
8236        }
8237    }
8238
8239    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetDbFromVolume2Response {
8240        type Owned = Self;
8241
8242        #[inline(always)]
8243        fn inline_align(_context: fidl::encoding::Context) -> usize {
8244            4
8245        }
8246
8247        #[inline(always)]
8248        fn inline_size(_context: fidl::encoding::Context) -> usize {
8249            4
8250        }
8251    }
8252
8253    unsafe impl<D: fidl::encoding::ResourceDialect>
8254        fidl::encoding::Encode<AudioCoreGetDbFromVolume2Response, D>
8255        for &AudioCoreGetDbFromVolume2Response
8256    {
8257        #[inline]
8258        unsafe fn encode(
8259            self,
8260            encoder: &mut fidl::encoding::Encoder<'_, D>,
8261            offset: usize,
8262            _depth: fidl::encoding::Depth,
8263        ) -> fidl::Result<()> {
8264            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Response>(offset);
8265            // Delegate to tuple encoding.
8266            fidl::encoding::Encode::<AudioCoreGetDbFromVolume2Response, D>::encode(
8267                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),),
8268                encoder,
8269                offset,
8270                _depth,
8271            )
8272        }
8273    }
8274    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
8275        fidl::encoding::Encode<AudioCoreGetDbFromVolume2Response, D> for (T0,)
8276    {
8277        #[inline]
8278        unsafe fn encode(
8279            self,
8280            encoder: &mut fidl::encoding::Encoder<'_, D>,
8281            offset: usize,
8282            depth: fidl::encoding::Depth,
8283        ) -> fidl::Result<()> {
8284            encoder.debug_check_bounds::<AudioCoreGetDbFromVolume2Response>(offset);
8285            // Zero out padding regions. There's no need to apply masks
8286            // because the unmasked parts will be overwritten by fields.
8287            // Write the fields.
8288            self.0.encode(encoder, offset + 0, depth)?;
8289            Ok(())
8290        }
8291    }
8292
8293    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8294        for AudioCoreGetDbFromVolume2Response
8295    {
8296        #[inline(always)]
8297        fn new_empty() -> Self {
8298            Self { gain_db: fidl::new_empty!(f32, D) }
8299        }
8300
8301        #[inline]
8302        unsafe fn decode(
8303            &mut self,
8304            decoder: &mut fidl::encoding::Decoder<'_, D>,
8305            offset: usize,
8306            _depth: fidl::encoding::Depth,
8307        ) -> fidl::Result<()> {
8308            decoder.debug_check_bounds::<Self>(offset);
8309            // Verify that padding bytes are zero.
8310            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 0, _depth)?;
8311            Ok(())
8312        }
8313    }
8314
8315    impl fidl::encoding::ValueTypeMarker for AudioCoreGetVolumeFromDb2Response {
8316        type Borrowed<'a> = &'a Self;
8317        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8318            value
8319        }
8320    }
8321
8322    unsafe impl fidl::encoding::TypeMarker for AudioCoreGetVolumeFromDb2Response {
8323        type Owned = Self;
8324
8325        #[inline(always)]
8326        fn inline_align(_context: fidl::encoding::Context) -> usize {
8327            4
8328        }
8329
8330        #[inline(always)]
8331        fn inline_size(_context: fidl::encoding::Context) -> usize {
8332            4
8333        }
8334    }
8335
8336    unsafe impl<D: fidl::encoding::ResourceDialect>
8337        fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Response, D>
8338        for &AudioCoreGetVolumeFromDb2Response
8339    {
8340        #[inline]
8341        unsafe fn encode(
8342            self,
8343            encoder: &mut fidl::encoding::Encoder<'_, D>,
8344            offset: usize,
8345            _depth: fidl::encoding::Depth,
8346        ) -> fidl::Result<()> {
8347            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Response>(offset);
8348            // Delegate to tuple encoding.
8349            fidl::encoding::Encode::<AudioCoreGetVolumeFromDb2Response, D>::encode(
8350                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.volume),),
8351                encoder,
8352                offset,
8353                _depth,
8354            )
8355        }
8356    }
8357    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
8358        fidl::encoding::Encode<AudioCoreGetVolumeFromDb2Response, D> for (T0,)
8359    {
8360        #[inline]
8361        unsafe fn encode(
8362            self,
8363            encoder: &mut fidl::encoding::Encoder<'_, D>,
8364            offset: usize,
8365            depth: fidl::encoding::Depth,
8366        ) -> fidl::Result<()> {
8367            encoder.debug_check_bounds::<AudioCoreGetVolumeFromDb2Response>(offset);
8368            // Zero out padding regions. There's no need to apply masks
8369            // because the unmasked parts will be overwritten by fields.
8370            // Write the fields.
8371            self.0.encode(encoder, offset + 0, depth)?;
8372            Ok(())
8373        }
8374    }
8375
8376    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8377        for AudioCoreGetVolumeFromDb2Response
8378    {
8379        #[inline(always)]
8380        fn new_empty() -> Self {
8381            Self { volume: fidl::new_empty!(f32, D) }
8382        }
8383
8384        #[inline]
8385        unsafe fn decode(
8386            &mut self,
8387            decoder: &mut fidl::encoding::Decoder<'_, D>,
8388            offset: usize,
8389            _depth: fidl::encoding::Depth,
8390        ) -> fidl::Result<()> {
8391            decoder.debug_check_bounds::<Self>(offset);
8392            // Verify that padding bytes are zero.
8393            fidl::decode!(f32, D, &mut self.volume, decoder, offset + 0, _depth)?;
8394            Ok(())
8395        }
8396    }
8397
8398    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorGetDeviceGainRequest {
8399        type Borrowed<'a> = &'a Self;
8400        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8401            value
8402        }
8403    }
8404
8405    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorGetDeviceGainRequest {
8406        type Owned = Self;
8407
8408        #[inline(always)]
8409        fn inline_align(_context: fidl::encoding::Context) -> usize {
8410            8
8411        }
8412
8413        #[inline(always)]
8414        fn inline_size(_context: fidl::encoding::Context) -> usize {
8415            8
8416        }
8417        #[inline(always)]
8418        fn encode_is_copy() -> bool {
8419            true
8420        }
8421
8422        #[inline(always)]
8423        fn decode_is_copy() -> bool {
8424            true
8425        }
8426    }
8427
8428    unsafe impl<D: fidl::encoding::ResourceDialect>
8429        fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainRequest, D>
8430        for &AudioDeviceEnumeratorGetDeviceGainRequest
8431    {
8432        #[inline]
8433        unsafe fn encode(
8434            self,
8435            encoder: &mut fidl::encoding::Encoder<'_, D>,
8436            offset: usize,
8437            _depth: fidl::encoding::Depth,
8438        ) -> fidl::Result<()> {
8439            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainRequest>(offset);
8440            unsafe {
8441                // Copy the object into the buffer.
8442                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
8443                (buf_ptr as *mut AudioDeviceEnumeratorGetDeviceGainRequest).write_unaligned(
8444                    (self as *const AudioDeviceEnumeratorGetDeviceGainRequest).read(),
8445                );
8446                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
8447                // done second because the memcpy will write garbage to these bytes.
8448            }
8449            Ok(())
8450        }
8451    }
8452    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
8453        fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainRequest, D> for (T0,)
8454    {
8455        #[inline]
8456        unsafe fn encode(
8457            self,
8458            encoder: &mut fidl::encoding::Encoder<'_, D>,
8459            offset: usize,
8460            depth: fidl::encoding::Depth,
8461        ) -> fidl::Result<()> {
8462            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainRequest>(offset);
8463            // Zero out padding regions. There's no need to apply masks
8464            // because the unmasked parts will be overwritten by fields.
8465            // Write the fields.
8466            self.0.encode(encoder, offset + 0, depth)?;
8467            Ok(())
8468        }
8469    }
8470
8471    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8472        for AudioDeviceEnumeratorGetDeviceGainRequest
8473    {
8474        #[inline(always)]
8475        fn new_empty() -> Self {
8476            Self { device_token: fidl::new_empty!(u64, D) }
8477        }
8478
8479        #[inline]
8480        unsafe fn decode(
8481            &mut self,
8482            decoder: &mut fidl::encoding::Decoder<'_, D>,
8483            offset: usize,
8484            _depth: fidl::encoding::Depth,
8485        ) -> fidl::Result<()> {
8486            decoder.debug_check_bounds::<Self>(offset);
8487            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
8488            // Verify that padding bytes are zero.
8489            // Copy from the buffer into the object.
8490            unsafe {
8491                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
8492            }
8493            Ok(())
8494        }
8495    }
8496
8497    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorGetDeviceGainResponse {
8498        type Borrowed<'a> = &'a Self;
8499        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8500            value
8501        }
8502    }
8503
8504    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorGetDeviceGainResponse {
8505        type Owned = Self;
8506
8507        #[inline(always)]
8508        fn inline_align(_context: fidl::encoding::Context) -> usize {
8509            8
8510        }
8511
8512        #[inline(always)]
8513        fn inline_size(_context: fidl::encoding::Context) -> usize {
8514            16
8515        }
8516    }
8517
8518    unsafe impl<D: fidl::encoding::ResourceDialect>
8519        fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainResponse, D>
8520        for &AudioDeviceEnumeratorGetDeviceGainResponse
8521    {
8522        #[inline]
8523        unsafe fn encode(
8524            self,
8525            encoder: &mut fidl::encoding::Encoder<'_, D>,
8526            offset: usize,
8527            _depth: fidl::encoding::Depth,
8528        ) -> fidl::Result<()> {
8529            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainResponse>(offset);
8530            // Delegate to tuple encoding.
8531            fidl::encoding::Encode::<AudioDeviceEnumeratorGetDeviceGainResponse, D>::encode(
8532                (
8533                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_token),
8534                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
8535                ),
8536                encoder,
8537                offset,
8538                _depth,
8539            )
8540        }
8541    }
8542    unsafe impl<
8543        D: fidl::encoding::ResourceDialect,
8544        T0: fidl::encoding::Encode<u64, D>,
8545        T1: fidl::encoding::Encode<AudioGainInfo, D>,
8546    > fidl::encoding::Encode<AudioDeviceEnumeratorGetDeviceGainResponse, D> for (T0, T1)
8547    {
8548        #[inline]
8549        unsafe fn encode(
8550            self,
8551            encoder: &mut fidl::encoding::Encoder<'_, D>,
8552            offset: usize,
8553            depth: fidl::encoding::Depth,
8554        ) -> fidl::Result<()> {
8555            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDeviceGainResponse>(offset);
8556            // Zero out padding regions. There's no need to apply masks
8557            // because the unmasked parts will be overwritten by fields.
8558            // Write the fields.
8559            self.0.encode(encoder, offset + 0, depth)?;
8560            self.1.encode(encoder, offset + 8, depth)?;
8561            Ok(())
8562        }
8563    }
8564
8565    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8566        for AudioDeviceEnumeratorGetDeviceGainResponse
8567    {
8568        #[inline(always)]
8569        fn new_empty() -> Self {
8570            Self {
8571                device_token: fidl::new_empty!(u64, D),
8572                gain_info: fidl::new_empty!(AudioGainInfo, D),
8573            }
8574        }
8575
8576        #[inline]
8577        unsafe fn decode(
8578            &mut self,
8579            decoder: &mut fidl::encoding::Decoder<'_, D>,
8580            offset: usize,
8581            _depth: fidl::encoding::Depth,
8582        ) -> fidl::Result<()> {
8583            decoder.debug_check_bounds::<Self>(offset);
8584            // Verify that padding bytes are zero.
8585            fidl::decode!(u64, D, &mut self.device_token, decoder, offset + 0, _depth)?;
8586            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 8, _depth)?;
8587            Ok(())
8588        }
8589    }
8590
8591    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorGetDevicesResponse {
8592        type Borrowed<'a> = &'a Self;
8593        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8594            value
8595        }
8596    }
8597
8598    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorGetDevicesResponse {
8599        type Owned = Self;
8600
8601        #[inline(always)]
8602        fn inline_align(_context: fidl::encoding::Context) -> usize {
8603            8
8604        }
8605
8606        #[inline(always)]
8607        fn inline_size(_context: fidl::encoding::Context) -> usize {
8608            16
8609        }
8610    }
8611
8612    unsafe impl<D: fidl::encoding::ResourceDialect>
8613        fidl::encoding::Encode<AudioDeviceEnumeratorGetDevicesResponse, D>
8614        for &AudioDeviceEnumeratorGetDevicesResponse
8615    {
8616        #[inline]
8617        unsafe fn encode(
8618            self,
8619            encoder: &mut fidl::encoding::Encoder<'_, D>,
8620            offset: usize,
8621            _depth: fidl::encoding::Depth,
8622        ) -> fidl::Result<()> {
8623            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDevicesResponse>(offset);
8624            // Delegate to tuple encoding.
8625            fidl::encoding::Encode::<AudioDeviceEnumeratorGetDevicesResponse, D>::encode(
8626                (
8627                    <fidl::encoding::UnboundedVector<AudioDeviceInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.devices),
8628                ),
8629                encoder, offset, _depth
8630            )
8631        }
8632    }
8633    unsafe impl<
8634        D: fidl::encoding::ResourceDialect,
8635        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<AudioDeviceInfo>, D>,
8636    > fidl::encoding::Encode<AudioDeviceEnumeratorGetDevicesResponse, D> for (T0,)
8637    {
8638        #[inline]
8639        unsafe fn encode(
8640            self,
8641            encoder: &mut fidl::encoding::Encoder<'_, D>,
8642            offset: usize,
8643            depth: fidl::encoding::Depth,
8644        ) -> fidl::Result<()> {
8645            encoder.debug_check_bounds::<AudioDeviceEnumeratorGetDevicesResponse>(offset);
8646            // Zero out padding regions. There's no need to apply masks
8647            // because the unmasked parts will be overwritten by fields.
8648            // Write the fields.
8649            self.0.encode(encoder, offset + 0, depth)?;
8650            Ok(())
8651        }
8652    }
8653
8654    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8655        for AudioDeviceEnumeratorGetDevicesResponse
8656    {
8657        #[inline(always)]
8658        fn new_empty() -> Self {
8659            Self { devices: fidl::new_empty!(fidl::encoding::UnboundedVector<AudioDeviceInfo>, D) }
8660        }
8661
8662        #[inline]
8663        unsafe fn decode(
8664            &mut self,
8665            decoder: &mut fidl::encoding::Decoder<'_, D>,
8666            offset: usize,
8667            _depth: fidl::encoding::Depth,
8668        ) -> fidl::Result<()> {
8669            decoder.debug_check_bounds::<Self>(offset);
8670            // Verify that padding bytes are zero.
8671            fidl::decode!(
8672                fidl::encoding::UnboundedVector<AudioDeviceInfo>,
8673                D,
8674                &mut self.devices,
8675                decoder,
8676                offset + 0,
8677                _depth
8678            )?;
8679            Ok(())
8680        }
8681    }
8682
8683    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {
8684        type Borrowed<'a> = &'a Self;
8685        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8686            value
8687        }
8688    }
8689
8690    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest {
8691        type Owned = Self;
8692
8693        #[inline(always)]
8694        fn inline_align(_context: fidl::encoding::Context) -> usize {
8695            8
8696        }
8697
8698        #[inline(always)]
8699        fn inline_size(_context: fidl::encoding::Context) -> usize {
8700            16
8701        }
8702        #[inline(always)]
8703        fn encode_is_copy() -> bool {
8704            true
8705        }
8706
8707        #[inline(always)]
8708        fn decode_is_copy() -> bool {
8709            true
8710        }
8711    }
8712
8713    unsafe impl<D: fidl::encoding::ResourceDialect>
8714        fidl::encoding::Encode<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest, D>
8715        for &AudioDeviceEnumeratorOnDefaultDeviceChangedRequest
8716    {
8717        #[inline]
8718        unsafe fn encode(
8719            self,
8720            encoder: &mut fidl::encoding::Encoder<'_, D>,
8721            offset: usize,
8722            _depth: fidl::encoding::Depth,
8723        ) -> fidl::Result<()> {
8724            encoder
8725                .debug_check_bounds::<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest>(offset);
8726            unsafe {
8727                // Copy the object into the buffer.
8728                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
8729                (buf_ptr as *mut AudioDeviceEnumeratorOnDefaultDeviceChangedRequest)
8730                    .write_unaligned(
8731                        (self as *const AudioDeviceEnumeratorOnDefaultDeviceChangedRequest).read(),
8732                    );
8733                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
8734                // done second because the memcpy will write garbage to these bytes.
8735            }
8736            Ok(())
8737        }
8738    }
8739    unsafe impl<
8740        D: fidl::encoding::ResourceDialect,
8741        T0: fidl::encoding::Encode<u64, D>,
8742        T1: fidl::encoding::Encode<u64, D>,
8743    > fidl::encoding::Encode<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest, D> for (T0, T1)
8744    {
8745        #[inline]
8746        unsafe fn encode(
8747            self,
8748            encoder: &mut fidl::encoding::Encoder<'_, D>,
8749            offset: usize,
8750            depth: fidl::encoding::Depth,
8751        ) -> fidl::Result<()> {
8752            encoder
8753                .debug_check_bounds::<AudioDeviceEnumeratorOnDefaultDeviceChangedRequest>(offset);
8754            // Zero out padding regions. There's no need to apply masks
8755            // because the unmasked parts will be overwritten by fields.
8756            // Write the fields.
8757            self.0.encode(encoder, offset + 0, depth)?;
8758            self.1.encode(encoder, offset + 8, depth)?;
8759            Ok(())
8760        }
8761    }
8762
8763    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8764        for AudioDeviceEnumeratorOnDefaultDeviceChangedRequest
8765    {
8766        #[inline(always)]
8767        fn new_empty() -> Self {
8768            Self {
8769                old_default_token: fidl::new_empty!(u64, D),
8770                new_default_token: fidl::new_empty!(u64, D),
8771            }
8772        }
8773
8774        #[inline]
8775        unsafe fn decode(
8776            &mut self,
8777            decoder: &mut fidl::encoding::Decoder<'_, D>,
8778            offset: usize,
8779            _depth: fidl::encoding::Depth,
8780        ) -> fidl::Result<()> {
8781            decoder.debug_check_bounds::<Self>(offset);
8782            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
8783            // Verify that padding bytes are zero.
8784            // Copy from the buffer into the object.
8785            unsafe {
8786                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
8787            }
8788            Ok(())
8789        }
8790    }
8791
8792    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDeviceAddedRequest {
8793        type Borrowed<'a> = &'a Self;
8794        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8795            value
8796        }
8797    }
8798
8799    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDeviceAddedRequest {
8800        type Owned = Self;
8801
8802        #[inline(always)]
8803        fn inline_align(_context: fidl::encoding::Context) -> usize {
8804            8
8805        }
8806
8807        #[inline(always)]
8808        fn inline_size(_context: fidl::encoding::Context) -> usize {
8809            56
8810        }
8811    }
8812
8813    unsafe impl<D: fidl::encoding::ResourceDialect>
8814        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceAddedRequest, D>
8815        for &AudioDeviceEnumeratorOnDeviceAddedRequest
8816    {
8817        #[inline]
8818        unsafe fn encode(
8819            self,
8820            encoder: &mut fidl::encoding::Encoder<'_, D>,
8821            offset: usize,
8822            _depth: fidl::encoding::Depth,
8823        ) -> fidl::Result<()> {
8824            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceAddedRequest>(offset);
8825            // Delegate to tuple encoding.
8826            fidl::encoding::Encode::<AudioDeviceEnumeratorOnDeviceAddedRequest, D>::encode(
8827                (<AudioDeviceInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.device),),
8828                encoder,
8829                offset,
8830                _depth,
8831            )
8832        }
8833    }
8834    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioDeviceInfo, D>>
8835        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceAddedRequest, D> for (T0,)
8836    {
8837        #[inline]
8838        unsafe fn encode(
8839            self,
8840            encoder: &mut fidl::encoding::Encoder<'_, D>,
8841            offset: usize,
8842            depth: fidl::encoding::Depth,
8843        ) -> fidl::Result<()> {
8844            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceAddedRequest>(offset);
8845            // Zero out padding regions. There's no need to apply masks
8846            // because the unmasked parts will be overwritten by fields.
8847            // Write the fields.
8848            self.0.encode(encoder, offset + 0, depth)?;
8849            Ok(())
8850        }
8851    }
8852
8853    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8854        for AudioDeviceEnumeratorOnDeviceAddedRequest
8855    {
8856        #[inline(always)]
8857        fn new_empty() -> Self {
8858            Self { device: fidl::new_empty!(AudioDeviceInfo, D) }
8859        }
8860
8861        #[inline]
8862        unsafe fn decode(
8863            &mut self,
8864            decoder: &mut fidl::encoding::Decoder<'_, D>,
8865            offset: usize,
8866            _depth: fidl::encoding::Depth,
8867        ) -> fidl::Result<()> {
8868            decoder.debug_check_bounds::<Self>(offset);
8869            // Verify that padding bytes are zero.
8870            fidl::decode!(AudioDeviceInfo, D, &mut self.device, decoder, offset + 0, _depth)?;
8871            Ok(())
8872        }
8873    }
8874
8875    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDeviceGainChangedRequest {
8876        type Borrowed<'a> = &'a Self;
8877        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8878            value
8879        }
8880    }
8881
8882    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDeviceGainChangedRequest {
8883        type Owned = Self;
8884
8885        #[inline(always)]
8886        fn inline_align(_context: fidl::encoding::Context) -> usize {
8887            8
8888        }
8889
8890        #[inline(always)]
8891        fn inline_size(_context: fidl::encoding::Context) -> usize {
8892            16
8893        }
8894    }
8895
8896    unsafe impl<D: fidl::encoding::ResourceDialect>
8897        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceGainChangedRequest, D>
8898        for &AudioDeviceEnumeratorOnDeviceGainChangedRequest
8899    {
8900        #[inline]
8901        unsafe fn encode(
8902            self,
8903            encoder: &mut fidl::encoding::Encoder<'_, D>,
8904            offset: usize,
8905            _depth: fidl::encoding::Depth,
8906        ) -> fidl::Result<()> {
8907            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceGainChangedRequest>(offset);
8908            // Delegate to tuple encoding.
8909            fidl::encoding::Encode::<AudioDeviceEnumeratorOnDeviceGainChangedRequest, D>::encode(
8910                (
8911                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_token),
8912                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
8913                ),
8914                encoder,
8915                offset,
8916                _depth,
8917            )
8918        }
8919    }
8920    unsafe impl<
8921        D: fidl::encoding::ResourceDialect,
8922        T0: fidl::encoding::Encode<u64, D>,
8923        T1: fidl::encoding::Encode<AudioGainInfo, D>,
8924    > fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceGainChangedRequest, D> for (T0, T1)
8925    {
8926        #[inline]
8927        unsafe fn encode(
8928            self,
8929            encoder: &mut fidl::encoding::Encoder<'_, D>,
8930            offset: usize,
8931            depth: fidl::encoding::Depth,
8932        ) -> fidl::Result<()> {
8933            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceGainChangedRequest>(offset);
8934            // Zero out padding regions. There's no need to apply masks
8935            // because the unmasked parts will be overwritten by fields.
8936            // Write the fields.
8937            self.0.encode(encoder, offset + 0, depth)?;
8938            self.1.encode(encoder, offset + 8, depth)?;
8939            Ok(())
8940        }
8941    }
8942
8943    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8944        for AudioDeviceEnumeratorOnDeviceGainChangedRequest
8945    {
8946        #[inline(always)]
8947        fn new_empty() -> Self {
8948            Self {
8949                device_token: fidl::new_empty!(u64, D),
8950                gain_info: fidl::new_empty!(AudioGainInfo, D),
8951            }
8952        }
8953
8954        #[inline]
8955        unsafe fn decode(
8956            &mut self,
8957            decoder: &mut fidl::encoding::Decoder<'_, D>,
8958            offset: usize,
8959            _depth: fidl::encoding::Depth,
8960        ) -> fidl::Result<()> {
8961            decoder.debug_check_bounds::<Self>(offset);
8962            // Verify that padding bytes are zero.
8963            fidl::decode!(u64, D, &mut self.device_token, decoder, offset + 0, _depth)?;
8964            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 8, _depth)?;
8965            Ok(())
8966        }
8967    }
8968
8969    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorOnDeviceRemovedRequest {
8970        type Borrowed<'a> = &'a Self;
8971        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8972            value
8973        }
8974    }
8975
8976    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorOnDeviceRemovedRequest {
8977        type Owned = Self;
8978
8979        #[inline(always)]
8980        fn inline_align(_context: fidl::encoding::Context) -> usize {
8981            8
8982        }
8983
8984        #[inline(always)]
8985        fn inline_size(_context: fidl::encoding::Context) -> usize {
8986            8
8987        }
8988        #[inline(always)]
8989        fn encode_is_copy() -> bool {
8990            true
8991        }
8992
8993        #[inline(always)]
8994        fn decode_is_copy() -> bool {
8995            true
8996        }
8997    }
8998
8999    unsafe impl<D: fidl::encoding::ResourceDialect>
9000        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceRemovedRequest, D>
9001        for &AudioDeviceEnumeratorOnDeviceRemovedRequest
9002    {
9003        #[inline]
9004        unsafe fn encode(
9005            self,
9006            encoder: &mut fidl::encoding::Encoder<'_, D>,
9007            offset: usize,
9008            _depth: fidl::encoding::Depth,
9009        ) -> fidl::Result<()> {
9010            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceRemovedRequest>(offset);
9011            unsafe {
9012                // Copy the object into the buffer.
9013                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9014                (buf_ptr as *mut AudioDeviceEnumeratorOnDeviceRemovedRequest).write_unaligned(
9015                    (self as *const AudioDeviceEnumeratorOnDeviceRemovedRequest).read(),
9016                );
9017                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9018                // done second because the memcpy will write garbage to these bytes.
9019            }
9020            Ok(())
9021        }
9022    }
9023    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
9024        fidl::encoding::Encode<AudioDeviceEnumeratorOnDeviceRemovedRequest, D> for (T0,)
9025    {
9026        #[inline]
9027        unsafe fn encode(
9028            self,
9029            encoder: &mut fidl::encoding::Encoder<'_, D>,
9030            offset: usize,
9031            depth: fidl::encoding::Depth,
9032        ) -> fidl::Result<()> {
9033            encoder.debug_check_bounds::<AudioDeviceEnumeratorOnDeviceRemovedRequest>(offset);
9034            // Zero out padding regions. There's no need to apply masks
9035            // because the unmasked parts will be overwritten by fields.
9036            // Write the fields.
9037            self.0.encode(encoder, offset + 0, depth)?;
9038            Ok(())
9039        }
9040    }
9041
9042    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9043        for AudioDeviceEnumeratorOnDeviceRemovedRequest
9044    {
9045        #[inline(always)]
9046        fn new_empty() -> Self {
9047            Self { device_token: fidl::new_empty!(u64, D) }
9048        }
9049
9050        #[inline]
9051        unsafe fn decode(
9052            &mut self,
9053            decoder: &mut fidl::encoding::Decoder<'_, D>,
9054            offset: usize,
9055            _depth: fidl::encoding::Depth,
9056        ) -> fidl::Result<()> {
9057            decoder.debug_check_bounds::<Self>(offset);
9058            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9059            // Verify that padding bytes are zero.
9060            // Copy from the buffer into the object.
9061            unsafe {
9062                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
9063            }
9064            Ok(())
9065        }
9066    }
9067
9068    impl fidl::encoding::ValueTypeMarker for AudioDeviceEnumeratorSetDeviceGainRequest {
9069        type Borrowed<'a> = &'a Self;
9070        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9071            value
9072        }
9073    }
9074
9075    unsafe impl fidl::encoding::TypeMarker for AudioDeviceEnumeratorSetDeviceGainRequest {
9076        type Owned = Self;
9077
9078        #[inline(always)]
9079        fn inline_align(_context: fidl::encoding::Context) -> usize {
9080            8
9081        }
9082
9083        #[inline(always)]
9084        fn inline_size(_context: fidl::encoding::Context) -> usize {
9085            24
9086        }
9087    }
9088
9089    unsafe impl<D: fidl::encoding::ResourceDialect>
9090        fidl::encoding::Encode<AudioDeviceEnumeratorSetDeviceGainRequest, D>
9091        for &AudioDeviceEnumeratorSetDeviceGainRequest
9092    {
9093        #[inline]
9094        unsafe fn encode(
9095            self,
9096            encoder: &mut fidl::encoding::Encoder<'_, D>,
9097            offset: usize,
9098            _depth: fidl::encoding::Depth,
9099        ) -> fidl::Result<()> {
9100            encoder.debug_check_bounds::<AudioDeviceEnumeratorSetDeviceGainRequest>(offset);
9101            // Delegate to tuple encoding.
9102            fidl::encoding::Encode::<AudioDeviceEnumeratorSetDeviceGainRequest, D>::encode(
9103                (
9104                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_token),
9105                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
9106                    <AudioGainValidFlags as fidl::encoding::ValueTypeMarker>::borrow(
9107                        &self.valid_flags,
9108                    ),
9109                ),
9110                encoder,
9111                offset,
9112                _depth,
9113            )
9114        }
9115    }
9116    unsafe impl<
9117        D: fidl::encoding::ResourceDialect,
9118        T0: fidl::encoding::Encode<u64, D>,
9119        T1: fidl::encoding::Encode<AudioGainInfo, D>,
9120        T2: fidl::encoding::Encode<AudioGainValidFlags, D>,
9121    > fidl::encoding::Encode<AudioDeviceEnumeratorSetDeviceGainRequest, D> for (T0, T1, T2)
9122    {
9123        #[inline]
9124        unsafe fn encode(
9125            self,
9126            encoder: &mut fidl::encoding::Encoder<'_, D>,
9127            offset: usize,
9128            depth: fidl::encoding::Depth,
9129        ) -> fidl::Result<()> {
9130            encoder.debug_check_bounds::<AudioDeviceEnumeratorSetDeviceGainRequest>(offset);
9131            // Zero out padding regions. There's no need to apply masks
9132            // because the unmasked parts will be overwritten by fields.
9133            unsafe {
9134                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
9135                (ptr as *mut u64).write_unaligned(0);
9136            }
9137            // Write the fields.
9138            self.0.encode(encoder, offset + 0, depth)?;
9139            self.1.encode(encoder, offset + 8, depth)?;
9140            self.2.encode(encoder, offset + 16, depth)?;
9141            Ok(())
9142        }
9143    }
9144
9145    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9146        for AudioDeviceEnumeratorSetDeviceGainRequest
9147    {
9148        #[inline(always)]
9149        fn new_empty() -> Self {
9150            Self {
9151                device_token: fidl::new_empty!(u64, D),
9152                gain_info: fidl::new_empty!(AudioGainInfo, D),
9153                valid_flags: fidl::new_empty!(AudioGainValidFlags, D),
9154            }
9155        }
9156
9157        #[inline]
9158        unsafe fn decode(
9159            &mut self,
9160            decoder: &mut fidl::encoding::Decoder<'_, D>,
9161            offset: usize,
9162            _depth: fidl::encoding::Depth,
9163        ) -> fidl::Result<()> {
9164            decoder.debug_check_bounds::<Self>(offset);
9165            // Verify that padding bytes are zero.
9166            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
9167            let padval = unsafe { (ptr as *const u64).read_unaligned() };
9168            let mask = 0xffffffff00000000u64;
9169            let maskedval = padval & mask;
9170            if maskedval != 0 {
9171                return Err(fidl::Error::NonZeroPadding {
9172                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
9173                });
9174            }
9175            fidl::decode!(u64, D, &mut self.device_token, decoder, offset + 0, _depth)?;
9176            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 8, _depth)?;
9177            fidl::decode!(
9178                AudioGainValidFlags,
9179                D,
9180                &mut self.valid_flags,
9181                decoder,
9182                offset + 16,
9183                _depth
9184            )?;
9185            Ok(())
9186        }
9187    }
9188
9189    impl fidl::encoding::ValueTypeMarker for AudioDeviceInfo {
9190        type Borrowed<'a> = &'a Self;
9191        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9192            value
9193        }
9194    }
9195
9196    unsafe impl fidl::encoding::TypeMarker for AudioDeviceInfo {
9197        type Owned = Self;
9198
9199        #[inline(always)]
9200        fn inline_align(_context: fidl::encoding::Context) -> usize {
9201            8
9202        }
9203
9204        #[inline(always)]
9205        fn inline_size(_context: fidl::encoding::Context) -> usize {
9206            56
9207        }
9208    }
9209
9210    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioDeviceInfo, D>
9211        for &AudioDeviceInfo
9212    {
9213        #[inline]
9214        unsafe fn encode(
9215            self,
9216            encoder: &mut fidl::encoding::Encoder<'_, D>,
9217            offset: usize,
9218            _depth: fidl::encoding::Depth,
9219        ) -> fidl::Result<()> {
9220            encoder.debug_check_bounds::<AudioDeviceInfo>(offset);
9221            // Delegate to tuple encoding.
9222            fidl::encoding::Encode::<AudioDeviceInfo, D>::encode(
9223                (
9224                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
9225                        &self.name,
9226                    ),
9227                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
9228                        &self.unique_id,
9229                    ),
9230                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.token_id),
9231                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.is_input),
9232                    <AudioGainInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_info),
9233                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.is_default),
9234                ),
9235                encoder,
9236                offset,
9237                _depth,
9238            )
9239        }
9240    }
9241    unsafe impl<
9242        D: fidl::encoding::ResourceDialect,
9243        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
9244        T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
9245        T2: fidl::encoding::Encode<u64, D>,
9246        T3: fidl::encoding::Encode<bool, D>,
9247        T4: fidl::encoding::Encode<AudioGainInfo, D>,
9248        T5: fidl::encoding::Encode<bool, D>,
9249    > fidl::encoding::Encode<AudioDeviceInfo, D> for (T0, T1, T2, T3, T4, T5)
9250    {
9251        #[inline]
9252        unsafe fn encode(
9253            self,
9254            encoder: &mut fidl::encoding::Encoder<'_, D>,
9255            offset: usize,
9256            depth: fidl::encoding::Depth,
9257        ) -> fidl::Result<()> {
9258            encoder.debug_check_bounds::<AudioDeviceInfo>(offset);
9259            // Zero out padding regions. There's no need to apply masks
9260            // because the unmasked parts will be overwritten by fields.
9261            unsafe {
9262                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
9263                (ptr as *mut u64).write_unaligned(0);
9264            }
9265            unsafe {
9266                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(48);
9267                (ptr as *mut u64).write_unaligned(0);
9268            }
9269            // Write the fields.
9270            self.0.encode(encoder, offset + 0, depth)?;
9271            self.1.encode(encoder, offset + 16, depth)?;
9272            self.2.encode(encoder, offset + 32, depth)?;
9273            self.3.encode(encoder, offset + 40, depth)?;
9274            self.4.encode(encoder, offset + 44, depth)?;
9275            self.5.encode(encoder, offset + 52, depth)?;
9276            Ok(())
9277        }
9278    }
9279
9280    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioDeviceInfo {
9281        #[inline(always)]
9282        fn new_empty() -> Self {
9283            Self {
9284                name: fidl::new_empty!(fidl::encoding::UnboundedString, D),
9285                unique_id: fidl::new_empty!(fidl::encoding::UnboundedString, D),
9286                token_id: fidl::new_empty!(u64, D),
9287                is_input: fidl::new_empty!(bool, D),
9288                gain_info: fidl::new_empty!(AudioGainInfo, D),
9289                is_default: fidl::new_empty!(bool, D),
9290            }
9291        }
9292
9293        #[inline]
9294        unsafe fn decode(
9295            &mut self,
9296            decoder: &mut fidl::encoding::Decoder<'_, D>,
9297            offset: usize,
9298            _depth: fidl::encoding::Depth,
9299        ) -> fidl::Result<()> {
9300            decoder.debug_check_bounds::<Self>(offset);
9301            // Verify that padding bytes are zero.
9302            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
9303            let padval = unsafe { (ptr as *const u64).read_unaligned() };
9304            let mask = 0xffffff00u64;
9305            let maskedval = padval & mask;
9306            if maskedval != 0 {
9307                return Err(fidl::Error::NonZeroPadding {
9308                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
9309                });
9310            }
9311            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(48) };
9312            let padval = unsafe { (ptr as *const u64).read_unaligned() };
9313            let mask = 0xffffff0000000000u64;
9314            let maskedval = padval & mask;
9315            if maskedval != 0 {
9316                return Err(fidl::Error::NonZeroPadding {
9317                    padding_start: offset + 48 + ((mask as u64).trailing_zeros() / 8) as usize,
9318                });
9319            }
9320            fidl::decode!(
9321                fidl::encoding::UnboundedString,
9322                D,
9323                &mut self.name,
9324                decoder,
9325                offset + 0,
9326                _depth
9327            )?;
9328            fidl::decode!(
9329                fidl::encoding::UnboundedString,
9330                D,
9331                &mut self.unique_id,
9332                decoder,
9333                offset + 16,
9334                _depth
9335            )?;
9336            fidl::decode!(u64, D, &mut self.token_id, decoder, offset + 32, _depth)?;
9337            fidl::decode!(bool, D, &mut self.is_input, decoder, offset + 40, _depth)?;
9338            fidl::decode!(AudioGainInfo, D, &mut self.gain_info, decoder, offset + 44, _depth)?;
9339            fidl::decode!(bool, D, &mut self.is_default, decoder, offset + 52, _depth)?;
9340            Ok(())
9341        }
9342    }
9343
9344    impl fidl::encoding::ValueTypeMarker for AudioGainInfo {
9345        type Borrowed<'a> = &'a Self;
9346        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9347            value
9348        }
9349    }
9350
9351    unsafe impl fidl::encoding::TypeMarker for AudioGainInfo {
9352        type Owned = Self;
9353
9354        #[inline(always)]
9355        fn inline_align(_context: fidl::encoding::Context) -> usize {
9356            4
9357        }
9358
9359        #[inline(always)]
9360        fn inline_size(_context: fidl::encoding::Context) -> usize {
9361            8
9362        }
9363    }
9364
9365    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioGainInfo, D>
9366        for &AudioGainInfo
9367    {
9368        #[inline]
9369        unsafe fn encode(
9370            self,
9371            encoder: &mut fidl::encoding::Encoder<'_, D>,
9372            offset: usize,
9373            _depth: fidl::encoding::Depth,
9374        ) -> fidl::Result<()> {
9375            encoder.debug_check_bounds::<AudioGainInfo>(offset);
9376            // Delegate to tuple encoding.
9377            fidl::encoding::Encode::<AudioGainInfo, D>::encode(
9378                (
9379                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_db),
9380                    <AudioGainInfoFlags as fidl::encoding::ValueTypeMarker>::borrow(&self.flags),
9381                ),
9382                encoder,
9383                offset,
9384                _depth,
9385            )
9386        }
9387    }
9388    unsafe impl<
9389        D: fidl::encoding::ResourceDialect,
9390        T0: fidl::encoding::Encode<f32, D>,
9391        T1: fidl::encoding::Encode<AudioGainInfoFlags, D>,
9392    > fidl::encoding::Encode<AudioGainInfo, D> for (T0, T1)
9393    {
9394        #[inline]
9395        unsafe fn encode(
9396            self,
9397            encoder: &mut fidl::encoding::Encoder<'_, D>,
9398            offset: usize,
9399            depth: fidl::encoding::Depth,
9400        ) -> fidl::Result<()> {
9401            encoder.debug_check_bounds::<AudioGainInfo>(offset);
9402            // Zero out padding regions. There's no need to apply masks
9403            // because the unmasked parts will be overwritten by fields.
9404            // Write the fields.
9405            self.0.encode(encoder, offset + 0, depth)?;
9406            self.1.encode(encoder, offset + 4, depth)?;
9407            Ok(())
9408        }
9409    }
9410
9411    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioGainInfo {
9412        #[inline(always)]
9413        fn new_empty() -> Self {
9414            Self {
9415                gain_db: fidl::new_empty!(f32, D),
9416                flags: fidl::new_empty!(AudioGainInfoFlags, D),
9417            }
9418        }
9419
9420        #[inline]
9421        unsafe fn decode(
9422            &mut self,
9423            decoder: &mut fidl::encoding::Decoder<'_, D>,
9424            offset: usize,
9425            _depth: fidl::encoding::Depth,
9426        ) -> fidl::Result<()> {
9427            decoder.debug_check_bounds::<Self>(offset);
9428            // Verify that padding bytes are zero.
9429            fidl::decode!(f32, D, &mut self.gain_db, decoder, offset + 0, _depth)?;
9430            fidl::decode!(AudioGainInfoFlags, D, &mut self.flags, decoder, offset + 4, _depth)?;
9431            Ok(())
9432        }
9433    }
9434
9435    impl fidl::encoding::ValueTypeMarker for AudioRendererEnableMinLeadTimeEventsRequest {
9436        type Borrowed<'a> = &'a Self;
9437        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9438            value
9439        }
9440    }
9441
9442    unsafe impl fidl::encoding::TypeMarker for AudioRendererEnableMinLeadTimeEventsRequest {
9443        type Owned = Self;
9444
9445        #[inline(always)]
9446        fn inline_align(_context: fidl::encoding::Context) -> usize {
9447            1
9448        }
9449
9450        #[inline(always)]
9451        fn inline_size(_context: fidl::encoding::Context) -> usize {
9452            1
9453        }
9454    }
9455
9456    unsafe impl<D: fidl::encoding::ResourceDialect>
9457        fidl::encoding::Encode<AudioRendererEnableMinLeadTimeEventsRequest, D>
9458        for &AudioRendererEnableMinLeadTimeEventsRequest
9459    {
9460        #[inline]
9461        unsafe fn encode(
9462            self,
9463            encoder: &mut fidl::encoding::Encoder<'_, D>,
9464            offset: usize,
9465            _depth: fidl::encoding::Depth,
9466        ) -> fidl::Result<()> {
9467            encoder.debug_check_bounds::<AudioRendererEnableMinLeadTimeEventsRequest>(offset);
9468            // Delegate to tuple encoding.
9469            fidl::encoding::Encode::<AudioRendererEnableMinLeadTimeEventsRequest, D>::encode(
9470                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.enabled),),
9471                encoder,
9472                offset,
9473                _depth,
9474            )
9475        }
9476    }
9477    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
9478        fidl::encoding::Encode<AudioRendererEnableMinLeadTimeEventsRequest, D> for (T0,)
9479    {
9480        #[inline]
9481        unsafe fn encode(
9482            self,
9483            encoder: &mut fidl::encoding::Encoder<'_, D>,
9484            offset: usize,
9485            depth: fidl::encoding::Depth,
9486        ) -> fidl::Result<()> {
9487            encoder.debug_check_bounds::<AudioRendererEnableMinLeadTimeEventsRequest>(offset);
9488            // Zero out padding regions. There's no need to apply masks
9489            // because the unmasked parts will be overwritten by fields.
9490            // Write the fields.
9491            self.0.encode(encoder, offset + 0, depth)?;
9492            Ok(())
9493        }
9494    }
9495
9496    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9497        for AudioRendererEnableMinLeadTimeEventsRequest
9498    {
9499        #[inline(always)]
9500        fn new_empty() -> Self {
9501            Self { enabled: fidl::new_empty!(bool, D) }
9502        }
9503
9504        #[inline]
9505        unsafe fn decode(
9506            &mut self,
9507            decoder: &mut fidl::encoding::Decoder<'_, D>,
9508            offset: usize,
9509            _depth: fidl::encoding::Depth,
9510        ) -> fidl::Result<()> {
9511            decoder.debug_check_bounds::<Self>(offset);
9512            // Verify that padding bytes are zero.
9513            fidl::decode!(bool, D, &mut self.enabled, decoder, offset + 0, _depth)?;
9514            Ok(())
9515        }
9516    }
9517
9518    impl fidl::encoding::ValueTypeMarker for AudioRendererGetMinLeadTimeResponse {
9519        type Borrowed<'a> = &'a Self;
9520        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9521            value
9522        }
9523    }
9524
9525    unsafe impl fidl::encoding::TypeMarker for AudioRendererGetMinLeadTimeResponse {
9526        type Owned = Self;
9527
9528        #[inline(always)]
9529        fn inline_align(_context: fidl::encoding::Context) -> usize {
9530            8
9531        }
9532
9533        #[inline(always)]
9534        fn inline_size(_context: fidl::encoding::Context) -> usize {
9535            8
9536        }
9537        #[inline(always)]
9538        fn encode_is_copy() -> bool {
9539            true
9540        }
9541
9542        #[inline(always)]
9543        fn decode_is_copy() -> bool {
9544            true
9545        }
9546    }
9547
9548    unsafe impl<D: fidl::encoding::ResourceDialect>
9549        fidl::encoding::Encode<AudioRendererGetMinLeadTimeResponse, D>
9550        for &AudioRendererGetMinLeadTimeResponse
9551    {
9552        #[inline]
9553        unsafe fn encode(
9554            self,
9555            encoder: &mut fidl::encoding::Encoder<'_, D>,
9556            offset: usize,
9557            _depth: fidl::encoding::Depth,
9558        ) -> fidl::Result<()> {
9559            encoder.debug_check_bounds::<AudioRendererGetMinLeadTimeResponse>(offset);
9560            unsafe {
9561                // Copy the object into the buffer.
9562                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9563                (buf_ptr as *mut AudioRendererGetMinLeadTimeResponse)
9564                    .write_unaligned((self as *const AudioRendererGetMinLeadTimeResponse).read());
9565                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9566                // done second because the memcpy will write garbage to these bytes.
9567            }
9568            Ok(())
9569        }
9570    }
9571    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
9572        fidl::encoding::Encode<AudioRendererGetMinLeadTimeResponse, D> for (T0,)
9573    {
9574        #[inline]
9575        unsafe fn encode(
9576            self,
9577            encoder: &mut fidl::encoding::Encoder<'_, D>,
9578            offset: usize,
9579            depth: fidl::encoding::Depth,
9580        ) -> fidl::Result<()> {
9581            encoder.debug_check_bounds::<AudioRendererGetMinLeadTimeResponse>(offset);
9582            // Zero out padding regions. There's no need to apply masks
9583            // because the unmasked parts will be overwritten by fields.
9584            // Write the fields.
9585            self.0.encode(encoder, offset + 0, depth)?;
9586            Ok(())
9587        }
9588    }
9589
9590    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9591        for AudioRendererGetMinLeadTimeResponse
9592    {
9593        #[inline(always)]
9594        fn new_empty() -> Self {
9595            Self { min_lead_time_nsec: fidl::new_empty!(i64, D) }
9596        }
9597
9598        #[inline]
9599        unsafe fn decode(
9600            &mut self,
9601            decoder: &mut fidl::encoding::Decoder<'_, D>,
9602            offset: usize,
9603            _depth: fidl::encoding::Depth,
9604        ) -> fidl::Result<()> {
9605            decoder.debug_check_bounds::<Self>(offset);
9606            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9607            // Verify that padding bytes are zero.
9608            // Copy from the buffer into the object.
9609            unsafe {
9610                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
9611            }
9612            Ok(())
9613        }
9614    }
9615
9616    impl fidl::encoding::ValueTypeMarker for AudioRendererOnMinLeadTimeChangedRequest {
9617        type Borrowed<'a> = &'a Self;
9618        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9619            value
9620        }
9621    }
9622
9623    unsafe impl fidl::encoding::TypeMarker for AudioRendererOnMinLeadTimeChangedRequest {
9624        type Owned = Self;
9625
9626        #[inline(always)]
9627        fn inline_align(_context: fidl::encoding::Context) -> usize {
9628            8
9629        }
9630
9631        #[inline(always)]
9632        fn inline_size(_context: fidl::encoding::Context) -> usize {
9633            8
9634        }
9635        #[inline(always)]
9636        fn encode_is_copy() -> bool {
9637            true
9638        }
9639
9640        #[inline(always)]
9641        fn decode_is_copy() -> bool {
9642            true
9643        }
9644    }
9645
9646    unsafe impl<D: fidl::encoding::ResourceDialect>
9647        fidl::encoding::Encode<AudioRendererOnMinLeadTimeChangedRequest, D>
9648        for &AudioRendererOnMinLeadTimeChangedRequest
9649    {
9650        #[inline]
9651        unsafe fn encode(
9652            self,
9653            encoder: &mut fidl::encoding::Encoder<'_, D>,
9654            offset: usize,
9655            _depth: fidl::encoding::Depth,
9656        ) -> fidl::Result<()> {
9657            encoder.debug_check_bounds::<AudioRendererOnMinLeadTimeChangedRequest>(offset);
9658            unsafe {
9659                // Copy the object into the buffer.
9660                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9661                (buf_ptr as *mut AudioRendererOnMinLeadTimeChangedRequest).write_unaligned(
9662                    (self as *const AudioRendererOnMinLeadTimeChangedRequest).read(),
9663                );
9664                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9665                // done second because the memcpy will write garbage to these bytes.
9666            }
9667            Ok(())
9668        }
9669    }
9670    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
9671        fidl::encoding::Encode<AudioRendererOnMinLeadTimeChangedRequest, D> for (T0,)
9672    {
9673        #[inline]
9674        unsafe fn encode(
9675            self,
9676            encoder: &mut fidl::encoding::Encoder<'_, D>,
9677            offset: usize,
9678            depth: fidl::encoding::Depth,
9679        ) -> fidl::Result<()> {
9680            encoder.debug_check_bounds::<AudioRendererOnMinLeadTimeChangedRequest>(offset);
9681            // Zero out padding regions. There's no need to apply masks
9682            // because the unmasked parts will be overwritten by fields.
9683            // Write the fields.
9684            self.0.encode(encoder, offset + 0, depth)?;
9685            Ok(())
9686        }
9687    }
9688
9689    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9690        for AudioRendererOnMinLeadTimeChangedRequest
9691    {
9692        #[inline(always)]
9693        fn new_empty() -> Self {
9694            Self { min_lead_time_nsec: fidl::new_empty!(i64, D) }
9695        }
9696
9697        #[inline]
9698        unsafe fn decode(
9699            &mut self,
9700            decoder: &mut fidl::encoding::Decoder<'_, D>,
9701            offset: usize,
9702            _depth: fidl::encoding::Depth,
9703        ) -> fidl::Result<()> {
9704            decoder.debug_check_bounds::<Self>(offset);
9705            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9706            // Verify that padding bytes are zero.
9707            // Copy from the buffer into the object.
9708            unsafe {
9709                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
9710            }
9711            Ok(())
9712        }
9713    }
9714
9715    impl fidl::encoding::ValueTypeMarker for AudioRendererPauseResponse {
9716        type Borrowed<'a> = &'a Self;
9717        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9718            value
9719        }
9720    }
9721
9722    unsafe impl fidl::encoding::TypeMarker for AudioRendererPauseResponse {
9723        type Owned = Self;
9724
9725        #[inline(always)]
9726        fn inline_align(_context: fidl::encoding::Context) -> usize {
9727            8
9728        }
9729
9730        #[inline(always)]
9731        fn inline_size(_context: fidl::encoding::Context) -> usize {
9732            16
9733        }
9734        #[inline(always)]
9735        fn encode_is_copy() -> bool {
9736            true
9737        }
9738
9739        #[inline(always)]
9740        fn decode_is_copy() -> bool {
9741            true
9742        }
9743    }
9744
9745    unsafe impl<D: fidl::encoding::ResourceDialect>
9746        fidl::encoding::Encode<AudioRendererPauseResponse, D> for &AudioRendererPauseResponse
9747    {
9748        #[inline]
9749        unsafe fn encode(
9750            self,
9751            encoder: &mut fidl::encoding::Encoder<'_, D>,
9752            offset: usize,
9753            _depth: fidl::encoding::Depth,
9754        ) -> fidl::Result<()> {
9755            encoder.debug_check_bounds::<AudioRendererPauseResponse>(offset);
9756            unsafe {
9757                // Copy the object into the buffer.
9758                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9759                (buf_ptr as *mut AudioRendererPauseResponse)
9760                    .write_unaligned((self as *const AudioRendererPauseResponse).read());
9761                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9762                // done second because the memcpy will write garbage to these bytes.
9763            }
9764            Ok(())
9765        }
9766    }
9767    unsafe impl<
9768        D: fidl::encoding::ResourceDialect,
9769        T0: fidl::encoding::Encode<i64, D>,
9770        T1: fidl::encoding::Encode<i64, D>,
9771    > fidl::encoding::Encode<AudioRendererPauseResponse, D> for (T0, T1)
9772    {
9773        #[inline]
9774        unsafe fn encode(
9775            self,
9776            encoder: &mut fidl::encoding::Encoder<'_, D>,
9777            offset: usize,
9778            depth: fidl::encoding::Depth,
9779        ) -> fidl::Result<()> {
9780            encoder.debug_check_bounds::<AudioRendererPauseResponse>(offset);
9781            // Zero out padding regions. There's no need to apply masks
9782            // because the unmasked parts will be overwritten by fields.
9783            // Write the fields.
9784            self.0.encode(encoder, offset + 0, depth)?;
9785            self.1.encode(encoder, offset + 8, depth)?;
9786            Ok(())
9787        }
9788    }
9789
9790    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9791        for AudioRendererPauseResponse
9792    {
9793        #[inline(always)]
9794        fn new_empty() -> Self {
9795            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
9796        }
9797
9798        #[inline]
9799        unsafe fn decode(
9800            &mut self,
9801            decoder: &mut fidl::encoding::Decoder<'_, D>,
9802            offset: usize,
9803            _depth: fidl::encoding::Depth,
9804        ) -> fidl::Result<()> {
9805            decoder.debug_check_bounds::<Self>(offset);
9806            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9807            // Verify that padding bytes are zero.
9808            // Copy from the buffer into the object.
9809            unsafe {
9810                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
9811            }
9812            Ok(())
9813        }
9814    }
9815
9816    impl fidl::encoding::ValueTypeMarker for AudioRendererPlayNoReplyRequest {
9817        type Borrowed<'a> = &'a Self;
9818        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9819            value
9820        }
9821    }
9822
9823    unsafe impl fidl::encoding::TypeMarker for AudioRendererPlayNoReplyRequest {
9824        type Owned = Self;
9825
9826        #[inline(always)]
9827        fn inline_align(_context: fidl::encoding::Context) -> usize {
9828            8
9829        }
9830
9831        #[inline(always)]
9832        fn inline_size(_context: fidl::encoding::Context) -> usize {
9833            16
9834        }
9835        #[inline(always)]
9836        fn encode_is_copy() -> bool {
9837            true
9838        }
9839
9840        #[inline(always)]
9841        fn decode_is_copy() -> bool {
9842            true
9843        }
9844    }
9845
9846    unsafe impl<D: fidl::encoding::ResourceDialect>
9847        fidl::encoding::Encode<AudioRendererPlayNoReplyRequest, D>
9848        for &AudioRendererPlayNoReplyRequest
9849    {
9850        #[inline]
9851        unsafe fn encode(
9852            self,
9853            encoder: &mut fidl::encoding::Encoder<'_, D>,
9854            offset: usize,
9855            _depth: fidl::encoding::Depth,
9856        ) -> fidl::Result<()> {
9857            encoder.debug_check_bounds::<AudioRendererPlayNoReplyRequest>(offset);
9858            unsafe {
9859                // Copy the object into the buffer.
9860                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9861                (buf_ptr as *mut AudioRendererPlayNoReplyRequest)
9862                    .write_unaligned((self as *const AudioRendererPlayNoReplyRequest).read());
9863                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9864                // done second because the memcpy will write garbage to these bytes.
9865            }
9866            Ok(())
9867        }
9868    }
9869    unsafe impl<
9870        D: fidl::encoding::ResourceDialect,
9871        T0: fidl::encoding::Encode<i64, D>,
9872        T1: fidl::encoding::Encode<i64, D>,
9873    > fidl::encoding::Encode<AudioRendererPlayNoReplyRequest, D> for (T0, T1)
9874    {
9875        #[inline]
9876        unsafe fn encode(
9877            self,
9878            encoder: &mut fidl::encoding::Encoder<'_, D>,
9879            offset: usize,
9880            depth: fidl::encoding::Depth,
9881        ) -> fidl::Result<()> {
9882            encoder.debug_check_bounds::<AudioRendererPlayNoReplyRequest>(offset);
9883            // Zero out padding regions. There's no need to apply masks
9884            // because the unmasked parts will be overwritten by fields.
9885            // Write the fields.
9886            self.0.encode(encoder, offset + 0, depth)?;
9887            self.1.encode(encoder, offset + 8, depth)?;
9888            Ok(())
9889        }
9890    }
9891
9892    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9893        for AudioRendererPlayNoReplyRequest
9894    {
9895        #[inline(always)]
9896        fn new_empty() -> Self {
9897            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
9898        }
9899
9900        #[inline]
9901        unsafe fn decode(
9902            &mut self,
9903            decoder: &mut fidl::encoding::Decoder<'_, D>,
9904            offset: usize,
9905            _depth: fidl::encoding::Depth,
9906        ) -> fidl::Result<()> {
9907            decoder.debug_check_bounds::<Self>(offset);
9908            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
9909            // Verify that padding bytes are zero.
9910            // Copy from the buffer into the object.
9911            unsafe {
9912                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
9913            }
9914            Ok(())
9915        }
9916    }
9917
9918    impl fidl::encoding::ValueTypeMarker for AudioRendererPlayRequest {
9919        type Borrowed<'a> = &'a Self;
9920        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9921            value
9922        }
9923    }
9924
9925    unsafe impl fidl::encoding::TypeMarker for AudioRendererPlayRequest {
9926        type Owned = Self;
9927
9928        #[inline(always)]
9929        fn inline_align(_context: fidl::encoding::Context) -> usize {
9930            8
9931        }
9932
9933        #[inline(always)]
9934        fn inline_size(_context: fidl::encoding::Context) -> usize {
9935            16
9936        }
9937        #[inline(always)]
9938        fn encode_is_copy() -> bool {
9939            true
9940        }
9941
9942        #[inline(always)]
9943        fn decode_is_copy() -> bool {
9944            true
9945        }
9946    }
9947
9948    unsafe impl<D: fidl::encoding::ResourceDialect>
9949        fidl::encoding::Encode<AudioRendererPlayRequest, D> for &AudioRendererPlayRequest
9950    {
9951        #[inline]
9952        unsafe fn encode(
9953            self,
9954            encoder: &mut fidl::encoding::Encoder<'_, D>,
9955            offset: usize,
9956            _depth: fidl::encoding::Depth,
9957        ) -> fidl::Result<()> {
9958            encoder.debug_check_bounds::<AudioRendererPlayRequest>(offset);
9959            unsafe {
9960                // Copy the object into the buffer.
9961                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
9962                (buf_ptr as *mut AudioRendererPlayRequest)
9963                    .write_unaligned((self as *const AudioRendererPlayRequest).read());
9964                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
9965                // done second because the memcpy will write garbage to these bytes.
9966            }
9967            Ok(())
9968        }
9969    }
9970    unsafe impl<
9971        D: fidl::encoding::ResourceDialect,
9972        T0: fidl::encoding::Encode<i64, D>,
9973        T1: fidl::encoding::Encode<i64, D>,
9974    > fidl::encoding::Encode<AudioRendererPlayRequest, D> for (T0, T1)
9975    {
9976        #[inline]
9977        unsafe fn encode(
9978            self,
9979            encoder: &mut fidl::encoding::Encoder<'_, D>,
9980            offset: usize,
9981            depth: fidl::encoding::Depth,
9982        ) -> fidl::Result<()> {
9983            encoder.debug_check_bounds::<AudioRendererPlayRequest>(offset);
9984            // Zero out padding regions. There's no need to apply masks
9985            // because the unmasked parts will be overwritten by fields.
9986            // Write the fields.
9987            self.0.encode(encoder, offset + 0, depth)?;
9988            self.1.encode(encoder, offset + 8, depth)?;
9989            Ok(())
9990        }
9991    }
9992
9993    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9994        for AudioRendererPlayRequest
9995    {
9996        #[inline(always)]
9997        fn new_empty() -> Self {
9998            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
9999        }
10000
10001        #[inline]
10002        unsafe fn decode(
10003            &mut self,
10004            decoder: &mut fidl::encoding::Decoder<'_, D>,
10005            offset: usize,
10006            _depth: fidl::encoding::Depth,
10007        ) -> fidl::Result<()> {
10008            decoder.debug_check_bounds::<Self>(offset);
10009            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10010            // Verify that padding bytes are zero.
10011            // Copy from the buffer into the object.
10012            unsafe {
10013                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
10014            }
10015            Ok(())
10016        }
10017    }
10018
10019    impl fidl::encoding::ValueTypeMarker for AudioRendererPlayResponse {
10020        type Borrowed<'a> = &'a Self;
10021        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10022            value
10023        }
10024    }
10025
10026    unsafe impl fidl::encoding::TypeMarker for AudioRendererPlayResponse {
10027        type Owned = Self;
10028
10029        #[inline(always)]
10030        fn inline_align(_context: fidl::encoding::Context) -> usize {
10031            8
10032        }
10033
10034        #[inline(always)]
10035        fn inline_size(_context: fidl::encoding::Context) -> usize {
10036            16
10037        }
10038        #[inline(always)]
10039        fn encode_is_copy() -> bool {
10040            true
10041        }
10042
10043        #[inline(always)]
10044        fn decode_is_copy() -> bool {
10045            true
10046        }
10047    }
10048
10049    unsafe impl<D: fidl::encoding::ResourceDialect>
10050        fidl::encoding::Encode<AudioRendererPlayResponse, D> for &AudioRendererPlayResponse
10051    {
10052        #[inline]
10053        unsafe fn encode(
10054            self,
10055            encoder: &mut fidl::encoding::Encoder<'_, D>,
10056            offset: usize,
10057            _depth: fidl::encoding::Depth,
10058        ) -> fidl::Result<()> {
10059            encoder.debug_check_bounds::<AudioRendererPlayResponse>(offset);
10060            unsafe {
10061                // Copy the object into the buffer.
10062                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
10063                (buf_ptr as *mut AudioRendererPlayResponse)
10064                    .write_unaligned((self as *const AudioRendererPlayResponse).read());
10065                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
10066                // done second because the memcpy will write garbage to these bytes.
10067            }
10068            Ok(())
10069        }
10070    }
10071    unsafe impl<
10072        D: fidl::encoding::ResourceDialect,
10073        T0: fidl::encoding::Encode<i64, D>,
10074        T1: fidl::encoding::Encode<i64, D>,
10075    > fidl::encoding::Encode<AudioRendererPlayResponse, D> for (T0, T1)
10076    {
10077        #[inline]
10078        unsafe fn encode(
10079            self,
10080            encoder: &mut fidl::encoding::Encoder<'_, D>,
10081            offset: usize,
10082            depth: fidl::encoding::Depth,
10083        ) -> fidl::Result<()> {
10084            encoder.debug_check_bounds::<AudioRendererPlayResponse>(offset);
10085            // Zero out padding regions. There's no need to apply masks
10086            // because the unmasked parts will be overwritten by fields.
10087            // Write the fields.
10088            self.0.encode(encoder, offset + 0, depth)?;
10089            self.1.encode(encoder, offset + 8, depth)?;
10090            Ok(())
10091        }
10092    }
10093
10094    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10095        for AudioRendererPlayResponse
10096    {
10097        #[inline(always)]
10098        fn new_empty() -> Self {
10099            Self { reference_time: fidl::new_empty!(i64, D), media_time: fidl::new_empty!(i64, D) }
10100        }
10101
10102        #[inline]
10103        unsafe fn decode(
10104            &mut self,
10105            decoder: &mut fidl::encoding::Decoder<'_, D>,
10106            offset: usize,
10107            _depth: fidl::encoding::Depth,
10108        ) -> fidl::Result<()> {
10109            decoder.debug_check_bounds::<Self>(offset);
10110            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10111            // Verify that padding bytes are zero.
10112            // Copy from the buffer into the object.
10113            unsafe {
10114                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
10115            }
10116            Ok(())
10117        }
10118    }
10119
10120    impl fidl::encoding::ValueTypeMarker for AudioRendererSetPcmStreamTypeRequest {
10121        type Borrowed<'a> = &'a Self;
10122        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10123            value
10124        }
10125    }
10126
10127    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetPcmStreamTypeRequest {
10128        type Owned = Self;
10129
10130        #[inline(always)]
10131        fn inline_align(_context: fidl::encoding::Context) -> usize {
10132            4
10133        }
10134
10135        #[inline(always)]
10136        fn inline_size(_context: fidl::encoding::Context) -> usize {
10137            12
10138        }
10139    }
10140
10141    unsafe impl<D: fidl::encoding::ResourceDialect>
10142        fidl::encoding::Encode<AudioRendererSetPcmStreamTypeRequest, D>
10143        for &AudioRendererSetPcmStreamTypeRequest
10144    {
10145        #[inline]
10146        unsafe fn encode(
10147            self,
10148            encoder: &mut fidl::encoding::Encoder<'_, D>,
10149            offset: usize,
10150            _depth: fidl::encoding::Depth,
10151        ) -> fidl::Result<()> {
10152            encoder.debug_check_bounds::<AudioRendererSetPcmStreamTypeRequest>(offset);
10153            // Delegate to tuple encoding.
10154            fidl::encoding::Encode::<AudioRendererSetPcmStreamTypeRequest, D>::encode(
10155                (<AudioStreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),),
10156                encoder,
10157                offset,
10158                _depth,
10159            )
10160        }
10161    }
10162    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioStreamType, D>>
10163        fidl::encoding::Encode<AudioRendererSetPcmStreamTypeRequest, D> for (T0,)
10164    {
10165        #[inline]
10166        unsafe fn encode(
10167            self,
10168            encoder: &mut fidl::encoding::Encoder<'_, D>,
10169            offset: usize,
10170            depth: fidl::encoding::Depth,
10171        ) -> fidl::Result<()> {
10172            encoder.debug_check_bounds::<AudioRendererSetPcmStreamTypeRequest>(offset);
10173            // Zero out padding regions. There's no need to apply masks
10174            // because the unmasked parts will be overwritten by fields.
10175            // Write the fields.
10176            self.0.encode(encoder, offset + 0, depth)?;
10177            Ok(())
10178        }
10179    }
10180
10181    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10182        for AudioRendererSetPcmStreamTypeRequest
10183    {
10184        #[inline(always)]
10185        fn new_empty() -> Self {
10186            Self { type_: fidl::new_empty!(AudioStreamType, D) }
10187        }
10188
10189        #[inline]
10190        unsafe fn decode(
10191            &mut self,
10192            decoder: &mut fidl::encoding::Decoder<'_, D>,
10193            offset: usize,
10194            _depth: fidl::encoding::Depth,
10195        ) -> fidl::Result<()> {
10196            decoder.debug_check_bounds::<Self>(offset);
10197            // Verify that padding bytes are zero.
10198            fidl::decode!(AudioStreamType, D, &mut self.type_, decoder, offset + 0, _depth)?;
10199            Ok(())
10200        }
10201    }
10202
10203    impl fidl::encoding::ValueTypeMarker for AudioRendererSetPtsContinuityThresholdRequest {
10204        type Borrowed<'a> = &'a Self;
10205        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10206            value
10207        }
10208    }
10209
10210    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetPtsContinuityThresholdRequest {
10211        type Owned = Self;
10212
10213        #[inline(always)]
10214        fn inline_align(_context: fidl::encoding::Context) -> usize {
10215            4
10216        }
10217
10218        #[inline(always)]
10219        fn inline_size(_context: fidl::encoding::Context) -> usize {
10220            4
10221        }
10222    }
10223
10224    unsafe impl<D: fidl::encoding::ResourceDialect>
10225        fidl::encoding::Encode<AudioRendererSetPtsContinuityThresholdRequest, D>
10226        for &AudioRendererSetPtsContinuityThresholdRequest
10227    {
10228        #[inline]
10229        unsafe fn encode(
10230            self,
10231            encoder: &mut fidl::encoding::Encoder<'_, D>,
10232            offset: usize,
10233            _depth: fidl::encoding::Depth,
10234        ) -> fidl::Result<()> {
10235            encoder.debug_check_bounds::<AudioRendererSetPtsContinuityThresholdRequest>(offset);
10236            // Delegate to tuple encoding.
10237            fidl::encoding::Encode::<AudioRendererSetPtsContinuityThresholdRequest, D>::encode(
10238                (<f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.threshold_seconds),),
10239                encoder,
10240                offset,
10241                _depth,
10242            )
10243        }
10244    }
10245    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<f32, D>>
10246        fidl::encoding::Encode<AudioRendererSetPtsContinuityThresholdRequest, D> for (T0,)
10247    {
10248        #[inline]
10249        unsafe fn encode(
10250            self,
10251            encoder: &mut fidl::encoding::Encoder<'_, D>,
10252            offset: usize,
10253            depth: fidl::encoding::Depth,
10254        ) -> fidl::Result<()> {
10255            encoder.debug_check_bounds::<AudioRendererSetPtsContinuityThresholdRequest>(offset);
10256            // Zero out padding regions. There's no need to apply masks
10257            // because the unmasked parts will be overwritten by fields.
10258            // Write the fields.
10259            self.0.encode(encoder, offset + 0, depth)?;
10260            Ok(())
10261        }
10262    }
10263
10264    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10265        for AudioRendererSetPtsContinuityThresholdRequest
10266    {
10267        #[inline(always)]
10268        fn new_empty() -> Self {
10269            Self { threshold_seconds: fidl::new_empty!(f32, D) }
10270        }
10271
10272        #[inline]
10273        unsafe fn decode(
10274            &mut self,
10275            decoder: &mut fidl::encoding::Decoder<'_, D>,
10276            offset: usize,
10277            _depth: fidl::encoding::Depth,
10278        ) -> fidl::Result<()> {
10279            decoder.debug_check_bounds::<Self>(offset);
10280            // Verify that padding bytes are zero.
10281            fidl::decode!(f32, D, &mut self.threshold_seconds, decoder, offset + 0, _depth)?;
10282            Ok(())
10283        }
10284    }
10285
10286    impl fidl::encoding::ValueTypeMarker for AudioRendererSetPtsUnitsRequest {
10287        type Borrowed<'a> = &'a Self;
10288        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10289            value
10290        }
10291    }
10292
10293    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetPtsUnitsRequest {
10294        type Owned = Self;
10295
10296        #[inline(always)]
10297        fn inline_align(_context: fidl::encoding::Context) -> usize {
10298            4
10299        }
10300
10301        #[inline(always)]
10302        fn inline_size(_context: fidl::encoding::Context) -> usize {
10303            8
10304        }
10305        #[inline(always)]
10306        fn encode_is_copy() -> bool {
10307            true
10308        }
10309
10310        #[inline(always)]
10311        fn decode_is_copy() -> bool {
10312            true
10313        }
10314    }
10315
10316    unsafe impl<D: fidl::encoding::ResourceDialect>
10317        fidl::encoding::Encode<AudioRendererSetPtsUnitsRequest, D>
10318        for &AudioRendererSetPtsUnitsRequest
10319    {
10320        #[inline]
10321        unsafe fn encode(
10322            self,
10323            encoder: &mut fidl::encoding::Encoder<'_, D>,
10324            offset: usize,
10325            _depth: fidl::encoding::Depth,
10326        ) -> fidl::Result<()> {
10327            encoder.debug_check_bounds::<AudioRendererSetPtsUnitsRequest>(offset);
10328            unsafe {
10329                // Copy the object into the buffer.
10330                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
10331                (buf_ptr as *mut AudioRendererSetPtsUnitsRequest)
10332                    .write_unaligned((self as *const AudioRendererSetPtsUnitsRequest).read());
10333                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
10334                // done second because the memcpy will write garbage to these bytes.
10335            }
10336            Ok(())
10337        }
10338    }
10339    unsafe impl<
10340        D: fidl::encoding::ResourceDialect,
10341        T0: fidl::encoding::Encode<u32, D>,
10342        T1: fidl::encoding::Encode<u32, D>,
10343    > fidl::encoding::Encode<AudioRendererSetPtsUnitsRequest, D> for (T0, T1)
10344    {
10345        #[inline]
10346        unsafe fn encode(
10347            self,
10348            encoder: &mut fidl::encoding::Encoder<'_, D>,
10349            offset: usize,
10350            depth: fidl::encoding::Depth,
10351        ) -> fidl::Result<()> {
10352            encoder.debug_check_bounds::<AudioRendererSetPtsUnitsRequest>(offset);
10353            // Zero out padding regions. There's no need to apply masks
10354            // because the unmasked parts will be overwritten by fields.
10355            // Write the fields.
10356            self.0.encode(encoder, offset + 0, depth)?;
10357            self.1.encode(encoder, offset + 4, depth)?;
10358            Ok(())
10359        }
10360    }
10361
10362    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10363        for AudioRendererSetPtsUnitsRequest
10364    {
10365        #[inline(always)]
10366        fn new_empty() -> Self {
10367            Self {
10368                tick_per_second_numerator: fidl::new_empty!(u32, D),
10369                tick_per_second_denominator: fidl::new_empty!(u32, D),
10370            }
10371        }
10372
10373        #[inline]
10374        unsafe fn decode(
10375            &mut self,
10376            decoder: &mut fidl::encoding::Decoder<'_, D>,
10377            offset: usize,
10378            _depth: fidl::encoding::Depth,
10379        ) -> fidl::Result<()> {
10380            decoder.debug_check_bounds::<Self>(offset);
10381            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10382            // Verify that padding bytes are zero.
10383            // Copy from the buffer into the object.
10384            unsafe {
10385                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
10386            }
10387            Ok(())
10388        }
10389    }
10390
10391    impl fidl::encoding::ValueTypeMarker for AudioRendererSetUsage2Request {
10392        type Borrowed<'a> = &'a Self;
10393        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10394            value
10395        }
10396    }
10397
10398    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetUsage2Request {
10399        type Owned = Self;
10400
10401        #[inline(always)]
10402        fn inline_align(_context: fidl::encoding::Context) -> usize {
10403            4
10404        }
10405
10406        #[inline(always)]
10407        fn inline_size(_context: fidl::encoding::Context) -> usize {
10408            4
10409        }
10410    }
10411
10412    unsafe impl<D: fidl::encoding::ResourceDialect>
10413        fidl::encoding::Encode<AudioRendererSetUsage2Request, D>
10414        for &AudioRendererSetUsage2Request
10415    {
10416        #[inline]
10417        unsafe fn encode(
10418            self,
10419            encoder: &mut fidl::encoding::Encoder<'_, D>,
10420            offset: usize,
10421            _depth: fidl::encoding::Depth,
10422        ) -> fidl::Result<()> {
10423            encoder.debug_check_bounds::<AudioRendererSetUsage2Request>(offset);
10424            // Delegate to tuple encoding.
10425            fidl::encoding::Encode::<AudioRendererSetUsage2Request, D>::encode(
10426                (<AudioRenderUsage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage2),),
10427                encoder,
10428                offset,
10429                _depth,
10430            )
10431        }
10432    }
10433    unsafe impl<
10434        D: fidl::encoding::ResourceDialect,
10435        T0: fidl::encoding::Encode<AudioRenderUsage2, D>,
10436    > fidl::encoding::Encode<AudioRendererSetUsage2Request, D> for (T0,)
10437    {
10438        #[inline]
10439        unsafe fn encode(
10440            self,
10441            encoder: &mut fidl::encoding::Encoder<'_, D>,
10442            offset: usize,
10443            depth: fidl::encoding::Depth,
10444        ) -> fidl::Result<()> {
10445            encoder.debug_check_bounds::<AudioRendererSetUsage2Request>(offset);
10446            // Zero out padding regions. There's no need to apply masks
10447            // because the unmasked parts will be overwritten by fields.
10448            // Write the fields.
10449            self.0.encode(encoder, offset + 0, depth)?;
10450            Ok(())
10451        }
10452    }
10453
10454    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10455        for AudioRendererSetUsage2Request
10456    {
10457        #[inline(always)]
10458        fn new_empty() -> Self {
10459            Self { usage2: fidl::new_empty!(AudioRenderUsage2, D) }
10460        }
10461
10462        #[inline]
10463        unsafe fn decode(
10464            &mut self,
10465            decoder: &mut fidl::encoding::Decoder<'_, D>,
10466            offset: usize,
10467            _depth: fidl::encoding::Depth,
10468        ) -> fidl::Result<()> {
10469            decoder.debug_check_bounds::<Self>(offset);
10470            // Verify that padding bytes are zero.
10471            fidl::decode!(AudioRenderUsage2, D, &mut self.usage2, decoder, offset + 0, _depth)?;
10472            Ok(())
10473        }
10474    }
10475
10476    impl fidl::encoding::ValueTypeMarker for AudioRendererSetUsageRequest {
10477        type Borrowed<'a> = &'a Self;
10478        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10479            value
10480        }
10481    }
10482
10483    unsafe impl fidl::encoding::TypeMarker for AudioRendererSetUsageRequest {
10484        type Owned = Self;
10485
10486        #[inline(always)]
10487        fn inline_align(_context: fidl::encoding::Context) -> usize {
10488            4
10489        }
10490
10491        #[inline(always)]
10492        fn inline_size(_context: fidl::encoding::Context) -> usize {
10493            4
10494        }
10495    }
10496
10497    unsafe impl<D: fidl::encoding::ResourceDialect>
10498        fidl::encoding::Encode<AudioRendererSetUsageRequest, D> for &AudioRendererSetUsageRequest
10499    {
10500        #[inline]
10501        unsafe fn encode(
10502            self,
10503            encoder: &mut fidl::encoding::Encoder<'_, D>,
10504            offset: usize,
10505            _depth: fidl::encoding::Depth,
10506        ) -> fidl::Result<()> {
10507            encoder.debug_check_bounds::<AudioRendererSetUsageRequest>(offset);
10508            // Delegate to tuple encoding.
10509            fidl::encoding::Encode::<AudioRendererSetUsageRequest, D>::encode(
10510                (<AudioRenderUsage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),),
10511                encoder,
10512                offset,
10513                _depth,
10514            )
10515        }
10516    }
10517    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<AudioRenderUsage, D>>
10518        fidl::encoding::Encode<AudioRendererSetUsageRequest, D> for (T0,)
10519    {
10520        #[inline]
10521        unsafe fn encode(
10522            self,
10523            encoder: &mut fidl::encoding::Encoder<'_, D>,
10524            offset: usize,
10525            depth: fidl::encoding::Depth,
10526        ) -> fidl::Result<()> {
10527            encoder.debug_check_bounds::<AudioRendererSetUsageRequest>(offset);
10528            // Zero out padding regions. There's no need to apply masks
10529            // because the unmasked parts will be overwritten by fields.
10530            // Write the fields.
10531            self.0.encode(encoder, offset + 0, depth)?;
10532            Ok(())
10533        }
10534    }
10535
10536    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10537        for AudioRendererSetUsageRequest
10538    {
10539        #[inline(always)]
10540        fn new_empty() -> Self {
10541            Self { usage: fidl::new_empty!(AudioRenderUsage, D) }
10542        }
10543
10544        #[inline]
10545        unsafe fn decode(
10546            &mut self,
10547            decoder: &mut fidl::encoding::Decoder<'_, D>,
10548            offset: usize,
10549            _depth: fidl::encoding::Depth,
10550        ) -> fidl::Result<()> {
10551            decoder.debug_check_bounds::<Self>(offset);
10552            // Verify that padding bytes are zero.
10553            fidl::decode!(AudioRenderUsage, D, &mut self.usage, decoder, offset + 0, _depth)?;
10554            Ok(())
10555        }
10556    }
10557
10558    impl fidl::encoding::ValueTypeMarker for AudioStreamType {
10559        type Borrowed<'a> = &'a Self;
10560        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10561            value
10562        }
10563    }
10564
10565    unsafe impl fidl::encoding::TypeMarker for AudioStreamType {
10566        type Owned = Self;
10567
10568        #[inline(always)]
10569        fn inline_align(_context: fidl::encoding::Context) -> usize {
10570            4
10571        }
10572
10573        #[inline(always)]
10574        fn inline_size(_context: fidl::encoding::Context) -> usize {
10575            12
10576        }
10577    }
10578
10579    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioStreamType, D>
10580        for &AudioStreamType
10581    {
10582        #[inline]
10583        unsafe fn encode(
10584            self,
10585            encoder: &mut fidl::encoding::Encoder<'_, D>,
10586            offset: usize,
10587            _depth: fidl::encoding::Depth,
10588        ) -> fidl::Result<()> {
10589            encoder.debug_check_bounds::<AudioStreamType>(offset);
10590            // Delegate to tuple encoding.
10591            fidl::encoding::Encode::<AudioStreamType, D>::encode(
10592                (
10593                    <AudioSampleFormat as fidl::encoding::ValueTypeMarker>::borrow(
10594                        &self.sample_format,
10595                    ),
10596                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.channels),
10597                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frames_per_second),
10598                ),
10599                encoder,
10600                offset,
10601                _depth,
10602            )
10603        }
10604    }
10605    unsafe impl<
10606        D: fidl::encoding::ResourceDialect,
10607        T0: fidl::encoding::Encode<AudioSampleFormat, D>,
10608        T1: fidl::encoding::Encode<u32, D>,
10609        T2: fidl::encoding::Encode<u32, D>,
10610    > fidl::encoding::Encode<AudioStreamType, D> for (T0, T1, T2)
10611    {
10612        #[inline]
10613        unsafe fn encode(
10614            self,
10615            encoder: &mut fidl::encoding::Encoder<'_, D>,
10616            offset: usize,
10617            depth: fidl::encoding::Depth,
10618        ) -> fidl::Result<()> {
10619            encoder.debug_check_bounds::<AudioStreamType>(offset);
10620            // Zero out padding regions. There's no need to apply masks
10621            // because the unmasked parts will be overwritten by fields.
10622            // Write the fields.
10623            self.0.encode(encoder, offset + 0, depth)?;
10624            self.1.encode(encoder, offset + 4, depth)?;
10625            self.2.encode(encoder, offset + 8, depth)?;
10626            Ok(())
10627        }
10628    }
10629
10630    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioStreamType {
10631        #[inline(always)]
10632        fn new_empty() -> Self {
10633            Self {
10634                sample_format: fidl::new_empty!(AudioSampleFormat, D),
10635                channels: fidl::new_empty!(u32, D),
10636                frames_per_second: fidl::new_empty!(u32, D),
10637            }
10638        }
10639
10640        #[inline]
10641        unsafe fn decode(
10642            &mut self,
10643            decoder: &mut fidl::encoding::Decoder<'_, D>,
10644            offset: usize,
10645            _depth: fidl::encoding::Depth,
10646        ) -> fidl::Result<()> {
10647            decoder.debug_check_bounds::<Self>(offset);
10648            // Verify that padding bytes are zero.
10649            fidl::decode!(
10650                AudioSampleFormat,
10651                D,
10652                &mut self.sample_format,
10653                decoder,
10654                offset + 0,
10655                _depth
10656            )?;
10657            fidl::decode!(u32, D, &mut self.channels, decoder, offset + 4, _depth)?;
10658            fidl::decode!(u32, D, &mut self.frames_per_second, decoder, offset + 8, _depth)?;
10659            Ok(())
10660        }
10661    }
10662
10663    impl fidl::encoding::ValueTypeMarker for Compression {
10664        type Borrowed<'a> = &'a Self;
10665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10666            value
10667        }
10668    }
10669
10670    unsafe impl fidl::encoding::TypeMarker for Compression {
10671        type Owned = Self;
10672
10673        #[inline(always)]
10674        fn inline_align(_context: fidl::encoding::Context) -> usize {
10675            8
10676        }
10677
10678        #[inline(always)]
10679        fn inline_size(_context: fidl::encoding::Context) -> usize {
10680            32
10681        }
10682    }
10683
10684    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Compression, D>
10685        for &Compression
10686    {
10687        #[inline]
10688        unsafe fn encode(
10689            self,
10690            encoder: &mut fidl::encoding::Encoder<'_, D>,
10691            offset: usize,
10692            _depth: fidl::encoding::Depth,
10693        ) -> fidl::Result<()> {
10694            encoder.debug_check_bounds::<Compression>(offset);
10695            // Delegate to tuple encoding.
10696            fidl::encoding::Encode::<Compression, D>::encode(
10697                (
10698                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),
10699                    <fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>> as fidl::encoding::ValueTypeMarker>::borrow(&self.parameters),
10700                ),
10701                encoder, offset, _depth
10702            )
10703        }
10704    }
10705    unsafe impl<
10706        D: fidl::encoding::ResourceDialect,
10707        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<256>, D>,
10708        T1: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>>, D>,
10709    > fidl::encoding::Encode<Compression, D> for (T0, T1)
10710    {
10711        #[inline]
10712        unsafe fn encode(
10713            self,
10714            encoder: &mut fidl::encoding::Encoder<'_, D>,
10715            offset: usize,
10716            depth: fidl::encoding::Depth,
10717        ) -> fidl::Result<()> {
10718            encoder.debug_check_bounds::<Compression>(offset);
10719            // Zero out padding regions. There's no need to apply masks
10720            // because the unmasked parts will be overwritten by fields.
10721            // Write the fields.
10722            self.0.encode(encoder, offset + 0, depth)?;
10723            self.1.encode(encoder, offset + 16, depth)?;
10724            Ok(())
10725        }
10726    }
10727
10728    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Compression {
10729        #[inline(always)]
10730        fn new_empty() -> Self {
10731            Self {
10732                type_: fidl::new_empty!(fidl::encoding::BoundedString<256>, D),
10733                parameters: fidl::new_empty!(
10734                    fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>>,
10735                    D
10736                ),
10737            }
10738        }
10739
10740        #[inline]
10741        unsafe fn decode(
10742            &mut self,
10743            decoder: &mut fidl::encoding::Decoder<'_, D>,
10744            offset: usize,
10745            _depth: fidl::encoding::Depth,
10746        ) -> fidl::Result<()> {
10747            decoder.debug_check_bounds::<Self>(offset);
10748            // Verify that padding bytes are zero.
10749            fidl::decode!(
10750                fidl::encoding::BoundedString<256>,
10751                D,
10752                &mut self.type_,
10753                decoder,
10754                offset + 0,
10755                _depth
10756            )?;
10757            fidl::decode!(
10758                fidl::encoding::Optional<fidl::encoding::Vector<u8, 8192>>,
10759                D,
10760                &mut self.parameters,
10761                decoder,
10762                offset + 16,
10763                _depth
10764            )?;
10765            Ok(())
10766        }
10767    }
10768
10769    impl fidl::encoding::ValueTypeMarker for EncryptionPattern {
10770        type Borrowed<'a> = &'a Self;
10771        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10772            value
10773        }
10774    }
10775
10776    unsafe impl fidl::encoding::TypeMarker for EncryptionPattern {
10777        type Owned = Self;
10778
10779        #[inline(always)]
10780        fn inline_align(_context: fidl::encoding::Context) -> usize {
10781            4
10782        }
10783
10784        #[inline(always)]
10785        fn inline_size(_context: fidl::encoding::Context) -> usize {
10786            8
10787        }
10788        #[inline(always)]
10789        fn encode_is_copy() -> bool {
10790            true
10791        }
10792
10793        #[inline(always)]
10794        fn decode_is_copy() -> bool {
10795            true
10796        }
10797    }
10798
10799    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncryptionPattern, D>
10800        for &EncryptionPattern
10801    {
10802        #[inline]
10803        unsafe fn encode(
10804            self,
10805            encoder: &mut fidl::encoding::Encoder<'_, D>,
10806            offset: usize,
10807            _depth: fidl::encoding::Depth,
10808        ) -> fidl::Result<()> {
10809            encoder.debug_check_bounds::<EncryptionPattern>(offset);
10810            unsafe {
10811                // Copy the object into the buffer.
10812                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
10813                (buf_ptr as *mut EncryptionPattern)
10814                    .write_unaligned((self as *const EncryptionPattern).read());
10815                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
10816                // done second because the memcpy will write garbage to these bytes.
10817            }
10818            Ok(())
10819        }
10820    }
10821    unsafe impl<
10822        D: fidl::encoding::ResourceDialect,
10823        T0: fidl::encoding::Encode<u32, D>,
10824        T1: fidl::encoding::Encode<u32, D>,
10825    > fidl::encoding::Encode<EncryptionPattern, D> for (T0, T1)
10826    {
10827        #[inline]
10828        unsafe fn encode(
10829            self,
10830            encoder: &mut fidl::encoding::Encoder<'_, D>,
10831            offset: usize,
10832            depth: fidl::encoding::Depth,
10833        ) -> fidl::Result<()> {
10834            encoder.debug_check_bounds::<EncryptionPattern>(offset);
10835            // Zero out padding regions. There's no need to apply masks
10836            // because the unmasked parts will be overwritten by fields.
10837            // Write the fields.
10838            self.0.encode(encoder, offset + 0, depth)?;
10839            self.1.encode(encoder, offset + 4, depth)?;
10840            Ok(())
10841        }
10842    }
10843
10844    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncryptionPattern {
10845        #[inline(always)]
10846        fn new_empty() -> Self {
10847            Self {
10848                clear_blocks: fidl::new_empty!(u32, D),
10849                encrypted_blocks: fidl::new_empty!(u32, D),
10850            }
10851        }
10852
10853        #[inline]
10854        unsafe fn decode(
10855            &mut self,
10856            decoder: &mut fidl::encoding::Decoder<'_, D>,
10857            offset: usize,
10858            _depth: fidl::encoding::Depth,
10859        ) -> fidl::Result<()> {
10860            decoder.debug_check_bounds::<Self>(offset);
10861            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
10862            // Verify that padding bytes are zero.
10863            // Copy from the buffer into the object.
10864            unsafe {
10865                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
10866            }
10867            Ok(())
10868        }
10869    }
10870
10871    impl fidl::encoding::ValueTypeMarker for Metadata {
10872        type Borrowed<'a> = &'a Self;
10873        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10874            value
10875        }
10876    }
10877
10878    unsafe impl fidl::encoding::TypeMarker for Metadata {
10879        type Owned = Self;
10880
10881        #[inline(always)]
10882        fn inline_align(_context: fidl::encoding::Context) -> usize {
10883            8
10884        }
10885
10886        #[inline(always)]
10887        fn inline_size(_context: fidl::encoding::Context) -> usize {
10888            16
10889        }
10890    }
10891
10892    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Metadata, D> for &Metadata {
10893        #[inline]
10894        unsafe fn encode(
10895            self,
10896            encoder: &mut fidl::encoding::Encoder<'_, D>,
10897            offset: usize,
10898            _depth: fidl::encoding::Depth,
10899        ) -> fidl::Result<()> {
10900            encoder.debug_check_bounds::<Metadata>(offset);
10901            // Delegate to tuple encoding.
10902            fidl::encoding::Encode::<Metadata, D>::encode(
10903                (
10904                    <fidl::encoding::UnboundedVector<Property> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
10905                ),
10906                encoder, offset, _depth
10907            )
10908        }
10909    }
10910    unsafe impl<
10911        D: fidl::encoding::ResourceDialect,
10912        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<Property>, D>,
10913    > fidl::encoding::Encode<Metadata, D> for (T0,)
10914    {
10915        #[inline]
10916        unsafe fn encode(
10917            self,
10918            encoder: &mut fidl::encoding::Encoder<'_, D>,
10919            offset: usize,
10920            depth: fidl::encoding::Depth,
10921        ) -> fidl::Result<()> {
10922            encoder.debug_check_bounds::<Metadata>(offset);
10923            // Zero out padding regions. There's no need to apply masks
10924            // because the unmasked parts will be overwritten by fields.
10925            // Write the fields.
10926            self.0.encode(encoder, offset + 0, depth)?;
10927            Ok(())
10928        }
10929    }
10930
10931    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Metadata {
10932        #[inline(always)]
10933        fn new_empty() -> Self {
10934            Self { properties: fidl::new_empty!(fidl::encoding::UnboundedVector<Property>, D) }
10935        }
10936
10937        #[inline]
10938        unsafe fn decode(
10939            &mut self,
10940            decoder: &mut fidl::encoding::Decoder<'_, D>,
10941            offset: usize,
10942            _depth: fidl::encoding::Depth,
10943        ) -> fidl::Result<()> {
10944            decoder.debug_check_bounds::<Self>(offset);
10945            // Verify that padding bytes are zero.
10946            fidl::decode!(
10947                fidl::encoding::UnboundedVector<Property>,
10948                D,
10949                &mut self.properties,
10950                decoder,
10951                offset + 0,
10952                _depth
10953            )?;
10954            Ok(())
10955        }
10956    }
10957
10958    impl fidl::encoding::ValueTypeMarker for Parameter {
10959        type Borrowed<'a> = &'a Self;
10960        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10961            value
10962        }
10963    }
10964
10965    unsafe impl fidl::encoding::TypeMarker for Parameter {
10966        type Owned = Self;
10967
10968        #[inline(always)]
10969        fn inline_align(_context: fidl::encoding::Context) -> usize {
10970            8
10971        }
10972
10973        #[inline(always)]
10974        fn inline_size(_context: fidl::encoding::Context) -> usize {
10975            48
10976        }
10977    }
10978
10979    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Parameter, D>
10980        for &Parameter
10981    {
10982        #[inline]
10983        unsafe fn encode(
10984            self,
10985            encoder: &mut fidl::encoding::Encoder<'_, D>,
10986            offset: usize,
10987            _depth: fidl::encoding::Depth,
10988        ) -> fidl::Result<()> {
10989            encoder.debug_check_bounds::<Parameter>(offset);
10990            // Delegate to tuple encoding.
10991            fidl::encoding::Encode::<Parameter, D>::encode(
10992                (
10993                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
10994                        &self.scope,
10995                    ),
10996                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
10997                        &self.name,
10998                    ),
10999                    <Value as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
11000                ),
11001                encoder,
11002                offset,
11003                _depth,
11004            )
11005        }
11006    }
11007    unsafe impl<
11008        D: fidl::encoding::ResourceDialect,
11009        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11010        T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11011        T2: fidl::encoding::Encode<Value, D>,
11012    > fidl::encoding::Encode<Parameter, D> for (T0, T1, T2)
11013    {
11014        #[inline]
11015        unsafe fn encode(
11016            self,
11017            encoder: &mut fidl::encoding::Encoder<'_, D>,
11018            offset: usize,
11019            depth: fidl::encoding::Depth,
11020        ) -> fidl::Result<()> {
11021            encoder.debug_check_bounds::<Parameter>(offset);
11022            // Zero out padding regions. There's no need to apply masks
11023            // because the unmasked parts will be overwritten by fields.
11024            // Write the fields.
11025            self.0.encode(encoder, offset + 0, depth)?;
11026            self.1.encode(encoder, offset + 16, depth)?;
11027            self.2.encode(encoder, offset + 32, depth)?;
11028            Ok(())
11029        }
11030    }
11031
11032    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Parameter {
11033        #[inline(always)]
11034        fn new_empty() -> Self {
11035            Self {
11036                scope: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11037                name: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11038                value: fidl::new_empty!(Value, D),
11039            }
11040        }
11041
11042        #[inline]
11043        unsafe fn decode(
11044            &mut self,
11045            decoder: &mut fidl::encoding::Decoder<'_, D>,
11046            offset: usize,
11047            _depth: fidl::encoding::Depth,
11048        ) -> fidl::Result<()> {
11049            decoder.debug_check_bounds::<Self>(offset);
11050            // Verify that padding bytes are zero.
11051            fidl::decode!(
11052                fidl::encoding::UnboundedString,
11053                D,
11054                &mut self.scope,
11055                decoder,
11056                offset + 0,
11057                _depth
11058            )?;
11059            fidl::decode!(
11060                fidl::encoding::UnboundedString,
11061                D,
11062                &mut self.name,
11063                decoder,
11064                offset + 16,
11065                _depth
11066            )?;
11067            fidl::decode!(Value, D, &mut self.value, decoder, offset + 32, _depth)?;
11068            Ok(())
11069        }
11070    }
11071
11072    impl fidl::encoding::ValueTypeMarker for PcmFormat {
11073        type Borrowed<'a> = &'a Self;
11074        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11075            value
11076        }
11077    }
11078
11079    unsafe impl fidl::encoding::TypeMarker for PcmFormat {
11080        type Owned = Self;
11081
11082        #[inline(always)]
11083        fn inline_align(_context: fidl::encoding::Context) -> usize {
11084            8
11085        }
11086
11087        #[inline(always)]
11088        fn inline_size(_context: fidl::encoding::Context) -> usize {
11089            32
11090        }
11091    }
11092
11093    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmFormat, D>
11094        for &PcmFormat
11095    {
11096        #[inline]
11097        unsafe fn encode(
11098            self,
11099            encoder: &mut fidl::encoding::Encoder<'_, D>,
11100            offset: usize,
11101            _depth: fidl::encoding::Depth,
11102        ) -> fidl::Result<()> {
11103            encoder.debug_check_bounds::<PcmFormat>(offset);
11104            // Delegate to tuple encoding.
11105            fidl::encoding::Encode::<PcmFormat, D>::encode(
11106                (
11107                    <AudioPcmMode as fidl::encoding::ValueTypeMarker>::borrow(&self.pcm_mode),
11108                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
11109                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frames_per_second),
11110                    <fidl::encoding::Vector<AudioChannelId, 16> as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_map),
11111                ),
11112                encoder, offset, _depth
11113            )
11114        }
11115    }
11116    unsafe impl<
11117        D: fidl::encoding::ResourceDialect,
11118        T0: fidl::encoding::Encode<AudioPcmMode, D>,
11119        T1: fidl::encoding::Encode<u32, D>,
11120        T2: fidl::encoding::Encode<u32, D>,
11121        T3: fidl::encoding::Encode<fidl::encoding::Vector<AudioChannelId, 16>, D>,
11122    > fidl::encoding::Encode<PcmFormat, D> for (T0, T1, T2, T3)
11123    {
11124        #[inline]
11125        unsafe fn encode(
11126            self,
11127            encoder: &mut fidl::encoding::Encoder<'_, D>,
11128            offset: usize,
11129            depth: fidl::encoding::Depth,
11130        ) -> fidl::Result<()> {
11131            encoder.debug_check_bounds::<PcmFormat>(offset);
11132            // Zero out padding regions. There's no need to apply masks
11133            // because the unmasked parts will be overwritten by fields.
11134            unsafe {
11135                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
11136                (ptr as *mut u64).write_unaligned(0);
11137            }
11138            // Write the fields.
11139            self.0.encode(encoder, offset + 0, depth)?;
11140            self.1.encode(encoder, offset + 4, depth)?;
11141            self.2.encode(encoder, offset + 8, depth)?;
11142            self.3.encode(encoder, offset + 16, depth)?;
11143            Ok(())
11144        }
11145    }
11146
11147    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmFormat {
11148        #[inline(always)]
11149        fn new_empty() -> Self {
11150            Self {
11151                pcm_mode: fidl::new_empty!(AudioPcmMode, D),
11152                bits_per_sample: fidl::new_empty!(u32, D),
11153                frames_per_second: fidl::new_empty!(u32, D),
11154                channel_map: fidl::new_empty!(fidl::encoding::Vector<AudioChannelId, 16>, D),
11155            }
11156        }
11157
11158        #[inline]
11159        unsafe fn decode(
11160            &mut self,
11161            decoder: &mut fidl::encoding::Decoder<'_, D>,
11162            offset: usize,
11163            _depth: fidl::encoding::Depth,
11164        ) -> fidl::Result<()> {
11165            decoder.debug_check_bounds::<Self>(offset);
11166            // Verify that padding bytes are zero.
11167            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
11168            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11169            let mask = 0xffffffff00000000u64;
11170            let maskedval = padval & mask;
11171            if maskedval != 0 {
11172                return Err(fidl::Error::NonZeroPadding {
11173                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
11174                });
11175            }
11176            fidl::decode!(AudioPcmMode, D, &mut self.pcm_mode, decoder, offset + 0, _depth)?;
11177            fidl::decode!(u32, D, &mut self.bits_per_sample, decoder, offset + 4, _depth)?;
11178            fidl::decode!(u32, D, &mut self.frames_per_second, decoder, offset + 8, _depth)?;
11179            fidl::decode!(fidl::encoding::Vector<AudioChannelId, 16>, D, &mut self.channel_map, decoder, offset + 16, _depth)?;
11180            Ok(())
11181        }
11182    }
11183
11184    impl fidl::encoding::ValueTypeMarker for ProfileProviderRegisterHandlerWithCapacityResponse {
11185        type Borrowed<'a> = &'a Self;
11186        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11187            value
11188        }
11189    }
11190
11191    unsafe impl fidl::encoding::TypeMarker for ProfileProviderRegisterHandlerWithCapacityResponse {
11192        type Owned = Self;
11193
11194        #[inline(always)]
11195        fn inline_align(_context: fidl::encoding::Context) -> usize {
11196            8
11197        }
11198
11199        #[inline(always)]
11200        fn inline_size(_context: fidl::encoding::Context) -> usize {
11201            16
11202        }
11203        #[inline(always)]
11204        fn encode_is_copy() -> bool {
11205            true
11206        }
11207
11208        #[inline(always)]
11209        fn decode_is_copy() -> bool {
11210            true
11211        }
11212    }
11213
11214    unsafe impl<D: fidl::encoding::ResourceDialect>
11215        fidl::encoding::Encode<ProfileProviderRegisterHandlerWithCapacityResponse, D>
11216        for &ProfileProviderRegisterHandlerWithCapacityResponse
11217    {
11218        #[inline]
11219        unsafe fn encode(
11220            self,
11221            encoder: &mut fidl::encoding::Encoder<'_, D>,
11222            offset: usize,
11223            _depth: fidl::encoding::Depth,
11224        ) -> fidl::Result<()> {
11225            encoder
11226                .debug_check_bounds::<ProfileProviderRegisterHandlerWithCapacityResponse>(offset);
11227            unsafe {
11228                // Copy the object into the buffer.
11229                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11230                (buf_ptr as *mut ProfileProviderRegisterHandlerWithCapacityResponse)
11231                    .write_unaligned(
11232                        (self as *const ProfileProviderRegisterHandlerWithCapacityResponse).read(),
11233                    );
11234                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11235                // done second because the memcpy will write garbage to these bytes.
11236            }
11237            Ok(())
11238        }
11239    }
11240    unsafe impl<
11241        D: fidl::encoding::ResourceDialect,
11242        T0: fidl::encoding::Encode<i64, D>,
11243        T1: fidl::encoding::Encode<i64, D>,
11244    > fidl::encoding::Encode<ProfileProviderRegisterHandlerWithCapacityResponse, D> for (T0, T1)
11245    {
11246        #[inline]
11247        unsafe fn encode(
11248            self,
11249            encoder: &mut fidl::encoding::Encoder<'_, D>,
11250            offset: usize,
11251            depth: fidl::encoding::Depth,
11252        ) -> fidl::Result<()> {
11253            encoder
11254                .debug_check_bounds::<ProfileProviderRegisterHandlerWithCapacityResponse>(offset);
11255            // Zero out padding regions. There's no need to apply masks
11256            // because the unmasked parts will be overwritten by fields.
11257            // Write the fields.
11258            self.0.encode(encoder, offset + 0, depth)?;
11259            self.1.encode(encoder, offset + 8, depth)?;
11260            Ok(())
11261        }
11262    }
11263
11264    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11265        for ProfileProviderRegisterHandlerWithCapacityResponse
11266    {
11267        #[inline(always)]
11268        fn new_empty() -> Self {
11269            Self { period: fidl::new_empty!(i64, D), capacity: fidl::new_empty!(i64, D) }
11270        }
11271
11272        #[inline]
11273        unsafe fn decode(
11274            &mut self,
11275            decoder: &mut fidl::encoding::Decoder<'_, D>,
11276            offset: usize,
11277            _depth: fidl::encoding::Depth,
11278        ) -> fidl::Result<()> {
11279            decoder.debug_check_bounds::<Self>(offset);
11280            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11281            // Verify that padding bytes are zero.
11282            // Copy from the buffer into the object.
11283            unsafe {
11284                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
11285            }
11286            Ok(())
11287        }
11288    }
11289
11290    impl fidl::encoding::ValueTypeMarker for Property {
11291        type Borrowed<'a> = &'a Self;
11292        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11293            value
11294        }
11295    }
11296
11297    unsafe impl fidl::encoding::TypeMarker for Property {
11298        type Owned = Self;
11299
11300        #[inline(always)]
11301        fn inline_align(_context: fidl::encoding::Context) -> usize {
11302            8
11303        }
11304
11305        #[inline(always)]
11306        fn inline_size(_context: fidl::encoding::Context) -> usize {
11307            32
11308        }
11309    }
11310
11311    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Property, D> for &Property {
11312        #[inline]
11313        unsafe fn encode(
11314            self,
11315            encoder: &mut fidl::encoding::Encoder<'_, D>,
11316            offset: usize,
11317            _depth: fidl::encoding::Depth,
11318        ) -> fidl::Result<()> {
11319            encoder.debug_check_bounds::<Property>(offset);
11320            // Delegate to tuple encoding.
11321            fidl::encoding::Encode::<Property, D>::encode(
11322                (
11323                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
11324                        &self.label,
11325                    ),
11326                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
11327                        &self.value,
11328                    ),
11329                ),
11330                encoder,
11331                offset,
11332                _depth,
11333            )
11334        }
11335    }
11336    unsafe impl<
11337        D: fidl::encoding::ResourceDialect,
11338        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11339        T1: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
11340    > fidl::encoding::Encode<Property, D> for (T0, T1)
11341    {
11342        #[inline]
11343        unsafe fn encode(
11344            self,
11345            encoder: &mut fidl::encoding::Encoder<'_, D>,
11346            offset: usize,
11347            depth: fidl::encoding::Depth,
11348        ) -> fidl::Result<()> {
11349            encoder.debug_check_bounds::<Property>(offset);
11350            // Zero out padding regions. There's no need to apply masks
11351            // because the unmasked parts will be overwritten by fields.
11352            // Write the fields.
11353            self.0.encode(encoder, offset + 0, depth)?;
11354            self.1.encode(encoder, offset + 16, depth)?;
11355            Ok(())
11356        }
11357    }
11358
11359    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Property {
11360        #[inline(always)]
11361        fn new_empty() -> Self {
11362            Self {
11363                label: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11364                value: fidl::new_empty!(fidl::encoding::UnboundedString, D),
11365            }
11366        }
11367
11368        #[inline]
11369        unsafe fn decode(
11370            &mut self,
11371            decoder: &mut fidl::encoding::Decoder<'_, D>,
11372            offset: usize,
11373            _depth: fidl::encoding::Depth,
11374        ) -> fidl::Result<()> {
11375            decoder.debug_check_bounds::<Self>(offset);
11376            // Verify that padding bytes are zero.
11377            fidl::decode!(
11378                fidl::encoding::UnboundedString,
11379                D,
11380                &mut self.label,
11381                decoder,
11382                offset + 0,
11383                _depth
11384            )?;
11385            fidl::decode!(
11386                fidl::encoding::UnboundedString,
11387                D,
11388                &mut self.value,
11389                decoder,
11390                offset + 16,
11391                _depth
11392            )?;
11393            Ok(())
11394        }
11395    }
11396
11397    impl fidl::encoding::ValueTypeMarker for SbcEncoderSettings {
11398        type Borrowed<'a> = &'a Self;
11399        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11400            value
11401        }
11402    }
11403
11404    unsafe impl fidl::encoding::TypeMarker for SbcEncoderSettings {
11405        type Owned = Self;
11406
11407        #[inline(always)]
11408        fn inline_align(_context: fidl::encoding::Context) -> usize {
11409            8
11410        }
11411
11412        #[inline(always)]
11413        fn inline_size(_context: fidl::encoding::Context) -> usize {
11414            24
11415        }
11416    }
11417
11418    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SbcEncoderSettings, D>
11419        for &SbcEncoderSettings
11420    {
11421        #[inline]
11422        unsafe fn encode(
11423            self,
11424            encoder: &mut fidl::encoding::Encoder<'_, D>,
11425            offset: usize,
11426            _depth: fidl::encoding::Depth,
11427        ) -> fidl::Result<()> {
11428            encoder.debug_check_bounds::<SbcEncoderSettings>(offset);
11429            // Delegate to tuple encoding.
11430            fidl::encoding::Encode::<SbcEncoderSettings, D>::encode(
11431                (
11432                    <SbcSubBands as fidl::encoding::ValueTypeMarker>::borrow(&self.sub_bands),
11433                    <SbcAllocation as fidl::encoding::ValueTypeMarker>::borrow(&self.allocation),
11434                    <SbcBlockCount as fidl::encoding::ValueTypeMarker>::borrow(&self.block_count),
11435                    <SbcChannelMode as fidl::encoding::ValueTypeMarker>::borrow(&self.channel_mode),
11436                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.bit_pool),
11437                ),
11438                encoder,
11439                offset,
11440                _depth,
11441            )
11442        }
11443    }
11444    unsafe impl<
11445        D: fidl::encoding::ResourceDialect,
11446        T0: fidl::encoding::Encode<SbcSubBands, D>,
11447        T1: fidl::encoding::Encode<SbcAllocation, D>,
11448        T2: fidl::encoding::Encode<SbcBlockCount, D>,
11449        T3: fidl::encoding::Encode<SbcChannelMode, D>,
11450        T4: fidl::encoding::Encode<u64, D>,
11451    > fidl::encoding::Encode<SbcEncoderSettings, D> for (T0, T1, T2, T3, T4)
11452    {
11453        #[inline]
11454        unsafe fn encode(
11455            self,
11456            encoder: &mut fidl::encoding::Encoder<'_, D>,
11457            offset: usize,
11458            depth: fidl::encoding::Depth,
11459        ) -> fidl::Result<()> {
11460            encoder.debug_check_bounds::<SbcEncoderSettings>(offset);
11461            // Zero out padding regions. There's no need to apply masks
11462            // because the unmasked parts will be overwritten by fields.
11463            // Write the fields.
11464            self.0.encode(encoder, offset + 0, depth)?;
11465            self.1.encode(encoder, offset + 4, depth)?;
11466            self.2.encode(encoder, offset + 8, depth)?;
11467            self.3.encode(encoder, offset + 12, depth)?;
11468            self.4.encode(encoder, offset + 16, depth)?;
11469            Ok(())
11470        }
11471    }
11472
11473    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SbcEncoderSettings {
11474        #[inline(always)]
11475        fn new_empty() -> Self {
11476            Self {
11477                sub_bands: fidl::new_empty!(SbcSubBands, D),
11478                allocation: fidl::new_empty!(SbcAllocation, D),
11479                block_count: fidl::new_empty!(SbcBlockCount, D),
11480                channel_mode: fidl::new_empty!(SbcChannelMode, D),
11481                bit_pool: fidl::new_empty!(u64, D),
11482            }
11483        }
11484
11485        #[inline]
11486        unsafe fn decode(
11487            &mut self,
11488            decoder: &mut fidl::encoding::Decoder<'_, D>,
11489            offset: usize,
11490            _depth: fidl::encoding::Depth,
11491        ) -> fidl::Result<()> {
11492            decoder.debug_check_bounds::<Self>(offset);
11493            // Verify that padding bytes are zero.
11494            fidl::decode!(SbcSubBands, D, &mut self.sub_bands, decoder, offset + 0, _depth)?;
11495            fidl::decode!(SbcAllocation, D, &mut self.allocation, decoder, offset + 4, _depth)?;
11496            fidl::decode!(SbcBlockCount, D, &mut self.block_count, decoder, offset + 8, _depth)?;
11497            fidl::decode!(SbcChannelMode, D, &mut self.channel_mode, decoder, offset + 12, _depth)?;
11498            fidl::decode!(u64, D, &mut self.bit_pool, decoder, offset + 16, _depth)?;
11499            Ok(())
11500        }
11501    }
11502
11503    impl fidl::encoding::ValueTypeMarker for StreamBufferSetRemovePayloadBufferRequest {
11504        type Borrowed<'a> = &'a Self;
11505        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11506            value
11507        }
11508    }
11509
11510    unsafe impl fidl::encoding::TypeMarker for StreamBufferSetRemovePayloadBufferRequest {
11511        type Owned = Self;
11512
11513        #[inline(always)]
11514        fn inline_align(_context: fidl::encoding::Context) -> usize {
11515            4
11516        }
11517
11518        #[inline(always)]
11519        fn inline_size(_context: fidl::encoding::Context) -> usize {
11520            4
11521        }
11522        #[inline(always)]
11523        fn encode_is_copy() -> bool {
11524            true
11525        }
11526
11527        #[inline(always)]
11528        fn decode_is_copy() -> bool {
11529            true
11530        }
11531    }
11532
11533    unsafe impl<D: fidl::encoding::ResourceDialect>
11534        fidl::encoding::Encode<StreamBufferSetRemovePayloadBufferRequest, D>
11535        for &StreamBufferSetRemovePayloadBufferRequest
11536    {
11537        #[inline]
11538        unsafe fn encode(
11539            self,
11540            encoder: &mut fidl::encoding::Encoder<'_, D>,
11541            offset: usize,
11542            _depth: fidl::encoding::Depth,
11543        ) -> fidl::Result<()> {
11544            encoder.debug_check_bounds::<StreamBufferSetRemovePayloadBufferRequest>(offset);
11545            unsafe {
11546                // Copy the object into the buffer.
11547                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11548                (buf_ptr as *mut StreamBufferSetRemovePayloadBufferRequest).write_unaligned(
11549                    (self as *const StreamBufferSetRemovePayloadBufferRequest).read(),
11550                );
11551                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11552                // done second because the memcpy will write garbage to these bytes.
11553            }
11554            Ok(())
11555        }
11556    }
11557    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
11558        fidl::encoding::Encode<StreamBufferSetRemovePayloadBufferRequest, D> for (T0,)
11559    {
11560        #[inline]
11561        unsafe fn encode(
11562            self,
11563            encoder: &mut fidl::encoding::Encoder<'_, D>,
11564            offset: usize,
11565            depth: fidl::encoding::Depth,
11566        ) -> fidl::Result<()> {
11567            encoder.debug_check_bounds::<StreamBufferSetRemovePayloadBufferRequest>(offset);
11568            // Zero out padding regions. There's no need to apply masks
11569            // because the unmasked parts will be overwritten by fields.
11570            // Write the fields.
11571            self.0.encode(encoder, offset + 0, depth)?;
11572            Ok(())
11573        }
11574    }
11575
11576    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11577        for StreamBufferSetRemovePayloadBufferRequest
11578    {
11579        #[inline(always)]
11580        fn new_empty() -> Self {
11581            Self { id: fidl::new_empty!(u32, D) }
11582        }
11583
11584        #[inline]
11585        unsafe fn decode(
11586            &mut self,
11587            decoder: &mut fidl::encoding::Decoder<'_, D>,
11588            offset: usize,
11589            _depth: fidl::encoding::Depth,
11590        ) -> fidl::Result<()> {
11591            decoder.debug_check_bounds::<Self>(offset);
11592            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11593            // Verify that padding bytes are zero.
11594            // Copy from the buffer into the object.
11595            unsafe {
11596                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
11597            }
11598            Ok(())
11599        }
11600    }
11601
11602    impl fidl::encoding::ValueTypeMarker for StreamPacket {
11603        type Borrowed<'a> = &'a Self;
11604        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11605            value
11606        }
11607    }
11608
11609    unsafe impl fidl::encoding::TypeMarker for StreamPacket {
11610        type Owned = Self;
11611
11612        #[inline(always)]
11613        fn inline_align(_context: fidl::encoding::Context) -> usize {
11614            8
11615        }
11616
11617        #[inline(always)]
11618        fn inline_size(_context: fidl::encoding::Context) -> usize {
11619            56
11620        }
11621    }
11622
11623    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamPacket, D>
11624        for &StreamPacket
11625    {
11626        #[inline]
11627        unsafe fn encode(
11628            self,
11629            encoder: &mut fidl::encoding::Encoder<'_, D>,
11630            offset: usize,
11631            _depth: fidl::encoding::Depth,
11632        ) -> fidl::Result<()> {
11633            encoder.debug_check_bounds::<StreamPacket>(offset);
11634            unsafe {
11635                // Copy the object into the buffer.
11636                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11637                (buf_ptr as *mut StreamPacket)
11638                    .write_unaligned((self as *const StreamPacket).read());
11639                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11640                // done second because the memcpy will write garbage to these bytes.
11641                let padding_ptr = buf_ptr.offset(8) as *mut u64;
11642                let padding_mask = 0xffffffff00000000u64;
11643                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
11644                let padding_ptr = buf_ptr.offset(32) as *mut u64;
11645                let padding_mask = 0xffffffff00000000u64;
11646                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
11647            }
11648            Ok(())
11649        }
11650    }
11651    unsafe impl<
11652        D: fidl::encoding::ResourceDialect,
11653        T0: fidl::encoding::Encode<i64, D>,
11654        T1: fidl::encoding::Encode<u32, D>,
11655        T2: fidl::encoding::Encode<u64, D>,
11656        T3: fidl::encoding::Encode<u64, D>,
11657        T4: fidl::encoding::Encode<u32, D>,
11658        T5: fidl::encoding::Encode<u64, D>,
11659        T6: fidl::encoding::Encode<u64, D>,
11660    > fidl::encoding::Encode<StreamPacket, D> for (T0, T1, T2, T3, T4, T5, T6)
11661    {
11662        #[inline]
11663        unsafe fn encode(
11664            self,
11665            encoder: &mut fidl::encoding::Encoder<'_, D>,
11666            offset: usize,
11667            depth: fidl::encoding::Depth,
11668        ) -> fidl::Result<()> {
11669            encoder.debug_check_bounds::<StreamPacket>(offset);
11670            // Zero out padding regions. There's no need to apply masks
11671            // because the unmasked parts will be overwritten by fields.
11672            unsafe {
11673                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
11674                (ptr as *mut u64).write_unaligned(0);
11675            }
11676            unsafe {
11677                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(32);
11678                (ptr as *mut u64).write_unaligned(0);
11679            }
11680            // Write the fields.
11681            self.0.encode(encoder, offset + 0, depth)?;
11682            self.1.encode(encoder, offset + 8, depth)?;
11683            self.2.encode(encoder, offset + 16, depth)?;
11684            self.3.encode(encoder, offset + 24, depth)?;
11685            self.4.encode(encoder, offset + 32, depth)?;
11686            self.5.encode(encoder, offset + 40, depth)?;
11687            self.6.encode(encoder, offset + 48, depth)?;
11688            Ok(())
11689        }
11690    }
11691
11692    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamPacket {
11693        #[inline(always)]
11694        fn new_empty() -> Self {
11695            Self {
11696                pts: fidl::new_empty!(i64, D),
11697                payload_buffer_id: fidl::new_empty!(u32, D),
11698                payload_offset: fidl::new_empty!(u64, D),
11699                payload_size: fidl::new_empty!(u64, D),
11700                flags: fidl::new_empty!(u32, D),
11701                buffer_config: fidl::new_empty!(u64, D),
11702                stream_segment_id: fidl::new_empty!(u64, D),
11703            }
11704        }
11705
11706        #[inline]
11707        unsafe fn decode(
11708            &mut self,
11709            decoder: &mut fidl::encoding::Decoder<'_, D>,
11710            offset: usize,
11711            _depth: fidl::encoding::Depth,
11712        ) -> fidl::Result<()> {
11713            decoder.debug_check_bounds::<Self>(offset);
11714            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11715            // Verify that padding bytes are zero.
11716            let ptr = unsafe { buf_ptr.offset(8) };
11717            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11718            let mask = 0xffffffff00000000u64;
11719            let maskedval = padval & mask;
11720            if maskedval != 0 {
11721                return Err(fidl::Error::NonZeroPadding {
11722                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
11723                });
11724            }
11725            let ptr = unsafe { buf_ptr.offset(32) };
11726            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11727            let mask = 0xffffffff00000000u64;
11728            let maskedval = padval & mask;
11729            if maskedval != 0 {
11730                return Err(fidl::Error::NonZeroPadding {
11731                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
11732                });
11733            }
11734            // Copy from the buffer into the object.
11735            unsafe {
11736                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
11737            }
11738            Ok(())
11739        }
11740    }
11741
11742    impl fidl::encoding::ValueTypeMarker for StreamProcessorCloseCurrentStreamRequest {
11743        type Borrowed<'a> = &'a Self;
11744        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11745            value
11746        }
11747    }
11748
11749    unsafe impl fidl::encoding::TypeMarker for StreamProcessorCloseCurrentStreamRequest {
11750        type Owned = Self;
11751
11752        #[inline(always)]
11753        fn inline_align(_context: fidl::encoding::Context) -> usize {
11754            8
11755        }
11756
11757        #[inline(always)]
11758        fn inline_size(_context: fidl::encoding::Context) -> usize {
11759            16
11760        }
11761    }
11762
11763    unsafe impl<D: fidl::encoding::ResourceDialect>
11764        fidl::encoding::Encode<StreamProcessorCloseCurrentStreamRequest, D>
11765        for &StreamProcessorCloseCurrentStreamRequest
11766    {
11767        #[inline]
11768        unsafe fn encode(
11769            self,
11770            encoder: &mut fidl::encoding::Encoder<'_, D>,
11771            offset: usize,
11772            _depth: fidl::encoding::Depth,
11773        ) -> fidl::Result<()> {
11774            encoder.debug_check_bounds::<StreamProcessorCloseCurrentStreamRequest>(offset);
11775            // Delegate to tuple encoding.
11776            fidl::encoding::Encode::<StreamProcessorCloseCurrentStreamRequest, D>::encode(
11777                (
11778                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
11779                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.release_input_buffers),
11780                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.release_output_buffers),
11781                ),
11782                encoder,
11783                offset,
11784                _depth,
11785            )
11786        }
11787    }
11788    unsafe impl<
11789        D: fidl::encoding::ResourceDialect,
11790        T0: fidl::encoding::Encode<u64, D>,
11791        T1: fidl::encoding::Encode<bool, D>,
11792        T2: fidl::encoding::Encode<bool, D>,
11793    > fidl::encoding::Encode<StreamProcessorCloseCurrentStreamRequest, D> for (T0, T1, T2)
11794    {
11795        #[inline]
11796        unsafe fn encode(
11797            self,
11798            encoder: &mut fidl::encoding::Encoder<'_, D>,
11799            offset: usize,
11800            depth: fidl::encoding::Depth,
11801        ) -> fidl::Result<()> {
11802            encoder.debug_check_bounds::<StreamProcessorCloseCurrentStreamRequest>(offset);
11803            // Zero out padding regions. There's no need to apply masks
11804            // because the unmasked parts will be overwritten by fields.
11805            unsafe {
11806                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
11807                (ptr as *mut u64).write_unaligned(0);
11808            }
11809            // Write the fields.
11810            self.0.encode(encoder, offset + 0, depth)?;
11811            self.1.encode(encoder, offset + 8, depth)?;
11812            self.2.encode(encoder, offset + 9, depth)?;
11813            Ok(())
11814        }
11815    }
11816
11817    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11818        for StreamProcessorCloseCurrentStreamRequest
11819    {
11820        #[inline(always)]
11821        fn new_empty() -> Self {
11822            Self {
11823                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
11824                release_input_buffers: fidl::new_empty!(bool, D),
11825                release_output_buffers: fidl::new_empty!(bool, D),
11826            }
11827        }
11828
11829        #[inline]
11830        unsafe fn decode(
11831            &mut self,
11832            decoder: &mut fidl::encoding::Decoder<'_, D>,
11833            offset: usize,
11834            _depth: fidl::encoding::Depth,
11835        ) -> fidl::Result<()> {
11836            decoder.debug_check_bounds::<Self>(offset);
11837            // Verify that padding bytes are zero.
11838            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
11839            let padval = unsafe { (ptr as *const u64).read_unaligned() };
11840            let mask = 0xffffffffffff0000u64;
11841            let maskedval = padval & mask;
11842            if maskedval != 0 {
11843                return Err(fidl::Error::NonZeroPadding {
11844                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
11845                });
11846            }
11847            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
11848            fidl::decode!(bool, D, &mut self.release_input_buffers, decoder, offset + 8, _depth)?;
11849            fidl::decode!(bool, D, &mut self.release_output_buffers, decoder, offset + 9, _depth)?;
11850            Ok(())
11851        }
11852    }
11853
11854    impl fidl::encoding::ValueTypeMarker for StreamProcessorCompleteOutputBufferPartialSettingsRequest {
11855        type Borrowed<'a> = &'a Self;
11856        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11857            value
11858        }
11859    }
11860
11861    unsafe impl fidl::encoding::TypeMarker
11862        for StreamProcessorCompleteOutputBufferPartialSettingsRequest
11863    {
11864        type Owned = Self;
11865
11866        #[inline(always)]
11867        fn inline_align(_context: fidl::encoding::Context) -> usize {
11868            8
11869        }
11870
11871        #[inline(always)]
11872        fn inline_size(_context: fidl::encoding::Context) -> usize {
11873            8
11874        }
11875        #[inline(always)]
11876        fn encode_is_copy() -> bool {
11877            true
11878        }
11879
11880        #[inline(always)]
11881        fn decode_is_copy() -> bool {
11882            true
11883        }
11884    }
11885
11886    unsafe impl<D: fidl::encoding::ResourceDialect>
11887        fidl::encoding::Encode<StreamProcessorCompleteOutputBufferPartialSettingsRequest, D>
11888        for &StreamProcessorCompleteOutputBufferPartialSettingsRequest
11889    {
11890        #[inline]
11891        unsafe fn encode(
11892            self,
11893            encoder: &mut fidl::encoding::Encoder<'_, D>,
11894            offset: usize,
11895            _depth: fidl::encoding::Depth,
11896        ) -> fidl::Result<()> {
11897            encoder
11898                .debug_check_bounds::<StreamProcessorCompleteOutputBufferPartialSettingsRequest>(
11899                    offset,
11900                );
11901            unsafe {
11902                // Copy the object into the buffer.
11903                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
11904                (buf_ptr as *mut StreamProcessorCompleteOutputBufferPartialSettingsRequest)
11905                    .write_unaligned(
11906                        (self as *const StreamProcessorCompleteOutputBufferPartialSettingsRequest)
11907                            .read(),
11908                    );
11909                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
11910                // done second because the memcpy will write garbage to these bytes.
11911            }
11912            Ok(())
11913        }
11914    }
11915    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
11916        fidl::encoding::Encode<StreamProcessorCompleteOutputBufferPartialSettingsRequest, D>
11917        for (T0,)
11918    {
11919        #[inline]
11920        unsafe fn encode(
11921            self,
11922            encoder: &mut fidl::encoding::Encoder<'_, D>,
11923            offset: usize,
11924            depth: fidl::encoding::Depth,
11925        ) -> fidl::Result<()> {
11926            encoder
11927                .debug_check_bounds::<StreamProcessorCompleteOutputBufferPartialSettingsRequest>(
11928                    offset,
11929                );
11930            // Zero out padding regions. There's no need to apply masks
11931            // because the unmasked parts will be overwritten by fields.
11932            // Write the fields.
11933            self.0.encode(encoder, offset + 0, depth)?;
11934            Ok(())
11935        }
11936    }
11937
11938    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11939        for StreamProcessorCompleteOutputBufferPartialSettingsRequest
11940    {
11941        #[inline(always)]
11942        fn new_empty() -> Self {
11943            Self { buffer_lifetime_ordinal: fidl::new_empty!(u64, D) }
11944        }
11945
11946        #[inline]
11947        unsafe fn decode(
11948            &mut self,
11949            decoder: &mut fidl::encoding::Decoder<'_, D>,
11950            offset: usize,
11951            _depth: fidl::encoding::Depth,
11952        ) -> fidl::Result<()> {
11953            decoder.debug_check_bounds::<Self>(offset);
11954            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
11955            // Verify that padding bytes are zero.
11956            // Copy from the buffer into the object.
11957            unsafe {
11958                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
11959            }
11960            Ok(())
11961        }
11962    }
11963
11964    impl fidl::encoding::ValueTypeMarker for StreamProcessorFlushEndOfStreamAndCloseStreamRequest {
11965        type Borrowed<'a> = &'a Self;
11966        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11967            value
11968        }
11969    }
11970
11971    unsafe impl fidl::encoding::TypeMarker for StreamProcessorFlushEndOfStreamAndCloseStreamRequest {
11972        type Owned = Self;
11973
11974        #[inline(always)]
11975        fn inline_align(_context: fidl::encoding::Context) -> usize {
11976            8
11977        }
11978
11979        #[inline(always)]
11980        fn inline_size(_context: fidl::encoding::Context) -> usize {
11981            8
11982        }
11983        #[inline(always)]
11984        fn encode_is_copy() -> bool {
11985            true
11986        }
11987
11988        #[inline(always)]
11989        fn decode_is_copy() -> bool {
11990            true
11991        }
11992    }
11993
11994    unsafe impl<D: fidl::encoding::ResourceDialect>
11995        fidl::encoding::Encode<StreamProcessorFlushEndOfStreamAndCloseStreamRequest, D>
11996        for &StreamProcessorFlushEndOfStreamAndCloseStreamRequest
11997    {
11998        #[inline]
11999        unsafe fn encode(
12000            self,
12001            encoder: &mut fidl::encoding::Encoder<'_, D>,
12002            offset: usize,
12003            _depth: fidl::encoding::Depth,
12004        ) -> fidl::Result<()> {
12005            encoder
12006                .debug_check_bounds::<StreamProcessorFlushEndOfStreamAndCloseStreamRequest>(offset);
12007            unsafe {
12008                // Copy the object into the buffer.
12009                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
12010                (buf_ptr as *mut StreamProcessorFlushEndOfStreamAndCloseStreamRequest)
12011                    .write_unaligned(
12012                        (self as *const StreamProcessorFlushEndOfStreamAndCloseStreamRequest)
12013                            .read(),
12014                    );
12015                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
12016                // done second because the memcpy will write garbage to these bytes.
12017            }
12018            Ok(())
12019        }
12020    }
12021    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
12022        fidl::encoding::Encode<StreamProcessorFlushEndOfStreamAndCloseStreamRequest, D> for (T0,)
12023    {
12024        #[inline]
12025        unsafe fn encode(
12026            self,
12027            encoder: &mut fidl::encoding::Encoder<'_, D>,
12028            offset: usize,
12029            depth: fidl::encoding::Depth,
12030        ) -> fidl::Result<()> {
12031            encoder
12032                .debug_check_bounds::<StreamProcessorFlushEndOfStreamAndCloseStreamRequest>(offset);
12033            // Zero out padding regions. There's no need to apply masks
12034            // because the unmasked parts will be overwritten by fields.
12035            // Write the fields.
12036            self.0.encode(encoder, offset + 0, depth)?;
12037            Ok(())
12038        }
12039    }
12040
12041    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12042        for StreamProcessorFlushEndOfStreamAndCloseStreamRequest
12043    {
12044        #[inline(always)]
12045        fn new_empty() -> Self {
12046            Self { stream_lifetime_ordinal: fidl::new_empty!(u64, D) }
12047        }
12048
12049        #[inline]
12050        unsafe fn decode(
12051            &mut self,
12052            decoder: &mut fidl::encoding::Decoder<'_, D>,
12053            offset: usize,
12054            _depth: fidl::encoding::Depth,
12055        ) -> fidl::Result<()> {
12056            decoder.debug_check_bounds::<Self>(offset);
12057            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
12058            // Verify that padding bytes are zero.
12059            // Copy from the buffer into the object.
12060            unsafe {
12061                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
12062            }
12063            Ok(())
12064        }
12065    }
12066
12067    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnFreeInputPacketRequest {
12068        type Borrowed<'a> = &'a Self;
12069        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12070            value
12071        }
12072    }
12073
12074    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnFreeInputPacketRequest {
12075        type Owned = Self;
12076
12077        #[inline(always)]
12078        fn inline_align(_context: fidl::encoding::Context) -> usize {
12079            8
12080        }
12081
12082        #[inline(always)]
12083        fn inline_size(_context: fidl::encoding::Context) -> usize {
12084            16
12085        }
12086    }
12087
12088    unsafe impl<D: fidl::encoding::ResourceDialect>
12089        fidl::encoding::Encode<StreamProcessorOnFreeInputPacketRequest, D>
12090        for &StreamProcessorOnFreeInputPacketRequest
12091    {
12092        #[inline]
12093        unsafe fn encode(
12094            self,
12095            encoder: &mut fidl::encoding::Encoder<'_, D>,
12096            offset: usize,
12097            _depth: fidl::encoding::Depth,
12098        ) -> fidl::Result<()> {
12099            encoder.debug_check_bounds::<StreamProcessorOnFreeInputPacketRequest>(offset);
12100            // Delegate to tuple encoding.
12101            fidl::encoding::Encode::<StreamProcessorOnFreeInputPacketRequest, D>::encode(
12102                (<PacketHeader as fidl::encoding::ValueTypeMarker>::borrow(
12103                    &self.free_input_packet,
12104                ),),
12105                encoder,
12106                offset,
12107                _depth,
12108            )
12109        }
12110    }
12111    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PacketHeader, D>>
12112        fidl::encoding::Encode<StreamProcessorOnFreeInputPacketRequest, D> for (T0,)
12113    {
12114        #[inline]
12115        unsafe fn encode(
12116            self,
12117            encoder: &mut fidl::encoding::Encoder<'_, D>,
12118            offset: usize,
12119            depth: fidl::encoding::Depth,
12120        ) -> fidl::Result<()> {
12121            encoder.debug_check_bounds::<StreamProcessorOnFreeInputPacketRequest>(offset);
12122            // Zero out padding regions. There's no need to apply masks
12123            // because the unmasked parts will be overwritten by fields.
12124            // Write the fields.
12125            self.0.encode(encoder, offset + 0, depth)?;
12126            Ok(())
12127        }
12128    }
12129
12130    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12131        for StreamProcessorOnFreeInputPacketRequest
12132    {
12133        #[inline(always)]
12134        fn new_empty() -> Self {
12135            Self { free_input_packet: fidl::new_empty!(PacketHeader, D) }
12136        }
12137
12138        #[inline]
12139        unsafe fn decode(
12140            &mut self,
12141            decoder: &mut fidl::encoding::Decoder<'_, D>,
12142            offset: usize,
12143            _depth: fidl::encoding::Depth,
12144        ) -> fidl::Result<()> {
12145            decoder.debug_check_bounds::<Self>(offset);
12146            // Verify that padding bytes are zero.
12147            fidl::decode!(
12148                PacketHeader,
12149                D,
12150                &mut self.free_input_packet,
12151                decoder,
12152                offset + 0,
12153                _depth
12154            )?;
12155            Ok(())
12156        }
12157    }
12158
12159    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnInputConstraintsRequest {
12160        type Borrowed<'a> = &'a Self;
12161        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12162            value
12163        }
12164    }
12165
12166    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnInputConstraintsRequest {
12167        type Owned = Self;
12168
12169        #[inline(always)]
12170        fn inline_align(_context: fidl::encoding::Context) -> usize {
12171            8
12172        }
12173
12174        #[inline(always)]
12175        fn inline_size(_context: fidl::encoding::Context) -> usize {
12176            16
12177        }
12178    }
12179
12180    unsafe impl<D: fidl::encoding::ResourceDialect>
12181        fidl::encoding::Encode<StreamProcessorOnInputConstraintsRequest, D>
12182        for &StreamProcessorOnInputConstraintsRequest
12183    {
12184        #[inline]
12185        unsafe fn encode(
12186            self,
12187            encoder: &mut fidl::encoding::Encoder<'_, D>,
12188            offset: usize,
12189            _depth: fidl::encoding::Depth,
12190        ) -> fidl::Result<()> {
12191            encoder.debug_check_bounds::<StreamProcessorOnInputConstraintsRequest>(offset);
12192            // Delegate to tuple encoding.
12193            fidl::encoding::Encode::<StreamProcessorOnInputConstraintsRequest, D>::encode(
12194                (<StreamBufferConstraints as fidl::encoding::ValueTypeMarker>::borrow(
12195                    &self.input_constraints,
12196                ),),
12197                encoder,
12198                offset,
12199                _depth,
12200            )
12201        }
12202    }
12203    unsafe impl<
12204        D: fidl::encoding::ResourceDialect,
12205        T0: fidl::encoding::Encode<StreamBufferConstraints, D>,
12206    > fidl::encoding::Encode<StreamProcessorOnInputConstraintsRequest, D> for (T0,)
12207    {
12208        #[inline]
12209        unsafe fn encode(
12210            self,
12211            encoder: &mut fidl::encoding::Encoder<'_, D>,
12212            offset: usize,
12213            depth: fidl::encoding::Depth,
12214        ) -> fidl::Result<()> {
12215            encoder.debug_check_bounds::<StreamProcessorOnInputConstraintsRequest>(offset);
12216            // Zero out padding regions. There's no need to apply masks
12217            // because the unmasked parts will be overwritten by fields.
12218            // Write the fields.
12219            self.0.encode(encoder, offset + 0, depth)?;
12220            Ok(())
12221        }
12222    }
12223
12224    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12225        for StreamProcessorOnInputConstraintsRequest
12226    {
12227        #[inline(always)]
12228        fn new_empty() -> Self {
12229            Self { input_constraints: fidl::new_empty!(StreamBufferConstraints, D) }
12230        }
12231
12232        #[inline]
12233        unsafe fn decode(
12234            &mut self,
12235            decoder: &mut fidl::encoding::Decoder<'_, D>,
12236            offset: usize,
12237            _depth: fidl::encoding::Depth,
12238        ) -> fidl::Result<()> {
12239            decoder.debug_check_bounds::<Self>(offset);
12240            // Verify that padding bytes are zero.
12241            fidl::decode!(
12242                StreamBufferConstraints,
12243                D,
12244                &mut self.input_constraints,
12245                decoder,
12246                offset + 0,
12247                _depth
12248            )?;
12249            Ok(())
12250        }
12251    }
12252
12253    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputConstraintsRequest {
12254        type Borrowed<'a> = &'a Self;
12255        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12256            value
12257        }
12258    }
12259
12260    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputConstraintsRequest {
12261        type Owned = Self;
12262
12263        #[inline(always)]
12264        fn inline_align(_context: fidl::encoding::Context) -> usize {
12265            8
12266        }
12267
12268        #[inline(always)]
12269        fn inline_size(_context: fidl::encoding::Context) -> usize {
12270            16
12271        }
12272    }
12273
12274    unsafe impl<D: fidl::encoding::ResourceDialect>
12275        fidl::encoding::Encode<StreamProcessorOnOutputConstraintsRequest, D>
12276        for &StreamProcessorOnOutputConstraintsRequest
12277    {
12278        #[inline]
12279        unsafe fn encode(
12280            self,
12281            encoder: &mut fidl::encoding::Encoder<'_, D>,
12282            offset: usize,
12283            _depth: fidl::encoding::Depth,
12284        ) -> fidl::Result<()> {
12285            encoder.debug_check_bounds::<StreamProcessorOnOutputConstraintsRequest>(offset);
12286            // Delegate to tuple encoding.
12287            fidl::encoding::Encode::<StreamProcessorOnOutputConstraintsRequest, D>::encode(
12288                (<StreamOutputConstraints as fidl::encoding::ValueTypeMarker>::borrow(
12289                    &self.output_config,
12290                ),),
12291                encoder,
12292                offset,
12293                _depth,
12294            )
12295        }
12296    }
12297    unsafe impl<
12298        D: fidl::encoding::ResourceDialect,
12299        T0: fidl::encoding::Encode<StreamOutputConstraints, D>,
12300    > fidl::encoding::Encode<StreamProcessorOnOutputConstraintsRequest, D> for (T0,)
12301    {
12302        #[inline]
12303        unsafe fn encode(
12304            self,
12305            encoder: &mut fidl::encoding::Encoder<'_, D>,
12306            offset: usize,
12307            depth: fidl::encoding::Depth,
12308        ) -> fidl::Result<()> {
12309            encoder.debug_check_bounds::<StreamProcessorOnOutputConstraintsRequest>(offset);
12310            // Zero out padding regions. There's no need to apply masks
12311            // because the unmasked parts will be overwritten by fields.
12312            // Write the fields.
12313            self.0.encode(encoder, offset + 0, depth)?;
12314            Ok(())
12315        }
12316    }
12317
12318    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12319        for StreamProcessorOnOutputConstraintsRequest
12320    {
12321        #[inline(always)]
12322        fn new_empty() -> Self {
12323            Self { output_config: fidl::new_empty!(StreamOutputConstraints, D) }
12324        }
12325
12326        #[inline]
12327        unsafe fn decode(
12328            &mut self,
12329            decoder: &mut fidl::encoding::Decoder<'_, D>,
12330            offset: usize,
12331            _depth: fidl::encoding::Depth,
12332        ) -> fidl::Result<()> {
12333            decoder.debug_check_bounds::<Self>(offset);
12334            // Verify that padding bytes are zero.
12335            fidl::decode!(
12336                StreamOutputConstraints,
12337                D,
12338                &mut self.output_config,
12339                decoder,
12340                offset + 0,
12341                _depth
12342            )?;
12343            Ok(())
12344        }
12345    }
12346
12347    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputEndOfStreamRequest {
12348        type Borrowed<'a> = &'a Self;
12349        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12350            value
12351        }
12352    }
12353
12354    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputEndOfStreamRequest {
12355        type Owned = Self;
12356
12357        #[inline(always)]
12358        fn inline_align(_context: fidl::encoding::Context) -> usize {
12359            8
12360        }
12361
12362        #[inline(always)]
12363        fn inline_size(_context: fidl::encoding::Context) -> usize {
12364            16
12365        }
12366    }
12367
12368    unsafe impl<D: fidl::encoding::ResourceDialect>
12369        fidl::encoding::Encode<StreamProcessorOnOutputEndOfStreamRequest, D>
12370        for &StreamProcessorOnOutputEndOfStreamRequest
12371    {
12372        #[inline]
12373        unsafe fn encode(
12374            self,
12375            encoder: &mut fidl::encoding::Encoder<'_, D>,
12376            offset: usize,
12377            _depth: fidl::encoding::Depth,
12378        ) -> fidl::Result<()> {
12379            encoder.debug_check_bounds::<StreamProcessorOnOutputEndOfStreamRequest>(offset);
12380            // Delegate to tuple encoding.
12381            fidl::encoding::Encode::<StreamProcessorOnOutputEndOfStreamRequest, D>::encode(
12382                (
12383                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
12384                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.error_detected_before),
12385                ),
12386                encoder,
12387                offset,
12388                _depth,
12389            )
12390        }
12391    }
12392    unsafe impl<
12393        D: fidl::encoding::ResourceDialect,
12394        T0: fidl::encoding::Encode<u64, D>,
12395        T1: fidl::encoding::Encode<bool, D>,
12396    > fidl::encoding::Encode<StreamProcessorOnOutputEndOfStreamRequest, D> for (T0, T1)
12397    {
12398        #[inline]
12399        unsafe fn encode(
12400            self,
12401            encoder: &mut fidl::encoding::Encoder<'_, D>,
12402            offset: usize,
12403            depth: fidl::encoding::Depth,
12404        ) -> fidl::Result<()> {
12405            encoder.debug_check_bounds::<StreamProcessorOnOutputEndOfStreamRequest>(offset);
12406            // Zero out padding regions. There's no need to apply masks
12407            // because the unmasked parts will be overwritten by fields.
12408            unsafe {
12409                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
12410                (ptr as *mut u64).write_unaligned(0);
12411            }
12412            // Write the fields.
12413            self.0.encode(encoder, offset + 0, depth)?;
12414            self.1.encode(encoder, offset + 8, depth)?;
12415            Ok(())
12416        }
12417    }
12418
12419    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12420        for StreamProcessorOnOutputEndOfStreamRequest
12421    {
12422        #[inline(always)]
12423        fn new_empty() -> Self {
12424            Self {
12425                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
12426                error_detected_before: fidl::new_empty!(bool, D),
12427            }
12428        }
12429
12430        #[inline]
12431        unsafe fn decode(
12432            &mut self,
12433            decoder: &mut fidl::encoding::Decoder<'_, D>,
12434            offset: usize,
12435            _depth: fidl::encoding::Depth,
12436        ) -> fidl::Result<()> {
12437            decoder.debug_check_bounds::<Self>(offset);
12438            // Verify that padding bytes are zero.
12439            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
12440            let padval = unsafe { (ptr as *const u64).read_unaligned() };
12441            let mask = 0xffffffffffffff00u64;
12442            let maskedval = padval & mask;
12443            if maskedval != 0 {
12444                return Err(fidl::Error::NonZeroPadding {
12445                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
12446                });
12447            }
12448            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
12449            fidl::decode!(bool, D, &mut self.error_detected_before, decoder, offset + 8, _depth)?;
12450            Ok(())
12451        }
12452    }
12453
12454    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputFormatRequest {
12455        type Borrowed<'a> = &'a Self;
12456        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12457            value
12458        }
12459    }
12460
12461    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputFormatRequest {
12462        type Owned = Self;
12463
12464        #[inline(always)]
12465        fn inline_align(_context: fidl::encoding::Context) -> usize {
12466            8
12467        }
12468
12469        #[inline(always)]
12470        fn inline_size(_context: fidl::encoding::Context) -> usize {
12471            16
12472        }
12473    }
12474
12475    unsafe impl<D: fidl::encoding::ResourceDialect>
12476        fidl::encoding::Encode<StreamProcessorOnOutputFormatRequest, D>
12477        for &StreamProcessorOnOutputFormatRequest
12478    {
12479        #[inline]
12480        unsafe fn encode(
12481            self,
12482            encoder: &mut fidl::encoding::Encoder<'_, D>,
12483            offset: usize,
12484            _depth: fidl::encoding::Depth,
12485        ) -> fidl::Result<()> {
12486            encoder.debug_check_bounds::<StreamProcessorOnOutputFormatRequest>(offset);
12487            // Delegate to tuple encoding.
12488            fidl::encoding::Encode::<StreamProcessorOnOutputFormatRequest, D>::encode(
12489                (<StreamOutputFormat as fidl::encoding::ValueTypeMarker>::borrow(
12490                    &self.output_format,
12491                ),),
12492                encoder,
12493                offset,
12494                _depth,
12495            )
12496        }
12497    }
12498    unsafe impl<
12499        D: fidl::encoding::ResourceDialect,
12500        T0: fidl::encoding::Encode<StreamOutputFormat, D>,
12501    > fidl::encoding::Encode<StreamProcessorOnOutputFormatRequest, D> for (T0,)
12502    {
12503        #[inline]
12504        unsafe fn encode(
12505            self,
12506            encoder: &mut fidl::encoding::Encoder<'_, D>,
12507            offset: usize,
12508            depth: fidl::encoding::Depth,
12509        ) -> fidl::Result<()> {
12510            encoder.debug_check_bounds::<StreamProcessorOnOutputFormatRequest>(offset);
12511            // Zero out padding regions. There's no need to apply masks
12512            // because the unmasked parts will be overwritten by fields.
12513            // Write the fields.
12514            self.0.encode(encoder, offset + 0, depth)?;
12515            Ok(())
12516        }
12517    }
12518
12519    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12520        for StreamProcessorOnOutputFormatRequest
12521    {
12522        #[inline(always)]
12523        fn new_empty() -> Self {
12524            Self { output_format: fidl::new_empty!(StreamOutputFormat, D) }
12525        }
12526
12527        #[inline]
12528        unsafe fn decode(
12529            &mut self,
12530            decoder: &mut fidl::encoding::Decoder<'_, D>,
12531            offset: usize,
12532            _depth: fidl::encoding::Depth,
12533        ) -> fidl::Result<()> {
12534            decoder.debug_check_bounds::<Self>(offset);
12535            // Verify that padding bytes are zero.
12536            fidl::decode!(
12537                StreamOutputFormat,
12538                D,
12539                &mut self.output_format,
12540                decoder,
12541                offset + 0,
12542                _depth
12543            )?;
12544            Ok(())
12545        }
12546    }
12547
12548    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnOutputPacketRequest {
12549        type Borrowed<'a> = &'a Self;
12550        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12551            value
12552        }
12553    }
12554
12555    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnOutputPacketRequest {
12556        type Owned = Self;
12557
12558        #[inline(always)]
12559        fn inline_align(_context: fidl::encoding::Context) -> usize {
12560            8
12561        }
12562
12563        #[inline(always)]
12564        fn inline_size(_context: fidl::encoding::Context) -> usize {
12565            24
12566        }
12567    }
12568
12569    unsafe impl<D: fidl::encoding::ResourceDialect>
12570        fidl::encoding::Encode<StreamProcessorOnOutputPacketRequest, D>
12571        for &StreamProcessorOnOutputPacketRequest
12572    {
12573        #[inline]
12574        unsafe fn encode(
12575            self,
12576            encoder: &mut fidl::encoding::Encoder<'_, D>,
12577            offset: usize,
12578            _depth: fidl::encoding::Depth,
12579        ) -> fidl::Result<()> {
12580            encoder.debug_check_bounds::<StreamProcessorOnOutputPacketRequest>(offset);
12581            // Delegate to tuple encoding.
12582            fidl::encoding::Encode::<StreamProcessorOnOutputPacketRequest, D>::encode(
12583                (
12584                    <Packet as fidl::encoding::ValueTypeMarker>::borrow(&self.output_packet),
12585                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.error_detected_before),
12586                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.error_detected_during),
12587                ),
12588                encoder,
12589                offset,
12590                _depth,
12591            )
12592        }
12593    }
12594    unsafe impl<
12595        D: fidl::encoding::ResourceDialect,
12596        T0: fidl::encoding::Encode<Packet, D>,
12597        T1: fidl::encoding::Encode<bool, D>,
12598        T2: fidl::encoding::Encode<bool, D>,
12599    > fidl::encoding::Encode<StreamProcessorOnOutputPacketRequest, D> for (T0, T1, T2)
12600    {
12601        #[inline]
12602        unsafe fn encode(
12603            self,
12604            encoder: &mut fidl::encoding::Encoder<'_, D>,
12605            offset: usize,
12606            depth: fidl::encoding::Depth,
12607        ) -> fidl::Result<()> {
12608            encoder.debug_check_bounds::<StreamProcessorOnOutputPacketRequest>(offset);
12609            // Zero out padding regions. There's no need to apply masks
12610            // because the unmasked parts will be overwritten by fields.
12611            unsafe {
12612                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
12613                (ptr as *mut u64).write_unaligned(0);
12614            }
12615            // Write the fields.
12616            self.0.encode(encoder, offset + 0, depth)?;
12617            self.1.encode(encoder, offset + 16, depth)?;
12618            self.2.encode(encoder, offset + 17, depth)?;
12619            Ok(())
12620        }
12621    }
12622
12623    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12624        for StreamProcessorOnOutputPacketRequest
12625    {
12626        #[inline(always)]
12627        fn new_empty() -> Self {
12628            Self {
12629                output_packet: fidl::new_empty!(Packet, D),
12630                error_detected_before: fidl::new_empty!(bool, D),
12631                error_detected_during: fidl::new_empty!(bool, D),
12632            }
12633        }
12634
12635        #[inline]
12636        unsafe fn decode(
12637            &mut self,
12638            decoder: &mut fidl::encoding::Decoder<'_, D>,
12639            offset: usize,
12640            _depth: fidl::encoding::Depth,
12641        ) -> fidl::Result<()> {
12642            decoder.debug_check_bounds::<Self>(offset);
12643            // Verify that padding bytes are zero.
12644            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
12645            let padval = unsafe { (ptr as *const u64).read_unaligned() };
12646            let mask = 0xffffffffffff0000u64;
12647            let maskedval = padval & mask;
12648            if maskedval != 0 {
12649                return Err(fidl::Error::NonZeroPadding {
12650                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
12651                });
12652            }
12653            fidl::decode!(Packet, D, &mut self.output_packet, decoder, offset + 0, _depth)?;
12654            fidl::decode!(bool, D, &mut self.error_detected_before, decoder, offset + 16, _depth)?;
12655            fidl::decode!(bool, D, &mut self.error_detected_during, decoder, offset + 17, _depth)?;
12656            Ok(())
12657        }
12658    }
12659
12660    impl fidl::encoding::ValueTypeMarker for StreamProcessorOnStreamFailedRequest {
12661        type Borrowed<'a> = &'a Self;
12662        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12663            value
12664        }
12665    }
12666
12667    unsafe impl fidl::encoding::TypeMarker for StreamProcessorOnStreamFailedRequest {
12668        type Owned = Self;
12669
12670        #[inline(always)]
12671        fn inline_align(_context: fidl::encoding::Context) -> usize {
12672            8
12673        }
12674
12675        #[inline(always)]
12676        fn inline_size(_context: fidl::encoding::Context) -> usize {
12677            16
12678        }
12679    }
12680
12681    unsafe impl<D: fidl::encoding::ResourceDialect>
12682        fidl::encoding::Encode<StreamProcessorOnStreamFailedRequest, D>
12683        for &StreamProcessorOnStreamFailedRequest
12684    {
12685        #[inline]
12686        unsafe fn encode(
12687            self,
12688            encoder: &mut fidl::encoding::Encoder<'_, D>,
12689            offset: usize,
12690            _depth: fidl::encoding::Depth,
12691        ) -> fidl::Result<()> {
12692            encoder.debug_check_bounds::<StreamProcessorOnStreamFailedRequest>(offset);
12693            // Delegate to tuple encoding.
12694            fidl::encoding::Encode::<StreamProcessorOnStreamFailedRequest, D>::encode(
12695                (
12696                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
12697                    <StreamError as fidl::encoding::ValueTypeMarker>::borrow(&self.error),
12698                ),
12699                encoder,
12700                offset,
12701                _depth,
12702            )
12703        }
12704    }
12705    unsafe impl<
12706        D: fidl::encoding::ResourceDialect,
12707        T0: fidl::encoding::Encode<u64, D>,
12708        T1: fidl::encoding::Encode<StreamError, D>,
12709    > fidl::encoding::Encode<StreamProcessorOnStreamFailedRequest, D> for (T0, T1)
12710    {
12711        #[inline]
12712        unsafe fn encode(
12713            self,
12714            encoder: &mut fidl::encoding::Encoder<'_, D>,
12715            offset: usize,
12716            depth: fidl::encoding::Depth,
12717        ) -> fidl::Result<()> {
12718            encoder.debug_check_bounds::<StreamProcessorOnStreamFailedRequest>(offset);
12719            // Zero out padding regions. There's no need to apply masks
12720            // because the unmasked parts will be overwritten by fields.
12721            unsafe {
12722                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
12723                (ptr as *mut u64).write_unaligned(0);
12724            }
12725            // Write the fields.
12726            self.0.encode(encoder, offset + 0, depth)?;
12727            self.1.encode(encoder, offset + 8, depth)?;
12728            Ok(())
12729        }
12730    }
12731
12732    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12733        for StreamProcessorOnStreamFailedRequest
12734    {
12735        #[inline(always)]
12736        fn new_empty() -> Self {
12737            Self {
12738                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
12739                error: fidl::new_empty!(StreamError, D),
12740            }
12741        }
12742
12743        #[inline]
12744        unsafe fn decode(
12745            &mut self,
12746            decoder: &mut fidl::encoding::Decoder<'_, D>,
12747            offset: usize,
12748            _depth: fidl::encoding::Depth,
12749        ) -> fidl::Result<()> {
12750            decoder.debug_check_bounds::<Self>(offset);
12751            // Verify that padding bytes are zero.
12752            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
12753            let padval = unsafe { (ptr as *const u64).read_unaligned() };
12754            let mask = 0xffffffff00000000u64;
12755            let maskedval = padval & mask;
12756            if maskedval != 0 {
12757                return Err(fidl::Error::NonZeroPadding {
12758                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
12759                });
12760            }
12761            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
12762            fidl::decode!(StreamError, D, &mut self.error, decoder, offset + 8, _depth)?;
12763            Ok(())
12764        }
12765    }
12766
12767    impl fidl::encoding::ValueTypeMarker for StreamProcessorQueueInputEndOfStreamRequest {
12768        type Borrowed<'a> = &'a Self;
12769        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12770            value
12771        }
12772    }
12773
12774    unsafe impl fidl::encoding::TypeMarker for StreamProcessorQueueInputEndOfStreamRequest {
12775        type Owned = Self;
12776
12777        #[inline(always)]
12778        fn inline_align(_context: fidl::encoding::Context) -> usize {
12779            8
12780        }
12781
12782        #[inline(always)]
12783        fn inline_size(_context: fidl::encoding::Context) -> usize {
12784            8
12785        }
12786        #[inline(always)]
12787        fn encode_is_copy() -> bool {
12788            true
12789        }
12790
12791        #[inline(always)]
12792        fn decode_is_copy() -> bool {
12793            true
12794        }
12795    }
12796
12797    unsafe impl<D: fidl::encoding::ResourceDialect>
12798        fidl::encoding::Encode<StreamProcessorQueueInputEndOfStreamRequest, D>
12799        for &StreamProcessorQueueInputEndOfStreamRequest
12800    {
12801        #[inline]
12802        unsafe fn encode(
12803            self,
12804            encoder: &mut fidl::encoding::Encoder<'_, D>,
12805            offset: usize,
12806            _depth: fidl::encoding::Depth,
12807        ) -> fidl::Result<()> {
12808            encoder.debug_check_bounds::<StreamProcessorQueueInputEndOfStreamRequest>(offset);
12809            unsafe {
12810                // Copy the object into the buffer.
12811                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
12812                (buf_ptr as *mut StreamProcessorQueueInputEndOfStreamRequest).write_unaligned(
12813                    (self as *const StreamProcessorQueueInputEndOfStreamRequest).read(),
12814                );
12815                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
12816                // done second because the memcpy will write garbage to these bytes.
12817            }
12818            Ok(())
12819        }
12820    }
12821    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
12822        fidl::encoding::Encode<StreamProcessorQueueInputEndOfStreamRequest, D> for (T0,)
12823    {
12824        #[inline]
12825        unsafe fn encode(
12826            self,
12827            encoder: &mut fidl::encoding::Encoder<'_, D>,
12828            offset: usize,
12829            depth: fidl::encoding::Depth,
12830        ) -> fidl::Result<()> {
12831            encoder.debug_check_bounds::<StreamProcessorQueueInputEndOfStreamRequest>(offset);
12832            // Zero out padding regions. There's no need to apply masks
12833            // because the unmasked parts will be overwritten by fields.
12834            // Write the fields.
12835            self.0.encode(encoder, offset + 0, depth)?;
12836            Ok(())
12837        }
12838    }
12839
12840    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12841        for StreamProcessorQueueInputEndOfStreamRequest
12842    {
12843        #[inline(always)]
12844        fn new_empty() -> Self {
12845            Self { stream_lifetime_ordinal: fidl::new_empty!(u64, D) }
12846        }
12847
12848        #[inline]
12849        unsafe fn decode(
12850            &mut self,
12851            decoder: &mut fidl::encoding::Decoder<'_, D>,
12852            offset: usize,
12853            _depth: fidl::encoding::Depth,
12854        ) -> fidl::Result<()> {
12855            decoder.debug_check_bounds::<Self>(offset);
12856            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
12857            // Verify that padding bytes are zero.
12858            // Copy from the buffer into the object.
12859            unsafe {
12860                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
12861            }
12862            Ok(())
12863        }
12864    }
12865
12866    impl fidl::encoding::ValueTypeMarker for StreamProcessorQueueInputFormatDetailsRequest {
12867        type Borrowed<'a> = &'a Self;
12868        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12869            value
12870        }
12871    }
12872
12873    unsafe impl fidl::encoding::TypeMarker for StreamProcessorQueueInputFormatDetailsRequest {
12874        type Owned = Self;
12875
12876        #[inline(always)]
12877        fn inline_align(_context: fidl::encoding::Context) -> usize {
12878            8
12879        }
12880
12881        #[inline(always)]
12882        fn inline_size(_context: fidl::encoding::Context) -> usize {
12883            24
12884        }
12885    }
12886
12887    unsafe impl<D: fidl::encoding::ResourceDialect>
12888        fidl::encoding::Encode<StreamProcessorQueueInputFormatDetailsRequest, D>
12889        for &StreamProcessorQueueInputFormatDetailsRequest
12890    {
12891        #[inline]
12892        unsafe fn encode(
12893            self,
12894            encoder: &mut fidl::encoding::Encoder<'_, D>,
12895            offset: usize,
12896            _depth: fidl::encoding::Depth,
12897        ) -> fidl::Result<()> {
12898            encoder.debug_check_bounds::<StreamProcessorQueueInputFormatDetailsRequest>(offset);
12899            // Delegate to tuple encoding.
12900            fidl::encoding::Encode::<StreamProcessorQueueInputFormatDetailsRequest, D>::encode(
12901                (
12902                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.stream_lifetime_ordinal),
12903                    <FormatDetails as fidl::encoding::ValueTypeMarker>::borrow(
12904                        &self.format_details,
12905                    ),
12906                ),
12907                encoder,
12908                offset,
12909                _depth,
12910            )
12911        }
12912    }
12913    unsafe impl<
12914        D: fidl::encoding::ResourceDialect,
12915        T0: fidl::encoding::Encode<u64, D>,
12916        T1: fidl::encoding::Encode<FormatDetails, D>,
12917    > fidl::encoding::Encode<StreamProcessorQueueInputFormatDetailsRequest, D> for (T0, T1)
12918    {
12919        #[inline]
12920        unsafe fn encode(
12921            self,
12922            encoder: &mut fidl::encoding::Encoder<'_, D>,
12923            offset: usize,
12924            depth: fidl::encoding::Depth,
12925        ) -> fidl::Result<()> {
12926            encoder.debug_check_bounds::<StreamProcessorQueueInputFormatDetailsRequest>(offset);
12927            // Zero out padding regions. There's no need to apply masks
12928            // because the unmasked parts will be overwritten by fields.
12929            // Write the fields.
12930            self.0.encode(encoder, offset + 0, depth)?;
12931            self.1.encode(encoder, offset + 8, depth)?;
12932            Ok(())
12933        }
12934    }
12935
12936    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12937        for StreamProcessorQueueInputFormatDetailsRequest
12938    {
12939        #[inline(always)]
12940        fn new_empty() -> Self {
12941            Self {
12942                stream_lifetime_ordinal: fidl::new_empty!(u64, D),
12943                format_details: fidl::new_empty!(FormatDetails, D),
12944            }
12945        }
12946
12947        #[inline]
12948        unsafe fn decode(
12949            &mut self,
12950            decoder: &mut fidl::encoding::Decoder<'_, D>,
12951            offset: usize,
12952            _depth: fidl::encoding::Depth,
12953        ) -> fidl::Result<()> {
12954            decoder.debug_check_bounds::<Self>(offset);
12955            // Verify that padding bytes are zero.
12956            fidl::decode!(u64, D, &mut self.stream_lifetime_ordinal, decoder, offset + 0, _depth)?;
12957            fidl::decode!(FormatDetails, D, &mut self.format_details, decoder, offset + 8, _depth)?;
12958            Ok(())
12959        }
12960    }
12961
12962    impl fidl::encoding::ValueTypeMarker for StreamProcessorQueueInputPacketRequest {
12963        type Borrowed<'a> = &'a Self;
12964        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12965            value
12966        }
12967    }
12968
12969    unsafe impl fidl::encoding::TypeMarker for StreamProcessorQueueInputPacketRequest {
12970        type Owned = Self;
12971
12972        #[inline(always)]
12973        fn inline_align(_context: fidl::encoding::Context) -> usize {
12974            8
12975        }
12976
12977        #[inline(always)]
12978        fn inline_size(_context: fidl::encoding::Context) -> usize {
12979            16
12980        }
12981    }
12982
12983    unsafe impl<D: fidl::encoding::ResourceDialect>
12984        fidl::encoding::Encode<StreamProcessorQueueInputPacketRequest, D>
12985        for &StreamProcessorQueueInputPacketRequest
12986    {
12987        #[inline]
12988        unsafe fn encode(
12989            self,
12990            encoder: &mut fidl::encoding::Encoder<'_, D>,
12991            offset: usize,
12992            _depth: fidl::encoding::Depth,
12993        ) -> fidl::Result<()> {
12994            encoder.debug_check_bounds::<StreamProcessorQueueInputPacketRequest>(offset);
12995            // Delegate to tuple encoding.
12996            fidl::encoding::Encode::<StreamProcessorQueueInputPacketRequest, D>::encode(
12997                (<Packet as fidl::encoding::ValueTypeMarker>::borrow(&self.packet),),
12998                encoder,
12999                offset,
13000                _depth,
13001            )
13002        }
13003    }
13004    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Packet, D>>
13005        fidl::encoding::Encode<StreamProcessorQueueInputPacketRequest, D> for (T0,)
13006    {
13007        #[inline]
13008        unsafe fn encode(
13009            self,
13010            encoder: &mut fidl::encoding::Encoder<'_, D>,
13011            offset: usize,
13012            depth: fidl::encoding::Depth,
13013        ) -> fidl::Result<()> {
13014            encoder.debug_check_bounds::<StreamProcessorQueueInputPacketRequest>(offset);
13015            // Zero out padding regions. There's no need to apply masks
13016            // because the unmasked parts will be overwritten by fields.
13017            // Write the fields.
13018            self.0.encode(encoder, offset + 0, depth)?;
13019            Ok(())
13020        }
13021    }
13022
13023    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13024        for StreamProcessorQueueInputPacketRequest
13025    {
13026        #[inline(always)]
13027        fn new_empty() -> Self {
13028            Self { packet: fidl::new_empty!(Packet, D) }
13029        }
13030
13031        #[inline]
13032        unsafe fn decode(
13033            &mut self,
13034            decoder: &mut fidl::encoding::Decoder<'_, D>,
13035            offset: usize,
13036            _depth: fidl::encoding::Depth,
13037        ) -> fidl::Result<()> {
13038            decoder.debug_check_bounds::<Self>(offset);
13039            // Verify that padding bytes are zero.
13040            fidl::decode!(Packet, D, &mut self.packet, decoder, offset + 0, _depth)?;
13041            Ok(())
13042        }
13043    }
13044
13045    impl fidl::encoding::ValueTypeMarker for StreamProcessorRecycleOutputPacketRequest {
13046        type Borrowed<'a> = &'a Self;
13047        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13048            value
13049        }
13050    }
13051
13052    unsafe impl fidl::encoding::TypeMarker for StreamProcessorRecycleOutputPacketRequest {
13053        type Owned = Self;
13054
13055        #[inline(always)]
13056        fn inline_align(_context: fidl::encoding::Context) -> usize {
13057            8
13058        }
13059
13060        #[inline(always)]
13061        fn inline_size(_context: fidl::encoding::Context) -> usize {
13062            16
13063        }
13064    }
13065
13066    unsafe impl<D: fidl::encoding::ResourceDialect>
13067        fidl::encoding::Encode<StreamProcessorRecycleOutputPacketRequest, D>
13068        for &StreamProcessorRecycleOutputPacketRequest
13069    {
13070        #[inline]
13071        unsafe fn encode(
13072            self,
13073            encoder: &mut fidl::encoding::Encoder<'_, D>,
13074            offset: usize,
13075            _depth: fidl::encoding::Depth,
13076        ) -> fidl::Result<()> {
13077            encoder.debug_check_bounds::<StreamProcessorRecycleOutputPacketRequest>(offset);
13078            // Delegate to tuple encoding.
13079            fidl::encoding::Encode::<StreamProcessorRecycleOutputPacketRequest, D>::encode(
13080                (<PacketHeader as fidl::encoding::ValueTypeMarker>::borrow(
13081                    &self.available_output_packet,
13082                ),),
13083                encoder,
13084                offset,
13085                _depth,
13086            )
13087        }
13088    }
13089    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PacketHeader, D>>
13090        fidl::encoding::Encode<StreamProcessorRecycleOutputPacketRequest, D> for (T0,)
13091    {
13092        #[inline]
13093        unsafe fn encode(
13094            self,
13095            encoder: &mut fidl::encoding::Encoder<'_, D>,
13096            offset: usize,
13097            depth: fidl::encoding::Depth,
13098        ) -> fidl::Result<()> {
13099            encoder.debug_check_bounds::<StreamProcessorRecycleOutputPacketRequest>(offset);
13100            // Zero out padding regions. There's no need to apply masks
13101            // because the unmasked parts will be overwritten by fields.
13102            // Write the fields.
13103            self.0.encode(encoder, offset + 0, depth)?;
13104            Ok(())
13105        }
13106    }
13107
13108    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13109        for StreamProcessorRecycleOutputPacketRequest
13110    {
13111        #[inline(always)]
13112        fn new_empty() -> Self {
13113            Self { available_output_packet: fidl::new_empty!(PacketHeader, D) }
13114        }
13115
13116        #[inline]
13117        unsafe fn decode(
13118            &mut self,
13119            decoder: &mut fidl::encoding::Decoder<'_, D>,
13120            offset: usize,
13121            _depth: fidl::encoding::Depth,
13122        ) -> fidl::Result<()> {
13123            decoder.debug_check_bounds::<Self>(offset);
13124            // Verify that padding bytes are zero.
13125            fidl::decode!(
13126                PacketHeader,
13127                D,
13128                &mut self.available_output_packet,
13129                decoder,
13130                offset + 0,
13131                _depth
13132            )?;
13133            Ok(())
13134        }
13135    }
13136
13137    impl fidl::encoding::ValueTypeMarker for StreamSinkSendPacketNoReplyRequest {
13138        type Borrowed<'a> = &'a Self;
13139        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13140            value
13141        }
13142    }
13143
13144    unsafe impl fidl::encoding::TypeMarker for StreamSinkSendPacketNoReplyRequest {
13145        type Owned = Self;
13146
13147        #[inline(always)]
13148        fn inline_align(_context: fidl::encoding::Context) -> usize {
13149            8
13150        }
13151
13152        #[inline(always)]
13153        fn inline_size(_context: fidl::encoding::Context) -> usize {
13154            56
13155        }
13156    }
13157
13158    unsafe impl<D: fidl::encoding::ResourceDialect>
13159        fidl::encoding::Encode<StreamSinkSendPacketNoReplyRequest, D>
13160        for &StreamSinkSendPacketNoReplyRequest
13161    {
13162        #[inline]
13163        unsafe fn encode(
13164            self,
13165            encoder: &mut fidl::encoding::Encoder<'_, D>,
13166            offset: usize,
13167            _depth: fidl::encoding::Depth,
13168        ) -> fidl::Result<()> {
13169            encoder.debug_check_bounds::<StreamSinkSendPacketNoReplyRequest>(offset);
13170            unsafe {
13171                // Copy the object into the buffer.
13172                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13173                (buf_ptr as *mut StreamSinkSendPacketNoReplyRequest)
13174                    .write_unaligned((self as *const StreamSinkSendPacketNoReplyRequest).read());
13175                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13176                // done second because the memcpy will write garbage to these bytes.
13177                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13178                let padding_mask = 0xffffffff00000000u64;
13179                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13180                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13181                let padding_mask = 0xffffffff00000000u64;
13182                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13183            }
13184            Ok(())
13185        }
13186    }
13187    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13188        fidl::encoding::Encode<StreamSinkSendPacketNoReplyRequest, D> for (T0,)
13189    {
13190        #[inline]
13191        unsafe fn encode(
13192            self,
13193            encoder: &mut fidl::encoding::Encoder<'_, D>,
13194            offset: usize,
13195            depth: fidl::encoding::Depth,
13196        ) -> fidl::Result<()> {
13197            encoder.debug_check_bounds::<StreamSinkSendPacketNoReplyRequest>(offset);
13198            // Zero out padding regions. There's no need to apply masks
13199            // because the unmasked parts will be overwritten by fields.
13200            // Write the fields.
13201            self.0.encode(encoder, offset + 0, depth)?;
13202            Ok(())
13203        }
13204    }
13205
13206    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13207        for StreamSinkSendPacketNoReplyRequest
13208    {
13209        #[inline(always)]
13210        fn new_empty() -> Self {
13211            Self { packet: fidl::new_empty!(StreamPacket, D) }
13212        }
13213
13214        #[inline]
13215        unsafe fn decode(
13216            &mut self,
13217            decoder: &mut fidl::encoding::Decoder<'_, D>,
13218            offset: usize,
13219            _depth: fidl::encoding::Depth,
13220        ) -> fidl::Result<()> {
13221            decoder.debug_check_bounds::<Self>(offset);
13222            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13223            // Verify that padding bytes are zero.
13224            let ptr = unsafe { buf_ptr.offset(8) };
13225            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13226            let mask = 0xffffffff00000000u64;
13227            let maskedval = padval & mask;
13228            if maskedval != 0 {
13229                return Err(fidl::Error::NonZeroPadding {
13230                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13231                });
13232            }
13233            let ptr = unsafe { buf_ptr.offset(32) };
13234            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13235            let mask = 0xffffffff00000000u64;
13236            let maskedval = padval & mask;
13237            if maskedval != 0 {
13238                return Err(fidl::Error::NonZeroPadding {
13239                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13240                });
13241            }
13242            // Copy from the buffer into the object.
13243            unsafe {
13244                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13245            }
13246            Ok(())
13247        }
13248    }
13249
13250    impl fidl::encoding::ValueTypeMarker for StreamSinkSendPacketRequest {
13251        type Borrowed<'a> = &'a Self;
13252        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13253            value
13254        }
13255    }
13256
13257    unsafe impl fidl::encoding::TypeMarker for StreamSinkSendPacketRequest {
13258        type Owned = Self;
13259
13260        #[inline(always)]
13261        fn inline_align(_context: fidl::encoding::Context) -> usize {
13262            8
13263        }
13264
13265        #[inline(always)]
13266        fn inline_size(_context: fidl::encoding::Context) -> usize {
13267            56
13268        }
13269    }
13270
13271    unsafe impl<D: fidl::encoding::ResourceDialect>
13272        fidl::encoding::Encode<StreamSinkSendPacketRequest, D> for &StreamSinkSendPacketRequest
13273    {
13274        #[inline]
13275        unsafe fn encode(
13276            self,
13277            encoder: &mut fidl::encoding::Encoder<'_, D>,
13278            offset: usize,
13279            _depth: fidl::encoding::Depth,
13280        ) -> fidl::Result<()> {
13281            encoder.debug_check_bounds::<StreamSinkSendPacketRequest>(offset);
13282            unsafe {
13283                // Copy the object into the buffer.
13284                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13285                (buf_ptr as *mut StreamSinkSendPacketRequest)
13286                    .write_unaligned((self as *const StreamSinkSendPacketRequest).read());
13287                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13288                // done second because the memcpy will write garbage to these bytes.
13289                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13290                let padding_mask = 0xffffffff00000000u64;
13291                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13292                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13293                let padding_mask = 0xffffffff00000000u64;
13294                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13295            }
13296            Ok(())
13297        }
13298    }
13299    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13300        fidl::encoding::Encode<StreamSinkSendPacketRequest, D> for (T0,)
13301    {
13302        #[inline]
13303        unsafe fn encode(
13304            self,
13305            encoder: &mut fidl::encoding::Encoder<'_, D>,
13306            offset: usize,
13307            depth: fidl::encoding::Depth,
13308        ) -> fidl::Result<()> {
13309            encoder.debug_check_bounds::<StreamSinkSendPacketRequest>(offset);
13310            // Zero out padding regions. There's no need to apply masks
13311            // because the unmasked parts will be overwritten by fields.
13312            // Write the fields.
13313            self.0.encode(encoder, offset + 0, depth)?;
13314            Ok(())
13315        }
13316    }
13317
13318    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13319        for StreamSinkSendPacketRequest
13320    {
13321        #[inline(always)]
13322        fn new_empty() -> Self {
13323            Self { packet: fidl::new_empty!(StreamPacket, D) }
13324        }
13325
13326        #[inline]
13327        unsafe fn decode(
13328            &mut self,
13329            decoder: &mut fidl::encoding::Decoder<'_, D>,
13330            offset: usize,
13331            _depth: fidl::encoding::Depth,
13332        ) -> fidl::Result<()> {
13333            decoder.debug_check_bounds::<Self>(offset);
13334            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13335            // Verify that padding bytes are zero.
13336            let ptr = unsafe { buf_ptr.offset(8) };
13337            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13338            let mask = 0xffffffff00000000u64;
13339            let maskedval = padval & mask;
13340            if maskedval != 0 {
13341                return Err(fidl::Error::NonZeroPadding {
13342                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13343                });
13344            }
13345            let ptr = unsafe { buf_ptr.offset(32) };
13346            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13347            let mask = 0xffffffff00000000u64;
13348            let maskedval = padval & mask;
13349            if maskedval != 0 {
13350                return Err(fidl::Error::NonZeroPadding {
13351                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13352                });
13353            }
13354            // Copy from the buffer into the object.
13355            unsafe {
13356                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13357            }
13358            Ok(())
13359        }
13360    }
13361
13362    impl fidl::encoding::ValueTypeMarker for StreamSourceOnPacketProducedRequest {
13363        type Borrowed<'a> = &'a Self;
13364        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13365            value
13366        }
13367    }
13368
13369    unsafe impl fidl::encoding::TypeMarker for StreamSourceOnPacketProducedRequest {
13370        type Owned = Self;
13371
13372        #[inline(always)]
13373        fn inline_align(_context: fidl::encoding::Context) -> usize {
13374            8
13375        }
13376
13377        #[inline(always)]
13378        fn inline_size(_context: fidl::encoding::Context) -> usize {
13379            56
13380        }
13381    }
13382
13383    unsafe impl<D: fidl::encoding::ResourceDialect>
13384        fidl::encoding::Encode<StreamSourceOnPacketProducedRequest, D>
13385        for &StreamSourceOnPacketProducedRequest
13386    {
13387        #[inline]
13388        unsafe fn encode(
13389            self,
13390            encoder: &mut fidl::encoding::Encoder<'_, D>,
13391            offset: usize,
13392            _depth: fidl::encoding::Depth,
13393        ) -> fidl::Result<()> {
13394            encoder.debug_check_bounds::<StreamSourceOnPacketProducedRequest>(offset);
13395            unsafe {
13396                // Copy the object into the buffer.
13397                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13398                (buf_ptr as *mut StreamSourceOnPacketProducedRequest)
13399                    .write_unaligned((self as *const StreamSourceOnPacketProducedRequest).read());
13400                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13401                // done second because the memcpy will write garbage to these bytes.
13402                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13403                let padding_mask = 0xffffffff00000000u64;
13404                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13405                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13406                let padding_mask = 0xffffffff00000000u64;
13407                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13408            }
13409            Ok(())
13410        }
13411    }
13412    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13413        fidl::encoding::Encode<StreamSourceOnPacketProducedRequest, D> for (T0,)
13414    {
13415        #[inline]
13416        unsafe fn encode(
13417            self,
13418            encoder: &mut fidl::encoding::Encoder<'_, D>,
13419            offset: usize,
13420            depth: fidl::encoding::Depth,
13421        ) -> fidl::Result<()> {
13422            encoder.debug_check_bounds::<StreamSourceOnPacketProducedRequest>(offset);
13423            // Zero out padding regions. There's no need to apply masks
13424            // because the unmasked parts will be overwritten by fields.
13425            // Write the fields.
13426            self.0.encode(encoder, offset + 0, depth)?;
13427            Ok(())
13428        }
13429    }
13430
13431    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13432        for StreamSourceOnPacketProducedRequest
13433    {
13434        #[inline(always)]
13435        fn new_empty() -> Self {
13436            Self { packet: fidl::new_empty!(StreamPacket, D) }
13437        }
13438
13439        #[inline]
13440        unsafe fn decode(
13441            &mut self,
13442            decoder: &mut fidl::encoding::Decoder<'_, D>,
13443            offset: usize,
13444            _depth: fidl::encoding::Depth,
13445        ) -> fidl::Result<()> {
13446            decoder.debug_check_bounds::<Self>(offset);
13447            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13448            // Verify that padding bytes are zero.
13449            let ptr = unsafe { buf_ptr.offset(8) };
13450            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13451            let mask = 0xffffffff00000000u64;
13452            let maskedval = padval & mask;
13453            if maskedval != 0 {
13454                return Err(fidl::Error::NonZeroPadding {
13455                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13456                });
13457            }
13458            let ptr = unsafe { buf_ptr.offset(32) };
13459            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13460            let mask = 0xffffffff00000000u64;
13461            let maskedval = padval & mask;
13462            if maskedval != 0 {
13463                return Err(fidl::Error::NonZeroPadding {
13464                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13465                });
13466            }
13467            // Copy from the buffer into the object.
13468            unsafe {
13469                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13470            }
13471            Ok(())
13472        }
13473    }
13474
13475    impl fidl::encoding::ValueTypeMarker for StreamSourceReleasePacketRequest {
13476        type Borrowed<'a> = &'a Self;
13477        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13478            value
13479        }
13480    }
13481
13482    unsafe impl fidl::encoding::TypeMarker for StreamSourceReleasePacketRequest {
13483        type Owned = Self;
13484
13485        #[inline(always)]
13486        fn inline_align(_context: fidl::encoding::Context) -> usize {
13487            8
13488        }
13489
13490        #[inline(always)]
13491        fn inline_size(_context: fidl::encoding::Context) -> usize {
13492            56
13493        }
13494    }
13495
13496    unsafe impl<D: fidl::encoding::ResourceDialect>
13497        fidl::encoding::Encode<StreamSourceReleasePacketRequest, D>
13498        for &StreamSourceReleasePacketRequest
13499    {
13500        #[inline]
13501        unsafe fn encode(
13502            self,
13503            encoder: &mut fidl::encoding::Encoder<'_, D>,
13504            offset: usize,
13505            _depth: fidl::encoding::Depth,
13506        ) -> fidl::Result<()> {
13507            encoder.debug_check_bounds::<StreamSourceReleasePacketRequest>(offset);
13508            unsafe {
13509                // Copy the object into the buffer.
13510                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13511                (buf_ptr as *mut StreamSourceReleasePacketRequest)
13512                    .write_unaligned((self as *const StreamSourceReleasePacketRequest).read());
13513                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13514                // done second because the memcpy will write garbage to these bytes.
13515                let padding_ptr = buf_ptr.offset(8) as *mut u64;
13516                let padding_mask = 0xffffffff00000000u64;
13517                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13518                let padding_ptr = buf_ptr.offset(32) as *mut u64;
13519                let padding_mask = 0xffffffff00000000u64;
13520                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
13521            }
13522            Ok(())
13523        }
13524    }
13525    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamPacket, D>>
13526        fidl::encoding::Encode<StreamSourceReleasePacketRequest, D> for (T0,)
13527    {
13528        #[inline]
13529        unsafe fn encode(
13530            self,
13531            encoder: &mut fidl::encoding::Encoder<'_, D>,
13532            offset: usize,
13533            depth: fidl::encoding::Depth,
13534        ) -> fidl::Result<()> {
13535            encoder.debug_check_bounds::<StreamSourceReleasePacketRequest>(offset);
13536            // Zero out padding regions. There's no need to apply masks
13537            // because the unmasked parts will be overwritten by fields.
13538            // Write the fields.
13539            self.0.encode(encoder, offset + 0, depth)?;
13540            Ok(())
13541        }
13542    }
13543
13544    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13545        for StreamSourceReleasePacketRequest
13546    {
13547        #[inline(always)]
13548        fn new_empty() -> Self {
13549            Self { packet: fidl::new_empty!(StreamPacket, D) }
13550        }
13551
13552        #[inline]
13553        unsafe fn decode(
13554            &mut self,
13555            decoder: &mut fidl::encoding::Decoder<'_, D>,
13556            offset: usize,
13557            _depth: fidl::encoding::Depth,
13558        ) -> fidl::Result<()> {
13559            decoder.debug_check_bounds::<Self>(offset);
13560            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13561            // Verify that padding bytes are zero.
13562            let ptr = unsafe { buf_ptr.offset(8) };
13563            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13564            let mask = 0xffffffff00000000u64;
13565            let maskedval = padval & mask;
13566            if maskedval != 0 {
13567                return Err(fidl::Error::NonZeroPadding {
13568                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
13569                });
13570            }
13571            let ptr = unsafe { buf_ptr.offset(32) };
13572            let padval = unsafe { (ptr as *const u64).read_unaligned() };
13573            let mask = 0xffffffff00000000u64;
13574            let maskedval = padval & mask;
13575            if maskedval != 0 {
13576                return Err(fidl::Error::NonZeroPadding {
13577                    padding_start: offset + 32 + ((mask as u64).trailing_zeros() / 8) as usize,
13578                });
13579            }
13580            // Copy from the buffer into the object.
13581            unsafe {
13582                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 56);
13583            }
13584            Ok(())
13585        }
13586    }
13587
13588    impl fidl::encoding::ValueTypeMarker for StreamType {
13589        type Borrowed<'a> = &'a Self;
13590        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13591            value
13592        }
13593    }
13594
13595    unsafe impl fidl::encoding::TypeMarker for StreamType {
13596        type Owned = Self;
13597
13598        #[inline(always)]
13599        fn inline_align(_context: fidl::encoding::Context) -> usize {
13600            8
13601        }
13602
13603        #[inline(always)]
13604        fn inline_size(_context: fidl::encoding::Context) -> usize {
13605            48
13606        }
13607    }
13608
13609    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamType, D>
13610        for &StreamType
13611    {
13612        #[inline]
13613        unsafe fn encode(
13614            self,
13615            encoder: &mut fidl::encoding::Encoder<'_, D>,
13616            offset: usize,
13617            _depth: fidl::encoding::Depth,
13618        ) -> fidl::Result<()> {
13619            encoder.debug_check_bounds::<StreamType>(offset);
13620            // Delegate to tuple encoding.
13621            fidl::encoding::Encode::<StreamType, D>::encode(
13622                (
13623                    <MediumSpecificStreamType as fidl::encoding::ValueTypeMarker>::borrow(&self.medium_specific),
13624                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow(&self.encoding),
13625                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>> as fidl::encoding::ValueTypeMarker>::borrow(&self.encoding_parameters),
13626                ),
13627                encoder, offset, _depth
13628            )
13629        }
13630    }
13631    unsafe impl<
13632        D: fidl::encoding::ResourceDialect,
13633        T0: fidl::encoding::Encode<MediumSpecificStreamType, D>,
13634        T1: fidl::encoding::Encode<fidl::encoding::BoundedString<255>, D>,
13635        T2: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>>, D>,
13636    > fidl::encoding::Encode<StreamType, D> for (T0, T1, T2)
13637    {
13638        #[inline]
13639        unsafe fn encode(
13640            self,
13641            encoder: &mut fidl::encoding::Encoder<'_, D>,
13642            offset: usize,
13643            depth: fidl::encoding::Depth,
13644        ) -> fidl::Result<()> {
13645            encoder.debug_check_bounds::<StreamType>(offset);
13646            // Zero out padding regions. There's no need to apply masks
13647            // because the unmasked parts will be overwritten by fields.
13648            // Write the fields.
13649            self.0.encode(encoder, offset + 0, depth)?;
13650            self.1.encode(encoder, offset + 16, depth)?;
13651            self.2.encode(encoder, offset + 32, depth)?;
13652            Ok(())
13653        }
13654    }
13655
13656    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamType {
13657        #[inline(always)]
13658        fn new_empty() -> Self {
13659            Self {
13660                medium_specific: fidl::new_empty!(MediumSpecificStreamType, D),
13661                encoding: fidl::new_empty!(fidl::encoding::BoundedString<255>, D),
13662                encoding_parameters: fidl::new_empty!(
13663                    fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>>,
13664                    D
13665                ),
13666            }
13667        }
13668
13669        #[inline]
13670        unsafe fn decode(
13671            &mut self,
13672            decoder: &mut fidl::encoding::Decoder<'_, D>,
13673            offset: usize,
13674            _depth: fidl::encoding::Depth,
13675        ) -> fidl::Result<()> {
13676            decoder.debug_check_bounds::<Self>(offset);
13677            // Verify that padding bytes are zero.
13678            fidl::decode!(
13679                MediumSpecificStreamType,
13680                D,
13681                &mut self.medium_specific,
13682                decoder,
13683                offset + 0,
13684                _depth
13685            )?;
13686            fidl::decode!(
13687                fidl::encoding::BoundedString<255>,
13688                D,
13689                &mut self.encoding,
13690                decoder,
13691                offset + 16,
13692                _depth
13693            )?;
13694            fidl::decode!(
13695                fidl::encoding::Optional<fidl::encoding::UnboundedVector<u8>>,
13696                D,
13697                &mut self.encoding_parameters,
13698                decoder,
13699                offset + 32,
13700                _depth
13701            )?;
13702            Ok(())
13703        }
13704    }
13705
13706    impl fidl::encoding::ValueTypeMarker for SubpictureStreamType {
13707        type Borrowed<'a> = &'a Self;
13708        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13709            value
13710        }
13711    }
13712
13713    unsafe impl fidl::encoding::TypeMarker for SubpictureStreamType {
13714        type Owned = Self;
13715
13716        #[inline(always)]
13717        fn inline_align(_context: fidl::encoding::Context) -> usize {
13718            1
13719        }
13720
13721        #[inline(always)]
13722        fn inline_size(_context: fidl::encoding::Context) -> usize {
13723            1
13724        }
13725    }
13726
13727    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SubpictureStreamType, D>
13728        for &SubpictureStreamType
13729    {
13730        #[inline]
13731        unsafe fn encode(
13732            self,
13733            encoder: &mut fidl::encoding::Encoder<'_, D>,
13734            offset: usize,
13735            _depth: fidl::encoding::Depth,
13736        ) -> fidl::Result<()> {
13737            encoder.debug_check_bounds::<SubpictureStreamType>(offset);
13738            encoder.write_num(0u8, offset);
13739            Ok(())
13740        }
13741    }
13742
13743    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SubpictureStreamType {
13744        #[inline(always)]
13745        fn new_empty() -> Self {
13746            Self
13747        }
13748
13749        #[inline]
13750        unsafe fn decode(
13751            &mut self,
13752            decoder: &mut fidl::encoding::Decoder<'_, D>,
13753            offset: usize,
13754            _depth: fidl::encoding::Depth,
13755        ) -> fidl::Result<()> {
13756            decoder.debug_check_bounds::<Self>(offset);
13757            match decoder.read_num::<u8>(offset) {
13758                0 => Ok(()),
13759                _ => Err(fidl::Error::Invalid),
13760            }
13761        }
13762    }
13763
13764    impl fidl::encoding::ValueTypeMarker for SubsampleEntry {
13765        type Borrowed<'a> = &'a Self;
13766        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13767            value
13768        }
13769    }
13770
13771    unsafe impl fidl::encoding::TypeMarker for SubsampleEntry {
13772        type Owned = Self;
13773
13774        #[inline(always)]
13775        fn inline_align(_context: fidl::encoding::Context) -> usize {
13776            4
13777        }
13778
13779        #[inline(always)]
13780        fn inline_size(_context: fidl::encoding::Context) -> usize {
13781            8
13782        }
13783        #[inline(always)]
13784        fn encode_is_copy() -> bool {
13785            true
13786        }
13787
13788        #[inline(always)]
13789        fn decode_is_copy() -> bool {
13790            true
13791        }
13792    }
13793
13794    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SubsampleEntry, D>
13795        for &SubsampleEntry
13796    {
13797        #[inline]
13798        unsafe fn encode(
13799            self,
13800            encoder: &mut fidl::encoding::Encoder<'_, D>,
13801            offset: usize,
13802            _depth: fidl::encoding::Depth,
13803        ) -> fidl::Result<()> {
13804            encoder.debug_check_bounds::<SubsampleEntry>(offset);
13805            unsafe {
13806                // Copy the object into the buffer.
13807                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13808                (buf_ptr as *mut SubsampleEntry)
13809                    .write_unaligned((self as *const SubsampleEntry).read());
13810                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13811                // done second because the memcpy will write garbage to these bytes.
13812            }
13813            Ok(())
13814        }
13815    }
13816    unsafe impl<
13817        D: fidl::encoding::ResourceDialect,
13818        T0: fidl::encoding::Encode<u32, D>,
13819        T1: fidl::encoding::Encode<u32, D>,
13820    > fidl::encoding::Encode<SubsampleEntry, D> for (T0, T1)
13821    {
13822        #[inline]
13823        unsafe fn encode(
13824            self,
13825            encoder: &mut fidl::encoding::Encoder<'_, D>,
13826            offset: usize,
13827            depth: fidl::encoding::Depth,
13828        ) -> fidl::Result<()> {
13829            encoder.debug_check_bounds::<SubsampleEntry>(offset);
13830            // Zero out padding regions. There's no need to apply masks
13831            // because the unmasked parts will be overwritten by fields.
13832            // Write the fields.
13833            self.0.encode(encoder, offset + 0, depth)?;
13834            self.1.encode(encoder, offset + 4, depth)?;
13835            Ok(())
13836        }
13837    }
13838
13839    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SubsampleEntry {
13840        #[inline(always)]
13841        fn new_empty() -> Self {
13842            Self {
13843                clear_bytes: fidl::new_empty!(u32, D),
13844                encrypted_bytes: fidl::new_empty!(u32, D),
13845            }
13846        }
13847
13848        #[inline]
13849        unsafe fn decode(
13850            &mut self,
13851            decoder: &mut fidl::encoding::Decoder<'_, D>,
13852            offset: usize,
13853            _depth: fidl::encoding::Depth,
13854        ) -> fidl::Result<()> {
13855            decoder.debug_check_bounds::<Self>(offset);
13856            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
13857            // Verify that padding bytes are zero.
13858            // Copy from the buffer into the object.
13859            unsafe {
13860                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
13861            }
13862            Ok(())
13863        }
13864    }
13865
13866    impl fidl::encoding::ValueTypeMarker for TextStreamType {
13867        type Borrowed<'a> = &'a Self;
13868        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13869            value
13870        }
13871    }
13872
13873    unsafe impl fidl::encoding::TypeMarker for TextStreamType {
13874        type Owned = Self;
13875
13876        #[inline(always)]
13877        fn inline_align(_context: fidl::encoding::Context) -> usize {
13878            1
13879        }
13880
13881        #[inline(always)]
13882        fn inline_size(_context: fidl::encoding::Context) -> usize {
13883            1
13884        }
13885    }
13886
13887    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TextStreamType, D>
13888        for &TextStreamType
13889    {
13890        #[inline]
13891        unsafe fn encode(
13892            self,
13893            encoder: &mut fidl::encoding::Encoder<'_, D>,
13894            offset: usize,
13895            _depth: fidl::encoding::Depth,
13896        ) -> fidl::Result<()> {
13897            encoder.debug_check_bounds::<TextStreamType>(offset);
13898            encoder.write_num(0u8, offset);
13899            Ok(())
13900        }
13901    }
13902
13903    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TextStreamType {
13904        #[inline(always)]
13905        fn new_empty() -> Self {
13906            Self
13907        }
13908
13909        #[inline]
13910        unsafe fn decode(
13911            &mut self,
13912            decoder: &mut fidl::encoding::Decoder<'_, D>,
13913            offset: usize,
13914            _depth: fidl::encoding::Depth,
13915        ) -> fidl::Result<()> {
13916            decoder.debug_check_bounds::<Self>(offset);
13917            match decoder.read_num::<u8>(offset) {
13918                0 => Ok(()),
13919                _ => Err(fidl::Error::Invalid),
13920            }
13921        }
13922    }
13923
13924    impl fidl::encoding::ValueTypeMarker for TimelineFunction {
13925        type Borrowed<'a> = &'a Self;
13926        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13927            value
13928        }
13929    }
13930
13931    unsafe impl fidl::encoding::TypeMarker for TimelineFunction {
13932        type Owned = Self;
13933
13934        #[inline(always)]
13935        fn inline_align(_context: fidl::encoding::Context) -> usize {
13936            8
13937        }
13938
13939        #[inline(always)]
13940        fn inline_size(_context: fidl::encoding::Context) -> usize {
13941            24
13942        }
13943        #[inline(always)]
13944        fn encode_is_copy() -> bool {
13945            true
13946        }
13947
13948        #[inline(always)]
13949        fn decode_is_copy() -> bool {
13950            true
13951        }
13952    }
13953
13954    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TimelineFunction, D>
13955        for &TimelineFunction
13956    {
13957        #[inline]
13958        unsafe fn encode(
13959            self,
13960            encoder: &mut fidl::encoding::Encoder<'_, D>,
13961            offset: usize,
13962            _depth: fidl::encoding::Depth,
13963        ) -> fidl::Result<()> {
13964            encoder.debug_check_bounds::<TimelineFunction>(offset);
13965            unsafe {
13966                // Copy the object into the buffer.
13967                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
13968                (buf_ptr as *mut TimelineFunction)
13969                    .write_unaligned((self as *const TimelineFunction).read());
13970                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
13971                // done second because the memcpy will write garbage to these bytes.
13972            }
13973            Ok(())
13974        }
13975    }
13976    unsafe impl<
13977        D: fidl::encoding::ResourceDialect,
13978        T0: fidl::encoding::Encode<i64, D>,
13979        T1: fidl::encoding::Encode<i64, D>,
13980        T2: fidl::encoding::Encode<u32, D>,
13981        T3: fidl::encoding::Encode<u32, D>,
13982    > fidl::encoding::Encode<TimelineFunction, D> for (T0, T1, T2, T3)
13983    {
13984        #[inline]
13985        unsafe fn encode(
13986            self,
13987            encoder: &mut fidl::encoding::Encoder<'_, D>,
13988            offset: usize,
13989            depth: fidl::encoding::Depth,
13990        ) -> fidl::Result<()> {
13991            encoder.debug_check_bounds::<TimelineFunction>(offset);
13992            // Zero out padding regions. There's no need to apply masks
13993            // because the unmasked parts will be overwritten by fields.
13994            // Write the fields.
13995            self.0.encode(encoder, offset + 0, depth)?;
13996            self.1.encode(encoder, offset + 8, depth)?;
13997            self.2.encode(encoder, offset + 16, depth)?;
13998            self.3.encode(encoder, offset + 20, depth)?;
13999            Ok(())
14000        }
14001    }
14002
14003    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TimelineFunction {
14004        #[inline(always)]
14005        fn new_empty() -> Self {
14006            Self {
14007                subject_time: fidl::new_empty!(i64, D),
14008                reference_time: fidl::new_empty!(i64, D),
14009                subject_delta: fidl::new_empty!(u32, D),
14010                reference_delta: fidl::new_empty!(u32, D),
14011            }
14012        }
14013
14014        #[inline]
14015        unsafe fn decode(
14016            &mut self,
14017            decoder: &mut fidl::encoding::Decoder<'_, D>,
14018            offset: usize,
14019            _depth: fidl::encoding::Depth,
14020        ) -> fidl::Result<()> {
14021            decoder.debug_check_bounds::<Self>(offset);
14022            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
14023            // Verify that padding bytes are zero.
14024            // Copy from the buffer into the object.
14025            unsafe {
14026                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 24);
14027            }
14028            Ok(())
14029        }
14030    }
14031
14032    impl fidl::encoding::ValueTypeMarker for UsageGainListenerOnGainMuteChangedRequest {
14033        type Borrowed<'a> = &'a Self;
14034        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14035            value
14036        }
14037    }
14038
14039    unsafe impl fidl::encoding::TypeMarker for UsageGainListenerOnGainMuteChangedRequest {
14040        type Owned = Self;
14041
14042        #[inline(always)]
14043        fn inline_align(_context: fidl::encoding::Context) -> usize {
14044            4
14045        }
14046
14047        #[inline(always)]
14048        fn inline_size(_context: fidl::encoding::Context) -> usize {
14049            8
14050        }
14051    }
14052
14053    unsafe impl<D: fidl::encoding::ResourceDialect>
14054        fidl::encoding::Encode<UsageGainListenerOnGainMuteChangedRequest, D>
14055        for &UsageGainListenerOnGainMuteChangedRequest
14056    {
14057        #[inline]
14058        unsafe fn encode(
14059            self,
14060            encoder: &mut fidl::encoding::Encoder<'_, D>,
14061            offset: usize,
14062            _depth: fidl::encoding::Depth,
14063        ) -> fidl::Result<()> {
14064            encoder.debug_check_bounds::<UsageGainListenerOnGainMuteChangedRequest>(offset);
14065            // Delegate to tuple encoding.
14066            fidl::encoding::Encode::<UsageGainListenerOnGainMuteChangedRequest, D>::encode(
14067                (
14068                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.muted),
14069                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_dbfs),
14070                ),
14071                encoder,
14072                offset,
14073                _depth,
14074            )
14075        }
14076    }
14077    unsafe impl<
14078        D: fidl::encoding::ResourceDialect,
14079        T0: fidl::encoding::Encode<bool, D>,
14080        T1: fidl::encoding::Encode<f32, D>,
14081    > fidl::encoding::Encode<UsageGainListenerOnGainMuteChangedRequest, D> for (T0, T1)
14082    {
14083        #[inline]
14084        unsafe fn encode(
14085            self,
14086            encoder: &mut fidl::encoding::Encoder<'_, D>,
14087            offset: usize,
14088            depth: fidl::encoding::Depth,
14089        ) -> fidl::Result<()> {
14090            encoder.debug_check_bounds::<UsageGainListenerOnGainMuteChangedRequest>(offset);
14091            // Zero out padding regions. There's no need to apply masks
14092            // because the unmasked parts will be overwritten by fields.
14093            unsafe {
14094                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
14095                (ptr as *mut u32).write_unaligned(0);
14096            }
14097            // Write the fields.
14098            self.0.encode(encoder, offset + 0, depth)?;
14099            self.1.encode(encoder, offset + 4, depth)?;
14100            Ok(())
14101        }
14102    }
14103
14104    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14105        for UsageGainListenerOnGainMuteChangedRequest
14106    {
14107        #[inline(always)]
14108        fn new_empty() -> Self {
14109            Self { muted: fidl::new_empty!(bool, D), gain_dbfs: fidl::new_empty!(f32, D) }
14110        }
14111
14112        #[inline]
14113        unsafe fn decode(
14114            &mut self,
14115            decoder: &mut fidl::encoding::Decoder<'_, D>,
14116            offset: usize,
14117            _depth: fidl::encoding::Depth,
14118        ) -> fidl::Result<()> {
14119            decoder.debug_check_bounds::<Self>(offset);
14120            // Verify that padding bytes are zero.
14121            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
14122            let padval = unsafe { (ptr as *const u32).read_unaligned() };
14123            let mask = 0xffffff00u32;
14124            let maskedval = padval & mask;
14125            if maskedval != 0 {
14126                return Err(fidl::Error::NonZeroPadding {
14127                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
14128                });
14129            }
14130            fidl::decode!(bool, D, &mut self.muted, decoder, offset + 0, _depth)?;
14131            fidl::decode!(f32, D, &mut self.gain_dbfs, decoder, offset + 4, _depth)?;
14132            Ok(())
14133        }
14134    }
14135
14136    impl fidl::encoding::ValueTypeMarker for UsageWatcher2OnStateChangedRequest {
14137        type Borrowed<'a> = &'a Self;
14138        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14139            value
14140        }
14141    }
14142
14143    unsafe impl fidl::encoding::TypeMarker for UsageWatcher2OnStateChangedRequest {
14144        type Owned = Self;
14145
14146        #[inline(always)]
14147        fn inline_align(_context: fidl::encoding::Context) -> usize {
14148            8
14149        }
14150
14151        #[inline(always)]
14152        fn inline_size(_context: fidl::encoding::Context) -> usize {
14153            32
14154        }
14155    }
14156
14157    unsafe impl<D: fidl::encoding::ResourceDialect>
14158        fidl::encoding::Encode<UsageWatcher2OnStateChangedRequest, D>
14159        for &UsageWatcher2OnStateChangedRequest
14160    {
14161        #[inline]
14162        unsafe fn encode(
14163            self,
14164            encoder: &mut fidl::encoding::Encoder<'_, D>,
14165            offset: usize,
14166            _depth: fidl::encoding::Depth,
14167        ) -> fidl::Result<()> {
14168            encoder.debug_check_bounds::<UsageWatcher2OnStateChangedRequest>(offset);
14169            // Delegate to tuple encoding.
14170            fidl::encoding::Encode::<UsageWatcher2OnStateChangedRequest, D>::encode(
14171                (
14172                    <Usage2 as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
14173                    <UsageState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),
14174                ),
14175                encoder,
14176                offset,
14177                _depth,
14178            )
14179        }
14180    }
14181    unsafe impl<
14182        D: fidl::encoding::ResourceDialect,
14183        T0: fidl::encoding::Encode<Usage2, D>,
14184        T1: fidl::encoding::Encode<UsageState, D>,
14185    > fidl::encoding::Encode<UsageWatcher2OnStateChangedRequest, D> for (T0, T1)
14186    {
14187        #[inline]
14188        unsafe fn encode(
14189            self,
14190            encoder: &mut fidl::encoding::Encoder<'_, D>,
14191            offset: usize,
14192            depth: fidl::encoding::Depth,
14193        ) -> fidl::Result<()> {
14194            encoder.debug_check_bounds::<UsageWatcher2OnStateChangedRequest>(offset);
14195            // Zero out padding regions. There's no need to apply masks
14196            // because the unmasked parts will be overwritten by fields.
14197            // Write the fields.
14198            self.0.encode(encoder, offset + 0, depth)?;
14199            self.1.encode(encoder, offset + 16, depth)?;
14200            Ok(())
14201        }
14202    }
14203
14204    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14205        for UsageWatcher2OnStateChangedRequest
14206    {
14207        #[inline(always)]
14208        fn new_empty() -> Self {
14209            Self { usage: fidl::new_empty!(Usage2, D), state: fidl::new_empty!(UsageState, D) }
14210        }
14211
14212        #[inline]
14213        unsafe fn decode(
14214            &mut self,
14215            decoder: &mut fidl::encoding::Decoder<'_, D>,
14216            offset: usize,
14217            _depth: fidl::encoding::Depth,
14218        ) -> fidl::Result<()> {
14219            decoder.debug_check_bounds::<Self>(offset);
14220            // Verify that padding bytes are zero.
14221            fidl::decode!(Usage2, D, &mut self.usage, decoder, offset + 0, _depth)?;
14222            fidl::decode!(UsageState, D, &mut self.state, decoder, offset + 16, _depth)?;
14223            Ok(())
14224        }
14225    }
14226
14227    impl fidl::encoding::ValueTypeMarker for UsageWatcherOnStateChangedRequest {
14228        type Borrowed<'a> = &'a Self;
14229        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14230            value
14231        }
14232    }
14233
14234    unsafe impl fidl::encoding::TypeMarker for UsageWatcherOnStateChangedRequest {
14235        type Owned = Self;
14236
14237        #[inline(always)]
14238        fn inline_align(_context: fidl::encoding::Context) -> usize {
14239            8
14240        }
14241
14242        #[inline(always)]
14243        fn inline_size(_context: fidl::encoding::Context) -> usize {
14244            32
14245        }
14246    }
14247
14248    unsafe impl<D: fidl::encoding::ResourceDialect>
14249        fidl::encoding::Encode<UsageWatcherOnStateChangedRequest, D>
14250        for &UsageWatcherOnStateChangedRequest
14251    {
14252        #[inline]
14253        unsafe fn encode(
14254            self,
14255            encoder: &mut fidl::encoding::Encoder<'_, D>,
14256            offset: usize,
14257            _depth: fidl::encoding::Depth,
14258        ) -> fidl::Result<()> {
14259            encoder.debug_check_bounds::<UsageWatcherOnStateChangedRequest>(offset);
14260            // Delegate to tuple encoding.
14261            fidl::encoding::Encode::<UsageWatcherOnStateChangedRequest, D>::encode(
14262                (
14263                    <Usage as fidl::encoding::ValueTypeMarker>::borrow(&self.usage),
14264                    <UsageState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),
14265                ),
14266                encoder,
14267                offset,
14268                _depth,
14269            )
14270        }
14271    }
14272    unsafe impl<
14273        D: fidl::encoding::ResourceDialect,
14274        T0: fidl::encoding::Encode<Usage, D>,
14275        T1: fidl::encoding::Encode<UsageState, D>,
14276    > fidl::encoding::Encode<UsageWatcherOnStateChangedRequest, D> for (T0, T1)
14277    {
14278        #[inline]
14279        unsafe fn encode(
14280            self,
14281            encoder: &mut fidl::encoding::Encoder<'_, D>,
14282            offset: usize,
14283            depth: fidl::encoding::Depth,
14284        ) -> fidl::Result<()> {
14285            encoder.debug_check_bounds::<UsageWatcherOnStateChangedRequest>(offset);
14286            // Zero out padding regions. There's no need to apply masks
14287            // because the unmasked parts will be overwritten by fields.
14288            // Write the fields.
14289            self.0.encode(encoder, offset + 0, depth)?;
14290            self.1.encode(encoder, offset + 16, depth)?;
14291            Ok(())
14292        }
14293    }
14294
14295    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14296        for UsageWatcherOnStateChangedRequest
14297    {
14298        #[inline(always)]
14299        fn new_empty() -> Self {
14300            Self { usage: fidl::new_empty!(Usage, D), state: fidl::new_empty!(UsageState, D) }
14301        }
14302
14303        #[inline]
14304        unsafe fn decode(
14305            &mut self,
14306            decoder: &mut fidl::encoding::Decoder<'_, D>,
14307            offset: usize,
14308            _depth: fidl::encoding::Depth,
14309        ) -> fidl::Result<()> {
14310            decoder.debug_check_bounds::<Self>(offset);
14311            // Verify that padding bytes are zero.
14312            fidl::decode!(Usage, D, &mut self.usage, decoder, offset + 0, _depth)?;
14313            fidl::decode!(UsageState, D, &mut self.state, decoder, offset + 16, _depth)?;
14314            Ok(())
14315        }
14316    }
14317
14318    impl fidl::encoding::ValueTypeMarker for VideoStreamType {
14319        type Borrowed<'a> = &'a Self;
14320        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14321            value
14322        }
14323    }
14324
14325    unsafe impl fidl::encoding::TypeMarker for VideoStreamType {
14326        type Owned = Self;
14327
14328        #[inline(always)]
14329        fn inline_align(_context: fidl::encoding::Context) -> usize {
14330            4
14331        }
14332
14333        #[inline(always)]
14334        fn inline_size(_context: fidl::encoding::Context) -> usize {
14335            36
14336        }
14337    }
14338
14339    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VideoStreamType, D>
14340        for &VideoStreamType
14341    {
14342        #[inline]
14343        unsafe fn encode(
14344            self,
14345            encoder: &mut fidl::encoding::Encoder<'_, D>,
14346            offset: usize,
14347            _depth: fidl::encoding::Depth,
14348        ) -> fidl::Result<()> {
14349            encoder.debug_check_bounds::<VideoStreamType>(offset);
14350            // Delegate to tuple encoding.
14351            fidl::encoding::Encode::<VideoStreamType, D>::encode(
14352                (
14353                    <fidl_fuchsia_images__common::PixelFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_format),
14354                    <ColorSpace as fidl::encoding::ValueTypeMarker>::borrow(&self.color_space),
14355                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.width),
14356                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.height),
14357                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.coded_width),
14358                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.coded_height),
14359                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_aspect_ratio_width),
14360                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_aspect_ratio_height),
14361                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.stride),
14362                ),
14363                encoder, offset, _depth
14364            )
14365        }
14366    }
14367    unsafe impl<
14368        D: fidl::encoding::ResourceDialect,
14369        T0: fidl::encoding::Encode<fidl_fuchsia_images__common::PixelFormat, D>,
14370        T1: fidl::encoding::Encode<ColorSpace, D>,
14371        T2: fidl::encoding::Encode<u32, D>,
14372        T3: fidl::encoding::Encode<u32, D>,
14373        T4: fidl::encoding::Encode<u32, D>,
14374        T5: fidl::encoding::Encode<u32, D>,
14375        T6: fidl::encoding::Encode<u32, D>,
14376        T7: fidl::encoding::Encode<u32, D>,
14377        T8: fidl::encoding::Encode<u32, D>,
14378    > fidl::encoding::Encode<VideoStreamType, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
14379    {
14380        #[inline]
14381        unsafe fn encode(
14382            self,
14383            encoder: &mut fidl::encoding::Encoder<'_, D>,
14384            offset: usize,
14385            depth: fidl::encoding::Depth,
14386        ) -> fidl::Result<()> {
14387            encoder.debug_check_bounds::<VideoStreamType>(offset);
14388            // Zero out padding regions. There's no need to apply masks
14389            // because the unmasked parts will be overwritten by fields.
14390            // Write the fields.
14391            self.0.encode(encoder, offset + 0, depth)?;
14392            self.1.encode(encoder, offset + 4, depth)?;
14393            self.2.encode(encoder, offset + 8, depth)?;
14394            self.3.encode(encoder, offset + 12, depth)?;
14395            self.4.encode(encoder, offset + 16, depth)?;
14396            self.5.encode(encoder, offset + 20, depth)?;
14397            self.6.encode(encoder, offset + 24, depth)?;
14398            self.7.encode(encoder, offset + 28, depth)?;
14399            self.8.encode(encoder, offset + 32, depth)?;
14400            Ok(())
14401        }
14402    }
14403
14404    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoStreamType {
14405        #[inline(always)]
14406        fn new_empty() -> Self {
14407            Self {
14408                pixel_format: fidl::new_empty!(fidl_fuchsia_images__common::PixelFormat, D),
14409                color_space: fidl::new_empty!(ColorSpace, D),
14410                width: fidl::new_empty!(u32, D),
14411                height: fidl::new_empty!(u32, D),
14412                coded_width: fidl::new_empty!(u32, D),
14413                coded_height: fidl::new_empty!(u32, D),
14414                pixel_aspect_ratio_width: fidl::new_empty!(u32, D),
14415                pixel_aspect_ratio_height: fidl::new_empty!(u32, D),
14416                stride: fidl::new_empty!(u32, D),
14417            }
14418        }
14419
14420        #[inline]
14421        unsafe fn decode(
14422            &mut self,
14423            decoder: &mut fidl::encoding::Decoder<'_, D>,
14424            offset: usize,
14425            _depth: fidl::encoding::Depth,
14426        ) -> fidl::Result<()> {
14427            decoder.debug_check_bounds::<Self>(offset);
14428            // Verify that padding bytes are zero.
14429            fidl::decode!(
14430                fidl_fuchsia_images__common::PixelFormat,
14431                D,
14432                &mut self.pixel_format,
14433                decoder,
14434                offset + 0,
14435                _depth
14436            )?;
14437            fidl::decode!(ColorSpace, D, &mut self.color_space, decoder, offset + 4, _depth)?;
14438            fidl::decode!(u32, D, &mut self.width, decoder, offset + 8, _depth)?;
14439            fidl::decode!(u32, D, &mut self.height, decoder, offset + 12, _depth)?;
14440            fidl::decode!(u32, D, &mut self.coded_width, decoder, offset + 16, _depth)?;
14441            fidl::decode!(u32, D, &mut self.coded_height, decoder, offset + 20, _depth)?;
14442            fidl::decode!(
14443                u32,
14444                D,
14445                &mut self.pixel_aspect_ratio_width,
14446                decoder,
14447                offset + 24,
14448                _depth
14449            )?;
14450            fidl::decode!(
14451                u32,
14452                D,
14453                &mut self.pixel_aspect_ratio_height,
14454                decoder,
14455                offset + 28,
14456                _depth
14457            )?;
14458            fidl::decode!(u32, D, &mut self.stride, decoder, offset + 32, _depth)?;
14459            Ok(())
14460        }
14461    }
14462
14463    impl fidl::encoding::ValueTypeMarker for VideoUncompressedFormat {
14464        type Borrowed<'a> = &'a Self;
14465        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14466            value
14467        }
14468    }
14469
14470    unsafe impl fidl::encoding::TypeMarker for VideoUncompressedFormat {
14471        type Owned = Self;
14472
14473        #[inline(always)]
14474        fn inline_align(_context: fidl::encoding::Context) -> usize {
14475            8
14476        }
14477
14478        #[inline(always)]
14479        fn inline_size(_context: fidl::encoding::Context) -> usize {
14480            128
14481        }
14482    }
14483
14484    unsafe impl<D: fidl::encoding::ResourceDialect>
14485        fidl::encoding::Encode<VideoUncompressedFormat, D> for &VideoUncompressedFormat
14486    {
14487        #[inline]
14488        unsafe fn encode(
14489            self,
14490            encoder: &mut fidl::encoding::Encoder<'_, D>,
14491            offset: usize,
14492            _depth: fidl::encoding::Depth,
14493        ) -> fidl::Result<()> {
14494            encoder.debug_check_bounds::<VideoUncompressedFormat>(offset);
14495            // Delegate to tuple encoding.
14496            fidl::encoding::Encode::<VideoUncompressedFormat, D>::encode(
14497                (
14498                    <fidl_fuchsia_sysmem__common::ImageFormat2 as fidl::encoding::ValueTypeMarker>::borrow(&self.image_format),
14499                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.fourcc),
14500                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_width_pixels),
14501                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_height_pixels),
14502                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_width_pixels),
14503                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_height_pixels),
14504                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.planar),
14505                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.swizzled),
14506                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_line_stride_bytes),
14507                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_line_stride_bytes),
14508                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_start_offset),
14509                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_start_offset),
14510                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.tertiary_start_offset),
14511                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_pixel_stride),
14512                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary_pixel_stride),
14513                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_display_width_pixels),
14514                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary_display_height_pixels),
14515                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.has_pixel_aspect_ratio),
14516                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_aspect_ratio_width),
14517                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.pixel_aspect_ratio_height),
14518                ),
14519                encoder, offset, _depth
14520            )
14521        }
14522    }
14523    unsafe impl<
14524        D: fidl::encoding::ResourceDialect,
14525        T0: fidl::encoding::Encode<fidl_fuchsia_sysmem__common::ImageFormat2, D>,
14526        T1: fidl::encoding::Encode<u32, D>,
14527        T2: fidl::encoding::Encode<u32, D>,
14528        T3: fidl::encoding::Encode<u32, D>,
14529        T4: fidl::encoding::Encode<u32, D>,
14530        T5: fidl::encoding::Encode<u32, D>,
14531        T6: fidl::encoding::Encode<bool, D>,
14532        T7: fidl::encoding::Encode<bool, D>,
14533        T8: fidl::encoding::Encode<u32, D>,
14534        T9: fidl::encoding::Encode<u32, D>,
14535        T10: fidl::encoding::Encode<u32, D>,
14536        T11: fidl::encoding::Encode<u32, D>,
14537        T12: fidl::encoding::Encode<u32, D>,
14538        T13: fidl::encoding::Encode<u32, D>,
14539        T14: fidl::encoding::Encode<u32, D>,
14540        T15: fidl::encoding::Encode<u32, D>,
14541        T16: fidl::encoding::Encode<u32, D>,
14542        T17: fidl::encoding::Encode<bool, D>,
14543        T18: fidl::encoding::Encode<u32, D>,
14544        T19: fidl::encoding::Encode<u32, D>,
14545    > fidl::encoding::Encode<VideoUncompressedFormat, D>
14546        for (
14547            T0,
14548            T1,
14549            T2,
14550            T3,
14551            T4,
14552            T5,
14553            T6,
14554            T7,
14555            T8,
14556            T9,
14557            T10,
14558            T11,
14559            T12,
14560            T13,
14561            T14,
14562            T15,
14563            T16,
14564            T17,
14565            T18,
14566            T19,
14567        )
14568    {
14569        #[inline]
14570        unsafe fn encode(
14571            self,
14572            encoder: &mut fidl::encoding::Encoder<'_, D>,
14573            offset: usize,
14574            depth: fidl::encoding::Depth,
14575        ) -> fidl::Result<()> {
14576            encoder.debug_check_bounds::<VideoUncompressedFormat>(offset);
14577            // Zero out padding regions. There's no need to apply masks
14578            // because the unmasked parts will be overwritten by fields.
14579            unsafe {
14580                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(72);
14581                (ptr as *mut u64).write_unaligned(0);
14582            }
14583            unsafe {
14584                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(112);
14585                (ptr as *mut u64).write_unaligned(0);
14586            }
14587            // Write the fields.
14588            self.0.encode(encoder, offset + 0, depth)?;
14589            self.1.encode(encoder, offset + 56, depth)?;
14590            self.2.encode(encoder, offset + 60, depth)?;
14591            self.3.encode(encoder, offset + 64, depth)?;
14592            self.4.encode(encoder, offset + 68, depth)?;
14593            self.5.encode(encoder, offset + 72, depth)?;
14594            self.6.encode(encoder, offset + 76, depth)?;
14595            self.7.encode(encoder, offset + 77, depth)?;
14596            self.8.encode(encoder, offset + 80, depth)?;
14597            self.9.encode(encoder, offset + 84, depth)?;
14598            self.10.encode(encoder, offset + 88, depth)?;
14599            self.11.encode(encoder, offset + 92, depth)?;
14600            self.12.encode(encoder, offset + 96, depth)?;
14601            self.13.encode(encoder, offset + 100, depth)?;
14602            self.14.encode(encoder, offset + 104, depth)?;
14603            self.15.encode(encoder, offset + 108, depth)?;
14604            self.16.encode(encoder, offset + 112, depth)?;
14605            self.17.encode(encoder, offset + 116, depth)?;
14606            self.18.encode(encoder, offset + 120, depth)?;
14607            self.19.encode(encoder, offset + 124, depth)?;
14608            Ok(())
14609        }
14610    }
14611
14612    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14613        for VideoUncompressedFormat
14614    {
14615        #[inline(always)]
14616        fn new_empty() -> Self {
14617            Self {
14618                image_format: fidl::new_empty!(fidl_fuchsia_sysmem__common::ImageFormat2, D),
14619                fourcc: fidl::new_empty!(u32, D),
14620                primary_width_pixels: fidl::new_empty!(u32, D),
14621                primary_height_pixels: fidl::new_empty!(u32, D),
14622                secondary_width_pixels: fidl::new_empty!(u32, D),
14623                secondary_height_pixels: fidl::new_empty!(u32, D),
14624                planar: fidl::new_empty!(bool, D),
14625                swizzled: fidl::new_empty!(bool, D),
14626                primary_line_stride_bytes: fidl::new_empty!(u32, D),
14627                secondary_line_stride_bytes: fidl::new_empty!(u32, D),
14628                primary_start_offset: fidl::new_empty!(u32, D),
14629                secondary_start_offset: fidl::new_empty!(u32, D),
14630                tertiary_start_offset: fidl::new_empty!(u32, D),
14631                primary_pixel_stride: fidl::new_empty!(u32, D),
14632                secondary_pixel_stride: fidl::new_empty!(u32, D),
14633                primary_display_width_pixels: fidl::new_empty!(u32, D),
14634                primary_display_height_pixels: fidl::new_empty!(u32, D),
14635                has_pixel_aspect_ratio: fidl::new_empty!(bool, D),
14636                pixel_aspect_ratio_width: fidl::new_empty!(u32, D),
14637                pixel_aspect_ratio_height: fidl::new_empty!(u32, D),
14638            }
14639        }
14640
14641        #[inline]
14642        unsafe fn decode(
14643            &mut self,
14644            decoder: &mut fidl::encoding::Decoder<'_, D>,
14645            offset: usize,
14646            _depth: fidl::encoding::Depth,
14647        ) -> fidl::Result<()> {
14648            decoder.debug_check_bounds::<Self>(offset);
14649            // Verify that padding bytes are zero.
14650            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(72) };
14651            let padval = unsafe { (ptr as *const u64).read_unaligned() };
14652            let mask = 0xffff000000000000u64;
14653            let maskedval = padval & mask;
14654            if maskedval != 0 {
14655                return Err(fidl::Error::NonZeroPadding {
14656                    padding_start: offset + 72 + ((mask as u64).trailing_zeros() / 8) as usize,
14657                });
14658            }
14659            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(112) };
14660            let padval = unsafe { (ptr as *const u64).read_unaligned() };
14661            let mask = 0xffffff0000000000u64;
14662            let maskedval = padval & mask;
14663            if maskedval != 0 {
14664                return Err(fidl::Error::NonZeroPadding {
14665                    padding_start: offset + 112 + ((mask as u64).trailing_zeros() / 8) as usize,
14666                });
14667            }
14668            fidl::decode!(
14669                fidl_fuchsia_sysmem__common::ImageFormat2,
14670                D,
14671                &mut self.image_format,
14672                decoder,
14673                offset + 0,
14674                _depth
14675            )?;
14676            fidl::decode!(u32, D, &mut self.fourcc, decoder, offset + 56, _depth)?;
14677            fidl::decode!(u32, D, &mut self.primary_width_pixels, decoder, offset + 60, _depth)?;
14678            fidl::decode!(u32, D, &mut self.primary_height_pixels, decoder, offset + 64, _depth)?;
14679            fidl::decode!(u32, D, &mut self.secondary_width_pixels, decoder, offset + 68, _depth)?;
14680            fidl::decode!(u32, D, &mut self.secondary_height_pixels, decoder, offset + 72, _depth)?;
14681            fidl::decode!(bool, D, &mut self.planar, decoder, offset + 76, _depth)?;
14682            fidl::decode!(bool, D, &mut self.swizzled, decoder, offset + 77, _depth)?;
14683            fidl::decode!(
14684                u32,
14685                D,
14686                &mut self.primary_line_stride_bytes,
14687                decoder,
14688                offset + 80,
14689                _depth
14690            )?;
14691            fidl::decode!(
14692                u32,
14693                D,
14694                &mut self.secondary_line_stride_bytes,
14695                decoder,
14696                offset + 84,
14697                _depth
14698            )?;
14699            fidl::decode!(u32, D, &mut self.primary_start_offset, decoder, offset + 88, _depth)?;
14700            fidl::decode!(u32, D, &mut self.secondary_start_offset, decoder, offset + 92, _depth)?;
14701            fidl::decode!(u32, D, &mut self.tertiary_start_offset, decoder, offset + 96, _depth)?;
14702            fidl::decode!(u32, D, &mut self.primary_pixel_stride, decoder, offset + 100, _depth)?;
14703            fidl::decode!(u32, D, &mut self.secondary_pixel_stride, decoder, offset + 104, _depth)?;
14704            fidl::decode!(
14705                u32,
14706                D,
14707                &mut self.primary_display_width_pixels,
14708                decoder,
14709                offset + 108,
14710                _depth
14711            )?;
14712            fidl::decode!(
14713                u32,
14714                D,
14715                &mut self.primary_display_height_pixels,
14716                decoder,
14717                offset + 112,
14718                _depth
14719            )?;
14720            fidl::decode!(
14721                bool,
14722                D,
14723                &mut self.has_pixel_aspect_ratio,
14724                decoder,
14725                offset + 116,
14726                _depth
14727            )?;
14728            fidl::decode!(
14729                u32,
14730                D,
14731                &mut self.pixel_aspect_ratio_width,
14732                decoder,
14733                offset + 120,
14734                _depth
14735            )?;
14736            fidl::decode!(
14737                u32,
14738                D,
14739                &mut self.pixel_aspect_ratio_height,
14740                decoder,
14741                offset + 124,
14742                _depth
14743            )?;
14744            Ok(())
14745        }
14746    }
14747
14748    impl fidl::encoding::ValueTypeMarker for Void {
14749        type Borrowed<'a> = &'a Self;
14750        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14751            value
14752        }
14753    }
14754
14755    unsafe impl fidl::encoding::TypeMarker for Void {
14756        type Owned = Self;
14757
14758        #[inline(always)]
14759        fn inline_align(_context: fidl::encoding::Context) -> usize {
14760            1
14761        }
14762
14763        #[inline(always)]
14764        fn inline_size(_context: fidl::encoding::Context) -> usize {
14765            1
14766        }
14767    }
14768
14769    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Void, D> for &Void {
14770        #[inline]
14771        unsafe fn encode(
14772            self,
14773            encoder: &mut fidl::encoding::Encoder<'_, D>,
14774            offset: usize,
14775            _depth: fidl::encoding::Depth,
14776        ) -> fidl::Result<()> {
14777            encoder.debug_check_bounds::<Void>(offset);
14778            encoder.write_num(0u8, offset);
14779            Ok(())
14780        }
14781    }
14782
14783    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Void {
14784        #[inline(always)]
14785        fn new_empty() -> Self {
14786            Self
14787        }
14788
14789        #[inline]
14790        unsafe fn decode(
14791            &mut self,
14792            decoder: &mut fidl::encoding::Decoder<'_, D>,
14793            offset: usize,
14794            _depth: fidl::encoding::Depth,
14795        ) -> fidl::Result<()> {
14796            decoder.debug_check_bounds::<Self>(offset);
14797            match decoder.read_num::<u8>(offset) {
14798                0 => Ok(()),
14799                _ => Err(fidl::Error::Invalid),
14800            }
14801        }
14802    }
14803
14804    impl AudioCompressedFormatCvsd {
14805        #[inline(always)]
14806        fn max_ordinal_present(&self) -> u64 {
14807            0
14808        }
14809    }
14810
14811    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatCvsd {
14812        type Borrowed<'a> = &'a Self;
14813        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14814            value
14815        }
14816    }
14817
14818    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatCvsd {
14819        type Owned = Self;
14820
14821        #[inline(always)]
14822        fn inline_align(_context: fidl::encoding::Context) -> usize {
14823            8
14824        }
14825
14826        #[inline(always)]
14827        fn inline_size(_context: fidl::encoding::Context) -> usize {
14828            16
14829        }
14830    }
14831
14832    unsafe impl<D: fidl::encoding::ResourceDialect>
14833        fidl::encoding::Encode<AudioCompressedFormatCvsd, D> for &AudioCompressedFormatCvsd
14834    {
14835        unsafe fn encode(
14836            self,
14837            encoder: &mut fidl::encoding::Encoder<'_, D>,
14838            offset: usize,
14839            mut depth: fidl::encoding::Depth,
14840        ) -> fidl::Result<()> {
14841            encoder.debug_check_bounds::<AudioCompressedFormatCvsd>(offset);
14842            // Vector header
14843            let max_ordinal: u64 = self.max_ordinal_present();
14844            encoder.write_num(max_ordinal, offset);
14845            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14846            // Calling encoder.out_of_line_offset(0) is not allowed.
14847            if max_ordinal == 0 {
14848                return Ok(());
14849            }
14850            depth.increment()?;
14851            let envelope_size = 8;
14852            let bytes_len = max_ordinal as usize * envelope_size;
14853            #[allow(unused_variables)]
14854            let offset = encoder.out_of_line_offset(bytes_len);
14855            let mut _prev_end_offset: usize = 0;
14856
14857            Ok(())
14858        }
14859    }
14860
14861    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14862        for AudioCompressedFormatCvsd
14863    {
14864        #[inline(always)]
14865        fn new_empty() -> Self {
14866            Self::default()
14867        }
14868
14869        unsafe fn decode(
14870            &mut self,
14871            decoder: &mut fidl::encoding::Decoder<'_, D>,
14872            offset: usize,
14873            mut depth: fidl::encoding::Depth,
14874        ) -> fidl::Result<()> {
14875            decoder.debug_check_bounds::<Self>(offset);
14876            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14877                None => return Err(fidl::Error::NotNullable),
14878                Some(len) => len,
14879            };
14880            // Calling decoder.out_of_line_offset(0) is not allowed.
14881            if len == 0 {
14882                return Ok(());
14883            };
14884            depth.increment()?;
14885            let envelope_size = 8;
14886            let bytes_len = len * envelope_size;
14887            let offset = decoder.out_of_line_offset(bytes_len)?;
14888            // Decode the envelope for each type.
14889            let mut _next_ordinal_to_read = 0;
14890            let mut next_offset = offset;
14891            let end_offset = offset + bytes_len;
14892
14893            // Decode the remaining unknown envelopes.
14894            while next_offset < end_offset {
14895                _next_ordinal_to_read += 1;
14896                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14897                next_offset += envelope_size;
14898            }
14899
14900            Ok(())
14901        }
14902    }
14903
14904    impl AudioCompressedFormatLc3 {
14905        #[inline(always)]
14906        fn max_ordinal_present(&self) -> u64 {
14907            0
14908        }
14909    }
14910
14911    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormatLc3 {
14912        type Borrowed<'a> = &'a Self;
14913        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14914            value
14915        }
14916    }
14917
14918    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormatLc3 {
14919        type Owned = Self;
14920
14921        #[inline(always)]
14922        fn inline_align(_context: fidl::encoding::Context) -> usize {
14923            8
14924        }
14925
14926        #[inline(always)]
14927        fn inline_size(_context: fidl::encoding::Context) -> usize {
14928            16
14929        }
14930    }
14931
14932    unsafe impl<D: fidl::encoding::ResourceDialect>
14933        fidl::encoding::Encode<AudioCompressedFormatLc3, D> for &AudioCompressedFormatLc3
14934    {
14935        unsafe fn encode(
14936            self,
14937            encoder: &mut fidl::encoding::Encoder<'_, D>,
14938            offset: usize,
14939            mut depth: fidl::encoding::Depth,
14940        ) -> fidl::Result<()> {
14941            encoder.debug_check_bounds::<AudioCompressedFormatLc3>(offset);
14942            // Vector header
14943            let max_ordinal: u64 = self.max_ordinal_present();
14944            encoder.write_num(max_ordinal, offset);
14945            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14946            // Calling encoder.out_of_line_offset(0) is not allowed.
14947            if max_ordinal == 0 {
14948                return Ok(());
14949            }
14950            depth.increment()?;
14951            let envelope_size = 8;
14952            let bytes_len = max_ordinal as usize * envelope_size;
14953            #[allow(unused_variables)]
14954            let offset = encoder.out_of_line_offset(bytes_len);
14955            let mut _prev_end_offset: usize = 0;
14956
14957            Ok(())
14958        }
14959    }
14960
14961    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14962        for AudioCompressedFormatLc3
14963    {
14964        #[inline(always)]
14965        fn new_empty() -> Self {
14966            Self::default()
14967        }
14968
14969        unsafe fn decode(
14970            &mut self,
14971            decoder: &mut fidl::encoding::Decoder<'_, D>,
14972            offset: usize,
14973            mut depth: fidl::encoding::Depth,
14974        ) -> fidl::Result<()> {
14975            decoder.debug_check_bounds::<Self>(offset);
14976            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14977                None => return Err(fidl::Error::NotNullable),
14978                Some(len) => len,
14979            };
14980            // Calling decoder.out_of_line_offset(0) is not allowed.
14981            if len == 0 {
14982                return Ok(());
14983            };
14984            depth.increment()?;
14985            let envelope_size = 8;
14986            let bytes_len = len * envelope_size;
14987            let offset = decoder.out_of_line_offset(bytes_len)?;
14988            // Decode the envelope for each type.
14989            let mut _next_ordinal_to_read = 0;
14990            let mut next_offset = offset;
14991            let end_offset = offset + bytes_len;
14992
14993            // Decode the remaining unknown envelopes.
14994            while next_offset < end_offset {
14995                _next_ordinal_to_read += 1;
14996                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14997                next_offset += envelope_size;
14998            }
14999
15000            Ok(())
15001        }
15002    }
15003
15004    impl AudioConsumerStatus {
15005        #[inline(always)]
15006        fn max_ordinal_present(&self) -> u64 {
15007            if let Some(_) = self.max_lead_time {
15008                return 4;
15009            }
15010            if let Some(_) = self.min_lead_time {
15011                return 3;
15012            }
15013            if let Some(_) = self.presentation_timeline {
15014                return 2;
15015            }
15016            if let Some(_) = self.error {
15017                return 1;
15018            }
15019            0
15020        }
15021    }
15022
15023    impl fidl::encoding::ValueTypeMarker for AudioConsumerStatus {
15024        type Borrowed<'a> = &'a Self;
15025        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15026            value
15027        }
15028    }
15029
15030    unsafe impl fidl::encoding::TypeMarker for AudioConsumerStatus {
15031        type Owned = Self;
15032
15033        #[inline(always)]
15034        fn inline_align(_context: fidl::encoding::Context) -> usize {
15035            8
15036        }
15037
15038        #[inline(always)]
15039        fn inline_size(_context: fidl::encoding::Context) -> usize {
15040            16
15041        }
15042    }
15043
15044    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioConsumerStatus, D>
15045        for &AudioConsumerStatus
15046    {
15047        unsafe fn encode(
15048            self,
15049            encoder: &mut fidl::encoding::Encoder<'_, D>,
15050            offset: usize,
15051            mut depth: fidl::encoding::Depth,
15052        ) -> fidl::Result<()> {
15053            encoder.debug_check_bounds::<AudioConsumerStatus>(offset);
15054            // Vector header
15055            let max_ordinal: u64 = self.max_ordinal_present();
15056            encoder.write_num(max_ordinal, offset);
15057            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15058            // Calling encoder.out_of_line_offset(0) is not allowed.
15059            if max_ordinal == 0 {
15060                return Ok(());
15061            }
15062            depth.increment()?;
15063            let envelope_size = 8;
15064            let bytes_len = max_ordinal as usize * envelope_size;
15065            #[allow(unused_variables)]
15066            let offset = encoder.out_of_line_offset(bytes_len);
15067            let mut _prev_end_offset: usize = 0;
15068            if 1 > max_ordinal {
15069                return Ok(());
15070            }
15071
15072            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15073            // are envelope_size bytes.
15074            let cur_offset: usize = (1 - 1) * envelope_size;
15075
15076            // Zero reserved fields.
15077            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15078
15079            // Safety:
15080            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15081            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15082            //   envelope_size bytes, there is always sufficient room.
15083            fidl::encoding::encode_in_envelope_optional::<AudioConsumerError, D>(
15084                self.error
15085                    .as_ref()
15086                    .map(<AudioConsumerError as fidl::encoding::ValueTypeMarker>::borrow),
15087                encoder,
15088                offset + cur_offset,
15089                depth,
15090            )?;
15091
15092            _prev_end_offset = cur_offset + envelope_size;
15093            if 2 > max_ordinal {
15094                return Ok(());
15095            }
15096
15097            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15098            // are envelope_size bytes.
15099            let cur_offset: usize = (2 - 1) * envelope_size;
15100
15101            // Zero reserved fields.
15102            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15103
15104            // Safety:
15105            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15106            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15107            //   envelope_size bytes, there is always sufficient room.
15108            fidl::encoding::encode_in_envelope_optional::<TimelineFunction, D>(
15109                self.presentation_timeline
15110                    .as_ref()
15111                    .map(<TimelineFunction as fidl::encoding::ValueTypeMarker>::borrow),
15112                encoder,
15113                offset + cur_offset,
15114                depth,
15115            )?;
15116
15117            _prev_end_offset = cur_offset + envelope_size;
15118            if 3 > max_ordinal {
15119                return Ok(());
15120            }
15121
15122            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15123            // are envelope_size bytes.
15124            let cur_offset: usize = (3 - 1) * envelope_size;
15125
15126            // Zero reserved fields.
15127            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15128
15129            // Safety:
15130            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15131            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15132            //   envelope_size bytes, there is always sufficient room.
15133            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15134                self.min_lead_time.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15135                encoder,
15136                offset + cur_offset,
15137                depth,
15138            )?;
15139
15140            _prev_end_offset = cur_offset + envelope_size;
15141            if 4 > max_ordinal {
15142                return Ok(());
15143            }
15144
15145            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15146            // are envelope_size bytes.
15147            let cur_offset: usize = (4 - 1) * envelope_size;
15148
15149            // Zero reserved fields.
15150            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15151
15152            // Safety:
15153            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15154            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15155            //   envelope_size bytes, there is always sufficient room.
15156            fidl::encoding::encode_in_envelope_optional::<u64, D>(
15157                self.max_lead_time.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
15158                encoder,
15159                offset + cur_offset,
15160                depth,
15161            )?;
15162
15163            _prev_end_offset = cur_offset + envelope_size;
15164
15165            Ok(())
15166        }
15167    }
15168
15169    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioConsumerStatus {
15170        #[inline(always)]
15171        fn new_empty() -> Self {
15172            Self::default()
15173        }
15174
15175        unsafe fn decode(
15176            &mut self,
15177            decoder: &mut fidl::encoding::Decoder<'_, D>,
15178            offset: usize,
15179            mut depth: fidl::encoding::Depth,
15180        ) -> fidl::Result<()> {
15181            decoder.debug_check_bounds::<Self>(offset);
15182            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15183                None => return Err(fidl::Error::NotNullable),
15184                Some(len) => len,
15185            };
15186            // Calling decoder.out_of_line_offset(0) is not allowed.
15187            if len == 0 {
15188                return Ok(());
15189            };
15190            depth.increment()?;
15191            let envelope_size = 8;
15192            let bytes_len = len * envelope_size;
15193            let offset = decoder.out_of_line_offset(bytes_len)?;
15194            // Decode the envelope for each type.
15195            let mut _next_ordinal_to_read = 0;
15196            let mut next_offset = offset;
15197            let end_offset = offset + bytes_len;
15198            _next_ordinal_to_read += 1;
15199            if next_offset >= end_offset {
15200                return Ok(());
15201            }
15202
15203            // Decode unknown envelopes for gaps in ordinals.
15204            while _next_ordinal_to_read < 1 {
15205                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15206                _next_ordinal_to_read += 1;
15207                next_offset += envelope_size;
15208            }
15209
15210            let next_out_of_line = decoder.next_out_of_line();
15211            let handles_before = decoder.remaining_handles();
15212            if let Some((inlined, num_bytes, num_handles)) =
15213                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15214            {
15215                let member_inline_size =
15216                    <AudioConsumerError as fidl::encoding::TypeMarker>::inline_size(
15217                        decoder.context,
15218                    );
15219                if inlined != (member_inline_size <= 4) {
15220                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15221                }
15222                let inner_offset;
15223                let mut inner_depth = depth.clone();
15224                if inlined {
15225                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15226                    inner_offset = next_offset;
15227                } else {
15228                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15229                    inner_depth.increment()?;
15230                }
15231                let val_ref =
15232                    self.error.get_or_insert_with(|| fidl::new_empty!(AudioConsumerError, D));
15233                fidl::decode!(AudioConsumerError, D, val_ref, decoder, inner_offset, inner_depth)?;
15234                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15235                {
15236                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15237                }
15238                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15239                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15240                }
15241            }
15242
15243            next_offset += envelope_size;
15244            _next_ordinal_to_read += 1;
15245            if next_offset >= end_offset {
15246                return Ok(());
15247            }
15248
15249            // Decode unknown envelopes for gaps in ordinals.
15250            while _next_ordinal_to_read < 2 {
15251                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15252                _next_ordinal_to_read += 1;
15253                next_offset += envelope_size;
15254            }
15255
15256            let next_out_of_line = decoder.next_out_of_line();
15257            let handles_before = decoder.remaining_handles();
15258            if let Some((inlined, num_bytes, num_handles)) =
15259                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15260            {
15261                let member_inline_size =
15262                    <TimelineFunction as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15263                if inlined != (member_inline_size <= 4) {
15264                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15265                }
15266                let inner_offset;
15267                let mut inner_depth = depth.clone();
15268                if inlined {
15269                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15270                    inner_offset = next_offset;
15271                } else {
15272                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15273                    inner_depth.increment()?;
15274                }
15275                let val_ref = self
15276                    .presentation_timeline
15277                    .get_or_insert_with(|| fidl::new_empty!(TimelineFunction, D));
15278                fidl::decode!(TimelineFunction, D, val_ref, decoder, inner_offset, inner_depth)?;
15279                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15280                {
15281                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15282                }
15283                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15284                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15285                }
15286            }
15287
15288            next_offset += envelope_size;
15289            _next_ordinal_to_read += 1;
15290            if next_offset >= end_offset {
15291                return Ok(());
15292            }
15293
15294            // Decode unknown envelopes for gaps in ordinals.
15295            while _next_ordinal_to_read < 3 {
15296                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15297                _next_ordinal_to_read += 1;
15298                next_offset += envelope_size;
15299            }
15300
15301            let next_out_of_line = decoder.next_out_of_line();
15302            let handles_before = decoder.remaining_handles();
15303            if let Some((inlined, num_bytes, num_handles)) =
15304                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15305            {
15306                let member_inline_size =
15307                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15308                if inlined != (member_inline_size <= 4) {
15309                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15310                }
15311                let inner_offset;
15312                let mut inner_depth = depth.clone();
15313                if inlined {
15314                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15315                    inner_offset = next_offset;
15316                } else {
15317                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15318                    inner_depth.increment()?;
15319                }
15320                let val_ref = self.min_lead_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
15321                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15322                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15323                {
15324                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15325                }
15326                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15327                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15328                }
15329            }
15330
15331            next_offset += envelope_size;
15332            _next_ordinal_to_read += 1;
15333            if next_offset >= end_offset {
15334                return Ok(());
15335            }
15336
15337            // Decode unknown envelopes for gaps in ordinals.
15338            while _next_ordinal_to_read < 4 {
15339                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15340                _next_ordinal_to_read += 1;
15341                next_offset += envelope_size;
15342            }
15343
15344            let next_out_of_line = decoder.next_out_of_line();
15345            let handles_before = decoder.remaining_handles();
15346            if let Some((inlined, num_bytes, num_handles)) =
15347                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15348            {
15349                let member_inline_size =
15350                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15351                if inlined != (member_inline_size <= 4) {
15352                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15353                }
15354                let inner_offset;
15355                let mut inner_depth = depth.clone();
15356                if inlined {
15357                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15358                    inner_offset = next_offset;
15359                } else {
15360                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15361                    inner_depth.increment()?;
15362                }
15363                let val_ref = self.max_lead_time.get_or_insert_with(|| fidl::new_empty!(u64, D));
15364                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
15365                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15366                {
15367                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15368                }
15369                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15370                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15371                }
15372            }
15373
15374            next_offset += envelope_size;
15375
15376            // Decode the remaining unknown envelopes.
15377            while next_offset < end_offset {
15378                _next_ordinal_to_read += 1;
15379                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15380                next_offset += envelope_size;
15381            }
15382
15383            Ok(())
15384        }
15385    }
15386
15387    impl CvsdEncoderSettings {
15388        #[inline(always)]
15389        fn max_ordinal_present(&self) -> u64 {
15390            0
15391        }
15392    }
15393
15394    impl fidl::encoding::ValueTypeMarker for CvsdEncoderSettings {
15395        type Borrowed<'a> = &'a Self;
15396        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15397            value
15398        }
15399    }
15400
15401    unsafe impl fidl::encoding::TypeMarker for CvsdEncoderSettings {
15402        type Owned = Self;
15403
15404        #[inline(always)]
15405        fn inline_align(_context: fidl::encoding::Context) -> usize {
15406            8
15407        }
15408
15409        #[inline(always)]
15410        fn inline_size(_context: fidl::encoding::Context) -> usize {
15411            16
15412        }
15413    }
15414
15415    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CvsdEncoderSettings, D>
15416        for &CvsdEncoderSettings
15417    {
15418        unsafe fn encode(
15419            self,
15420            encoder: &mut fidl::encoding::Encoder<'_, D>,
15421            offset: usize,
15422            mut depth: fidl::encoding::Depth,
15423        ) -> fidl::Result<()> {
15424            encoder.debug_check_bounds::<CvsdEncoderSettings>(offset);
15425            // Vector header
15426            let max_ordinal: u64 = self.max_ordinal_present();
15427            encoder.write_num(max_ordinal, offset);
15428            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15429            // Calling encoder.out_of_line_offset(0) is not allowed.
15430            if max_ordinal == 0 {
15431                return Ok(());
15432            }
15433            depth.increment()?;
15434            let envelope_size = 8;
15435            let bytes_len = max_ordinal as usize * envelope_size;
15436            #[allow(unused_variables)]
15437            let offset = encoder.out_of_line_offset(bytes_len);
15438            let mut _prev_end_offset: usize = 0;
15439
15440            Ok(())
15441        }
15442    }
15443
15444    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CvsdEncoderSettings {
15445        #[inline(always)]
15446        fn new_empty() -> Self {
15447            Self::default()
15448        }
15449
15450        unsafe fn decode(
15451            &mut self,
15452            decoder: &mut fidl::encoding::Decoder<'_, D>,
15453            offset: usize,
15454            mut depth: fidl::encoding::Depth,
15455        ) -> fidl::Result<()> {
15456            decoder.debug_check_bounds::<Self>(offset);
15457            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15458                None => return Err(fidl::Error::NotNullable),
15459                Some(len) => len,
15460            };
15461            // Calling decoder.out_of_line_offset(0) is not allowed.
15462            if len == 0 {
15463                return Ok(());
15464            };
15465            depth.increment()?;
15466            let envelope_size = 8;
15467            let bytes_len = len * envelope_size;
15468            let offset = decoder.out_of_line_offset(bytes_len)?;
15469            // Decode the envelope for each type.
15470            let mut _next_ordinal_to_read = 0;
15471            let mut next_offset = offset;
15472            let end_offset = offset + bytes_len;
15473
15474            // Decode the remaining unknown envelopes.
15475            while next_offset < end_offset {
15476                _next_ordinal_to_read += 1;
15477                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15478                next_offset += envelope_size;
15479            }
15480
15481            Ok(())
15482        }
15483    }
15484
15485    impl DecryptedFormat {
15486        #[inline(always)]
15487        fn max_ordinal_present(&self) -> u64 {
15488            if let Some(_) = self.ignore_this_field {
15489                return 1;
15490            }
15491            0
15492        }
15493    }
15494
15495    impl fidl::encoding::ValueTypeMarker for DecryptedFormat {
15496        type Borrowed<'a> = &'a Self;
15497        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15498            value
15499        }
15500    }
15501
15502    unsafe impl fidl::encoding::TypeMarker for DecryptedFormat {
15503        type Owned = Self;
15504
15505        #[inline(always)]
15506        fn inline_align(_context: fidl::encoding::Context) -> usize {
15507            8
15508        }
15509
15510        #[inline(always)]
15511        fn inline_size(_context: fidl::encoding::Context) -> usize {
15512            16
15513        }
15514    }
15515
15516    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DecryptedFormat, D>
15517        for &DecryptedFormat
15518    {
15519        unsafe fn encode(
15520            self,
15521            encoder: &mut fidl::encoding::Encoder<'_, D>,
15522            offset: usize,
15523            mut depth: fidl::encoding::Depth,
15524        ) -> fidl::Result<()> {
15525            encoder.debug_check_bounds::<DecryptedFormat>(offset);
15526            // Vector header
15527            let max_ordinal: u64 = self.max_ordinal_present();
15528            encoder.write_num(max_ordinal, offset);
15529            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15530            // Calling encoder.out_of_line_offset(0) is not allowed.
15531            if max_ordinal == 0 {
15532                return Ok(());
15533            }
15534            depth.increment()?;
15535            let envelope_size = 8;
15536            let bytes_len = max_ordinal as usize * envelope_size;
15537            #[allow(unused_variables)]
15538            let offset = encoder.out_of_line_offset(bytes_len);
15539            let mut _prev_end_offset: usize = 0;
15540            if 1 > max_ordinal {
15541                return Ok(());
15542            }
15543
15544            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15545            // are envelope_size bytes.
15546            let cur_offset: usize = (1 - 1) * envelope_size;
15547
15548            // Zero reserved fields.
15549            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15550
15551            // Safety:
15552            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15553            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15554            //   envelope_size bytes, there is always sufficient room.
15555            fidl::encoding::encode_in_envelope_optional::<bool, D>(
15556                self.ignore_this_field
15557                    .as_ref()
15558                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
15559                encoder,
15560                offset + cur_offset,
15561                depth,
15562            )?;
15563
15564            _prev_end_offset = cur_offset + envelope_size;
15565
15566            Ok(())
15567        }
15568    }
15569
15570    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DecryptedFormat {
15571        #[inline(always)]
15572        fn new_empty() -> Self {
15573            Self::default()
15574        }
15575
15576        unsafe fn decode(
15577            &mut self,
15578            decoder: &mut fidl::encoding::Decoder<'_, D>,
15579            offset: usize,
15580            mut depth: fidl::encoding::Depth,
15581        ) -> fidl::Result<()> {
15582            decoder.debug_check_bounds::<Self>(offset);
15583            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15584                None => return Err(fidl::Error::NotNullable),
15585                Some(len) => len,
15586            };
15587            // Calling decoder.out_of_line_offset(0) is not allowed.
15588            if len == 0 {
15589                return Ok(());
15590            };
15591            depth.increment()?;
15592            let envelope_size = 8;
15593            let bytes_len = len * envelope_size;
15594            let offset = decoder.out_of_line_offset(bytes_len)?;
15595            // Decode the envelope for each type.
15596            let mut _next_ordinal_to_read = 0;
15597            let mut next_offset = offset;
15598            let end_offset = offset + bytes_len;
15599            _next_ordinal_to_read += 1;
15600            if next_offset >= end_offset {
15601                return Ok(());
15602            }
15603
15604            // Decode unknown envelopes for gaps in ordinals.
15605            while _next_ordinal_to_read < 1 {
15606                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15607                _next_ordinal_to_read += 1;
15608                next_offset += envelope_size;
15609            }
15610
15611            let next_out_of_line = decoder.next_out_of_line();
15612            let handles_before = decoder.remaining_handles();
15613            if let Some((inlined, num_bytes, num_handles)) =
15614                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15615            {
15616                let member_inline_size =
15617                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15618                if inlined != (member_inline_size <= 4) {
15619                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15620                }
15621                let inner_offset;
15622                let mut inner_depth = depth.clone();
15623                if inlined {
15624                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15625                    inner_offset = next_offset;
15626                } else {
15627                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15628                    inner_depth.increment()?;
15629                }
15630                let val_ref =
15631                    self.ignore_this_field.get_or_insert_with(|| fidl::new_empty!(bool, D));
15632                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
15633                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15634                {
15635                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15636                }
15637                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15638                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15639                }
15640            }
15641
15642            next_offset += envelope_size;
15643
15644            // Decode the remaining unknown envelopes.
15645            while next_offset < end_offset {
15646                _next_ordinal_to_read += 1;
15647                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15648                next_offset += envelope_size;
15649            }
15650
15651            Ok(())
15652        }
15653    }
15654
15655    impl EncryptedFormat {
15656        #[inline(always)]
15657        fn max_ordinal_present(&self) -> u64 {
15658            if let Some(_) = self.key_id {
15659                return 8;
15660            }
15661            if let Some(_) = self.scheme {
15662                return 6;
15663            }
15664            if let Some(_) = self.pattern {
15665                return 5;
15666            }
15667            if let Some(_) = self.subsamples {
15668                return 4;
15669            }
15670            if let Some(_) = self.init_vector {
15671                return 3;
15672            }
15673            0
15674        }
15675    }
15676
15677    impl fidl::encoding::ValueTypeMarker for EncryptedFormat {
15678        type Borrowed<'a> = &'a Self;
15679        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15680            value
15681        }
15682    }
15683
15684    unsafe impl fidl::encoding::TypeMarker for EncryptedFormat {
15685        type Owned = Self;
15686
15687        #[inline(always)]
15688        fn inline_align(_context: fidl::encoding::Context) -> usize {
15689            8
15690        }
15691
15692        #[inline(always)]
15693        fn inline_size(_context: fidl::encoding::Context) -> usize {
15694            16
15695        }
15696    }
15697
15698    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncryptedFormat, D>
15699        for &EncryptedFormat
15700    {
15701        unsafe fn encode(
15702            self,
15703            encoder: &mut fidl::encoding::Encoder<'_, D>,
15704            offset: usize,
15705            mut depth: fidl::encoding::Depth,
15706        ) -> fidl::Result<()> {
15707            encoder.debug_check_bounds::<EncryptedFormat>(offset);
15708            // Vector header
15709            let max_ordinal: u64 = self.max_ordinal_present();
15710            encoder.write_num(max_ordinal, offset);
15711            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15712            // Calling encoder.out_of_line_offset(0) is not allowed.
15713            if max_ordinal == 0 {
15714                return Ok(());
15715            }
15716            depth.increment()?;
15717            let envelope_size = 8;
15718            let bytes_len = max_ordinal as usize * envelope_size;
15719            #[allow(unused_variables)]
15720            let offset = encoder.out_of_line_offset(bytes_len);
15721            let mut _prev_end_offset: usize = 0;
15722            if 3 > max_ordinal {
15723                return Ok(());
15724            }
15725
15726            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15727            // are envelope_size bytes.
15728            let cur_offset: usize = (3 - 1) * envelope_size;
15729
15730            // Zero reserved fields.
15731            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15732
15733            // Safety:
15734            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15735            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15736            //   envelope_size bytes, there is always sufficient room.
15737            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
15738                self.init_vector.as_ref().map(
15739                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
15740                ),
15741                encoder,
15742                offset + cur_offset,
15743                depth,
15744            )?;
15745
15746            _prev_end_offset = cur_offset + envelope_size;
15747            if 4 > max_ordinal {
15748                return Ok(());
15749            }
15750
15751            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15752            // are envelope_size bytes.
15753            let cur_offset: usize = (4 - 1) * envelope_size;
15754
15755            // Zero reserved fields.
15756            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15757
15758            // Safety:
15759            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15760            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15761            //   envelope_size bytes, there is always sufficient room.
15762            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<SubsampleEntry>, D>(
15763            self.subsamples.as_ref().map(<fidl::encoding::UnboundedVector<SubsampleEntry> as fidl::encoding::ValueTypeMarker>::borrow),
15764            encoder, offset + cur_offset, depth
15765        )?;
15766
15767            _prev_end_offset = cur_offset + envelope_size;
15768            if 5 > max_ordinal {
15769                return Ok(());
15770            }
15771
15772            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15773            // are envelope_size bytes.
15774            let cur_offset: usize = (5 - 1) * envelope_size;
15775
15776            // Zero reserved fields.
15777            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15778
15779            // Safety:
15780            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15781            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15782            //   envelope_size bytes, there is always sufficient room.
15783            fidl::encoding::encode_in_envelope_optional::<EncryptionPattern, D>(
15784                self.pattern
15785                    .as_ref()
15786                    .map(<EncryptionPattern as fidl::encoding::ValueTypeMarker>::borrow),
15787                encoder,
15788                offset + cur_offset,
15789                depth,
15790            )?;
15791
15792            _prev_end_offset = cur_offset + envelope_size;
15793            if 6 > max_ordinal {
15794                return Ok(());
15795            }
15796
15797            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15798            // are envelope_size bytes.
15799            let cur_offset: usize = (6 - 1) * envelope_size;
15800
15801            // Zero reserved fields.
15802            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15803
15804            // Safety:
15805            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15806            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15807            //   envelope_size bytes, there is always sufficient room.
15808            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
15809                self.scheme.as_ref().map(
15810                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
15811                ),
15812                encoder,
15813                offset + cur_offset,
15814                depth,
15815            )?;
15816
15817            _prev_end_offset = cur_offset + envelope_size;
15818            if 8 > max_ordinal {
15819                return Ok(());
15820            }
15821
15822            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15823            // are envelope_size bytes.
15824            let cur_offset: usize = (8 - 1) * envelope_size;
15825
15826            // Zero reserved fields.
15827            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15828
15829            // Safety:
15830            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15831            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15832            //   envelope_size bytes, there is always sufficient room.
15833            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
15834                self.key_id.as_ref().map(
15835                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
15836                ),
15837                encoder,
15838                offset + cur_offset,
15839                depth,
15840            )?;
15841
15842            _prev_end_offset = cur_offset + envelope_size;
15843
15844            Ok(())
15845        }
15846    }
15847
15848    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncryptedFormat {
15849        #[inline(always)]
15850        fn new_empty() -> Self {
15851            Self::default()
15852        }
15853
15854        unsafe fn decode(
15855            &mut self,
15856            decoder: &mut fidl::encoding::Decoder<'_, D>,
15857            offset: usize,
15858            mut depth: fidl::encoding::Depth,
15859        ) -> fidl::Result<()> {
15860            decoder.debug_check_bounds::<Self>(offset);
15861            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15862                None => return Err(fidl::Error::NotNullable),
15863                Some(len) => len,
15864            };
15865            // Calling decoder.out_of_line_offset(0) is not allowed.
15866            if len == 0 {
15867                return Ok(());
15868            };
15869            depth.increment()?;
15870            let envelope_size = 8;
15871            let bytes_len = len * envelope_size;
15872            let offset = decoder.out_of_line_offset(bytes_len)?;
15873            // Decode the envelope for each type.
15874            let mut _next_ordinal_to_read = 0;
15875            let mut next_offset = offset;
15876            let end_offset = offset + bytes_len;
15877            _next_ordinal_to_read += 1;
15878            if next_offset >= end_offset {
15879                return Ok(());
15880            }
15881
15882            // Decode unknown envelopes for gaps in ordinals.
15883            while _next_ordinal_to_read < 3 {
15884                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15885                _next_ordinal_to_read += 1;
15886                next_offset += envelope_size;
15887            }
15888
15889            let next_out_of_line = decoder.next_out_of_line();
15890            let handles_before = decoder.remaining_handles();
15891            if let Some((inlined, num_bytes, num_handles)) =
15892                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15893            {
15894                let member_inline_size =
15895                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
15896                        decoder.context,
15897                    );
15898                if inlined != (member_inline_size <= 4) {
15899                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15900                }
15901                let inner_offset;
15902                let mut inner_depth = depth.clone();
15903                if inlined {
15904                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15905                    inner_offset = next_offset;
15906                } else {
15907                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15908                    inner_depth.increment()?;
15909                }
15910                let val_ref = self
15911                    .init_vector
15912                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
15913                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
15914                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15915                {
15916                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15917                }
15918                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15919                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15920                }
15921            }
15922
15923            next_offset += envelope_size;
15924            _next_ordinal_to_read += 1;
15925            if next_offset >= end_offset {
15926                return Ok(());
15927            }
15928
15929            // Decode unknown envelopes for gaps in ordinals.
15930            while _next_ordinal_to_read < 4 {
15931                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15932                _next_ordinal_to_read += 1;
15933                next_offset += envelope_size;
15934            }
15935
15936            let next_out_of_line = decoder.next_out_of_line();
15937            let handles_before = decoder.remaining_handles();
15938            if let Some((inlined, num_bytes, num_handles)) =
15939                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15940            {
15941                let member_inline_size = <fidl::encoding::UnboundedVector<SubsampleEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15942                if inlined != (member_inline_size <= 4) {
15943                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15944                }
15945                let inner_offset;
15946                let mut inner_depth = depth.clone();
15947                if inlined {
15948                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15949                    inner_offset = next_offset;
15950                } else {
15951                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15952                    inner_depth.increment()?;
15953                }
15954                let val_ref = self.subsamples.get_or_insert_with(|| {
15955                    fidl::new_empty!(fidl::encoding::UnboundedVector<SubsampleEntry>, D)
15956                });
15957                fidl::decode!(
15958                    fidl::encoding::UnboundedVector<SubsampleEntry>,
15959                    D,
15960                    val_ref,
15961                    decoder,
15962                    inner_offset,
15963                    inner_depth
15964                )?;
15965                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15966                {
15967                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15968                }
15969                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15970                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15971                }
15972            }
15973
15974            next_offset += envelope_size;
15975            _next_ordinal_to_read += 1;
15976            if next_offset >= end_offset {
15977                return Ok(());
15978            }
15979
15980            // Decode unknown envelopes for gaps in ordinals.
15981            while _next_ordinal_to_read < 5 {
15982                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15983                _next_ordinal_to_read += 1;
15984                next_offset += envelope_size;
15985            }
15986
15987            let next_out_of_line = decoder.next_out_of_line();
15988            let handles_before = decoder.remaining_handles();
15989            if let Some((inlined, num_bytes, num_handles)) =
15990                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15991            {
15992                let member_inline_size =
15993                    <EncryptionPattern as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15994                if inlined != (member_inline_size <= 4) {
15995                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15996                }
15997                let inner_offset;
15998                let mut inner_depth = depth.clone();
15999                if inlined {
16000                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16001                    inner_offset = next_offset;
16002                } else {
16003                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16004                    inner_depth.increment()?;
16005                }
16006                let val_ref =
16007                    self.pattern.get_or_insert_with(|| fidl::new_empty!(EncryptionPattern, D));
16008                fidl::decode!(EncryptionPattern, D, val_ref, decoder, inner_offset, inner_depth)?;
16009                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16010                {
16011                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16012                }
16013                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16014                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16015                }
16016            }
16017
16018            next_offset += envelope_size;
16019            _next_ordinal_to_read += 1;
16020            if next_offset >= end_offset {
16021                return Ok(());
16022            }
16023
16024            // Decode unknown envelopes for gaps in ordinals.
16025            while _next_ordinal_to_read < 6 {
16026                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16027                _next_ordinal_to_read += 1;
16028                next_offset += envelope_size;
16029            }
16030
16031            let next_out_of_line = decoder.next_out_of_line();
16032            let handles_before = decoder.remaining_handles();
16033            if let Some((inlined, num_bytes, num_handles)) =
16034                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16035            {
16036                let member_inline_size =
16037                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
16038                        decoder.context,
16039                    );
16040                if inlined != (member_inline_size <= 4) {
16041                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16042                }
16043                let inner_offset;
16044                let mut inner_depth = depth.clone();
16045                if inlined {
16046                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16047                    inner_offset = next_offset;
16048                } else {
16049                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16050                    inner_depth.increment()?;
16051                }
16052                let val_ref = self
16053                    .scheme
16054                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
16055                fidl::decode!(
16056                    fidl::encoding::UnboundedString,
16057                    D,
16058                    val_ref,
16059                    decoder,
16060                    inner_offset,
16061                    inner_depth
16062                )?;
16063                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16064                {
16065                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16066                }
16067                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16068                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16069                }
16070            }
16071
16072            next_offset += envelope_size;
16073            _next_ordinal_to_read += 1;
16074            if next_offset >= end_offset {
16075                return Ok(());
16076            }
16077
16078            // Decode unknown envelopes for gaps in ordinals.
16079            while _next_ordinal_to_read < 8 {
16080                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16081                _next_ordinal_to_read += 1;
16082                next_offset += envelope_size;
16083            }
16084
16085            let next_out_of_line = decoder.next_out_of_line();
16086            let handles_before = decoder.remaining_handles();
16087            if let Some((inlined, num_bytes, num_handles)) =
16088                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16089            {
16090                let member_inline_size =
16091                    <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
16092                        decoder.context,
16093                    );
16094                if inlined != (member_inline_size <= 4) {
16095                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16096                }
16097                let inner_offset;
16098                let mut inner_depth = depth.clone();
16099                if inlined {
16100                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16101                    inner_offset = next_offset;
16102                } else {
16103                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16104                    inner_depth.increment()?;
16105                }
16106                let val_ref = self
16107                    .key_id
16108                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
16109                fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
16110                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16111                {
16112                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16113                }
16114                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16115                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16116                }
16117            }
16118
16119            next_offset += envelope_size;
16120
16121            // Decode the remaining unknown envelopes.
16122            while next_offset < end_offset {
16123                _next_ordinal_to_read += 1;
16124                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16125                next_offset += envelope_size;
16126            }
16127
16128            Ok(())
16129        }
16130    }
16131
16132    impl FormatDetails {
16133        #[inline(always)]
16134        fn max_ordinal_present(&self) -> u64 {
16135            if let Some(_) = self.profile {
16136                return 8;
16137            }
16138            if let Some(_) = self.timebase {
16139                return 7;
16140            }
16141            if let Some(_) = self.encoder_settings {
16142                return 6;
16143            }
16144            if let Some(_) = self.pass_through_parameters {
16145                return 5;
16146            }
16147            if let Some(_) = self.domain {
16148                return 4;
16149            }
16150            if let Some(_) = self.oob_bytes {
16151                return 3;
16152            }
16153            if let Some(_) = self.mime_type {
16154                return 2;
16155            }
16156            if let Some(_) = self.format_details_version_ordinal {
16157                return 1;
16158            }
16159            0
16160        }
16161    }
16162
16163    impl fidl::encoding::ValueTypeMarker for FormatDetails {
16164        type Borrowed<'a> = &'a Self;
16165        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16166            value
16167        }
16168    }
16169
16170    unsafe impl fidl::encoding::TypeMarker for FormatDetails {
16171        type Owned = Self;
16172
16173        #[inline(always)]
16174        fn inline_align(_context: fidl::encoding::Context) -> usize {
16175            8
16176        }
16177
16178        #[inline(always)]
16179        fn inline_size(_context: fidl::encoding::Context) -> usize {
16180            16
16181        }
16182    }
16183
16184    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FormatDetails, D>
16185        for &FormatDetails
16186    {
16187        unsafe fn encode(
16188            self,
16189            encoder: &mut fidl::encoding::Encoder<'_, D>,
16190            offset: usize,
16191            mut depth: fidl::encoding::Depth,
16192        ) -> fidl::Result<()> {
16193            encoder.debug_check_bounds::<FormatDetails>(offset);
16194            // Vector header
16195            let max_ordinal: u64 = self.max_ordinal_present();
16196            encoder.write_num(max_ordinal, offset);
16197            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16198            // Calling encoder.out_of_line_offset(0) is not allowed.
16199            if max_ordinal == 0 {
16200                return Ok(());
16201            }
16202            depth.increment()?;
16203            let envelope_size = 8;
16204            let bytes_len = max_ordinal as usize * envelope_size;
16205            #[allow(unused_variables)]
16206            let offset = encoder.out_of_line_offset(bytes_len);
16207            let mut _prev_end_offset: usize = 0;
16208            if 1 > max_ordinal {
16209                return Ok(());
16210            }
16211
16212            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16213            // are envelope_size bytes.
16214            let cur_offset: usize = (1 - 1) * envelope_size;
16215
16216            // Zero reserved fields.
16217            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16218
16219            // Safety:
16220            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16221            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16222            //   envelope_size bytes, there is always sufficient room.
16223            fidl::encoding::encode_in_envelope_optional::<u64, D>(
16224                self.format_details_version_ordinal
16225                    .as_ref()
16226                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
16227                encoder,
16228                offset + cur_offset,
16229                depth,
16230            )?;
16231
16232            _prev_end_offset = cur_offset + envelope_size;
16233            if 2 > max_ordinal {
16234                return Ok(());
16235            }
16236
16237            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16238            // are envelope_size bytes.
16239            let cur_offset: usize = (2 - 1) * envelope_size;
16240
16241            // Zero reserved fields.
16242            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16243
16244            // Safety:
16245            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16246            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16247            //   envelope_size bytes, there is always sufficient room.
16248            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
16249                self.mime_type.as_ref().map(
16250                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
16251                ),
16252                encoder,
16253                offset + cur_offset,
16254                depth,
16255            )?;
16256
16257            _prev_end_offset = cur_offset + envelope_size;
16258            if 3 > max_ordinal {
16259                return Ok(());
16260            }
16261
16262            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16263            // are envelope_size bytes.
16264            let cur_offset: usize = (3 - 1) * envelope_size;
16265
16266            // Zero reserved fields.
16267            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16268
16269            // Safety:
16270            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16271            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16272            //   envelope_size bytes, there is always sufficient room.
16273            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
16274            self.oob_bytes.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
16275            encoder, offset + cur_offset, depth
16276        )?;
16277
16278            _prev_end_offset = cur_offset + envelope_size;
16279            if 4 > max_ordinal {
16280                return Ok(());
16281            }
16282
16283            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16284            // are envelope_size bytes.
16285            let cur_offset: usize = (4 - 1) * envelope_size;
16286
16287            // Zero reserved fields.
16288            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16289
16290            // Safety:
16291            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16292            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16293            //   envelope_size bytes, there is always sufficient room.
16294            fidl::encoding::encode_in_envelope_optional::<DomainFormat, D>(
16295                self.domain.as_ref().map(<DomainFormat as fidl::encoding::ValueTypeMarker>::borrow),
16296                encoder,
16297                offset + cur_offset,
16298                depth,
16299            )?;
16300
16301            _prev_end_offset = cur_offset + envelope_size;
16302            if 5 > max_ordinal {
16303                return Ok(());
16304            }
16305
16306            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16307            // are envelope_size bytes.
16308            let cur_offset: usize = (5 - 1) * envelope_size;
16309
16310            // Zero reserved fields.
16311            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16312
16313            // Safety:
16314            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16315            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16316            //   envelope_size bytes, there is always sufficient room.
16317            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Parameter>, D>(
16318            self.pass_through_parameters.as_ref().map(<fidl::encoding::UnboundedVector<Parameter> as fidl::encoding::ValueTypeMarker>::borrow),
16319            encoder, offset + cur_offset, depth
16320        )?;
16321
16322            _prev_end_offset = cur_offset + envelope_size;
16323            if 6 > max_ordinal {
16324                return Ok(());
16325            }
16326
16327            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16328            // are envelope_size bytes.
16329            let cur_offset: usize = (6 - 1) * envelope_size;
16330
16331            // Zero reserved fields.
16332            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16333
16334            // Safety:
16335            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16336            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16337            //   envelope_size bytes, there is always sufficient room.
16338            fidl::encoding::encode_in_envelope_optional::<EncoderSettings, D>(
16339                self.encoder_settings
16340                    .as_ref()
16341                    .map(<EncoderSettings as fidl::encoding::ValueTypeMarker>::borrow),
16342                encoder,
16343                offset + cur_offset,
16344                depth,
16345            )?;
16346
16347            _prev_end_offset = cur_offset + envelope_size;
16348            if 7 > max_ordinal {
16349                return Ok(());
16350            }
16351
16352            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16353            // are envelope_size bytes.
16354            let cur_offset: usize = (7 - 1) * envelope_size;
16355
16356            // Zero reserved fields.
16357            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16358
16359            // Safety:
16360            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16361            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16362            //   envelope_size bytes, there is always sufficient room.
16363            fidl::encoding::encode_in_envelope_optional::<u64, D>(
16364                self.timebase.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
16365                encoder,
16366                offset + cur_offset,
16367                depth,
16368            )?;
16369
16370            _prev_end_offset = cur_offset + envelope_size;
16371            if 8 > max_ordinal {
16372                return Ok(());
16373            }
16374
16375            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16376            // are envelope_size bytes.
16377            let cur_offset: usize = (8 - 1) * envelope_size;
16378
16379            // Zero reserved fields.
16380            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16381
16382            // Safety:
16383            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16384            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16385            //   envelope_size bytes, there is always sufficient room.
16386            fidl::encoding::encode_in_envelope_optional::<CodecProfile, D>(
16387                self.profile
16388                    .as_ref()
16389                    .map(<CodecProfile as fidl::encoding::ValueTypeMarker>::borrow),
16390                encoder,
16391                offset + cur_offset,
16392                depth,
16393            )?;
16394
16395            _prev_end_offset = cur_offset + envelope_size;
16396
16397            Ok(())
16398        }
16399    }
16400
16401    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FormatDetails {
16402        #[inline(always)]
16403        fn new_empty() -> Self {
16404            Self::default()
16405        }
16406
16407        unsafe fn decode(
16408            &mut self,
16409            decoder: &mut fidl::encoding::Decoder<'_, D>,
16410            offset: usize,
16411            mut depth: fidl::encoding::Depth,
16412        ) -> fidl::Result<()> {
16413            decoder.debug_check_bounds::<Self>(offset);
16414            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
16415                None => return Err(fidl::Error::NotNullable),
16416                Some(len) => len,
16417            };
16418            // Calling decoder.out_of_line_offset(0) is not allowed.
16419            if len == 0 {
16420                return Ok(());
16421            };
16422            depth.increment()?;
16423            let envelope_size = 8;
16424            let bytes_len = len * envelope_size;
16425            let offset = decoder.out_of_line_offset(bytes_len)?;
16426            // Decode the envelope for each type.
16427            let mut _next_ordinal_to_read = 0;
16428            let mut next_offset = offset;
16429            let end_offset = offset + bytes_len;
16430            _next_ordinal_to_read += 1;
16431            if next_offset >= end_offset {
16432                return Ok(());
16433            }
16434
16435            // Decode unknown envelopes for gaps in ordinals.
16436            while _next_ordinal_to_read < 1 {
16437                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16438                _next_ordinal_to_read += 1;
16439                next_offset += envelope_size;
16440            }
16441
16442            let next_out_of_line = decoder.next_out_of_line();
16443            let handles_before = decoder.remaining_handles();
16444            if let Some((inlined, num_bytes, num_handles)) =
16445                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16446            {
16447                let member_inline_size =
16448                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16449                if inlined != (member_inline_size <= 4) {
16450                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16451                }
16452                let inner_offset;
16453                let mut inner_depth = depth.clone();
16454                if inlined {
16455                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16456                    inner_offset = next_offset;
16457                } else {
16458                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16459                    inner_depth.increment()?;
16460                }
16461                let val_ref = self
16462                    .format_details_version_ordinal
16463                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
16464                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
16465                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16466                {
16467                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16468                }
16469                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16470                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16471                }
16472            }
16473
16474            next_offset += envelope_size;
16475            _next_ordinal_to_read += 1;
16476            if next_offset >= end_offset {
16477                return Ok(());
16478            }
16479
16480            // Decode unknown envelopes for gaps in ordinals.
16481            while _next_ordinal_to_read < 2 {
16482                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16483                _next_ordinal_to_read += 1;
16484                next_offset += envelope_size;
16485            }
16486
16487            let next_out_of_line = decoder.next_out_of_line();
16488            let handles_before = decoder.remaining_handles();
16489            if let Some((inlined, num_bytes, num_handles)) =
16490                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16491            {
16492                let member_inline_size =
16493                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
16494                        decoder.context,
16495                    );
16496                if inlined != (member_inline_size <= 4) {
16497                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16498                }
16499                let inner_offset;
16500                let mut inner_depth = depth.clone();
16501                if inlined {
16502                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16503                    inner_offset = next_offset;
16504                } else {
16505                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16506                    inner_depth.increment()?;
16507                }
16508                let val_ref = self
16509                    .mime_type
16510                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
16511                fidl::decode!(
16512                    fidl::encoding::UnboundedString,
16513                    D,
16514                    val_ref,
16515                    decoder,
16516                    inner_offset,
16517                    inner_depth
16518                )?;
16519                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16520                {
16521                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16522                }
16523                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16524                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16525                }
16526            }
16527
16528            next_offset += envelope_size;
16529            _next_ordinal_to_read += 1;
16530            if next_offset >= end_offset {
16531                return Ok(());
16532            }
16533
16534            // Decode unknown envelopes for gaps in ordinals.
16535            while _next_ordinal_to_read < 3 {
16536                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16537                _next_ordinal_to_read += 1;
16538                next_offset += envelope_size;
16539            }
16540
16541            let next_out_of_line = decoder.next_out_of_line();
16542            let handles_before = decoder.remaining_handles();
16543            if let Some((inlined, num_bytes, num_handles)) =
16544                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16545            {
16546                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16547                if inlined != (member_inline_size <= 4) {
16548                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16549                }
16550                let inner_offset;
16551                let mut inner_depth = depth.clone();
16552                if inlined {
16553                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16554                    inner_offset = next_offset;
16555                } else {
16556                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16557                    inner_depth.increment()?;
16558                }
16559                let val_ref = self.oob_bytes.get_or_insert_with(|| {
16560                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
16561                });
16562                fidl::decode!(
16563                    fidl::encoding::UnboundedVector<u8>,
16564                    D,
16565                    val_ref,
16566                    decoder,
16567                    inner_offset,
16568                    inner_depth
16569                )?;
16570                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16571                {
16572                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16573                }
16574                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16575                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16576                }
16577            }
16578
16579            next_offset += envelope_size;
16580            _next_ordinal_to_read += 1;
16581            if next_offset >= end_offset {
16582                return Ok(());
16583            }
16584
16585            // Decode unknown envelopes for gaps in ordinals.
16586            while _next_ordinal_to_read < 4 {
16587                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16588                _next_ordinal_to_read += 1;
16589                next_offset += envelope_size;
16590            }
16591
16592            let next_out_of_line = decoder.next_out_of_line();
16593            let handles_before = decoder.remaining_handles();
16594            if let Some((inlined, num_bytes, num_handles)) =
16595                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16596            {
16597                let member_inline_size =
16598                    <DomainFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16599                if inlined != (member_inline_size <= 4) {
16600                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16601                }
16602                let inner_offset;
16603                let mut inner_depth = depth.clone();
16604                if inlined {
16605                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16606                    inner_offset = next_offset;
16607                } else {
16608                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16609                    inner_depth.increment()?;
16610                }
16611                let val_ref = self.domain.get_or_insert_with(|| fidl::new_empty!(DomainFormat, D));
16612                fidl::decode!(DomainFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
16613                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16614                {
16615                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16616                }
16617                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16618                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16619                }
16620            }
16621
16622            next_offset += envelope_size;
16623            _next_ordinal_to_read += 1;
16624            if next_offset >= end_offset {
16625                return Ok(());
16626            }
16627
16628            // Decode unknown envelopes for gaps in ordinals.
16629            while _next_ordinal_to_read < 5 {
16630                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16631                _next_ordinal_to_read += 1;
16632                next_offset += envelope_size;
16633            }
16634
16635            let next_out_of_line = decoder.next_out_of_line();
16636            let handles_before = decoder.remaining_handles();
16637            if let Some((inlined, num_bytes, num_handles)) =
16638                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16639            {
16640                let member_inline_size = <fidl::encoding::UnboundedVector<Parameter> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16641                if inlined != (member_inline_size <= 4) {
16642                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16643                }
16644                let inner_offset;
16645                let mut inner_depth = depth.clone();
16646                if inlined {
16647                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16648                    inner_offset = next_offset;
16649                } else {
16650                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16651                    inner_depth.increment()?;
16652                }
16653                let val_ref = self.pass_through_parameters.get_or_insert_with(|| {
16654                    fidl::new_empty!(fidl::encoding::UnboundedVector<Parameter>, D)
16655                });
16656                fidl::decode!(
16657                    fidl::encoding::UnboundedVector<Parameter>,
16658                    D,
16659                    val_ref,
16660                    decoder,
16661                    inner_offset,
16662                    inner_depth
16663                )?;
16664                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16665                {
16666                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16667                }
16668                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16669                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16670                }
16671            }
16672
16673            next_offset += envelope_size;
16674            _next_ordinal_to_read += 1;
16675            if next_offset >= end_offset {
16676                return Ok(());
16677            }
16678
16679            // Decode unknown envelopes for gaps in ordinals.
16680            while _next_ordinal_to_read < 6 {
16681                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16682                _next_ordinal_to_read += 1;
16683                next_offset += envelope_size;
16684            }
16685
16686            let next_out_of_line = decoder.next_out_of_line();
16687            let handles_before = decoder.remaining_handles();
16688            if let Some((inlined, num_bytes, num_handles)) =
16689                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16690            {
16691                let member_inline_size =
16692                    <EncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16693                if inlined != (member_inline_size <= 4) {
16694                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16695                }
16696                let inner_offset;
16697                let mut inner_depth = depth.clone();
16698                if inlined {
16699                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16700                    inner_offset = next_offset;
16701                } else {
16702                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16703                    inner_depth.increment()?;
16704                }
16705                let val_ref = self
16706                    .encoder_settings
16707                    .get_or_insert_with(|| fidl::new_empty!(EncoderSettings, D));
16708                fidl::decode!(EncoderSettings, D, val_ref, decoder, inner_offset, inner_depth)?;
16709                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16710                {
16711                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16712                }
16713                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16714                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16715                }
16716            }
16717
16718            next_offset += envelope_size;
16719            _next_ordinal_to_read += 1;
16720            if next_offset >= end_offset {
16721                return Ok(());
16722            }
16723
16724            // Decode unknown envelopes for gaps in ordinals.
16725            while _next_ordinal_to_read < 7 {
16726                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16727                _next_ordinal_to_read += 1;
16728                next_offset += envelope_size;
16729            }
16730
16731            let next_out_of_line = decoder.next_out_of_line();
16732            let handles_before = decoder.remaining_handles();
16733            if let Some((inlined, num_bytes, num_handles)) =
16734                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16735            {
16736                let member_inline_size =
16737                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16738                if inlined != (member_inline_size <= 4) {
16739                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16740                }
16741                let inner_offset;
16742                let mut inner_depth = depth.clone();
16743                if inlined {
16744                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16745                    inner_offset = next_offset;
16746                } else {
16747                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16748                    inner_depth.increment()?;
16749                }
16750                let val_ref = self.timebase.get_or_insert_with(|| fidl::new_empty!(u64, D));
16751                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
16752                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16753                {
16754                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16755                }
16756                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16757                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16758                }
16759            }
16760
16761            next_offset += envelope_size;
16762            _next_ordinal_to_read += 1;
16763            if next_offset >= end_offset {
16764                return Ok(());
16765            }
16766
16767            // Decode unknown envelopes for gaps in ordinals.
16768            while _next_ordinal_to_read < 8 {
16769                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16770                _next_ordinal_to_read += 1;
16771                next_offset += envelope_size;
16772            }
16773
16774            let next_out_of_line = decoder.next_out_of_line();
16775            let handles_before = decoder.remaining_handles();
16776            if let Some((inlined, num_bytes, num_handles)) =
16777                fidl::encoding::decode_envelope_header(decoder, next_offset)?
16778            {
16779                let member_inline_size =
16780                    <CodecProfile as fidl::encoding::TypeMarker>::inline_size(decoder.context);
16781                if inlined != (member_inline_size <= 4) {
16782                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
16783                }
16784                let inner_offset;
16785                let mut inner_depth = depth.clone();
16786                if inlined {
16787                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
16788                    inner_offset = next_offset;
16789                } else {
16790                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16791                    inner_depth.increment()?;
16792                }
16793                let val_ref = self.profile.get_or_insert_with(|| fidl::new_empty!(CodecProfile, D));
16794                fidl::decode!(CodecProfile, D, val_ref, decoder, inner_offset, inner_depth)?;
16795                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
16796                {
16797                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
16798                }
16799                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16800                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16801                }
16802            }
16803
16804            next_offset += envelope_size;
16805
16806            // Decode the remaining unknown envelopes.
16807            while next_offset < end_offset {
16808                _next_ordinal_to_read += 1;
16809                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
16810                next_offset += envelope_size;
16811            }
16812
16813            Ok(())
16814        }
16815    }
16816
16817    impl H264EncoderSettings {
16818        #[inline(always)]
16819        fn max_ordinal_present(&self) -> u64 {
16820            if let Some(_) = self.quantization_params {
16821                return 7;
16822            }
16823            if let Some(_) = self.force_key_frame {
16824                return 6;
16825            }
16826            if let Some(_) = self.min_frame_rate {
16827                return 5;
16828            }
16829            if let Some(_) = self.variable_frame_rate {
16830                return 4;
16831            }
16832            if let Some(_) = self.gop_size {
16833                return 3;
16834            }
16835            if let Some(_) = self.frame_rate {
16836                return 2;
16837            }
16838            if let Some(_) = self.bit_rate {
16839                return 1;
16840            }
16841            0
16842        }
16843    }
16844
16845    impl fidl::encoding::ValueTypeMarker for H264EncoderSettings {
16846        type Borrowed<'a> = &'a Self;
16847        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16848            value
16849        }
16850    }
16851
16852    unsafe impl fidl::encoding::TypeMarker for H264EncoderSettings {
16853        type Owned = Self;
16854
16855        #[inline(always)]
16856        fn inline_align(_context: fidl::encoding::Context) -> usize {
16857            8
16858        }
16859
16860        #[inline(always)]
16861        fn inline_size(_context: fidl::encoding::Context) -> usize {
16862            16
16863        }
16864    }
16865
16866    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<H264EncoderSettings, D>
16867        for &H264EncoderSettings
16868    {
16869        unsafe fn encode(
16870            self,
16871            encoder: &mut fidl::encoding::Encoder<'_, D>,
16872            offset: usize,
16873            mut depth: fidl::encoding::Depth,
16874        ) -> fidl::Result<()> {
16875            encoder.debug_check_bounds::<H264EncoderSettings>(offset);
16876            // Vector header
16877            let max_ordinal: u64 = self.max_ordinal_present();
16878            encoder.write_num(max_ordinal, offset);
16879            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
16880            // Calling encoder.out_of_line_offset(0) is not allowed.
16881            if max_ordinal == 0 {
16882                return Ok(());
16883            }
16884            depth.increment()?;
16885            let envelope_size = 8;
16886            let bytes_len = max_ordinal as usize * envelope_size;
16887            #[allow(unused_variables)]
16888            let offset = encoder.out_of_line_offset(bytes_len);
16889            let mut _prev_end_offset: usize = 0;
16890            if 1 > max_ordinal {
16891                return Ok(());
16892            }
16893
16894            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16895            // are envelope_size bytes.
16896            let cur_offset: usize = (1 - 1) * envelope_size;
16897
16898            // Zero reserved fields.
16899            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16900
16901            // Safety:
16902            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16903            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16904            //   envelope_size bytes, there is always sufficient room.
16905            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16906                self.bit_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16907                encoder,
16908                offset + cur_offset,
16909                depth,
16910            )?;
16911
16912            _prev_end_offset = cur_offset + envelope_size;
16913            if 2 > max_ordinal {
16914                return Ok(());
16915            }
16916
16917            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16918            // are envelope_size bytes.
16919            let cur_offset: usize = (2 - 1) * envelope_size;
16920
16921            // Zero reserved fields.
16922            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16923
16924            // Safety:
16925            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16926            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16927            //   envelope_size bytes, there is always sufficient room.
16928            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16929                self.frame_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16930                encoder,
16931                offset + cur_offset,
16932                depth,
16933            )?;
16934
16935            _prev_end_offset = cur_offset + envelope_size;
16936            if 3 > max_ordinal {
16937                return Ok(());
16938            }
16939
16940            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16941            // are envelope_size bytes.
16942            let cur_offset: usize = (3 - 1) * envelope_size;
16943
16944            // Zero reserved fields.
16945            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16946
16947            // Safety:
16948            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16949            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16950            //   envelope_size bytes, there is always sufficient room.
16951            fidl::encoding::encode_in_envelope_optional::<u32, D>(
16952                self.gop_size.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
16953                encoder,
16954                offset + cur_offset,
16955                depth,
16956            )?;
16957
16958            _prev_end_offset = cur_offset + envelope_size;
16959            if 4 > max_ordinal {
16960                return Ok(());
16961            }
16962
16963            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16964            // are envelope_size bytes.
16965            let cur_offset: usize = (4 - 1) * envelope_size;
16966
16967            // Zero reserved fields.
16968            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16969
16970            // Safety:
16971            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16972            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16973            //   envelope_size bytes, there is always sufficient room.
16974            fidl::encoding::encode_in_envelope_optional::<bool, D>(
16975                self.variable_frame_rate
16976                    .as_ref()
16977                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
16978                encoder,
16979                offset + cur_offset,
16980                depth,
16981            )?;
16982
16983            _prev_end_offset = cur_offset + envelope_size;
16984            if 5 > max_ordinal {
16985                return Ok(());
16986            }
16987
16988            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
16989            // are envelope_size bytes.
16990            let cur_offset: usize = (5 - 1) * envelope_size;
16991
16992            // Zero reserved fields.
16993            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
16994
16995            // Safety:
16996            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
16997            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
16998            //   envelope_size bytes, there is always sufficient room.
16999            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17000                self.min_frame_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17001                encoder,
17002                offset + cur_offset,
17003                depth,
17004            )?;
17005
17006            _prev_end_offset = cur_offset + envelope_size;
17007            if 6 > max_ordinal {
17008                return Ok(());
17009            }
17010
17011            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17012            // are envelope_size bytes.
17013            let cur_offset: usize = (6 - 1) * envelope_size;
17014
17015            // Zero reserved fields.
17016            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17017
17018            // Safety:
17019            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17020            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17021            //   envelope_size bytes, there is always sufficient room.
17022            fidl::encoding::encode_in_envelope_optional::<bool, D>(
17023                self.force_key_frame
17024                    .as_ref()
17025                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
17026                encoder,
17027                offset + cur_offset,
17028                depth,
17029            )?;
17030
17031            _prev_end_offset = cur_offset + envelope_size;
17032            if 7 > max_ordinal {
17033                return Ok(());
17034            }
17035
17036            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17037            // are envelope_size bytes.
17038            let cur_offset: usize = (7 - 1) * envelope_size;
17039
17040            // Zero reserved fields.
17041            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17042
17043            // Safety:
17044            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17045            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17046            //   envelope_size bytes, there is always sufficient room.
17047            fidl::encoding::encode_in_envelope_optional::<H264QuantizationParameters, D>(
17048                self.quantization_params
17049                    .as_ref()
17050                    .map(<H264QuantizationParameters as fidl::encoding::ValueTypeMarker>::borrow),
17051                encoder,
17052                offset + cur_offset,
17053                depth,
17054            )?;
17055
17056            _prev_end_offset = cur_offset + envelope_size;
17057
17058            Ok(())
17059        }
17060    }
17061
17062    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for H264EncoderSettings {
17063        #[inline(always)]
17064        fn new_empty() -> Self {
17065            Self::default()
17066        }
17067
17068        unsafe fn decode(
17069            &mut self,
17070            decoder: &mut fidl::encoding::Decoder<'_, D>,
17071            offset: usize,
17072            mut depth: fidl::encoding::Depth,
17073        ) -> fidl::Result<()> {
17074            decoder.debug_check_bounds::<Self>(offset);
17075            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17076                None => return Err(fidl::Error::NotNullable),
17077                Some(len) => len,
17078            };
17079            // Calling decoder.out_of_line_offset(0) is not allowed.
17080            if len == 0 {
17081                return Ok(());
17082            };
17083            depth.increment()?;
17084            let envelope_size = 8;
17085            let bytes_len = len * envelope_size;
17086            let offset = decoder.out_of_line_offset(bytes_len)?;
17087            // Decode the envelope for each type.
17088            let mut _next_ordinal_to_read = 0;
17089            let mut next_offset = offset;
17090            let end_offset = offset + bytes_len;
17091            _next_ordinal_to_read += 1;
17092            if next_offset >= end_offset {
17093                return Ok(());
17094            }
17095
17096            // Decode unknown envelopes for gaps in ordinals.
17097            while _next_ordinal_to_read < 1 {
17098                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17099                _next_ordinal_to_read += 1;
17100                next_offset += envelope_size;
17101            }
17102
17103            let next_out_of_line = decoder.next_out_of_line();
17104            let handles_before = decoder.remaining_handles();
17105            if let Some((inlined, num_bytes, num_handles)) =
17106                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17107            {
17108                let member_inline_size =
17109                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17110                if inlined != (member_inline_size <= 4) {
17111                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17112                }
17113                let inner_offset;
17114                let mut inner_depth = depth.clone();
17115                if inlined {
17116                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17117                    inner_offset = next_offset;
17118                } else {
17119                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17120                    inner_depth.increment()?;
17121                }
17122                let val_ref = self.bit_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
17123                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17124                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17125                {
17126                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17127                }
17128                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17129                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17130                }
17131            }
17132
17133            next_offset += envelope_size;
17134            _next_ordinal_to_read += 1;
17135            if next_offset >= end_offset {
17136                return Ok(());
17137            }
17138
17139            // Decode unknown envelopes for gaps in ordinals.
17140            while _next_ordinal_to_read < 2 {
17141                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17142                _next_ordinal_to_read += 1;
17143                next_offset += envelope_size;
17144            }
17145
17146            let next_out_of_line = decoder.next_out_of_line();
17147            let handles_before = decoder.remaining_handles();
17148            if let Some((inlined, num_bytes, num_handles)) =
17149                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17150            {
17151                let member_inline_size =
17152                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17153                if inlined != (member_inline_size <= 4) {
17154                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17155                }
17156                let inner_offset;
17157                let mut inner_depth = depth.clone();
17158                if inlined {
17159                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17160                    inner_offset = next_offset;
17161                } else {
17162                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17163                    inner_depth.increment()?;
17164                }
17165                let val_ref = self.frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
17166                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17167                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17168                {
17169                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17170                }
17171                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17172                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17173                }
17174            }
17175
17176            next_offset += envelope_size;
17177            _next_ordinal_to_read += 1;
17178            if next_offset >= end_offset {
17179                return Ok(());
17180            }
17181
17182            // Decode unknown envelopes for gaps in ordinals.
17183            while _next_ordinal_to_read < 3 {
17184                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17185                _next_ordinal_to_read += 1;
17186                next_offset += envelope_size;
17187            }
17188
17189            let next_out_of_line = decoder.next_out_of_line();
17190            let handles_before = decoder.remaining_handles();
17191            if let Some((inlined, num_bytes, num_handles)) =
17192                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17193            {
17194                let member_inline_size =
17195                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17196                if inlined != (member_inline_size <= 4) {
17197                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17198                }
17199                let inner_offset;
17200                let mut inner_depth = depth.clone();
17201                if inlined {
17202                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17203                    inner_offset = next_offset;
17204                } else {
17205                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17206                    inner_depth.increment()?;
17207                }
17208                let val_ref = self.gop_size.get_or_insert_with(|| fidl::new_empty!(u32, D));
17209                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17210                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17211                {
17212                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17213                }
17214                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17215                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17216                }
17217            }
17218
17219            next_offset += envelope_size;
17220            _next_ordinal_to_read += 1;
17221            if next_offset >= end_offset {
17222                return Ok(());
17223            }
17224
17225            // Decode unknown envelopes for gaps in ordinals.
17226            while _next_ordinal_to_read < 4 {
17227                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17228                _next_ordinal_to_read += 1;
17229                next_offset += envelope_size;
17230            }
17231
17232            let next_out_of_line = decoder.next_out_of_line();
17233            let handles_before = decoder.remaining_handles();
17234            if let Some((inlined, num_bytes, num_handles)) =
17235                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17236            {
17237                let member_inline_size =
17238                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17239                if inlined != (member_inline_size <= 4) {
17240                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17241                }
17242                let inner_offset;
17243                let mut inner_depth = depth.clone();
17244                if inlined {
17245                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17246                    inner_offset = next_offset;
17247                } else {
17248                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17249                    inner_depth.increment()?;
17250                }
17251                let val_ref =
17252                    self.variable_frame_rate.get_or_insert_with(|| fidl::new_empty!(bool, D));
17253                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
17254                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17255                {
17256                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17257                }
17258                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17259                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17260                }
17261            }
17262
17263            next_offset += envelope_size;
17264            _next_ordinal_to_read += 1;
17265            if next_offset >= end_offset {
17266                return Ok(());
17267            }
17268
17269            // Decode unknown envelopes for gaps in ordinals.
17270            while _next_ordinal_to_read < 5 {
17271                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17272                _next_ordinal_to_read += 1;
17273                next_offset += envelope_size;
17274            }
17275
17276            let next_out_of_line = decoder.next_out_of_line();
17277            let handles_before = decoder.remaining_handles();
17278            if let Some((inlined, num_bytes, num_handles)) =
17279                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17280            {
17281                let member_inline_size =
17282                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17283                if inlined != (member_inline_size <= 4) {
17284                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17285                }
17286                let inner_offset;
17287                let mut inner_depth = depth.clone();
17288                if inlined {
17289                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17290                    inner_offset = next_offset;
17291                } else {
17292                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17293                    inner_depth.increment()?;
17294                }
17295                let val_ref = self.min_frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
17296                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17297                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17298                {
17299                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17300                }
17301                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17302                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17303                }
17304            }
17305
17306            next_offset += envelope_size;
17307            _next_ordinal_to_read += 1;
17308            if next_offset >= end_offset {
17309                return Ok(());
17310            }
17311
17312            // Decode unknown envelopes for gaps in ordinals.
17313            while _next_ordinal_to_read < 6 {
17314                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17315                _next_ordinal_to_read += 1;
17316                next_offset += envelope_size;
17317            }
17318
17319            let next_out_of_line = decoder.next_out_of_line();
17320            let handles_before = decoder.remaining_handles();
17321            if let Some((inlined, num_bytes, num_handles)) =
17322                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17323            {
17324                let member_inline_size =
17325                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17326                if inlined != (member_inline_size <= 4) {
17327                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17328                }
17329                let inner_offset;
17330                let mut inner_depth = depth.clone();
17331                if inlined {
17332                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17333                    inner_offset = next_offset;
17334                } else {
17335                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17336                    inner_depth.increment()?;
17337                }
17338                let val_ref = self.force_key_frame.get_or_insert_with(|| fidl::new_empty!(bool, D));
17339                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
17340                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17341                {
17342                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17343                }
17344                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17345                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17346                }
17347            }
17348
17349            next_offset += envelope_size;
17350            _next_ordinal_to_read += 1;
17351            if next_offset >= end_offset {
17352                return Ok(());
17353            }
17354
17355            // Decode unknown envelopes for gaps in ordinals.
17356            while _next_ordinal_to_read < 7 {
17357                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17358                _next_ordinal_to_read += 1;
17359                next_offset += envelope_size;
17360            }
17361
17362            let next_out_of_line = decoder.next_out_of_line();
17363            let handles_before = decoder.remaining_handles();
17364            if let Some((inlined, num_bytes, num_handles)) =
17365                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17366            {
17367                let member_inline_size =
17368                    <H264QuantizationParameters as fidl::encoding::TypeMarker>::inline_size(
17369                        decoder.context,
17370                    );
17371                if inlined != (member_inline_size <= 4) {
17372                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17373                }
17374                let inner_offset;
17375                let mut inner_depth = depth.clone();
17376                if inlined {
17377                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17378                    inner_offset = next_offset;
17379                } else {
17380                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17381                    inner_depth.increment()?;
17382                }
17383                let val_ref = self
17384                    .quantization_params
17385                    .get_or_insert_with(|| fidl::new_empty!(H264QuantizationParameters, D));
17386                fidl::decode!(
17387                    H264QuantizationParameters,
17388                    D,
17389                    val_ref,
17390                    decoder,
17391                    inner_offset,
17392                    inner_depth
17393                )?;
17394                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17395                {
17396                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17397                }
17398                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17399                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17400                }
17401            }
17402
17403            next_offset += envelope_size;
17404
17405            // Decode the remaining unknown envelopes.
17406            while next_offset < end_offset {
17407                _next_ordinal_to_read += 1;
17408                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17409                next_offset += envelope_size;
17410            }
17411
17412            Ok(())
17413        }
17414    }
17415
17416    impl H264QuantizationParameters {
17417        #[inline(always)]
17418        fn max_ordinal_present(&self) -> u64 {
17419            if let Some(_) = self.p_max {
17420                return 6;
17421            }
17422            if let Some(_) = self.p_min {
17423                return 5;
17424            }
17425            if let Some(_) = self.p_base {
17426                return 4;
17427            }
17428            if let Some(_) = self.i_max {
17429                return 3;
17430            }
17431            if let Some(_) = self.i_min {
17432                return 2;
17433            }
17434            if let Some(_) = self.i_base {
17435                return 1;
17436            }
17437            0
17438        }
17439    }
17440
17441    impl fidl::encoding::ValueTypeMarker for H264QuantizationParameters {
17442        type Borrowed<'a> = &'a Self;
17443        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17444            value
17445        }
17446    }
17447
17448    unsafe impl fidl::encoding::TypeMarker for H264QuantizationParameters {
17449        type Owned = Self;
17450
17451        #[inline(always)]
17452        fn inline_align(_context: fidl::encoding::Context) -> usize {
17453            8
17454        }
17455
17456        #[inline(always)]
17457        fn inline_size(_context: fidl::encoding::Context) -> usize {
17458            16
17459        }
17460    }
17461
17462    unsafe impl<D: fidl::encoding::ResourceDialect>
17463        fidl::encoding::Encode<H264QuantizationParameters, D> for &H264QuantizationParameters
17464    {
17465        unsafe fn encode(
17466            self,
17467            encoder: &mut fidl::encoding::Encoder<'_, D>,
17468            offset: usize,
17469            mut depth: fidl::encoding::Depth,
17470        ) -> fidl::Result<()> {
17471            encoder.debug_check_bounds::<H264QuantizationParameters>(offset);
17472            // Vector header
17473            let max_ordinal: u64 = self.max_ordinal_present();
17474            encoder.write_num(max_ordinal, offset);
17475            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17476            // Calling encoder.out_of_line_offset(0) is not allowed.
17477            if max_ordinal == 0 {
17478                return Ok(());
17479            }
17480            depth.increment()?;
17481            let envelope_size = 8;
17482            let bytes_len = max_ordinal as usize * envelope_size;
17483            #[allow(unused_variables)]
17484            let offset = encoder.out_of_line_offset(bytes_len);
17485            let mut _prev_end_offset: usize = 0;
17486            if 1 > max_ordinal {
17487                return Ok(());
17488            }
17489
17490            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17491            // are envelope_size bytes.
17492            let cur_offset: usize = (1 - 1) * envelope_size;
17493
17494            // Zero reserved fields.
17495            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17496
17497            // Safety:
17498            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17499            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17500            //   envelope_size bytes, there is always sufficient room.
17501            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17502                self.i_base.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17503                encoder,
17504                offset + cur_offset,
17505                depth,
17506            )?;
17507
17508            _prev_end_offset = cur_offset + envelope_size;
17509            if 2 > max_ordinal {
17510                return Ok(());
17511            }
17512
17513            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17514            // are envelope_size bytes.
17515            let cur_offset: usize = (2 - 1) * envelope_size;
17516
17517            // Zero reserved fields.
17518            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17519
17520            // Safety:
17521            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17522            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17523            //   envelope_size bytes, there is always sufficient room.
17524            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17525                self.i_min.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17526                encoder,
17527                offset + cur_offset,
17528                depth,
17529            )?;
17530
17531            _prev_end_offset = cur_offset + envelope_size;
17532            if 3 > max_ordinal {
17533                return Ok(());
17534            }
17535
17536            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17537            // are envelope_size bytes.
17538            let cur_offset: usize = (3 - 1) * envelope_size;
17539
17540            // Zero reserved fields.
17541            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17542
17543            // Safety:
17544            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17545            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17546            //   envelope_size bytes, there is always sufficient room.
17547            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17548                self.i_max.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17549                encoder,
17550                offset + cur_offset,
17551                depth,
17552            )?;
17553
17554            _prev_end_offset = cur_offset + envelope_size;
17555            if 4 > max_ordinal {
17556                return Ok(());
17557            }
17558
17559            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17560            // are envelope_size bytes.
17561            let cur_offset: usize = (4 - 1) * envelope_size;
17562
17563            // Zero reserved fields.
17564            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17565
17566            // Safety:
17567            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17568            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17569            //   envelope_size bytes, there is always sufficient room.
17570            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17571                self.p_base.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17572                encoder,
17573                offset + cur_offset,
17574                depth,
17575            )?;
17576
17577            _prev_end_offset = cur_offset + envelope_size;
17578            if 5 > max_ordinal {
17579                return Ok(());
17580            }
17581
17582            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17583            // are envelope_size bytes.
17584            let cur_offset: usize = (5 - 1) * envelope_size;
17585
17586            // Zero reserved fields.
17587            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17588
17589            // Safety:
17590            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17591            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17592            //   envelope_size bytes, there is always sufficient room.
17593            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17594                self.p_min.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17595                encoder,
17596                offset + cur_offset,
17597                depth,
17598            )?;
17599
17600            _prev_end_offset = cur_offset + envelope_size;
17601            if 6 > max_ordinal {
17602                return Ok(());
17603            }
17604
17605            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17606            // are envelope_size bytes.
17607            let cur_offset: usize = (6 - 1) * envelope_size;
17608
17609            // Zero reserved fields.
17610            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
17611
17612            // Safety:
17613            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
17614            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
17615            //   envelope_size bytes, there is always sufficient room.
17616            fidl::encoding::encode_in_envelope_optional::<u32, D>(
17617                self.p_max.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
17618                encoder,
17619                offset + cur_offset,
17620                depth,
17621            )?;
17622
17623            _prev_end_offset = cur_offset + envelope_size;
17624
17625            Ok(())
17626        }
17627    }
17628
17629    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
17630        for H264QuantizationParameters
17631    {
17632        #[inline(always)]
17633        fn new_empty() -> Self {
17634            Self::default()
17635        }
17636
17637        unsafe fn decode(
17638            &mut self,
17639            decoder: &mut fidl::encoding::Decoder<'_, D>,
17640            offset: usize,
17641            mut depth: fidl::encoding::Depth,
17642        ) -> fidl::Result<()> {
17643            decoder.debug_check_bounds::<Self>(offset);
17644            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
17645                None => return Err(fidl::Error::NotNullable),
17646                Some(len) => len,
17647            };
17648            // Calling decoder.out_of_line_offset(0) is not allowed.
17649            if len == 0 {
17650                return Ok(());
17651            };
17652            depth.increment()?;
17653            let envelope_size = 8;
17654            let bytes_len = len * envelope_size;
17655            let offset = decoder.out_of_line_offset(bytes_len)?;
17656            // Decode the envelope for each type.
17657            let mut _next_ordinal_to_read = 0;
17658            let mut next_offset = offset;
17659            let end_offset = offset + bytes_len;
17660            _next_ordinal_to_read += 1;
17661            if next_offset >= end_offset {
17662                return Ok(());
17663            }
17664
17665            // Decode unknown envelopes for gaps in ordinals.
17666            while _next_ordinal_to_read < 1 {
17667                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17668                _next_ordinal_to_read += 1;
17669                next_offset += envelope_size;
17670            }
17671
17672            let next_out_of_line = decoder.next_out_of_line();
17673            let handles_before = decoder.remaining_handles();
17674            if let Some((inlined, num_bytes, num_handles)) =
17675                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17676            {
17677                let member_inline_size =
17678                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17679                if inlined != (member_inline_size <= 4) {
17680                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17681                }
17682                let inner_offset;
17683                let mut inner_depth = depth.clone();
17684                if inlined {
17685                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17686                    inner_offset = next_offset;
17687                } else {
17688                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17689                    inner_depth.increment()?;
17690                }
17691                let val_ref = self.i_base.get_or_insert_with(|| fidl::new_empty!(u32, D));
17692                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17693                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17694                {
17695                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17696                }
17697                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17698                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17699                }
17700            }
17701
17702            next_offset += envelope_size;
17703            _next_ordinal_to_read += 1;
17704            if next_offset >= end_offset {
17705                return Ok(());
17706            }
17707
17708            // Decode unknown envelopes for gaps in ordinals.
17709            while _next_ordinal_to_read < 2 {
17710                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17711                _next_ordinal_to_read += 1;
17712                next_offset += envelope_size;
17713            }
17714
17715            let next_out_of_line = decoder.next_out_of_line();
17716            let handles_before = decoder.remaining_handles();
17717            if let Some((inlined, num_bytes, num_handles)) =
17718                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17719            {
17720                let member_inline_size =
17721                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17722                if inlined != (member_inline_size <= 4) {
17723                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17724                }
17725                let inner_offset;
17726                let mut inner_depth = depth.clone();
17727                if inlined {
17728                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17729                    inner_offset = next_offset;
17730                } else {
17731                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17732                    inner_depth.increment()?;
17733                }
17734                let val_ref = self.i_min.get_or_insert_with(|| fidl::new_empty!(u32, D));
17735                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17736                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17737                {
17738                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17739                }
17740                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17741                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17742                }
17743            }
17744
17745            next_offset += envelope_size;
17746            _next_ordinal_to_read += 1;
17747            if next_offset >= end_offset {
17748                return Ok(());
17749            }
17750
17751            // Decode unknown envelopes for gaps in ordinals.
17752            while _next_ordinal_to_read < 3 {
17753                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17754                _next_ordinal_to_read += 1;
17755                next_offset += envelope_size;
17756            }
17757
17758            let next_out_of_line = decoder.next_out_of_line();
17759            let handles_before = decoder.remaining_handles();
17760            if let Some((inlined, num_bytes, num_handles)) =
17761                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17762            {
17763                let member_inline_size =
17764                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17765                if inlined != (member_inline_size <= 4) {
17766                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17767                }
17768                let inner_offset;
17769                let mut inner_depth = depth.clone();
17770                if inlined {
17771                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17772                    inner_offset = next_offset;
17773                } else {
17774                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17775                    inner_depth.increment()?;
17776                }
17777                let val_ref = self.i_max.get_or_insert_with(|| fidl::new_empty!(u32, D));
17778                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17779                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17780                {
17781                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17782                }
17783                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17784                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17785                }
17786            }
17787
17788            next_offset += envelope_size;
17789            _next_ordinal_to_read += 1;
17790            if next_offset >= end_offset {
17791                return Ok(());
17792            }
17793
17794            // Decode unknown envelopes for gaps in ordinals.
17795            while _next_ordinal_to_read < 4 {
17796                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17797                _next_ordinal_to_read += 1;
17798                next_offset += envelope_size;
17799            }
17800
17801            let next_out_of_line = decoder.next_out_of_line();
17802            let handles_before = decoder.remaining_handles();
17803            if let Some((inlined, num_bytes, num_handles)) =
17804                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17805            {
17806                let member_inline_size =
17807                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17808                if inlined != (member_inline_size <= 4) {
17809                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17810                }
17811                let inner_offset;
17812                let mut inner_depth = depth.clone();
17813                if inlined {
17814                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17815                    inner_offset = next_offset;
17816                } else {
17817                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17818                    inner_depth.increment()?;
17819                }
17820                let val_ref = self.p_base.get_or_insert_with(|| fidl::new_empty!(u32, D));
17821                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17822                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17823                {
17824                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17825                }
17826                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17827                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17828                }
17829            }
17830
17831            next_offset += envelope_size;
17832            _next_ordinal_to_read += 1;
17833            if next_offset >= end_offset {
17834                return Ok(());
17835            }
17836
17837            // Decode unknown envelopes for gaps in ordinals.
17838            while _next_ordinal_to_read < 5 {
17839                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17840                _next_ordinal_to_read += 1;
17841                next_offset += envelope_size;
17842            }
17843
17844            let next_out_of_line = decoder.next_out_of_line();
17845            let handles_before = decoder.remaining_handles();
17846            if let Some((inlined, num_bytes, num_handles)) =
17847                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17848            {
17849                let member_inline_size =
17850                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17851                if inlined != (member_inline_size <= 4) {
17852                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17853                }
17854                let inner_offset;
17855                let mut inner_depth = depth.clone();
17856                if inlined {
17857                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17858                    inner_offset = next_offset;
17859                } else {
17860                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17861                    inner_depth.increment()?;
17862                }
17863                let val_ref = self.p_min.get_or_insert_with(|| fidl::new_empty!(u32, D));
17864                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17865                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17866                {
17867                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17868                }
17869                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17870                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17871                }
17872            }
17873
17874            next_offset += envelope_size;
17875            _next_ordinal_to_read += 1;
17876            if next_offset >= end_offset {
17877                return Ok(());
17878            }
17879
17880            // Decode unknown envelopes for gaps in ordinals.
17881            while _next_ordinal_to_read < 6 {
17882                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17883                _next_ordinal_to_read += 1;
17884                next_offset += envelope_size;
17885            }
17886
17887            let next_out_of_line = decoder.next_out_of_line();
17888            let handles_before = decoder.remaining_handles();
17889            if let Some((inlined, num_bytes, num_handles)) =
17890                fidl::encoding::decode_envelope_header(decoder, next_offset)?
17891            {
17892                let member_inline_size =
17893                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
17894                if inlined != (member_inline_size <= 4) {
17895                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
17896                }
17897                let inner_offset;
17898                let mut inner_depth = depth.clone();
17899                if inlined {
17900                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
17901                    inner_offset = next_offset;
17902                } else {
17903                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
17904                    inner_depth.increment()?;
17905                }
17906                let val_ref = self.p_max.get_or_insert_with(|| fidl::new_empty!(u32, D));
17907                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
17908                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
17909                {
17910                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
17911                }
17912                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
17913                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
17914                }
17915            }
17916
17917            next_offset += envelope_size;
17918
17919            // Decode the remaining unknown envelopes.
17920            while next_offset < end_offset {
17921                _next_ordinal_to_read += 1;
17922                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
17923                next_offset += envelope_size;
17924            }
17925
17926            Ok(())
17927        }
17928    }
17929
17930    impl HevcEncoderSettings {
17931        #[inline(always)]
17932        fn max_ordinal_present(&self) -> u64 {
17933            if let Some(_) = self.gop_size {
17934                return 3;
17935            }
17936            if let Some(_) = self.frame_rate {
17937                return 2;
17938            }
17939            if let Some(_) = self.bit_rate {
17940                return 1;
17941            }
17942            0
17943        }
17944    }
17945
17946    impl fidl::encoding::ValueTypeMarker for HevcEncoderSettings {
17947        type Borrowed<'a> = &'a Self;
17948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
17949            value
17950        }
17951    }
17952
17953    unsafe impl fidl::encoding::TypeMarker for HevcEncoderSettings {
17954        type Owned = Self;
17955
17956        #[inline(always)]
17957        fn inline_align(_context: fidl::encoding::Context) -> usize {
17958            8
17959        }
17960
17961        #[inline(always)]
17962        fn inline_size(_context: fidl::encoding::Context) -> usize {
17963            16
17964        }
17965    }
17966
17967    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HevcEncoderSettings, D>
17968        for &HevcEncoderSettings
17969    {
17970        unsafe fn encode(
17971            self,
17972            encoder: &mut fidl::encoding::Encoder<'_, D>,
17973            offset: usize,
17974            mut depth: fidl::encoding::Depth,
17975        ) -> fidl::Result<()> {
17976            encoder.debug_check_bounds::<HevcEncoderSettings>(offset);
17977            // Vector header
17978            let max_ordinal: u64 = self.max_ordinal_present();
17979            encoder.write_num(max_ordinal, offset);
17980            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
17981            // Calling encoder.out_of_line_offset(0) is not allowed.
17982            if max_ordinal == 0 {
17983                return Ok(());
17984            }
17985            depth.increment()?;
17986            let envelope_size = 8;
17987            let bytes_len = max_ordinal as usize * envelope_size;
17988            #[allow(unused_variables)]
17989            let offset = encoder.out_of_line_offset(bytes_len);
17990            let mut _prev_end_offset: usize = 0;
17991            if 1 > max_ordinal {
17992                return Ok(());
17993            }
17994
17995            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
17996            // are envelope_size bytes.
17997            let cur_offset: usize = (1 - 1) * envelope_size;
17998
17999            // Zero reserved fields.
18000            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18001
18002            // Safety:
18003            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18004            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18005            //   envelope_size bytes, there is always sufficient room.
18006            fidl::encoding::encode_in_envelope_optional::<u32, D>(
18007                self.bit_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
18008                encoder,
18009                offset + cur_offset,
18010                depth,
18011            )?;
18012
18013            _prev_end_offset = cur_offset + envelope_size;
18014            if 2 > max_ordinal {
18015                return Ok(());
18016            }
18017
18018            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18019            // are envelope_size bytes.
18020            let cur_offset: usize = (2 - 1) * envelope_size;
18021
18022            // Zero reserved fields.
18023            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18024
18025            // Safety:
18026            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18027            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18028            //   envelope_size bytes, there is always sufficient room.
18029            fidl::encoding::encode_in_envelope_optional::<u32, D>(
18030                self.frame_rate.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
18031                encoder,
18032                offset + cur_offset,
18033                depth,
18034            )?;
18035
18036            _prev_end_offset = cur_offset + envelope_size;
18037            if 3 > max_ordinal {
18038                return Ok(());
18039            }
18040
18041            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18042            // are envelope_size bytes.
18043            let cur_offset: usize = (3 - 1) * envelope_size;
18044
18045            // Zero reserved fields.
18046            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18047
18048            // Safety:
18049            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18050            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18051            //   envelope_size bytes, there is always sufficient room.
18052            fidl::encoding::encode_in_envelope_optional::<u32, D>(
18053                self.gop_size.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
18054                encoder,
18055                offset + cur_offset,
18056                depth,
18057            )?;
18058
18059            _prev_end_offset = cur_offset + envelope_size;
18060
18061            Ok(())
18062        }
18063    }
18064
18065    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HevcEncoderSettings {
18066        #[inline(always)]
18067        fn new_empty() -> Self {
18068            Self::default()
18069        }
18070
18071        unsafe fn decode(
18072            &mut self,
18073            decoder: &mut fidl::encoding::Decoder<'_, D>,
18074            offset: usize,
18075            mut depth: fidl::encoding::Depth,
18076        ) -> fidl::Result<()> {
18077            decoder.debug_check_bounds::<Self>(offset);
18078            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18079                None => return Err(fidl::Error::NotNullable),
18080                Some(len) => len,
18081            };
18082            // Calling decoder.out_of_line_offset(0) is not allowed.
18083            if len == 0 {
18084                return Ok(());
18085            };
18086            depth.increment()?;
18087            let envelope_size = 8;
18088            let bytes_len = len * envelope_size;
18089            let offset = decoder.out_of_line_offset(bytes_len)?;
18090            // Decode the envelope for each type.
18091            let mut _next_ordinal_to_read = 0;
18092            let mut next_offset = offset;
18093            let end_offset = offset + bytes_len;
18094            _next_ordinal_to_read += 1;
18095            if next_offset >= end_offset {
18096                return Ok(());
18097            }
18098
18099            // Decode unknown envelopes for gaps in ordinals.
18100            while _next_ordinal_to_read < 1 {
18101                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18102                _next_ordinal_to_read += 1;
18103                next_offset += envelope_size;
18104            }
18105
18106            let next_out_of_line = decoder.next_out_of_line();
18107            let handles_before = decoder.remaining_handles();
18108            if let Some((inlined, num_bytes, num_handles)) =
18109                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18110            {
18111                let member_inline_size =
18112                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18113                if inlined != (member_inline_size <= 4) {
18114                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18115                }
18116                let inner_offset;
18117                let mut inner_depth = depth.clone();
18118                if inlined {
18119                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18120                    inner_offset = next_offset;
18121                } else {
18122                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18123                    inner_depth.increment()?;
18124                }
18125                let val_ref = self.bit_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
18126                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18127                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18128                {
18129                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18130                }
18131                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18132                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18133                }
18134            }
18135
18136            next_offset += envelope_size;
18137            _next_ordinal_to_read += 1;
18138            if next_offset >= end_offset {
18139                return Ok(());
18140            }
18141
18142            // Decode unknown envelopes for gaps in ordinals.
18143            while _next_ordinal_to_read < 2 {
18144                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18145                _next_ordinal_to_read += 1;
18146                next_offset += envelope_size;
18147            }
18148
18149            let next_out_of_line = decoder.next_out_of_line();
18150            let handles_before = decoder.remaining_handles();
18151            if let Some((inlined, num_bytes, num_handles)) =
18152                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18153            {
18154                let member_inline_size =
18155                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18156                if inlined != (member_inline_size <= 4) {
18157                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18158                }
18159                let inner_offset;
18160                let mut inner_depth = depth.clone();
18161                if inlined {
18162                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18163                    inner_offset = next_offset;
18164                } else {
18165                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18166                    inner_depth.increment()?;
18167                }
18168                let val_ref = self.frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
18169                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18170                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18171                {
18172                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18173                }
18174                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18175                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18176                }
18177            }
18178
18179            next_offset += envelope_size;
18180            _next_ordinal_to_read += 1;
18181            if next_offset >= end_offset {
18182                return Ok(());
18183            }
18184
18185            // Decode unknown envelopes for gaps in ordinals.
18186            while _next_ordinal_to_read < 3 {
18187                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18188                _next_ordinal_to_read += 1;
18189                next_offset += envelope_size;
18190            }
18191
18192            let next_out_of_line = decoder.next_out_of_line();
18193            let handles_before = decoder.remaining_handles();
18194            if let Some((inlined, num_bytes, num_handles)) =
18195                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18196            {
18197                let member_inline_size =
18198                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18199                if inlined != (member_inline_size <= 4) {
18200                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18201                }
18202                let inner_offset;
18203                let mut inner_depth = depth.clone();
18204                if inlined {
18205                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18206                    inner_offset = next_offset;
18207                } else {
18208                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18209                    inner_depth.increment()?;
18210                }
18211                let val_ref = self.gop_size.get_or_insert_with(|| fidl::new_empty!(u32, D));
18212                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
18213                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18214                {
18215                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18216                }
18217                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18218                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18219                }
18220            }
18221
18222            next_offset += envelope_size;
18223
18224            // Decode the remaining unknown envelopes.
18225            while next_offset < end_offset {
18226                _next_ordinal_to_read += 1;
18227                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18228                next_offset += envelope_size;
18229            }
18230
18231            Ok(())
18232        }
18233    }
18234
18235    impl InputAudioCapturerConfiguration {
18236        #[inline(always)]
18237        fn max_ordinal_present(&self) -> u64 {
18238            if let Some(_) = self.usage2 {
18239                return 2;
18240            }
18241            if let Some(_) = self.usage {
18242                return 1;
18243            }
18244            0
18245        }
18246    }
18247
18248    impl fidl::encoding::ValueTypeMarker for InputAudioCapturerConfiguration {
18249        type Borrowed<'a> = &'a Self;
18250        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18251            value
18252        }
18253    }
18254
18255    unsafe impl fidl::encoding::TypeMarker for InputAudioCapturerConfiguration {
18256        type Owned = Self;
18257
18258        #[inline(always)]
18259        fn inline_align(_context: fidl::encoding::Context) -> usize {
18260            8
18261        }
18262
18263        #[inline(always)]
18264        fn inline_size(_context: fidl::encoding::Context) -> usize {
18265            16
18266        }
18267    }
18268
18269    unsafe impl<D: fidl::encoding::ResourceDialect>
18270        fidl::encoding::Encode<InputAudioCapturerConfiguration, D>
18271        for &InputAudioCapturerConfiguration
18272    {
18273        unsafe fn encode(
18274            self,
18275            encoder: &mut fidl::encoding::Encoder<'_, D>,
18276            offset: usize,
18277            mut depth: fidl::encoding::Depth,
18278        ) -> fidl::Result<()> {
18279            encoder.debug_check_bounds::<InputAudioCapturerConfiguration>(offset);
18280            // Vector header
18281            let max_ordinal: u64 = self.max_ordinal_present();
18282            encoder.write_num(max_ordinal, offset);
18283            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18284            // Calling encoder.out_of_line_offset(0) is not allowed.
18285            if max_ordinal == 0 {
18286                return Ok(());
18287            }
18288            depth.increment()?;
18289            let envelope_size = 8;
18290            let bytes_len = max_ordinal as usize * envelope_size;
18291            #[allow(unused_variables)]
18292            let offset = encoder.out_of_line_offset(bytes_len);
18293            let mut _prev_end_offset: usize = 0;
18294            if 1 > max_ordinal {
18295                return Ok(());
18296            }
18297
18298            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18299            // are envelope_size bytes.
18300            let cur_offset: usize = (1 - 1) * envelope_size;
18301
18302            // Zero reserved fields.
18303            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18304
18305            // Safety:
18306            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18307            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18308            //   envelope_size bytes, there is always sufficient room.
18309            fidl::encoding::encode_in_envelope_optional::<AudioCaptureUsage, D>(
18310                self.usage
18311                    .as_ref()
18312                    .map(<AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow),
18313                encoder,
18314                offset + cur_offset,
18315                depth,
18316            )?;
18317
18318            _prev_end_offset = cur_offset + envelope_size;
18319            if 2 > max_ordinal {
18320                return Ok(());
18321            }
18322
18323            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18324            // are envelope_size bytes.
18325            let cur_offset: usize = (2 - 1) * envelope_size;
18326
18327            // Zero reserved fields.
18328            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18329
18330            // Safety:
18331            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18332            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18333            //   envelope_size bytes, there is always sufficient room.
18334            fidl::encoding::encode_in_envelope_optional::<AudioCaptureUsage2, D>(
18335                self.usage2
18336                    .as_ref()
18337                    .map(<AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow),
18338                encoder,
18339                offset + cur_offset,
18340                depth,
18341            )?;
18342
18343            _prev_end_offset = cur_offset + envelope_size;
18344
18345            Ok(())
18346        }
18347    }
18348
18349    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
18350        for InputAudioCapturerConfiguration
18351    {
18352        #[inline(always)]
18353        fn new_empty() -> Self {
18354            Self::default()
18355        }
18356
18357        unsafe fn decode(
18358            &mut self,
18359            decoder: &mut fidl::encoding::Decoder<'_, D>,
18360            offset: usize,
18361            mut depth: fidl::encoding::Depth,
18362        ) -> fidl::Result<()> {
18363            decoder.debug_check_bounds::<Self>(offset);
18364            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18365                None => return Err(fidl::Error::NotNullable),
18366                Some(len) => len,
18367            };
18368            // Calling decoder.out_of_line_offset(0) is not allowed.
18369            if len == 0 {
18370                return Ok(());
18371            };
18372            depth.increment()?;
18373            let envelope_size = 8;
18374            let bytes_len = len * envelope_size;
18375            let offset = decoder.out_of_line_offset(bytes_len)?;
18376            // Decode the envelope for each type.
18377            let mut _next_ordinal_to_read = 0;
18378            let mut next_offset = offset;
18379            let end_offset = offset + bytes_len;
18380            _next_ordinal_to_read += 1;
18381            if next_offset >= end_offset {
18382                return Ok(());
18383            }
18384
18385            // Decode unknown envelopes for gaps in ordinals.
18386            while _next_ordinal_to_read < 1 {
18387                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18388                _next_ordinal_to_read += 1;
18389                next_offset += envelope_size;
18390            }
18391
18392            let next_out_of_line = decoder.next_out_of_line();
18393            let handles_before = decoder.remaining_handles();
18394            if let Some((inlined, num_bytes, num_handles)) =
18395                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18396            {
18397                let member_inline_size =
18398                    <AudioCaptureUsage as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18399                if inlined != (member_inline_size <= 4) {
18400                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18401                }
18402                let inner_offset;
18403                let mut inner_depth = depth.clone();
18404                if inlined {
18405                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18406                    inner_offset = next_offset;
18407                } else {
18408                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18409                    inner_depth.increment()?;
18410                }
18411                let val_ref =
18412                    self.usage.get_or_insert_with(|| fidl::new_empty!(AudioCaptureUsage, D));
18413                fidl::decode!(AudioCaptureUsage, D, val_ref, decoder, inner_offset, inner_depth)?;
18414                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18415                {
18416                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18417                }
18418                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18419                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18420                }
18421            }
18422
18423            next_offset += envelope_size;
18424            _next_ordinal_to_read += 1;
18425            if next_offset >= end_offset {
18426                return Ok(());
18427            }
18428
18429            // Decode unknown envelopes for gaps in ordinals.
18430            while _next_ordinal_to_read < 2 {
18431                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18432                _next_ordinal_to_read += 1;
18433                next_offset += envelope_size;
18434            }
18435
18436            let next_out_of_line = decoder.next_out_of_line();
18437            let handles_before = decoder.remaining_handles();
18438            if let Some((inlined, num_bytes, num_handles)) =
18439                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18440            {
18441                let member_inline_size =
18442                    <AudioCaptureUsage2 as fidl::encoding::TypeMarker>::inline_size(
18443                        decoder.context,
18444                    );
18445                if inlined != (member_inline_size <= 4) {
18446                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18447                }
18448                let inner_offset;
18449                let mut inner_depth = depth.clone();
18450                if inlined {
18451                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18452                    inner_offset = next_offset;
18453                } else {
18454                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18455                    inner_depth.increment()?;
18456                }
18457                let val_ref =
18458                    self.usage2.get_or_insert_with(|| fidl::new_empty!(AudioCaptureUsage2, D));
18459                fidl::decode!(AudioCaptureUsage2, D, val_ref, decoder, inner_offset, inner_depth)?;
18460                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18461                {
18462                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18463                }
18464                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18465                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18466                }
18467            }
18468
18469            next_offset += envelope_size;
18470
18471            // Decode the remaining unknown envelopes.
18472            while next_offset < end_offset {
18473                _next_ordinal_to_read += 1;
18474                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18475                next_offset += envelope_size;
18476            }
18477
18478            Ok(())
18479        }
18480    }
18481
18482    impl Lc3EncoderSettings {
18483        #[inline(always)]
18484        fn max_ordinal_present(&self) -> u64 {
18485            if let Some(_) = self.frame_duration {
18486                return 2;
18487            }
18488            if let Some(_) = self.nbytes {
18489                return 1;
18490            }
18491            0
18492        }
18493    }
18494
18495    impl fidl::encoding::ValueTypeMarker for Lc3EncoderSettings {
18496        type Borrowed<'a> = &'a Self;
18497        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18498            value
18499        }
18500    }
18501
18502    unsafe impl fidl::encoding::TypeMarker for Lc3EncoderSettings {
18503        type Owned = Self;
18504
18505        #[inline(always)]
18506        fn inline_align(_context: fidl::encoding::Context) -> usize {
18507            8
18508        }
18509
18510        #[inline(always)]
18511        fn inline_size(_context: fidl::encoding::Context) -> usize {
18512            16
18513        }
18514    }
18515
18516    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Lc3EncoderSettings, D>
18517        for &Lc3EncoderSettings
18518    {
18519        unsafe fn encode(
18520            self,
18521            encoder: &mut fidl::encoding::Encoder<'_, D>,
18522            offset: usize,
18523            mut depth: fidl::encoding::Depth,
18524        ) -> fidl::Result<()> {
18525            encoder.debug_check_bounds::<Lc3EncoderSettings>(offset);
18526            // Vector header
18527            let max_ordinal: u64 = self.max_ordinal_present();
18528            encoder.write_num(max_ordinal, offset);
18529            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18530            // Calling encoder.out_of_line_offset(0) is not allowed.
18531            if max_ordinal == 0 {
18532                return Ok(());
18533            }
18534            depth.increment()?;
18535            let envelope_size = 8;
18536            let bytes_len = max_ordinal as usize * envelope_size;
18537            #[allow(unused_variables)]
18538            let offset = encoder.out_of_line_offset(bytes_len);
18539            let mut _prev_end_offset: usize = 0;
18540            if 1 > max_ordinal {
18541                return Ok(());
18542            }
18543
18544            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18545            // are envelope_size bytes.
18546            let cur_offset: usize = (1 - 1) * envelope_size;
18547
18548            // Zero reserved fields.
18549            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18550
18551            // Safety:
18552            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18553            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18554            //   envelope_size bytes, there is always sufficient room.
18555            fidl::encoding::encode_in_envelope_optional::<u16, D>(
18556                self.nbytes.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
18557                encoder,
18558                offset + cur_offset,
18559                depth,
18560            )?;
18561
18562            _prev_end_offset = cur_offset + envelope_size;
18563            if 2 > max_ordinal {
18564                return Ok(());
18565            }
18566
18567            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
18568            // are envelope_size bytes.
18569            let cur_offset: usize = (2 - 1) * envelope_size;
18570
18571            // Zero reserved fields.
18572            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
18573
18574            // Safety:
18575            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
18576            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
18577            //   envelope_size bytes, there is always sufficient room.
18578            fidl::encoding::encode_in_envelope_optional::<Lc3FrameDuration, D>(
18579                self.frame_duration
18580                    .as_ref()
18581                    .map(<Lc3FrameDuration as fidl::encoding::ValueTypeMarker>::borrow),
18582                encoder,
18583                offset + cur_offset,
18584                depth,
18585            )?;
18586
18587            _prev_end_offset = cur_offset + envelope_size;
18588
18589            Ok(())
18590        }
18591    }
18592
18593    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Lc3EncoderSettings {
18594        #[inline(always)]
18595        fn new_empty() -> Self {
18596            Self::default()
18597        }
18598
18599        unsafe fn decode(
18600            &mut self,
18601            decoder: &mut fidl::encoding::Decoder<'_, D>,
18602            offset: usize,
18603            mut depth: fidl::encoding::Depth,
18604        ) -> fidl::Result<()> {
18605            decoder.debug_check_bounds::<Self>(offset);
18606            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18607                None => return Err(fidl::Error::NotNullable),
18608                Some(len) => len,
18609            };
18610            // Calling decoder.out_of_line_offset(0) is not allowed.
18611            if len == 0 {
18612                return Ok(());
18613            };
18614            depth.increment()?;
18615            let envelope_size = 8;
18616            let bytes_len = len * envelope_size;
18617            let offset = decoder.out_of_line_offset(bytes_len)?;
18618            // Decode the envelope for each type.
18619            let mut _next_ordinal_to_read = 0;
18620            let mut next_offset = offset;
18621            let end_offset = offset + bytes_len;
18622            _next_ordinal_to_read += 1;
18623            if next_offset >= end_offset {
18624                return Ok(());
18625            }
18626
18627            // Decode unknown envelopes for gaps in ordinals.
18628            while _next_ordinal_to_read < 1 {
18629                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18630                _next_ordinal_to_read += 1;
18631                next_offset += envelope_size;
18632            }
18633
18634            let next_out_of_line = decoder.next_out_of_line();
18635            let handles_before = decoder.remaining_handles();
18636            if let Some((inlined, num_bytes, num_handles)) =
18637                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18638            {
18639                let member_inline_size =
18640                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18641                if inlined != (member_inline_size <= 4) {
18642                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18643                }
18644                let inner_offset;
18645                let mut inner_depth = depth.clone();
18646                if inlined {
18647                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18648                    inner_offset = next_offset;
18649                } else {
18650                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18651                    inner_depth.increment()?;
18652                }
18653                let val_ref = self.nbytes.get_or_insert_with(|| fidl::new_empty!(u16, D));
18654                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
18655                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18656                {
18657                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18658                }
18659                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18660                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18661                }
18662            }
18663
18664            next_offset += envelope_size;
18665            _next_ordinal_to_read += 1;
18666            if next_offset >= end_offset {
18667                return Ok(());
18668            }
18669
18670            // Decode unknown envelopes for gaps in ordinals.
18671            while _next_ordinal_to_read < 2 {
18672                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18673                _next_ordinal_to_read += 1;
18674                next_offset += envelope_size;
18675            }
18676
18677            let next_out_of_line = decoder.next_out_of_line();
18678            let handles_before = decoder.remaining_handles();
18679            if let Some((inlined, num_bytes, num_handles)) =
18680                fidl::encoding::decode_envelope_header(decoder, next_offset)?
18681            {
18682                let member_inline_size =
18683                    <Lc3FrameDuration as fidl::encoding::TypeMarker>::inline_size(decoder.context);
18684                if inlined != (member_inline_size <= 4) {
18685                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
18686                }
18687                let inner_offset;
18688                let mut inner_depth = depth.clone();
18689                if inlined {
18690                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
18691                    inner_offset = next_offset;
18692                } else {
18693                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
18694                    inner_depth.increment()?;
18695                }
18696                let val_ref = self
18697                    .frame_duration
18698                    .get_or_insert_with(|| fidl::new_empty!(Lc3FrameDuration, D));
18699                fidl::decode!(Lc3FrameDuration, D, val_ref, decoder, inner_offset, inner_depth)?;
18700                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
18701                {
18702                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
18703                }
18704                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
18705                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
18706                }
18707            }
18708
18709            next_offset += envelope_size;
18710
18711            // Decode the remaining unknown envelopes.
18712            while next_offset < end_offset {
18713                _next_ordinal_to_read += 1;
18714                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18715                next_offset += envelope_size;
18716            }
18717
18718            Ok(())
18719        }
18720    }
18721
18722    impl LoopbackAudioCapturerConfiguration {
18723        #[inline(always)]
18724        fn max_ordinal_present(&self) -> u64 {
18725            0
18726        }
18727    }
18728
18729    impl fidl::encoding::ValueTypeMarker for LoopbackAudioCapturerConfiguration {
18730        type Borrowed<'a> = &'a Self;
18731        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18732            value
18733        }
18734    }
18735
18736    unsafe impl fidl::encoding::TypeMarker for LoopbackAudioCapturerConfiguration {
18737        type Owned = Self;
18738
18739        #[inline(always)]
18740        fn inline_align(_context: fidl::encoding::Context) -> usize {
18741            8
18742        }
18743
18744        #[inline(always)]
18745        fn inline_size(_context: fidl::encoding::Context) -> usize {
18746            16
18747        }
18748    }
18749
18750    unsafe impl<D: fidl::encoding::ResourceDialect>
18751        fidl::encoding::Encode<LoopbackAudioCapturerConfiguration, D>
18752        for &LoopbackAudioCapturerConfiguration
18753    {
18754        unsafe fn encode(
18755            self,
18756            encoder: &mut fidl::encoding::Encoder<'_, D>,
18757            offset: usize,
18758            mut depth: fidl::encoding::Depth,
18759        ) -> fidl::Result<()> {
18760            encoder.debug_check_bounds::<LoopbackAudioCapturerConfiguration>(offset);
18761            // Vector header
18762            let max_ordinal: u64 = self.max_ordinal_present();
18763            encoder.write_num(max_ordinal, offset);
18764            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18765            // Calling encoder.out_of_line_offset(0) is not allowed.
18766            if max_ordinal == 0 {
18767                return Ok(());
18768            }
18769            depth.increment()?;
18770            let envelope_size = 8;
18771            let bytes_len = max_ordinal as usize * envelope_size;
18772            #[allow(unused_variables)]
18773            let offset = encoder.out_of_line_offset(bytes_len);
18774            let mut _prev_end_offset: usize = 0;
18775
18776            Ok(())
18777        }
18778    }
18779
18780    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
18781        for LoopbackAudioCapturerConfiguration
18782    {
18783        #[inline(always)]
18784        fn new_empty() -> Self {
18785            Self::default()
18786        }
18787
18788        unsafe fn decode(
18789            &mut self,
18790            decoder: &mut fidl::encoding::Decoder<'_, D>,
18791            offset: usize,
18792            mut depth: fidl::encoding::Depth,
18793        ) -> fidl::Result<()> {
18794            decoder.debug_check_bounds::<Self>(offset);
18795            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18796                None => return Err(fidl::Error::NotNullable),
18797                Some(len) => len,
18798            };
18799            // Calling decoder.out_of_line_offset(0) is not allowed.
18800            if len == 0 {
18801                return Ok(());
18802            };
18803            depth.increment()?;
18804            let envelope_size = 8;
18805            let bytes_len = len * envelope_size;
18806            let offset = decoder.out_of_line_offset(bytes_len)?;
18807            // Decode the envelope for each type.
18808            let mut _next_ordinal_to_read = 0;
18809            let mut next_offset = offset;
18810            let end_offset = offset + bytes_len;
18811
18812            // Decode the remaining unknown envelopes.
18813            while next_offset < end_offset {
18814                _next_ordinal_to_read += 1;
18815                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18816                next_offset += envelope_size;
18817            }
18818
18819            Ok(())
18820        }
18821    }
18822
18823    impl MSbcEncoderSettings {
18824        #[inline(always)]
18825        fn max_ordinal_present(&self) -> u64 {
18826            0
18827        }
18828    }
18829
18830    impl fidl::encoding::ValueTypeMarker for MSbcEncoderSettings {
18831        type Borrowed<'a> = &'a Self;
18832        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18833            value
18834        }
18835    }
18836
18837    unsafe impl fidl::encoding::TypeMarker for MSbcEncoderSettings {
18838        type Owned = Self;
18839
18840        #[inline(always)]
18841        fn inline_align(_context: fidl::encoding::Context) -> usize {
18842            8
18843        }
18844
18845        #[inline(always)]
18846        fn inline_size(_context: fidl::encoding::Context) -> usize {
18847            16
18848        }
18849    }
18850
18851    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MSbcEncoderSettings, D>
18852        for &MSbcEncoderSettings
18853    {
18854        unsafe fn encode(
18855            self,
18856            encoder: &mut fidl::encoding::Encoder<'_, D>,
18857            offset: usize,
18858            mut depth: fidl::encoding::Depth,
18859        ) -> fidl::Result<()> {
18860            encoder.debug_check_bounds::<MSbcEncoderSettings>(offset);
18861            // Vector header
18862            let max_ordinal: u64 = self.max_ordinal_present();
18863            encoder.write_num(max_ordinal, offset);
18864            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18865            // Calling encoder.out_of_line_offset(0) is not allowed.
18866            if max_ordinal == 0 {
18867                return Ok(());
18868            }
18869            depth.increment()?;
18870            let envelope_size = 8;
18871            let bytes_len = max_ordinal as usize * envelope_size;
18872            #[allow(unused_variables)]
18873            let offset = encoder.out_of_line_offset(bytes_len);
18874            let mut _prev_end_offset: usize = 0;
18875
18876            Ok(())
18877        }
18878    }
18879
18880    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MSbcEncoderSettings {
18881        #[inline(always)]
18882        fn new_empty() -> Self {
18883            Self::default()
18884        }
18885
18886        unsafe fn decode(
18887            &mut self,
18888            decoder: &mut fidl::encoding::Decoder<'_, D>,
18889            offset: usize,
18890            mut depth: fidl::encoding::Depth,
18891        ) -> fidl::Result<()> {
18892            decoder.debug_check_bounds::<Self>(offset);
18893            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
18894                None => return Err(fidl::Error::NotNullable),
18895                Some(len) => len,
18896            };
18897            // Calling decoder.out_of_line_offset(0) is not allowed.
18898            if len == 0 {
18899                return Ok(());
18900            };
18901            depth.increment()?;
18902            let envelope_size = 8;
18903            let bytes_len = len * envelope_size;
18904            let offset = decoder.out_of_line_offset(bytes_len)?;
18905            // Decode the envelope for each type.
18906            let mut _next_ordinal_to_read = 0;
18907            let mut next_offset = offset;
18908            let end_offset = offset + bytes_len;
18909
18910            // Decode the remaining unknown envelopes.
18911            while next_offset < end_offset {
18912                _next_ordinal_to_read += 1;
18913                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
18914                next_offset += envelope_size;
18915            }
18916
18917            Ok(())
18918        }
18919    }
18920
18921    impl Packet {
18922        #[inline(always)]
18923        fn max_ordinal_present(&self) -> u64 {
18924            if let Some(_) = self.key_frame {
18925                return 9;
18926            }
18927            if let Some(_) = self.known_end_access_unit {
18928                return 8;
18929            }
18930            if let Some(_) = self.start_access_unit {
18931                return 7;
18932            }
18933            if let Some(_) = self.timestamp_ish {
18934                return 6;
18935            }
18936            if let Some(_) = self.valid_length_bytes {
18937                return 5;
18938            }
18939            if let Some(_) = self.start_offset {
18940                return 4;
18941            }
18942            if let Some(_) = self.stream_lifetime_ordinal {
18943                return 3;
18944            }
18945            if let Some(_) = self.buffer_index {
18946                return 2;
18947            }
18948            if let Some(_) = self.header {
18949                return 1;
18950            }
18951            0
18952        }
18953    }
18954
18955    impl fidl::encoding::ValueTypeMarker for Packet {
18956        type Borrowed<'a> = &'a Self;
18957        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
18958            value
18959        }
18960    }
18961
18962    unsafe impl fidl::encoding::TypeMarker for Packet {
18963        type Owned = Self;
18964
18965        #[inline(always)]
18966        fn inline_align(_context: fidl::encoding::Context) -> usize {
18967            8
18968        }
18969
18970        #[inline(always)]
18971        fn inline_size(_context: fidl::encoding::Context) -> usize {
18972            16
18973        }
18974    }
18975
18976    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Packet, D> for &Packet {
18977        unsafe fn encode(
18978            self,
18979            encoder: &mut fidl::encoding::Encoder<'_, D>,
18980            offset: usize,
18981            mut depth: fidl::encoding::Depth,
18982        ) -> fidl::Result<()> {
18983            encoder.debug_check_bounds::<Packet>(offset);
18984            // Vector header
18985            let max_ordinal: u64 = self.max_ordinal_present();
18986            encoder.write_num(max_ordinal, offset);
18987            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
18988            // Calling encoder.out_of_line_offset(0) is not allowed.
18989            if max_ordinal == 0 {
18990                return Ok(());
18991            }
18992            depth.increment()?;
18993            let envelope_size = 8;
18994            let bytes_len = max_ordinal as usize * envelope_size;
18995            #[allow(unused_variables)]
18996            let offset = encoder.out_of_line_offset(bytes_len);
18997            let mut _prev_end_offset: usize = 0;
18998            if 1 > max_ordinal {
18999                return Ok(());
19000            }
19001
19002            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19003            // are envelope_size bytes.
19004            let cur_offset: usize = (1 - 1) * envelope_size;
19005
19006            // Zero reserved fields.
19007            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19008
19009            // Safety:
19010            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19011            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19012            //   envelope_size bytes, there is always sufficient room.
19013            fidl::encoding::encode_in_envelope_optional::<PacketHeader, D>(
19014                self.header.as_ref().map(<PacketHeader as fidl::encoding::ValueTypeMarker>::borrow),
19015                encoder,
19016                offset + cur_offset,
19017                depth,
19018            )?;
19019
19020            _prev_end_offset = cur_offset + envelope_size;
19021            if 2 > max_ordinal {
19022                return Ok(());
19023            }
19024
19025            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19026            // are envelope_size bytes.
19027            let cur_offset: usize = (2 - 1) * envelope_size;
19028
19029            // Zero reserved fields.
19030            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19031
19032            // Safety:
19033            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19034            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19035            //   envelope_size bytes, there is always sufficient room.
19036            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19037                self.buffer_index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19038                encoder,
19039                offset + cur_offset,
19040                depth,
19041            )?;
19042
19043            _prev_end_offset = cur_offset + envelope_size;
19044            if 3 > max_ordinal {
19045                return Ok(());
19046            }
19047
19048            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19049            // are envelope_size bytes.
19050            let cur_offset: usize = (3 - 1) * envelope_size;
19051
19052            // Zero reserved fields.
19053            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19054
19055            // Safety:
19056            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19057            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19058            //   envelope_size bytes, there is always sufficient room.
19059            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19060                self.stream_lifetime_ordinal
19061                    .as_ref()
19062                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19063                encoder,
19064                offset + cur_offset,
19065                depth,
19066            )?;
19067
19068            _prev_end_offset = cur_offset + envelope_size;
19069            if 4 > max_ordinal {
19070                return Ok(());
19071            }
19072
19073            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19074            // are envelope_size bytes.
19075            let cur_offset: usize = (4 - 1) * envelope_size;
19076
19077            // Zero reserved fields.
19078            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19079
19080            // Safety:
19081            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19082            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19083            //   envelope_size bytes, there is always sufficient room.
19084            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19085                self.start_offset.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19086                encoder,
19087                offset + cur_offset,
19088                depth,
19089            )?;
19090
19091            _prev_end_offset = cur_offset + envelope_size;
19092            if 5 > max_ordinal {
19093                return Ok(());
19094            }
19095
19096            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19097            // are envelope_size bytes.
19098            let cur_offset: usize = (5 - 1) * envelope_size;
19099
19100            // Zero reserved fields.
19101            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19102
19103            // Safety:
19104            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19105            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19106            //   envelope_size bytes, there is always sufficient room.
19107            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19108                self.valid_length_bytes
19109                    .as_ref()
19110                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19111                encoder,
19112                offset + cur_offset,
19113                depth,
19114            )?;
19115
19116            _prev_end_offset = cur_offset + envelope_size;
19117            if 6 > max_ordinal {
19118                return Ok(());
19119            }
19120
19121            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19122            // are envelope_size bytes.
19123            let cur_offset: usize = (6 - 1) * envelope_size;
19124
19125            // Zero reserved fields.
19126            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19127
19128            // Safety:
19129            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19130            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19131            //   envelope_size bytes, there is always sufficient room.
19132            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19133                self.timestamp_ish.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19134                encoder,
19135                offset + cur_offset,
19136                depth,
19137            )?;
19138
19139            _prev_end_offset = cur_offset + envelope_size;
19140            if 7 > max_ordinal {
19141                return Ok(());
19142            }
19143
19144            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19145            // are envelope_size bytes.
19146            let cur_offset: usize = (7 - 1) * envelope_size;
19147
19148            // Zero reserved fields.
19149            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19150
19151            // Safety:
19152            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19153            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19154            //   envelope_size bytes, there is always sufficient room.
19155            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19156                self.start_access_unit
19157                    .as_ref()
19158                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19159                encoder,
19160                offset + cur_offset,
19161                depth,
19162            )?;
19163
19164            _prev_end_offset = cur_offset + envelope_size;
19165            if 8 > max_ordinal {
19166                return Ok(());
19167            }
19168
19169            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19170            // are envelope_size bytes.
19171            let cur_offset: usize = (8 - 1) * envelope_size;
19172
19173            // Zero reserved fields.
19174            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19175
19176            // Safety:
19177            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19178            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19179            //   envelope_size bytes, there is always sufficient room.
19180            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19181                self.known_end_access_unit
19182                    .as_ref()
19183                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19184                encoder,
19185                offset + cur_offset,
19186                depth,
19187            )?;
19188
19189            _prev_end_offset = cur_offset + envelope_size;
19190            if 9 > max_ordinal {
19191                return Ok(());
19192            }
19193
19194            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19195            // are envelope_size bytes.
19196            let cur_offset: usize = (9 - 1) * envelope_size;
19197
19198            // Zero reserved fields.
19199            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19200
19201            // Safety:
19202            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19203            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19204            //   envelope_size bytes, there is always sufficient room.
19205            fidl::encoding::encode_in_envelope_optional::<bool, D>(
19206                self.key_frame.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
19207                encoder,
19208                offset + cur_offset,
19209                depth,
19210            )?;
19211
19212            _prev_end_offset = cur_offset + envelope_size;
19213
19214            Ok(())
19215        }
19216    }
19217
19218    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Packet {
19219        #[inline(always)]
19220        fn new_empty() -> Self {
19221            Self::default()
19222        }
19223
19224        unsafe fn decode(
19225            &mut self,
19226            decoder: &mut fidl::encoding::Decoder<'_, D>,
19227            offset: usize,
19228            mut depth: fidl::encoding::Depth,
19229        ) -> fidl::Result<()> {
19230            decoder.debug_check_bounds::<Self>(offset);
19231            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19232                None => return Err(fidl::Error::NotNullable),
19233                Some(len) => len,
19234            };
19235            // Calling decoder.out_of_line_offset(0) is not allowed.
19236            if len == 0 {
19237                return Ok(());
19238            };
19239            depth.increment()?;
19240            let envelope_size = 8;
19241            let bytes_len = len * envelope_size;
19242            let offset = decoder.out_of_line_offset(bytes_len)?;
19243            // Decode the envelope for each type.
19244            let mut _next_ordinal_to_read = 0;
19245            let mut next_offset = offset;
19246            let end_offset = offset + bytes_len;
19247            _next_ordinal_to_read += 1;
19248            if next_offset >= end_offset {
19249                return Ok(());
19250            }
19251
19252            // Decode unknown envelopes for gaps in ordinals.
19253            while _next_ordinal_to_read < 1 {
19254                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19255                _next_ordinal_to_read += 1;
19256                next_offset += envelope_size;
19257            }
19258
19259            let next_out_of_line = decoder.next_out_of_line();
19260            let handles_before = decoder.remaining_handles();
19261            if let Some((inlined, num_bytes, num_handles)) =
19262                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19263            {
19264                let member_inline_size =
19265                    <PacketHeader as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19266                if inlined != (member_inline_size <= 4) {
19267                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19268                }
19269                let inner_offset;
19270                let mut inner_depth = depth.clone();
19271                if inlined {
19272                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19273                    inner_offset = next_offset;
19274                } else {
19275                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19276                    inner_depth.increment()?;
19277                }
19278                let val_ref = self.header.get_or_insert_with(|| fidl::new_empty!(PacketHeader, D));
19279                fidl::decode!(PacketHeader, D, val_ref, decoder, inner_offset, inner_depth)?;
19280                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19281                {
19282                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19283                }
19284                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19285                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19286                }
19287            }
19288
19289            next_offset += envelope_size;
19290            _next_ordinal_to_read += 1;
19291            if next_offset >= end_offset {
19292                return Ok(());
19293            }
19294
19295            // Decode unknown envelopes for gaps in ordinals.
19296            while _next_ordinal_to_read < 2 {
19297                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19298                _next_ordinal_to_read += 1;
19299                next_offset += envelope_size;
19300            }
19301
19302            let next_out_of_line = decoder.next_out_of_line();
19303            let handles_before = decoder.remaining_handles();
19304            if let Some((inlined, num_bytes, num_handles)) =
19305                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19306            {
19307                let member_inline_size =
19308                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19309                if inlined != (member_inline_size <= 4) {
19310                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19311                }
19312                let inner_offset;
19313                let mut inner_depth = depth.clone();
19314                if inlined {
19315                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19316                    inner_offset = next_offset;
19317                } else {
19318                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19319                    inner_depth.increment()?;
19320                }
19321                let val_ref = self.buffer_index.get_or_insert_with(|| fidl::new_empty!(u32, D));
19322                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19323                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19324                {
19325                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19326                }
19327                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19328                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19329                }
19330            }
19331
19332            next_offset += envelope_size;
19333            _next_ordinal_to_read += 1;
19334            if next_offset >= end_offset {
19335                return Ok(());
19336            }
19337
19338            // Decode unknown envelopes for gaps in ordinals.
19339            while _next_ordinal_to_read < 3 {
19340                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19341                _next_ordinal_to_read += 1;
19342                next_offset += envelope_size;
19343            }
19344
19345            let next_out_of_line = decoder.next_out_of_line();
19346            let handles_before = decoder.remaining_handles();
19347            if let Some((inlined, num_bytes, num_handles)) =
19348                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19349            {
19350                let member_inline_size =
19351                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19352                if inlined != (member_inline_size <= 4) {
19353                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19354                }
19355                let inner_offset;
19356                let mut inner_depth = depth.clone();
19357                if inlined {
19358                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19359                    inner_offset = next_offset;
19360                } else {
19361                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19362                    inner_depth.increment()?;
19363                }
19364                let val_ref =
19365                    self.stream_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
19366                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19367                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19368                {
19369                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19370                }
19371                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19372                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19373                }
19374            }
19375
19376            next_offset += envelope_size;
19377            _next_ordinal_to_read += 1;
19378            if next_offset >= end_offset {
19379                return Ok(());
19380            }
19381
19382            // Decode unknown envelopes for gaps in ordinals.
19383            while _next_ordinal_to_read < 4 {
19384                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19385                _next_ordinal_to_read += 1;
19386                next_offset += envelope_size;
19387            }
19388
19389            let next_out_of_line = decoder.next_out_of_line();
19390            let handles_before = decoder.remaining_handles();
19391            if let Some((inlined, num_bytes, num_handles)) =
19392                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19393            {
19394                let member_inline_size =
19395                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19396                if inlined != (member_inline_size <= 4) {
19397                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19398                }
19399                let inner_offset;
19400                let mut inner_depth = depth.clone();
19401                if inlined {
19402                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19403                    inner_offset = next_offset;
19404                } else {
19405                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19406                    inner_depth.increment()?;
19407                }
19408                let val_ref = self.start_offset.get_or_insert_with(|| fidl::new_empty!(u32, D));
19409                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19410                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19411                {
19412                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19413                }
19414                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19415                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19416                }
19417            }
19418
19419            next_offset += envelope_size;
19420            _next_ordinal_to_read += 1;
19421            if next_offset >= end_offset {
19422                return Ok(());
19423            }
19424
19425            // Decode unknown envelopes for gaps in ordinals.
19426            while _next_ordinal_to_read < 5 {
19427                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19428                _next_ordinal_to_read += 1;
19429                next_offset += envelope_size;
19430            }
19431
19432            let next_out_of_line = decoder.next_out_of_line();
19433            let handles_before = decoder.remaining_handles();
19434            if let Some((inlined, num_bytes, num_handles)) =
19435                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19436            {
19437                let member_inline_size =
19438                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19439                if inlined != (member_inline_size <= 4) {
19440                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19441                }
19442                let inner_offset;
19443                let mut inner_depth = depth.clone();
19444                if inlined {
19445                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19446                    inner_offset = next_offset;
19447                } else {
19448                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19449                    inner_depth.increment()?;
19450                }
19451                let val_ref =
19452                    self.valid_length_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
19453                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19454                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19455                {
19456                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19457                }
19458                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19459                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19460                }
19461            }
19462
19463            next_offset += envelope_size;
19464            _next_ordinal_to_read += 1;
19465            if next_offset >= end_offset {
19466                return Ok(());
19467            }
19468
19469            // Decode unknown envelopes for gaps in ordinals.
19470            while _next_ordinal_to_read < 6 {
19471                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19472                _next_ordinal_to_read += 1;
19473                next_offset += envelope_size;
19474            }
19475
19476            let next_out_of_line = decoder.next_out_of_line();
19477            let handles_before = decoder.remaining_handles();
19478            if let Some((inlined, num_bytes, num_handles)) =
19479                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19480            {
19481                let member_inline_size =
19482                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19483                if inlined != (member_inline_size <= 4) {
19484                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19485                }
19486                let inner_offset;
19487                let mut inner_depth = depth.clone();
19488                if inlined {
19489                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19490                    inner_offset = next_offset;
19491                } else {
19492                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19493                    inner_depth.increment()?;
19494                }
19495                let val_ref = self.timestamp_ish.get_or_insert_with(|| fidl::new_empty!(u64, D));
19496                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19497                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19498                {
19499                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19500                }
19501                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19502                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19503                }
19504            }
19505
19506            next_offset += envelope_size;
19507            _next_ordinal_to_read += 1;
19508            if next_offset >= end_offset {
19509                return Ok(());
19510            }
19511
19512            // Decode unknown envelopes for gaps in ordinals.
19513            while _next_ordinal_to_read < 7 {
19514                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19515                _next_ordinal_to_read += 1;
19516                next_offset += envelope_size;
19517            }
19518
19519            let next_out_of_line = decoder.next_out_of_line();
19520            let handles_before = decoder.remaining_handles();
19521            if let Some((inlined, num_bytes, num_handles)) =
19522                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19523            {
19524                let member_inline_size =
19525                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19526                if inlined != (member_inline_size <= 4) {
19527                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19528                }
19529                let inner_offset;
19530                let mut inner_depth = depth.clone();
19531                if inlined {
19532                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19533                    inner_offset = next_offset;
19534                } else {
19535                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19536                    inner_depth.increment()?;
19537                }
19538                let val_ref =
19539                    self.start_access_unit.get_or_insert_with(|| fidl::new_empty!(bool, D));
19540                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19541                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19542                {
19543                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19544                }
19545                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19546                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19547                }
19548            }
19549
19550            next_offset += envelope_size;
19551            _next_ordinal_to_read += 1;
19552            if next_offset >= end_offset {
19553                return Ok(());
19554            }
19555
19556            // Decode unknown envelopes for gaps in ordinals.
19557            while _next_ordinal_to_read < 8 {
19558                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19559                _next_ordinal_to_read += 1;
19560                next_offset += envelope_size;
19561            }
19562
19563            let next_out_of_line = decoder.next_out_of_line();
19564            let handles_before = decoder.remaining_handles();
19565            if let Some((inlined, num_bytes, num_handles)) =
19566                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19567            {
19568                let member_inline_size =
19569                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19570                if inlined != (member_inline_size <= 4) {
19571                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19572                }
19573                let inner_offset;
19574                let mut inner_depth = depth.clone();
19575                if inlined {
19576                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19577                    inner_offset = next_offset;
19578                } else {
19579                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19580                    inner_depth.increment()?;
19581                }
19582                let val_ref =
19583                    self.known_end_access_unit.get_or_insert_with(|| fidl::new_empty!(bool, D));
19584                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19585                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19586                {
19587                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19588                }
19589                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19590                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19591                }
19592            }
19593
19594            next_offset += envelope_size;
19595            _next_ordinal_to_read += 1;
19596            if next_offset >= end_offset {
19597                return Ok(());
19598            }
19599
19600            // Decode unknown envelopes for gaps in ordinals.
19601            while _next_ordinal_to_read < 9 {
19602                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19603                _next_ordinal_to_read += 1;
19604                next_offset += envelope_size;
19605            }
19606
19607            let next_out_of_line = decoder.next_out_of_line();
19608            let handles_before = decoder.remaining_handles();
19609            if let Some((inlined, num_bytes, num_handles)) =
19610                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19611            {
19612                let member_inline_size =
19613                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19614                if inlined != (member_inline_size <= 4) {
19615                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19616                }
19617                let inner_offset;
19618                let mut inner_depth = depth.clone();
19619                if inlined {
19620                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19621                    inner_offset = next_offset;
19622                } else {
19623                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19624                    inner_depth.increment()?;
19625                }
19626                let val_ref = self.key_frame.get_or_insert_with(|| fidl::new_empty!(bool, D));
19627                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
19628                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19629                {
19630                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19631                }
19632                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19633                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19634                }
19635            }
19636
19637            next_offset += envelope_size;
19638
19639            // Decode the remaining unknown envelopes.
19640            while next_offset < end_offset {
19641                _next_ordinal_to_read += 1;
19642                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19643                next_offset += envelope_size;
19644            }
19645
19646            Ok(())
19647        }
19648    }
19649
19650    impl PacketHeader {
19651        #[inline(always)]
19652        fn max_ordinal_present(&self) -> u64 {
19653            if let Some(_) = self.packet_index {
19654                return 2;
19655            }
19656            if let Some(_) = self.buffer_lifetime_ordinal {
19657                return 1;
19658            }
19659            0
19660        }
19661    }
19662
19663    impl fidl::encoding::ValueTypeMarker for PacketHeader {
19664        type Borrowed<'a> = &'a Self;
19665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19666            value
19667        }
19668    }
19669
19670    unsafe impl fidl::encoding::TypeMarker for PacketHeader {
19671        type Owned = Self;
19672
19673        #[inline(always)]
19674        fn inline_align(_context: fidl::encoding::Context) -> usize {
19675            8
19676        }
19677
19678        #[inline(always)]
19679        fn inline_size(_context: fidl::encoding::Context) -> usize {
19680            16
19681        }
19682    }
19683
19684    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PacketHeader, D>
19685        for &PacketHeader
19686    {
19687        unsafe fn encode(
19688            self,
19689            encoder: &mut fidl::encoding::Encoder<'_, D>,
19690            offset: usize,
19691            mut depth: fidl::encoding::Depth,
19692        ) -> fidl::Result<()> {
19693            encoder.debug_check_bounds::<PacketHeader>(offset);
19694            // Vector header
19695            let max_ordinal: u64 = self.max_ordinal_present();
19696            encoder.write_num(max_ordinal, offset);
19697            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19698            // Calling encoder.out_of_line_offset(0) is not allowed.
19699            if max_ordinal == 0 {
19700                return Ok(());
19701            }
19702            depth.increment()?;
19703            let envelope_size = 8;
19704            let bytes_len = max_ordinal as usize * envelope_size;
19705            #[allow(unused_variables)]
19706            let offset = encoder.out_of_line_offset(bytes_len);
19707            let mut _prev_end_offset: usize = 0;
19708            if 1 > max_ordinal {
19709                return Ok(());
19710            }
19711
19712            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19713            // are envelope_size bytes.
19714            let cur_offset: usize = (1 - 1) * envelope_size;
19715
19716            // Zero reserved fields.
19717            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19718
19719            // Safety:
19720            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19721            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19722            //   envelope_size bytes, there is always sufficient room.
19723            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19724                self.buffer_lifetime_ordinal
19725                    .as_ref()
19726                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19727                encoder,
19728                offset + cur_offset,
19729                depth,
19730            )?;
19731
19732            _prev_end_offset = cur_offset + envelope_size;
19733            if 2 > max_ordinal {
19734                return Ok(());
19735            }
19736
19737            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19738            // are envelope_size bytes.
19739            let cur_offset: usize = (2 - 1) * envelope_size;
19740
19741            // Zero reserved fields.
19742            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19743
19744            // Safety:
19745            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19746            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19747            //   envelope_size bytes, there is always sufficient room.
19748            fidl::encoding::encode_in_envelope_optional::<u32, D>(
19749                self.packet_index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
19750                encoder,
19751                offset + cur_offset,
19752                depth,
19753            )?;
19754
19755            _prev_end_offset = cur_offset + envelope_size;
19756
19757            Ok(())
19758        }
19759    }
19760
19761    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PacketHeader {
19762        #[inline(always)]
19763        fn new_empty() -> Self {
19764            Self::default()
19765        }
19766
19767        unsafe fn decode(
19768            &mut self,
19769            decoder: &mut fidl::encoding::Decoder<'_, D>,
19770            offset: usize,
19771            mut depth: fidl::encoding::Depth,
19772        ) -> fidl::Result<()> {
19773            decoder.debug_check_bounds::<Self>(offset);
19774            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
19775                None => return Err(fidl::Error::NotNullable),
19776                Some(len) => len,
19777            };
19778            // Calling decoder.out_of_line_offset(0) is not allowed.
19779            if len == 0 {
19780                return Ok(());
19781            };
19782            depth.increment()?;
19783            let envelope_size = 8;
19784            let bytes_len = len * envelope_size;
19785            let offset = decoder.out_of_line_offset(bytes_len)?;
19786            // Decode the envelope for each type.
19787            let mut _next_ordinal_to_read = 0;
19788            let mut next_offset = offset;
19789            let end_offset = offset + bytes_len;
19790            _next_ordinal_to_read += 1;
19791            if next_offset >= end_offset {
19792                return Ok(());
19793            }
19794
19795            // Decode unknown envelopes for gaps in ordinals.
19796            while _next_ordinal_to_read < 1 {
19797                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19798                _next_ordinal_to_read += 1;
19799                next_offset += envelope_size;
19800            }
19801
19802            let next_out_of_line = decoder.next_out_of_line();
19803            let handles_before = decoder.remaining_handles();
19804            if let Some((inlined, num_bytes, num_handles)) =
19805                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19806            {
19807                let member_inline_size =
19808                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19809                if inlined != (member_inline_size <= 4) {
19810                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19811                }
19812                let inner_offset;
19813                let mut inner_depth = depth.clone();
19814                if inlined {
19815                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19816                    inner_offset = next_offset;
19817                } else {
19818                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19819                    inner_depth.increment()?;
19820                }
19821                let val_ref =
19822                    self.buffer_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
19823                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
19824                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19825                {
19826                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19827                }
19828                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19829                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19830                }
19831            }
19832
19833            next_offset += envelope_size;
19834            _next_ordinal_to_read += 1;
19835            if next_offset >= end_offset {
19836                return Ok(());
19837            }
19838
19839            // Decode unknown envelopes for gaps in ordinals.
19840            while _next_ordinal_to_read < 2 {
19841                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19842                _next_ordinal_to_read += 1;
19843                next_offset += envelope_size;
19844            }
19845
19846            let next_out_of_line = decoder.next_out_of_line();
19847            let handles_before = decoder.remaining_handles();
19848            if let Some((inlined, num_bytes, num_handles)) =
19849                fidl::encoding::decode_envelope_header(decoder, next_offset)?
19850            {
19851                let member_inline_size =
19852                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
19853                if inlined != (member_inline_size <= 4) {
19854                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
19855                }
19856                let inner_offset;
19857                let mut inner_depth = depth.clone();
19858                if inlined {
19859                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
19860                    inner_offset = next_offset;
19861                } else {
19862                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
19863                    inner_depth.increment()?;
19864                }
19865                let val_ref = self.packet_index.get_or_insert_with(|| fidl::new_empty!(u32, D));
19866                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
19867                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
19868                {
19869                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
19870                }
19871                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
19872                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
19873                }
19874            }
19875
19876            next_offset += envelope_size;
19877
19878            // Decode the remaining unknown envelopes.
19879            while next_offset < end_offset {
19880                _next_ordinal_to_read += 1;
19881                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
19882                next_offset += envelope_size;
19883            }
19884
19885            Ok(())
19886        }
19887    }
19888
19889    impl StreamBufferConstraints {
19890        #[inline(always)]
19891        fn max_ordinal_present(&self) -> u64 {
19892            if let Some(_) = self.is_physically_contiguous_required {
19893                return 13;
19894            }
19895            if let Some(_) = self.single_buffer_mode_allowed {
19896                return 12;
19897            }
19898            if let Some(_) = self.packet_count_for_client_max {
19899                return 11;
19900            }
19901            if let Some(_) = self.packet_count_for_client_min {
19902                return 10;
19903            }
19904            if let Some(_) = self.packet_count_for_server_max {
19905                return 9;
19906            }
19907            if let Some(_) = self.packet_count_for_server_recommended_max {
19908                return 8;
19909            }
19910            if let Some(_) = self.packet_count_for_server_recommended {
19911                return 7;
19912            }
19913            if let Some(_) = self.packet_count_for_server_min {
19914                return 6;
19915            }
19916            if let Some(_) = self.per_packet_buffer_bytes_max {
19917                return 5;
19918            }
19919            if let Some(_) = self.per_packet_buffer_bytes_recommended {
19920                return 4;
19921            }
19922            if let Some(_) = self.per_packet_buffer_bytes_min {
19923                return 3;
19924            }
19925            if let Some(_) = self.default_settings {
19926                return 2;
19927            }
19928            if let Some(_) = self.buffer_constraints_version_ordinal {
19929                return 1;
19930            }
19931            0
19932        }
19933    }
19934
19935    impl fidl::encoding::ValueTypeMarker for StreamBufferConstraints {
19936        type Borrowed<'a> = &'a Self;
19937        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
19938            value
19939        }
19940    }
19941
19942    unsafe impl fidl::encoding::TypeMarker for StreamBufferConstraints {
19943        type Owned = Self;
19944
19945        #[inline(always)]
19946        fn inline_align(_context: fidl::encoding::Context) -> usize {
19947            8
19948        }
19949
19950        #[inline(always)]
19951        fn inline_size(_context: fidl::encoding::Context) -> usize {
19952            16
19953        }
19954    }
19955
19956    unsafe impl<D: fidl::encoding::ResourceDialect>
19957        fidl::encoding::Encode<StreamBufferConstraints, D> for &StreamBufferConstraints
19958    {
19959        unsafe fn encode(
19960            self,
19961            encoder: &mut fidl::encoding::Encoder<'_, D>,
19962            offset: usize,
19963            mut depth: fidl::encoding::Depth,
19964        ) -> fidl::Result<()> {
19965            encoder.debug_check_bounds::<StreamBufferConstraints>(offset);
19966            // Vector header
19967            let max_ordinal: u64 = self.max_ordinal_present();
19968            encoder.write_num(max_ordinal, offset);
19969            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
19970            // Calling encoder.out_of_line_offset(0) is not allowed.
19971            if max_ordinal == 0 {
19972                return Ok(());
19973            }
19974            depth.increment()?;
19975            let envelope_size = 8;
19976            let bytes_len = max_ordinal as usize * envelope_size;
19977            #[allow(unused_variables)]
19978            let offset = encoder.out_of_line_offset(bytes_len);
19979            let mut _prev_end_offset: usize = 0;
19980            if 1 > max_ordinal {
19981                return Ok(());
19982            }
19983
19984            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
19985            // are envelope_size bytes.
19986            let cur_offset: usize = (1 - 1) * envelope_size;
19987
19988            // Zero reserved fields.
19989            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
19990
19991            // Safety:
19992            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
19993            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
19994            //   envelope_size bytes, there is always sufficient room.
19995            fidl::encoding::encode_in_envelope_optional::<u64, D>(
19996                self.buffer_constraints_version_ordinal
19997                    .as_ref()
19998                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
19999                encoder,
20000                offset + cur_offset,
20001                depth,
20002            )?;
20003
20004            _prev_end_offset = cur_offset + envelope_size;
20005            if 2 > max_ordinal {
20006                return Ok(());
20007            }
20008
20009            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20010            // are envelope_size bytes.
20011            let cur_offset: usize = (2 - 1) * envelope_size;
20012
20013            // Zero reserved fields.
20014            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20015
20016            // Safety:
20017            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20018            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20019            //   envelope_size bytes, there is always sufficient room.
20020            fidl::encoding::encode_in_envelope_optional::<StreamBufferSettings, D>(
20021                self.default_settings
20022                    .as_ref()
20023                    .map(<StreamBufferSettings as fidl::encoding::ValueTypeMarker>::borrow),
20024                encoder,
20025                offset + cur_offset,
20026                depth,
20027            )?;
20028
20029            _prev_end_offset = cur_offset + envelope_size;
20030            if 3 > max_ordinal {
20031                return Ok(());
20032            }
20033
20034            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20035            // are envelope_size bytes.
20036            let cur_offset: usize = (3 - 1) * envelope_size;
20037
20038            // Zero reserved fields.
20039            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20040
20041            // Safety:
20042            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20043            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20044            //   envelope_size bytes, there is always sufficient room.
20045            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20046                self.per_packet_buffer_bytes_min
20047                    .as_ref()
20048                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20049                encoder,
20050                offset + cur_offset,
20051                depth,
20052            )?;
20053
20054            _prev_end_offset = cur_offset + envelope_size;
20055            if 4 > max_ordinal {
20056                return Ok(());
20057            }
20058
20059            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20060            // are envelope_size bytes.
20061            let cur_offset: usize = (4 - 1) * envelope_size;
20062
20063            // Zero reserved fields.
20064            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20065
20066            // Safety:
20067            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20068            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20069            //   envelope_size bytes, there is always sufficient room.
20070            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20071                self.per_packet_buffer_bytes_recommended
20072                    .as_ref()
20073                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20074                encoder,
20075                offset + cur_offset,
20076                depth,
20077            )?;
20078
20079            _prev_end_offset = cur_offset + envelope_size;
20080            if 5 > max_ordinal {
20081                return Ok(());
20082            }
20083
20084            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20085            // are envelope_size bytes.
20086            let cur_offset: usize = (5 - 1) * envelope_size;
20087
20088            // Zero reserved fields.
20089            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20090
20091            // Safety:
20092            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20093            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20094            //   envelope_size bytes, there is always sufficient room.
20095            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20096                self.per_packet_buffer_bytes_max
20097                    .as_ref()
20098                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20099                encoder,
20100                offset + cur_offset,
20101                depth,
20102            )?;
20103
20104            _prev_end_offset = cur_offset + envelope_size;
20105            if 6 > max_ordinal {
20106                return Ok(());
20107            }
20108
20109            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20110            // are envelope_size bytes.
20111            let cur_offset: usize = (6 - 1) * envelope_size;
20112
20113            // Zero reserved fields.
20114            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20115
20116            // Safety:
20117            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20118            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20119            //   envelope_size bytes, there is always sufficient room.
20120            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20121                self.packet_count_for_server_min
20122                    .as_ref()
20123                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20124                encoder,
20125                offset + cur_offset,
20126                depth,
20127            )?;
20128
20129            _prev_end_offset = cur_offset + envelope_size;
20130            if 7 > max_ordinal {
20131                return Ok(());
20132            }
20133
20134            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20135            // are envelope_size bytes.
20136            let cur_offset: usize = (7 - 1) * envelope_size;
20137
20138            // Zero reserved fields.
20139            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20140
20141            // Safety:
20142            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20143            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20144            //   envelope_size bytes, there is always sufficient room.
20145            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20146                self.packet_count_for_server_recommended
20147                    .as_ref()
20148                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20149                encoder,
20150                offset + cur_offset,
20151                depth,
20152            )?;
20153
20154            _prev_end_offset = cur_offset + envelope_size;
20155            if 8 > max_ordinal {
20156                return Ok(());
20157            }
20158
20159            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20160            // are envelope_size bytes.
20161            let cur_offset: usize = (8 - 1) * envelope_size;
20162
20163            // Zero reserved fields.
20164            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20165
20166            // Safety:
20167            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20168            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20169            //   envelope_size bytes, there is always sufficient room.
20170            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20171                self.packet_count_for_server_recommended_max
20172                    .as_ref()
20173                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20174                encoder,
20175                offset + cur_offset,
20176                depth,
20177            )?;
20178
20179            _prev_end_offset = cur_offset + envelope_size;
20180            if 9 > max_ordinal {
20181                return Ok(());
20182            }
20183
20184            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20185            // are envelope_size bytes.
20186            let cur_offset: usize = (9 - 1) * envelope_size;
20187
20188            // Zero reserved fields.
20189            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20190
20191            // Safety:
20192            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20193            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20194            //   envelope_size bytes, there is always sufficient room.
20195            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20196                self.packet_count_for_server_max
20197                    .as_ref()
20198                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20199                encoder,
20200                offset + cur_offset,
20201                depth,
20202            )?;
20203
20204            _prev_end_offset = cur_offset + envelope_size;
20205            if 10 > max_ordinal {
20206                return Ok(());
20207            }
20208
20209            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20210            // are envelope_size bytes.
20211            let cur_offset: usize = (10 - 1) * envelope_size;
20212
20213            // Zero reserved fields.
20214            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20215
20216            // Safety:
20217            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20218            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20219            //   envelope_size bytes, there is always sufficient room.
20220            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20221                self.packet_count_for_client_min
20222                    .as_ref()
20223                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20224                encoder,
20225                offset + cur_offset,
20226                depth,
20227            )?;
20228
20229            _prev_end_offset = cur_offset + envelope_size;
20230            if 11 > max_ordinal {
20231                return Ok(());
20232            }
20233
20234            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20235            // are envelope_size bytes.
20236            let cur_offset: usize = (11 - 1) * envelope_size;
20237
20238            // Zero reserved fields.
20239            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20240
20241            // Safety:
20242            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20243            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20244            //   envelope_size bytes, there is always sufficient room.
20245            fidl::encoding::encode_in_envelope_optional::<u32, D>(
20246                self.packet_count_for_client_max
20247                    .as_ref()
20248                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
20249                encoder,
20250                offset + cur_offset,
20251                depth,
20252            )?;
20253
20254            _prev_end_offset = cur_offset + envelope_size;
20255            if 12 > max_ordinal {
20256                return Ok(());
20257            }
20258
20259            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20260            // are envelope_size bytes.
20261            let cur_offset: usize = (12 - 1) * envelope_size;
20262
20263            // Zero reserved fields.
20264            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20265
20266            // Safety:
20267            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20268            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20269            //   envelope_size bytes, there is always sufficient room.
20270            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20271                self.single_buffer_mode_allowed
20272                    .as_ref()
20273                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20274                encoder,
20275                offset + cur_offset,
20276                depth,
20277            )?;
20278
20279            _prev_end_offset = cur_offset + envelope_size;
20280            if 13 > max_ordinal {
20281                return Ok(());
20282            }
20283
20284            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
20285            // are envelope_size bytes.
20286            let cur_offset: usize = (13 - 1) * envelope_size;
20287
20288            // Zero reserved fields.
20289            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
20290
20291            // Safety:
20292            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
20293            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
20294            //   envelope_size bytes, there is always sufficient room.
20295            fidl::encoding::encode_in_envelope_optional::<bool, D>(
20296                self.is_physically_contiguous_required
20297                    .as_ref()
20298                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
20299                encoder,
20300                offset + cur_offset,
20301                depth,
20302            )?;
20303
20304            _prev_end_offset = cur_offset + envelope_size;
20305
20306            Ok(())
20307        }
20308    }
20309
20310    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
20311        for StreamBufferConstraints
20312    {
20313        #[inline(always)]
20314        fn new_empty() -> Self {
20315            Self::default()
20316        }
20317
20318        unsafe fn decode(
20319            &mut self,
20320            decoder: &mut fidl::encoding::Decoder<'_, D>,
20321            offset: usize,
20322            mut depth: fidl::encoding::Depth,
20323        ) -> fidl::Result<()> {
20324            decoder.debug_check_bounds::<Self>(offset);
20325            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
20326                None => return Err(fidl::Error::NotNullable),
20327                Some(len) => len,
20328            };
20329            // Calling decoder.out_of_line_offset(0) is not allowed.
20330            if len == 0 {
20331                return Ok(());
20332            };
20333            depth.increment()?;
20334            let envelope_size = 8;
20335            let bytes_len = len * envelope_size;
20336            let offset = decoder.out_of_line_offset(bytes_len)?;
20337            // Decode the envelope for each type.
20338            let mut _next_ordinal_to_read = 0;
20339            let mut next_offset = offset;
20340            let end_offset = offset + bytes_len;
20341            _next_ordinal_to_read += 1;
20342            if next_offset >= end_offset {
20343                return Ok(());
20344            }
20345
20346            // Decode unknown envelopes for gaps in ordinals.
20347            while _next_ordinal_to_read < 1 {
20348                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20349                _next_ordinal_to_read += 1;
20350                next_offset += envelope_size;
20351            }
20352
20353            let next_out_of_line = decoder.next_out_of_line();
20354            let handles_before = decoder.remaining_handles();
20355            if let Some((inlined, num_bytes, num_handles)) =
20356                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20357            {
20358                let member_inline_size =
20359                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20360                if inlined != (member_inline_size <= 4) {
20361                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20362                }
20363                let inner_offset;
20364                let mut inner_depth = depth.clone();
20365                if inlined {
20366                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20367                    inner_offset = next_offset;
20368                } else {
20369                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20370                    inner_depth.increment()?;
20371                }
20372                let val_ref = self
20373                    .buffer_constraints_version_ordinal
20374                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
20375                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
20376                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20377                {
20378                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20379                }
20380                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20381                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20382                }
20383            }
20384
20385            next_offset += envelope_size;
20386            _next_ordinal_to_read += 1;
20387            if next_offset >= end_offset {
20388                return Ok(());
20389            }
20390
20391            // Decode unknown envelopes for gaps in ordinals.
20392            while _next_ordinal_to_read < 2 {
20393                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20394                _next_ordinal_to_read += 1;
20395                next_offset += envelope_size;
20396            }
20397
20398            let next_out_of_line = decoder.next_out_of_line();
20399            let handles_before = decoder.remaining_handles();
20400            if let Some((inlined, num_bytes, num_handles)) =
20401                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20402            {
20403                let member_inline_size =
20404                    <StreamBufferSettings as fidl::encoding::TypeMarker>::inline_size(
20405                        decoder.context,
20406                    );
20407                if inlined != (member_inline_size <= 4) {
20408                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20409                }
20410                let inner_offset;
20411                let mut inner_depth = depth.clone();
20412                if inlined {
20413                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20414                    inner_offset = next_offset;
20415                } else {
20416                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20417                    inner_depth.increment()?;
20418                }
20419                let val_ref = self
20420                    .default_settings
20421                    .get_or_insert_with(|| fidl::new_empty!(StreamBufferSettings, D));
20422                fidl::decode!(
20423                    StreamBufferSettings,
20424                    D,
20425                    val_ref,
20426                    decoder,
20427                    inner_offset,
20428                    inner_depth
20429                )?;
20430                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20431                {
20432                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20433                }
20434                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20435                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20436                }
20437            }
20438
20439            next_offset += envelope_size;
20440            _next_ordinal_to_read += 1;
20441            if next_offset >= end_offset {
20442                return Ok(());
20443            }
20444
20445            // Decode unknown envelopes for gaps in ordinals.
20446            while _next_ordinal_to_read < 3 {
20447                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20448                _next_ordinal_to_read += 1;
20449                next_offset += envelope_size;
20450            }
20451
20452            let next_out_of_line = decoder.next_out_of_line();
20453            let handles_before = decoder.remaining_handles();
20454            if let Some((inlined, num_bytes, num_handles)) =
20455                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20456            {
20457                let member_inline_size =
20458                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20459                if inlined != (member_inline_size <= 4) {
20460                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20461                }
20462                let inner_offset;
20463                let mut inner_depth = depth.clone();
20464                if inlined {
20465                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20466                    inner_offset = next_offset;
20467                } else {
20468                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20469                    inner_depth.increment()?;
20470                }
20471                let val_ref = self
20472                    .per_packet_buffer_bytes_min
20473                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20474                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20475                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20476                {
20477                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20478                }
20479                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20480                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20481                }
20482            }
20483
20484            next_offset += envelope_size;
20485            _next_ordinal_to_read += 1;
20486            if next_offset >= end_offset {
20487                return Ok(());
20488            }
20489
20490            // Decode unknown envelopes for gaps in ordinals.
20491            while _next_ordinal_to_read < 4 {
20492                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20493                _next_ordinal_to_read += 1;
20494                next_offset += envelope_size;
20495            }
20496
20497            let next_out_of_line = decoder.next_out_of_line();
20498            let handles_before = decoder.remaining_handles();
20499            if let Some((inlined, num_bytes, num_handles)) =
20500                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20501            {
20502                let member_inline_size =
20503                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20504                if inlined != (member_inline_size <= 4) {
20505                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20506                }
20507                let inner_offset;
20508                let mut inner_depth = depth.clone();
20509                if inlined {
20510                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20511                    inner_offset = next_offset;
20512                } else {
20513                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20514                    inner_depth.increment()?;
20515                }
20516                let val_ref = self
20517                    .per_packet_buffer_bytes_recommended
20518                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20519                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20520                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20521                {
20522                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20523                }
20524                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20525                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20526                }
20527            }
20528
20529            next_offset += envelope_size;
20530            _next_ordinal_to_read += 1;
20531            if next_offset >= end_offset {
20532                return Ok(());
20533            }
20534
20535            // Decode unknown envelopes for gaps in ordinals.
20536            while _next_ordinal_to_read < 5 {
20537                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20538                _next_ordinal_to_read += 1;
20539                next_offset += envelope_size;
20540            }
20541
20542            let next_out_of_line = decoder.next_out_of_line();
20543            let handles_before = decoder.remaining_handles();
20544            if let Some((inlined, num_bytes, num_handles)) =
20545                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20546            {
20547                let member_inline_size =
20548                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20549                if inlined != (member_inline_size <= 4) {
20550                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20551                }
20552                let inner_offset;
20553                let mut inner_depth = depth.clone();
20554                if inlined {
20555                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20556                    inner_offset = next_offset;
20557                } else {
20558                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20559                    inner_depth.increment()?;
20560                }
20561                let val_ref = self
20562                    .per_packet_buffer_bytes_max
20563                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20564                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20565                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20566                {
20567                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20568                }
20569                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20570                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20571                }
20572            }
20573
20574            next_offset += envelope_size;
20575            _next_ordinal_to_read += 1;
20576            if next_offset >= end_offset {
20577                return Ok(());
20578            }
20579
20580            // Decode unknown envelopes for gaps in ordinals.
20581            while _next_ordinal_to_read < 6 {
20582                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20583                _next_ordinal_to_read += 1;
20584                next_offset += envelope_size;
20585            }
20586
20587            let next_out_of_line = decoder.next_out_of_line();
20588            let handles_before = decoder.remaining_handles();
20589            if let Some((inlined, num_bytes, num_handles)) =
20590                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20591            {
20592                let member_inline_size =
20593                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20594                if inlined != (member_inline_size <= 4) {
20595                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20596                }
20597                let inner_offset;
20598                let mut inner_depth = depth.clone();
20599                if inlined {
20600                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20601                    inner_offset = next_offset;
20602                } else {
20603                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20604                    inner_depth.increment()?;
20605                }
20606                let val_ref = self
20607                    .packet_count_for_server_min
20608                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20609                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20610                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20611                {
20612                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20613                }
20614                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20615                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20616                }
20617            }
20618
20619            next_offset += envelope_size;
20620            _next_ordinal_to_read += 1;
20621            if next_offset >= end_offset {
20622                return Ok(());
20623            }
20624
20625            // Decode unknown envelopes for gaps in ordinals.
20626            while _next_ordinal_to_read < 7 {
20627                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20628                _next_ordinal_to_read += 1;
20629                next_offset += envelope_size;
20630            }
20631
20632            let next_out_of_line = decoder.next_out_of_line();
20633            let handles_before = decoder.remaining_handles();
20634            if let Some((inlined, num_bytes, num_handles)) =
20635                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20636            {
20637                let member_inline_size =
20638                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20639                if inlined != (member_inline_size <= 4) {
20640                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20641                }
20642                let inner_offset;
20643                let mut inner_depth = depth.clone();
20644                if inlined {
20645                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20646                    inner_offset = next_offset;
20647                } else {
20648                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20649                    inner_depth.increment()?;
20650                }
20651                let val_ref = self
20652                    .packet_count_for_server_recommended
20653                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20654                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20655                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20656                {
20657                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20658                }
20659                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20660                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20661                }
20662            }
20663
20664            next_offset += envelope_size;
20665            _next_ordinal_to_read += 1;
20666            if next_offset >= end_offset {
20667                return Ok(());
20668            }
20669
20670            // Decode unknown envelopes for gaps in ordinals.
20671            while _next_ordinal_to_read < 8 {
20672                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20673                _next_ordinal_to_read += 1;
20674                next_offset += envelope_size;
20675            }
20676
20677            let next_out_of_line = decoder.next_out_of_line();
20678            let handles_before = decoder.remaining_handles();
20679            if let Some((inlined, num_bytes, num_handles)) =
20680                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20681            {
20682                let member_inline_size =
20683                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20684                if inlined != (member_inline_size <= 4) {
20685                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20686                }
20687                let inner_offset;
20688                let mut inner_depth = depth.clone();
20689                if inlined {
20690                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20691                    inner_offset = next_offset;
20692                } else {
20693                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20694                    inner_depth.increment()?;
20695                }
20696                let val_ref = self
20697                    .packet_count_for_server_recommended_max
20698                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20699                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20700                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20701                {
20702                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20703                }
20704                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20705                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20706                }
20707            }
20708
20709            next_offset += envelope_size;
20710            _next_ordinal_to_read += 1;
20711            if next_offset >= end_offset {
20712                return Ok(());
20713            }
20714
20715            // Decode unknown envelopes for gaps in ordinals.
20716            while _next_ordinal_to_read < 9 {
20717                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20718                _next_ordinal_to_read += 1;
20719                next_offset += envelope_size;
20720            }
20721
20722            let next_out_of_line = decoder.next_out_of_line();
20723            let handles_before = decoder.remaining_handles();
20724            if let Some((inlined, num_bytes, num_handles)) =
20725                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20726            {
20727                let member_inline_size =
20728                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20729                if inlined != (member_inline_size <= 4) {
20730                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20731                }
20732                let inner_offset;
20733                let mut inner_depth = depth.clone();
20734                if inlined {
20735                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20736                    inner_offset = next_offset;
20737                } else {
20738                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20739                    inner_depth.increment()?;
20740                }
20741                let val_ref = self
20742                    .packet_count_for_server_max
20743                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20744                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20745                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20746                {
20747                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20748                }
20749                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20750                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20751                }
20752            }
20753
20754            next_offset += envelope_size;
20755            _next_ordinal_to_read += 1;
20756            if next_offset >= end_offset {
20757                return Ok(());
20758            }
20759
20760            // Decode unknown envelopes for gaps in ordinals.
20761            while _next_ordinal_to_read < 10 {
20762                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20763                _next_ordinal_to_read += 1;
20764                next_offset += envelope_size;
20765            }
20766
20767            let next_out_of_line = decoder.next_out_of_line();
20768            let handles_before = decoder.remaining_handles();
20769            if let Some((inlined, num_bytes, num_handles)) =
20770                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20771            {
20772                let member_inline_size =
20773                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20774                if inlined != (member_inline_size <= 4) {
20775                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20776                }
20777                let inner_offset;
20778                let mut inner_depth = depth.clone();
20779                if inlined {
20780                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20781                    inner_offset = next_offset;
20782                } else {
20783                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20784                    inner_depth.increment()?;
20785                }
20786                let val_ref = self
20787                    .packet_count_for_client_min
20788                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20789                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20790                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20791                {
20792                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20793                }
20794                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20795                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20796                }
20797            }
20798
20799            next_offset += envelope_size;
20800            _next_ordinal_to_read += 1;
20801            if next_offset >= end_offset {
20802                return Ok(());
20803            }
20804
20805            // Decode unknown envelopes for gaps in ordinals.
20806            while _next_ordinal_to_read < 11 {
20807                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20808                _next_ordinal_to_read += 1;
20809                next_offset += envelope_size;
20810            }
20811
20812            let next_out_of_line = decoder.next_out_of_line();
20813            let handles_before = decoder.remaining_handles();
20814            if let Some((inlined, num_bytes, num_handles)) =
20815                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20816            {
20817                let member_inline_size =
20818                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20819                if inlined != (member_inline_size <= 4) {
20820                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20821                }
20822                let inner_offset;
20823                let mut inner_depth = depth.clone();
20824                if inlined {
20825                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20826                    inner_offset = next_offset;
20827                } else {
20828                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20829                    inner_depth.increment()?;
20830                }
20831                let val_ref = self
20832                    .packet_count_for_client_max
20833                    .get_or_insert_with(|| fidl::new_empty!(u32, D));
20834                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
20835                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20836                {
20837                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20838                }
20839                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20840                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20841                }
20842            }
20843
20844            next_offset += envelope_size;
20845            _next_ordinal_to_read += 1;
20846            if next_offset >= end_offset {
20847                return Ok(());
20848            }
20849
20850            // Decode unknown envelopes for gaps in ordinals.
20851            while _next_ordinal_to_read < 12 {
20852                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20853                _next_ordinal_to_read += 1;
20854                next_offset += envelope_size;
20855            }
20856
20857            let next_out_of_line = decoder.next_out_of_line();
20858            let handles_before = decoder.remaining_handles();
20859            if let Some((inlined, num_bytes, num_handles)) =
20860                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20861            {
20862                let member_inline_size =
20863                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20864                if inlined != (member_inline_size <= 4) {
20865                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20866                }
20867                let inner_offset;
20868                let mut inner_depth = depth.clone();
20869                if inlined {
20870                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20871                    inner_offset = next_offset;
20872                } else {
20873                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20874                    inner_depth.increment()?;
20875                }
20876                let val_ref = self
20877                    .single_buffer_mode_allowed
20878                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
20879                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
20880                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20881                {
20882                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20883                }
20884                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20885                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20886                }
20887            }
20888
20889            next_offset += envelope_size;
20890            _next_ordinal_to_read += 1;
20891            if next_offset >= end_offset {
20892                return Ok(());
20893            }
20894
20895            // Decode unknown envelopes for gaps in ordinals.
20896            while _next_ordinal_to_read < 13 {
20897                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20898                _next_ordinal_to_read += 1;
20899                next_offset += envelope_size;
20900            }
20901
20902            let next_out_of_line = decoder.next_out_of_line();
20903            let handles_before = decoder.remaining_handles();
20904            if let Some((inlined, num_bytes, num_handles)) =
20905                fidl::encoding::decode_envelope_header(decoder, next_offset)?
20906            {
20907                let member_inline_size =
20908                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
20909                if inlined != (member_inline_size <= 4) {
20910                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
20911                }
20912                let inner_offset;
20913                let mut inner_depth = depth.clone();
20914                if inlined {
20915                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
20916                    inner_offset = next_offset;
20917                } else {
20918                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
20919                    inner_depth.increment()?;
20920                }
20921                let val_ref = self
20922                    .is_physically_contiguous_required
20923                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
20924                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
20925                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
20926                {
20927                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
20928                }
20929                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
20930                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
20931                }
20932            }
20933
20934            next_offset += envelope_size;
20935
20936            // Decode the remaining unknown envelopes.
20937            while next_offset < end_offset {
20938                _next_ordinal_to_read += 1;
20939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
20940                next_offset += envelope_size;
20941            }
20942
20943            Ok(())
20944        }
20945    }
20946
20947    impl StreamBufferSettings {
20948        #[inline(always)]
20949        fn max_ordinal_present(&self) -> u64 {
20950            if let Some(_) = self.single_buffer_mode {
20951                return 6;
20952            }
20953            if let Some(_) = self.per_packet_buffer_bytes {
20954                return 5;
20955            }
20956            if let Some(_) = self.packet_count_for_client {
20957                return 4;
20958            }
20959            if let Some(_) = self.packet_count_for_server {
20960                return 3;
20961            }
20962            if let Some(_) = self.buffer_constraints_version_ordinal {
20963                return 2;
20964            }
20965            if let Some(_) = self.buffer_lifetime_ordinal {
20966                return 1;
20967            }
20968            0
20969        }
20970    }
20971
20972    impl fidl::encoding::ValueTypeMarker for StreamBufferSettings {
20973        type Borrowed<'a> = &'a Self;
20974        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
20975            value
20976        }
20977    }
20978
20979    unsafe impl fidl::encoding::TypeMarker for StreamBufferSettings {
20980        type Owned = Self;
20981
20982        #[inline(always)]
20983        fn inline_align(_context: fidl::encoding::Context) -> usize {
20984            8
20985        }
20986
20987        #[inline(always)]
20988        fn inline_size(_context: fidl::encoding::Context) -> usize {
20989            16
20990        }
20991    }
20992
20993    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamBufferSettings, D>
20994        for &StreamBufferSettings
20995    {
20996        unsafe fn encode(
20997            self,
20998            encoder: &mut fidl::encoding::Encoder<'_, D>,
20999            offset: usize,
21000            mut depth: fidl::encoding::Depth,
21001        ) -> fidl::Result<()> {
21002            encoder.debug_check_bounds::<StreamBufferSettings>(offset);
21003            // Vector header
21004            let max_ordinal: u64 = self.max_ordinal_present();
21005            encoder.write_num(max_ordinal, offset);
21006            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21007            // Calling encoder.out_of_line_offset(0) is not allowed.
21008            if max_ordinal == 0 {
21009                return Ok(());
21010            }
21011            depth.increment()?;
21012            let envelope_size = 8;
21013            let bytes_len = max_ordinal as usize * envelope_size;
21014            #[allow(unused_variables)]
21015            let offset = encoder.out_of_line_offset(bytes_len);
21016            let mut _prev_end_offset: usize = 0;
21017            if 1 > max_ordinal {
21018                return Ok(());
21019            }
21020
21021            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21022            // are envelope_size bytes.
21023            let cur_offset: usize = (1 - 1) * envelope_size;
21024
21025            // Zero reserved fields.
21026            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21027
21028            // Safety:
21029            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21030            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21031            //   envelope_size bytes, there is always sufficient room.
21032            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21033                self.buffer_lifetime_ordinal
21034                    .as_ref()
21035                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21036                encoder,
21037                offset + cur_offset,
21038                depth,
21039            )?;
21040
21041            _prev_end_offset = cur_offset + envelope_size;
21042            if 2 > max_ordinal {
21043                return Ok(());
21044            }
21045
21046            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21047            // are envelope_size bytes.
21048            let cur_offset: usize = (2 - 1) * envelope_size;
21049
21050            // Zero reserved fields.
21051            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21052
21053            // Safety:
21054            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21055            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21056            //   envelope_size bytes, there is always sufficient room.
21057            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21058                self.buffer_constraints_version_ordinal
21059                    .as_ref()
21060                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21061                encoder,
21062                offset + cur_offset,
21063                depth,
21064            )?;
21065
21066            _prev_end_offset = cur_offset + envelope_size;
21067            if 3 > max_ordinal {
21068                return Ok(());
21069            }
21070
21071            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21072            // are envelope_size bytes.
21073            let cur_offset: usize = (3 - 1) * envelope_size;
21074
21075            // Zero reserved fields.
21076            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21077
21078            // Safety:
21079            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21080            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21081            //   envelope_size bytes, there is always sufficient room.
21082            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21083                self.packet_count_for_server
21084                    .as_ref()
21085                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21086                encoder,
21087                offset + cur_offset,
21088                depth,
21089            )?;
21090
21091            _prev_end_offset = cur_offset + envelope_size;
21092            if 4 > max_ordinal {
21093                return Ok(());
21094            }
21095
21096            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21097            // are envelope_size bytes.
21098            let cur_offset: usize = (4 - 1) * envelope_size;
21099
21100            // Zero reserved fields.
21101            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21102
21103            // Safety:
21104            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21105            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21106            //   envelope_size bytes, there is always sufficient room.
21107            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21108                self.packet_count_for_client
21109                    .as_ref()
21110                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21111                encoder,
21112                offset + cur_offset,
21113                depth,
21114            )?;
21115
21116            _prev_end_offset = cur_offset + envelope_size;
21117            if 5 > max_ordinal {
21118                return Ok(());
21119            }
21120
21121            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21122            // are envelope_size bytes.
21123            let cur_offset: usize = (5 - 1) * envelope_size;
21124
21125            // Zero reserved fields.
21126            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21127
21128            // Safety:
21129            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21130            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21131            //   envelope_size bytes, there is always sufficient room.
21132            fidl::encoding::encode_in_envelope_optional::<u32, D>(
21133                self.per_packet_buffer_bytes
21134                    .as_ref()
21135                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
21136                encoder,
21137                offset + cur_offset,
21138                depth,
21139            )?;
21140
21141            _prev_end_offset = cur_offset + envelope_size;
21142            if 6 > max_ordinal {
21143                return Ok(());
21144            }
21145
21146            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21147            // are envelope_size bytes.
21148            let cur_offset: usize = (6 - 1) * envelope_size;
21149
21150            // Zero reserved fields.
21151            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21152
21153            // Safety:
21154            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21155            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21156            //   envelope_size bytes, there is always sufficient room.
21157            fidl::encoding::encode_in_envelope_optional::<bool, D>(
21158                self.single_buffer_mode
21159                    .as_ref()
21160                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
21161                encoder,
21162                offset + cur_offset,
21163                depth,
21164            )?;
21165
21166            _prev_end_offset = cur_offset + envelope_size;
21167
21168            Ok(())
21169        }
21170    }
21171
21172    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamBufferSettings {
21173        #[inline(always)]
21174        fn new_empty() -> Self {
21175            Self::default()
21176        }
21177
21178        unsafe fn decode(
21179            &mut self,
21180            decoder: &mut fidl::encoding::Decoder<'_, D>,
21181            offset: usize,
21182            mut depth: fidl::encoding::Depth,
21183        ) -> fidl::Result<()> {
21184            decoder.debug_check_bounds::<Self>(offset);
21185            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21186                None => return Err(fidl::Error::NotNullable),
21187                Some(len) => len,
21188            };
21189            // Calling decoder.out_of_line_offset(0) is not allowed.
21190            if len == 0 {
21191                return Ok(());
21192            };
21193            depth.increment()?;
21194            let envelope_size = 8;
21195            let bytes_len = len * envelope_size;
21196            let offset = decoder.out_of_line_offset(bytes_len)?;
21197            // Decode the envelope for each type.
21198            let mut _next_ordinal_to_read = 0;
21199            let mut next_offset = offset;
21200            let end_offset = offset + bytes_len;
21201            _next_ordinal_to_read += 1;
21202            if next_offset >= end_offset {
21203                return Ok(());
21204            }
21205
21206            // Decode unknown envelopes for gaps in ordinals.
21207            while _next_ordinal_to_read < 1 {
21208                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21209                _next_ordinal_to_read += 1;
21210                next_offset += envelope_size;
21211            }
21212
21213            let next_out_of_line = decoder.next_out_of_line();
21214            let handles_before = decoder.remaining_handles();
21215            if let Some((inlined, num_bytes, num_handles)) =
21216                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21217            {
21218                let member_inline_size =
21219                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21220                if inlined != (member_inline_size <= 4) {
21221                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21222                }
21223                let inner_offset;
21224                let mut inner_depth = depth.clone();
21225                if inlined {
21226                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21227                    inner_offset = next_offset;
21228                } else {
21229                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21230                    inner_depth.increment()?;
21231                }
21232                let val_ref =
21233                    self.buffer_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
21234                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21235                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21236                {
21237                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21238                }
21239                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21240                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21241                }
21242            }
21243
21244            next_offset += envelope_size;
21245            _next_ordinal_to_read += 1;
21246            if next_offset >= end_offset {
21247                return Ok(());
21248            }
21249
21250            // Decode unknown envelopes for gaps in ordinals.
21251            while _next_ordinal_to_read < 2 {
21252                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21253                _next_ordinal_to_read += 1;
21254                next_offset += envelope_size;
21255            }
21256
21257            let next_out_of_line = decoder.next_out_of_line();
21258            let handles_before = decoder.remaining_handles();
21259            if let Some((inlined, num_bytes, num_handles)) =
21260                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21261            {
21262                let member_inline_size =
21263                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21264                if inlined != (member_inline_size <= 4) {
21265                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21266                }
21267                let inner_offset;
21268                let mut inner_depth = depth.clone();
21269                if inlined {
21270                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21271                    inner_offset = next_offset;
21272                } else {
21273                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21274                    inner_depth.increment()?;
21275                }
21276                let val_ref = self
21277                    .buffer_constraints_version_ordinal
21278                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
21279                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21280                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21281                {
21282                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21283                }
21284                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21285                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21286                }
21287            }
21288
21289            next_offset += envelope_size;
21290            _next_ordinal_to_read += 1;
21291            if next_offset >= end_offset {
21292                return Ok(());
21293            }
21294
21295            // Decode unknown envelopes for gaps in ordinals.
21296            while _next_ordinal_to_read < 3 {
21297                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21298                _next_ordinal_to_read += 1;
21299                next_offset += envelope_size;
21300            }
21301
21302            let next_out_of_line = decoder.next_out_of_line();
21303            let handles_before = decoder.remaining_handles();
21304            if let Some((inlined, num_bytes, num_handles)) =
21305                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21306            {
21307                let member_inline_size =
21308                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21309                if inlined != (member_inline_size <= 4) {
21310                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21311                }
21312                let inner_offset;
21313                let mut inner_depth = depth.clone();
21314                if inlined {
21315                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21316                    inner_offset = next_offset;
21317                } else {
21318                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21319                    inner_depth.increment()?;
21320                }
21321                let val_ref =
21322                    self.packet_count_for_server.get_or_insert_with(|| fidl::new_empty!(u32, D));
21323                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21324                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21325                {
21326                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21327                }
21328                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21329                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21330                }
21331            }
21332
21333            next_offset += envelope_size;
21334            _next_ordinal_to_read += 1;
21335            if next_offset >= end_offset {
21336                return Ok(());
21337            }
21338
21339            // Decode unknown envelopes for gaps in ordinals.
21340            while _next_ordinal_to_read < 4 {
21341                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21342                _next_ordinal_to_read += 1;
21343                next_offset += envelope_size;
21344            }
21345
21346            let next_out_of_line = decoder.next_out_of_line();
21347            let handles_before = decoder.remaining_handles();
21348            if let Some((inlined, num_bytes, num_handles)) =
21349                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21350            {
21351                let member_inline_size =
21352                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21353                if inlined != (member_inline_size <= 4) {
21354                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21355                }
21356                let inner_offset;
21357                let mut inner_depth = depth.clone();
21358                if inlined {
21359                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21360                    inner_offset = next_offset;
21361                } else {
21362                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21363                    inner_depth.increment()?;
21364                }
21365                let val_ref =
21366                    self.packet_count_for_client.get_or_insert_with(|| fidl::new_empty!(u32, D));
21367                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21368                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21369                {
21370                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21371                }
21372                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21373                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21374                }
21375            }
21376
21377            next_offset += envelope_size;
21378            _next_ordinal_to_read += 1;
21379            if next_offset >= end_offset {
21380                return Ok(());
21381            }
21382
21383            // Decode unknown envelopes for gaps in ordinals.
21384            while _next_ordinal_to_read < 5 {
21385                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21386                _next_ordinal_to_read += 1;
21387                next_offset += envelope_size;
21388            }
21389
21390            let next_out_of_line = decoder.next_out_of_line();
21391            let handles_before = decoder.remaining_handles();
21392            if let Some((inlined, num_bytes, num_handles)) =
21393                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21394            {
21395                let member_inline_size =
21396                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21397                if inlined != (member_inline_size <= 4) {
21398                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21399                }
21400                let inner_offset;
21401                let mut inner_depth = depth.clone();
21402                if inlined {
21403                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21404                    inner_offset = next_offset;
21405                } else {
21406                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21407                    inner_depth.increment()?;
21408                }
21409                let val_ref =
21410                    self.per_packet_buffer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
21411                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
21412                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21413                {
21414                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21415                }
21416                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21417                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21418                }
21419            }
21420
21421            next_offset += envelope_size;
21422            _next_ordinal_to_read += 1;
21423            if next_offset >= end_offset {
21424                return Ok(());
21425            }
21426
21427            // Decode unknown envelopes for gaps in ordinals.
21428            while _next_ordinal_to_read < 6 {
21429                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21430                _next_ordinal_to_read += 1;
21431                next_offset += envelope_size;
21432            }
21433
21434            let next_out_of_line = decoder.next_out_of_line();
21435            let handles_before = decoder.remaining_handles();
21436            if let Some((inlined, num_bytes, num_handles)) =
21437                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21438            {
21439                let member_inline_size =
21440                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21441                if inlined != (member_inline_size <= 4) {
21442                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21443                }
21444                let inner_offset;
21445                let mut inner_depth = depth.clone();
21446                if inlined {
21447                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21448                    inner_offset = next_offset;
21449                } else {
21450                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21451                    inner_depth.increment()?;
21452                }
21453                let val_ref =
21454                    self.single_buffer_mode.get_or_insert_with(|| fidl::new_empty!(bool, D));
21455                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21456                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21457                {
21458                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21459                }
21460                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21461                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21462                }
21463            }
21464
21465            next_offset += envelope_size;
21466
21467            // Decode the remaining unknown envelopes.
21468            while next_offset < end_offset {
21469                _next_ordinal_to_read += 1;
21470                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21471                next_offset += envelope_size;
21472            }
21473
21474            Ok(())
21475        }
21476    }
21477
21478    impl StreamOutputConstraints {
21479        #[inline(always)]
21480        fn max_ordinal_present(&self) -> u64 {
21481            if let Some(_) = self.buffer_constraints {
21482                return 3;
21483            }
21484            if let Some(_) = self.buffer_constraints_action_required {
21485                return 2;
21486            }
21487            if let Some(_) = self.stream_lifetime_ordinal {
21488                return 1;
21489            }
21490            0
21491        }
21492    }
21493
21494    impl fidl::encoding::ValueTypeMarker for StreamOutputConstraints {
21495        type Borrowed<'a> = &'a Self;
21496        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21497            value
21498        }
21499    }
21500
21501    unsafe impl fidl::encoding::TypeMarker for StreamOutputConstraints {
21502        type Owned = Self;
21503
21504        #[inline(always)]
21505        fn inline_align(_context: fidl::encoding::Context) -> usize {
21506            8
21507        }
21508
21509        #[inline(always)]
21510        fn inline_size(_context: fidl::encoding::Context) -> usize {
21511            16
21512        }
21513    }
21514
21515    unsafe impl<D: fidl::encoding::ResourceDialect>
21516        fidl::encoding::Encode<StreamOutputConstraints, D> for &StreamOutputConstraints
21517    {
21518        unsafe fn encode(
21519            self,
21520            encoder: &mut fidl::encoding::Encoder<'_, D>,
21521            offset: usize,
21522            mut depth: fidl::encoding::Depth,
21523        ) -> fidl::Result<()> {
21524            encoder.debug_check_bounds::<StreamOutputConstraints>(offset);
21525            // Vector header
21526            let max_ordinal: u64 = self.max_ordinal_present();
21527            encoder.write_num(max_ordinal, offset);
21528            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21529            // Calling encoder.out_of_line_offset(0) is not allowed.
21530            if max_ordinal == 0 {
21531                return Ok(());
21532            }
21533            depth.increment()?;
21534            let envelope_size = 8;
21535            let bytes_len = max_ordinal as usize * envelope_size;
21536            #[allow(unused_variables)]
21537            let offset = encoder.out_of_line_offset(bytes_len);
21538            let mut _prev_end_offset: usize = 0;
21539            if 1 > max_ordinal {
21540                return Ok(());
21541            }
21542
21543            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21544            // are envelope_size bytes.
21545            let cur_offset: usize = (1 - 1) * envelope_size;
21546
21547            // Zero reserved fields.
21548            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21549
21550            // Safety:
21551            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21552            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21553            //   envelope_size bytes, there is always sufficient room.
21554            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21555                self.stream_lifetime_ordinal
21556                    .as_ref()
21557                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21558                encoder,
21559                offset + cur_offset,
21560                depth,
21561            )?;
21562
21563            _prev_end_offset = cur_offset + envelope_size;
21564            if 2 > max_ordinal {
21565                return Ok(());
21566            }
21567
21568            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21569            // are envelope_size bytes.
21570            let cur_offset: usize = (2 - 1) * envelope_size;
21571
21572            // Zero reserved fields.
21573            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21574
21575            // Safety:
21576            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21577            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21578            //   envelope_size bytes, there is always sufficient room.
21579            fidl::encoding::encode_in_envelope_optional::<bool, D>(
21580                self.buffer_constraints_action_required
21581                    .as_ref()
21582                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
21583                encoder,
21584                offset + cur_offset,
21585                depth,
21586            )?;
21587
21588            _prev_end_offset = cur_offset + envelope_size;
21589            if 3 > max_ordinal {
21590                return Ok(());
21591            }
21592
21593            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21594            // are envelope_size bytes.
21595            let cur_offset: usize = (3 - 1) * envelope_size;
21596
21597            // Zero reserved fields.
21598            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21599
21600            // Safety:
21601            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21602            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21603            //   envelope_size bytes, there is always sufficient room.
21604            fidl::encoding::encode_in_envelope_optional::<StreamBufferConstraints, D>(
21605                self.buffer_constraints
21606                    .as_ref()
21607                    .map(<StreamBufferConstraints as fidl::encoding::ValueTypeMarker>::borrow),
21608                encoder,
21609                offset + cur_offset,
21610                depth,
21611            )?;
21612
21613            _prev_end_offset = cur_offset + envelope_size;
21614
21615            Ok(())
21616        }
21617    }
21618
21619    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
21620        for StreamOutputConstraints
21621    {
21622        #[inline(always)]
21623        fn new_empty() -> Self {
21624            Self::default()
21625        }
21626
21627        unsafe fn decode(
21628            &mut self,
21629            decoder: &mut fidl::encoding::Decoder<'_, D>,
21630            offset: usize,
21631            mut depth: fidl::encoding::Depth,
21632        ) -> fidl::Result<()> {
21633            decoder.debug_check_bounds::<Self>(offset);
21634            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21635                None => return Err(fidl::Error::NotNullable),
21636                Some(len) => len,
21637            };
21638            // Calling decoder.out_of_line_offset(0) is not allowed.
21639            if len == 0 {
21640                return Ok(());
21641            };
21642            depth.increment()?;
21643            let envelope_size = 8;
21644            let bytes_len = len * envelope_size;
21645            let offset = decoder.out_of_line_offset(bytes_len)?;
21646            // Decode the envelope for each type.
21647            let mut _next_ordinal_to_read = 0;
21648            let mut next_offset = offset;
21649            let end_offset = offset + bytes_len;
21650            _next_ordinal_to_read += 1;
21651            if next_offset >= end_offset {
21652                return Ok(());
21653            }
21654
21655            // Decode unknown envelopes for gaps in ordinals.
21656            while _next_ordinal_to_read < 1 {
21657                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21658                _next_ordinal_to_read += 1;
21659                next_offset += envelope_size;
21660            }
21661
21662            let next_out_of_line = decoder.next_out_of_line();
21663            let handles_before = decoder.remaining_handles();
21664            if let Some((inlined, num_bytes, num_handles)) =
21665                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21666            {
21667                let member_inline_size =
21668                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21669                if inlined != (member_inline_size <= 4) {
21670                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21671                }
21672                let inner_offset;
21673                let mut inner_depth = depth.clone();
21674                if inlined {
21675                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21676                    inner_offset = next_offset;
21677                } else {
21678                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21679                    inner_depth.increment()?;
21680                }
21681                let val_ref =
21682                    self.stream_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
21683                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21684                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21685                {
21686                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21687                }
21688                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21689                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21690                }
21691            }
21692
21693            next_offset += envelope_size;
21694            _next_ordinal_to_read += 1;
21695            if next_offset >= end_offset {
21696                return Ok(());
21697            }
21698
21699            // Decode unknown envelopes for gaps in ordinals.
21700            while _next_ordinal_to_read < 2 {
21701                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21702                _next_ordinal_to_read += 1;
21703                next_offset += envelope_size;
21704            }
21705
21706            let next_out_of_line = decoder.next_out_of_line();
21707            let handles_before = decoder.remaining_handles();
21708            if let Some((inlined, num_bytes, num_handles)) =
21709                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21710            {
21711                let member_inline_size =
21712                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21713                if inlined != (member_inline_size <= 4) {
21714                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21715                }
21716                let inner_offset;
21717                let mut inner_depth = depth.clone();
21718                if inlined {
21719                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21720                    inner_offset = next_offset;
21721                } else {
21722                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21723                    inner_depth.increment()?;
21724                }
21725                let val_ref = self
21726                    .buffer_constraints_action_required
21727                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
21728                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
21729                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21730                {
21731                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21732                }
21733                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21734                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21735                }
21736            }
21737
21738            next_offset += envelope_size;
21739            _next_ordinal_to_read += 1;
21740            if next_offset >= end_offset {
21741                return Ok(());
21742            }
21743
21744            // Decode unknown envelopes for gaps in ordinals.
21745            while _next_ordinal_to_read < 3 {
21746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21747                _next_ordinal_to_read += 1;
21748                next_offset += envelope_size;
21749            }
21750
21751            let next_out_of_line = decoder.next_out_of_line();
21752            let handles_before = decoder.remaining_handles();
21753            if let Some((inlined, num_bytes, num_handles)) =
21754                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21755            {
21756                let member_inline_size =
21757                    <StreamBufferConstraints as fidl::encoding::TypeMarker>::inline_size(
21758                        decoder.context,
21759                    );
21760                if inlined != (member_inline_size <= 4) {
21761                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21762                }
21763                let inner_offset;
21764                let mut inner_depth = depth.clone();
21765                if inlined {
21766                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21767                    inner_offset = next_offset;
21768                } else {
21769                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21770                    inner_depth.increment()?;
21771                }
21772                let val_ref = self
21773                    .buffer_constraints
21774                    .get_or_insert_with(|| fidl::new_empty!(StreamBufferConstraints, D));
21775                fidl::decode!(
21776                    StreamBufferConstraints,
21777                    D,
21778                    val_ref,
21779                    decoder,
21780                    inner_offset,
21781                    inner_depth
21782                )?;
21783                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21784                {
21785                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21786                }
21787                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21788                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21789                }
21790            }
21791
21792            next_offset += envelope_size;
21793
21794            // Decode the remaining unknown envelopes.
21795            while next_offset < end_offset {
21796                _next_ordinal_to_read += 1;
21797                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21798                next_offset += envelope_size;
21799            }
21800
21801            Ok(())
21802        }
21803    }
21804
21805    impl StreamOutputFormat {
21806        #[inline(always)]
21807        fn max_ordinal_present(&self) -> u64 {
21808            if let Some(_) = self.format_details {
21809                return 2;
21810            }
21811            if let Some(_) = self.stream_lifetime_ordinal {
21812                return 1;
21813            }
21814            0
21815        }
21816    }
21817
21818    impl fidl::encoding::ValueTypeMarker for StreamOutputFormat {
21819        type Borrowed<'a> = &'a Self;
21820        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
21821            value
21822        }
21823    }
21824
21825    unsafe impl fidl::encoding::TypeMarker for StreamOutputFormat {
21826        type Owned = Self;
21827
21828        #[inline(always)]
21829        fn inline_align(_context: fidl::encoding::Context) -> usize {
21830            8
21831        }
21832
21833        #[inline(always)]
21834        fn inline_size(_context: fidl::encoding::Context) -> usize {
21835            16
21836        }
21837    }
21838
21839    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamOutputFormat, D>
21840        for &StreamOutputFormat
21841    {
21842        unsafe fn encode(
21843            self,
21844            encoder: &mut fidl::encoding::Encoder<'_, D>,
21845            offset: usize,
21846            mut depth: fidl::encoding::Depth,
21847        ) -> fidl::Result<()> {
21848            encoder.debug_check_bounds::<StreamOutputFormat>(offset);
21849            // Vector header
21850            let max_ordinal: u64 = self.max_ordinal_present();
21851            encoder.write_num(max_ordinal, offset);
21852            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
21853            // Calling encoder.out_of_line_offset(0) is not allowed.
21854            if max_ordinal == 0 {
21855                return Ok(());
21856            }
21857            depth.increment()?;
21858            let envelope_size = 8;
21859            let bytes_len = max_ordinal as usize * envelope_size;
21860            #[allow(unused_variables)]
21861            let offset = encoder.out_of_line_offset(bytes_len);
21862            let mut _prev_end_offset: usize = 0;
21863            if 1 > max_ordinal {
21864                return Ok(());
21865            }
21866
21867            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21868            // are envelope_size bytes.
21869            let cur_offset: usize = (1 - 1) * envelope_size;
21870
21871            // Zero reserved fields.
21872            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21873
21874            // Safety:
21875            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21876            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21877            //   envelope_size bytes, there is always sufficient room.
21878            fidl::encoding::encode_in_envelope_optional::<u64, D>(
21879                self.stream_lifetime_ordinal
21880                    .as_ref()
21881                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
21882                encoder,
21883                offset + cur_offset,
21884                depth,
21885            )?;
21886
21887            _prev_end_offset = cur_offset + envelope_size;
21888            if 2 > max_ordinal {
21889                return Ok(());
21890            }
21891
21892            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
21893            // are envelope_size bytes.
21894            let cur_offset: usize = (2 - 1) * envelope_size;
21895
21896            // Zero reserved fields.
21897            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
21898
21899            // Safety:
21900            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
21901            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
21902            //   envelope_size bytes, there is always sufficient room.
21903            fidl::encoding::encode_in_envelope_optional::<FormatDetails, D>(
21904                self.format_details
21905                    .as_ref()
21906                    .map(<FormatDetails as fidl::encoding::ValueTypeMarker>::borrow),
21907                encoder,
21908                offset + cur_offset,
21909                depth,
21910            )?;
21911
21912            _prev_end_offset = cur_offset + envelope_size;
21913
21914            Ok(())
21915        }
21916    }
21917
21918    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamOutputFormat {
21919        #[inline(always)]
21920        fn new_empty() -> Self {
21921            Self::default()
21922        }
21923
21924        unsafe fn decode(
21925            &mut self,
21926            decoder: &mut fidl::encoding::Decoder<'_, D>,
21927            offset: usize,
21928            mut depth: fidl::encoding::Depth,
21929        ) -> fidl::Result<()> {
21930            decoder.debug_check_bounds::<Self>(offset);
21931            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
21932                None => return Err(fidl::Error::NotNullable),
21933                Some(len) => len,
21934            };
21935            // Calling decoder.out_of_line_offset(0) is not allowed.
21936            if len == 0 {
21937                return Ok(());
21938            };
21939            depth.increment()?;
21940            let envelope_size = 8;
21941            let bytes_len = len * envelope_size;
21942            let offset = decoder.out_of_line_offset(bytes_len)?;
21943            // Decode the envelope for each type.
21944            let mut _next_ordinal_to_read = 0;
21945            let mut next_offset = offset;
21946            let end_offset = offset + bytes_len;
21947            _next_ordinal_to_read += 1;
21948            if next_offset >= end_offset {
21949                return Ok(());
21950            }
21951
21952            // Decode unknown envelopes for gaps in ordinals.
21953            while _next_ordinal_to_read < 1 {
21954                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21955                _next_ordinal_to_read += 1;
21956                next_offset += envelope_size;
21957            }
21958
21959            let next_out_of_line = decoder.next_out_of_line();
21960            let handles_before = decoder.remaining_handles();
21961            if let Some((inlined, num_bytes, num_handles)) =
21962                fidl::encoding::decode_envelope_header(decoder, next_offset)?
21963            {
21964                let member_inline_size =
21965                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
21966                if inlined != (member_inline_size <= 4) {
21967                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
21968                }
21969                let inner_offset;
21970                let mut inner_depth = depth.clone();
21971                if inlined {
21972                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
21973                    inner_offset = next_offset;
21974                } else {
21975                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
21976                    inner_depth.increment()?;
21977                }
21978                let val_ref =
21979                    self.stream_lifetime_ordinal.get_or_insert_with(|| fidl::new_empty!(u64, D));
21980                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
21981                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
21982                {
21983                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
21984                }
21985                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
21986                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
21987                }
21988            }
21989
21990            next_offset += envelope_size;
21991            _next_ordinal_to_read += 1;
21992            if next_offset >= end_offset {
21993                return Ok(());
21994            }
21995
21996            // Decode unknown envelopes for gaps in ordinals.
21997            while _next_ordinal_to_read < 2 {
21998                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
21999                _next_ordinal_to_read += 1;
22000                next_offset += envelope_size;
22001            }
22002
22003            let next_out_of_line = decoder.next_out_of_line();
22004            let handles_before = decoder.remaining_handles();
22005            if let Some((inlined, num_bytes, num_handles)) =
22006                fidl::encoding::decode_envelope_header(decoder, next_offset)?
22007            {
22008                let member_inline_size =
22009                    <FormatDetails as fidl::encoding::TypeMarker>::inline_size(decoder.context);
22010                if inlined != (member_inline_size <= 4) {
22011                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
22012                }
22013                let inner_offset;
22014                let mut inner_depth = depth.clone();
22015                if inlined {
22016                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
22017                    inner_offset = next_offset;
22018                } else {
22019                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22020                    inner_depth.increment()?;
22021                }
22022                let val_ref =
22023                    self.format_details.get_or_insert_with(|| fidl::new_empty!(FormatDetails, D));
22024                fidl::decode!(FormatDetails, D, val_ref, decoder, inner_offset, inner_depth)?;
22025                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
22026                {
22027                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
22028                }
22029                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22030                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22031                }
22032            }
22033
22034            next_offset += envelope_size;
22035
22036            // Decode the remaining unknown envelopes.
22037            while next_offset < end_offset {
22038                _next_ordinal_to_read += 1;
22039                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22040                next_offset += envelope_size;
22041            }
22042
22043            Ok(())
22044        }
22045    }
22046
22047    impl UsageStateDucked {
22048        #[inline(always)]
22049        fn max_ordinal_present(&self) -> u64 {
22050            0
22051        }
22052    }
22053
22054    impl fidl::encoding::ValueTypeMarker for UsageStateDucked {
22055        type Borrowed<'a> = &'a Self;
22056        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22057            value
22058        }
22059    }
22060
22061    unsafe impl fidl::encoding::TypeMarker for UsageStateDucked {
22062        type Owned = Self;
22063
22064        #[inline(always)]
22065        fn inline_align(_context: fidl::encoding::Context) -> usize {
22066            8
22067        }
22068
22069        #[inline(always)]
22070        fn inline_size(_context: fidl::encoding::Context) -> usize {
22071            16
22072        }
22073    }
22074
22075    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageStateDucked, D>
22076        for &UsageStateDucked
22077    {
22078        unsafe fn encode(
22079            self,
22080            encoder: &mut fidl::encoding::Encoder<'_, D>,
22081            offset: usize,
22082            mut depth: fidl::encoding::Depth,
22083        ) -> fidl::Result<()> {
22084            encoder.debug_check_bounds::<UsageStateDucked>(offset);
22085            // Vector header
22086            let max_ordinal: u64 = self.max_ordinal_present();
22087            encoder.write_num(max_ordinal, offset);
22088            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22089            // Calling encoder.out_of_line_offset(0) is not allowed.
22090            if max_ordinal == 0 {
22091                return Ok(());
22092            }
22093            depth.increment()?;
22094            let envelope_size = 8;
22095            let bytes_len = max_ordinal as usize * envelope_size;
22096            #[allow(unused_variables)]
22097            let offset = encoder.out_of_line_offset(bytes_len);
22098            let mut _prev_end_offset: usize = 0;
22099
22100            Ok(())
22101        }
22102    }
22103
22104    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageStateDucked {
22105        #[inline(always)]
22106        fn new_empty() -> Self {
22107            Self::default()
22108        }
22109
22110        unsafe fn decode(
22111            &mut self,
22112            decoder: &mut fidl::encoding::Decoder<'_, D>,
22113            offset: usize,
22114            mut depth: fidl::encoding::Depth,
22115        ) -> fidl::Result<()> {
22116            decoder.debug_check_bounds::<Self>(offset);
22117            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22118                None => return Err(fidl::Error::NotNullable),
22119                Some(len) => len,
22120            };
22121            // Calling decoder.out_of_line_offset(0) is not allowed.
22122            if len == 0 {
22123                return Ok(());
22124            };
22125            depth.increment()?;
22126            let envelope_size = 8;
22127            let bytes_len = len * envelope_size;
22128            let offset = decoder.out_of_line_offset(bytes_len)?;
22129            // Decode the envelope for each type.
22130            let mut _next_ordinal_to_read = 0;
22131            let mut next_offset = offset;
22132            let end_offset = offset + bytes_len;
22133
22134            // Decode the remaining unknown envelopes.
22135            while next_offset < end_offset {
22136                _next_ordinal_to_read += 1;
22137                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22138                next_offset += envelope_size;
22139            }
22140
22141            Ok(())
22142        }
22143    }
22144
22145    impl UsageStateMuted {
22146        #[inline(always)]
22147        fn max_ordinal_present(&self) -> u64 {
22148            0
22149        }
22150    }
22151
22152    impl fidl::encoding::ValueTypeMarker for UsageStateMuted {
22153        type Borrowed<'a> = &'a Self;
22154        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22155            value
22156        }
22157    }
22158
22159    unsafe impl fidl::encoding::TypeMarker for UsageStateMuted {
22160        type Owned = Self;
22161
22162        #[inline(always)]
22163        fn inline_align(_context: fidl::encoding::Context) -> usize {
22164            8
22165        }
22166
22167        #[inline(always)]
22168        fn inline_size(_context: fidl::encoding::Context) -> usize {
22169            16
22170        }
22171    }
22172
22173    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageStateMuted, D>
22174        for &UsageStateMuted
22175    {
22176        unsafe fn encode(
22177            self,
22178            encoder: &mut fidl::encoding::Encoder<'_, D>,
22179            offset: usize,
22180            mut depth: fidl::encoding::Depth,
22181        ) -> fidl::Result<()> {
22182            encoder.debug_check_bounds::<UsageStateMuted>(offset);
22183            // Vector header
22184            let max_ordinal: u64 = self.max_ordinal_present();
22185            encoder.write_num(max_ordinal, offset);
22186            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22187            // Calling encoder.out_of_line_offset(0) is not allowed.
22188            if max_ordinal == 0 {
22189                return Ok(());
22190            }
22191            depth.increment()?;
22192            let envelope_size = 8;
22193            let bytes_len = max_ordinal as usize * envelope_size;
22194            #[allow(unused_variables)]
22195            let offset = encoder.out_of_line_offset(bytes_len);
22196            let mut _prev_end_offset: usize = 0;
22197
22198            Ok(())
22199        }
22200    }
22201
22202    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageStateMuted {
22203        #[inline(always)]
22204        fn new_empty() -> Self {
22205            Self::default()
22206        }
22207
22208        unsafe fn decode(
22209            &mut self,
22210            decoder: &mut fidl::encoding::Decoder<'_, D>,
22211            offset: usize,
22212            mut depth: fidl::encoding::Depth,
22213        ) -> fidl::Result<()> {
22214            decoder.debug_check_bounds::<Self>(offset);
22215            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22216                None => return Err(fidl::Error::NotNullable),
22217                Some(len) => len,
22218            };
22219            // Calling decoder.out_of_line_offset(0) is not allowed.
22220            if len == 0 {
22221                return Ok(());
22222            };
22223            depth.increment()?;
22224            let envelope_size = 8;
22225            let bytes_len = len * envelope_size;
22226            let offset = decoder.out_of_line_offset(bytes_len)?;
22227            // Decode the envelope for each type.
22228            let mut _next_ordinal_to_read = 0;
22229            let mut next_offset = offset;
22230            let end_offset = offset + bytes_len;
22231
22232            // Decode the remaining unknown envelopes.
22233            while next_offset < end_offset {
22234                _next_ordinal_to_read += 1;
22235                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22236                next_offset += envelope_size;
22237            }
22238
22239            Ok(())
22240        }
22241    }
22242
22243    impl UsageStateUnadjusted {
22244        #[inline(always)]
22245        fn max_ordinal_present(&self) -> u64 {
22246            0
22247        }
22248    }
22249
22250    impl fidl::encoding::ValueTypeMarker for UsageStateUnadjusted {
22251        type Borrowed<'a> = &'a Self;
22252        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22253            value
22254        }
22255    }
22256
22257    unsafe impl fidl::encoding::TypeMarker for UsageStateUnadjusted {
22258        type Owned = Self;
22259
22260        #[inline(always)]
22261        fn inline_align(_context: fidl::encoding::Context) -> usize {
22262            8
22263        }
22264
22265        #[inline(always)]
22266        fn inline_size(_context: fidl::encoding::Context) -> usize {
22267            16
22268        }
22269    }
22270
22271    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageStateUnadjusted, D>
22272        for &UsageStateUnadjusted
22273    {
22274        unsafe fn encode(
22275            self,
22276            encoder: &mut fidl::encoding::Encoder<'_, D>,
22277            offset: usize,
22278            mut depth: fidl::encoding::Depth,
22279        ) -> fidl::Result<()> {
22280            encoder.debug_check_bounds::<UsageStateUnadjusted>(offset);
22281            // Vector header
22282            let max_ordinal: u64 = self.max_ordinal_present();
22283            encoder.write_num(max_ordinal, offset);
22284            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
22285            // Calling encoder.out_of_line_offset(0) is not allowed.
22286            if max_ordinal == 0 {
22287                return Ok(());
22288            }
22289            depth.increment()?;
22290            let envelope_size = 8;
22291            let bytes_len = max_ordinal as usize * envelope_size;
22292            #[allow(unused_variables)]
22293            let offset = encoder.out_of_line_offset(bytes_len);
22294            let mut _prev_end_offset: usize = 0;
22295
22296            Ok(())
22297        }
22298    }
22299
22300    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageStateUnadjusted {
22301        #[inline(always)]
22302        fn new_empty() -> Self {
22303            Self::default()
22304        }
22305
22306        unsafe fn decode(
22307            &mut self,
22308            decoder: &mut fidl::encoding::Decoder<'_, D>,
22309            offset: usize,
22310            mut depth: fidl::encoding::Depth,
22311        ) -> fidl::Result<()> {
22312            decoder.debug_check_bounds::<Self>(offset);
22313            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
22314                None => return Err(fidl::Error::NotNullable),
22315                Some(len) => len,
22316            };
22317            // Calling decoder.out_of_line_offset(0) is not allowed.
22318            if len == 0 {
22319                return Ok(());
22320            };
22321            depth.increment()?;
22322            let envelope_size = 8;
22323            let bytes_len = len * envelope_size;
22324            let offset = decoder.out_of_line_offset(bytes_len)?;
22325            // Decode the envelope for each type.
22326            let mut _next_ordinal_to_read = 0;
22327            let mut next_offset = offset;
22328            let end_offset = offset + bytes_len;
22329
22330            // Decode the remaining unknown envelopes.
22331            while next_offset < end_offset {
22332                _next_ordinal_to_read += 1;
22333                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
22334                next_offset += envelope_size;
22335            }
22336
22337            Ok(())
22338        }
22339    }
22340
22341    impl fidl::encoding::ValueTypeMarker for AacBitRate {
22342        type Borrowed<'a> = &'a Self;
22343        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22344            value
22345        }
22346    }
22347
22348    unsafe impl fidl::encoding::TypeMarker for AacBitRate {
22349        type Owned = Self;
22350
22351        #[inline(always)]
22352        fn inline_align(_context: fidl::encoding::Context) -> usize {
22353            8
22354        }
22355
22356        #[inline(always)]
22357        fn inline_size(_context: fidl::encoding::Context) -> usize {
22358            16
22359        }
22360    }
22361
22362    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacBitRate, D>
22363        for &AacBitRate
22364    {
22365        #[inline]
22366        unsafe fn encode(
22367            self,
22368            encoder: &mut fidl::encoding::Encoder<'_, D>,
22369            offset: usize,
22370            _depth: fidl::encoding::Depth,
22371        ) -> fidl::Result<()> {
22372            encoder.debug_check_bounds::<AacBitRate>(offset);
22373            encoder.write_num::<u64>(self.ordinal(), offset);
22374            match self {
22375                AacBitRate::Constant(ref val) => {
22376                    fidl::encoding::encode_in_envelope::<AacConstantBitRate, D>(
22377                        <AacConstantBitRate as fidl::encoding::ValueTypeMarker>::borrow(val),
22378                        encoder,
22379                        offset + 8,
22380                        _depth,
22381                    )
22382                }
22383                AacBitRate::Variable(ref val) => {
22384                    fidl::encoding::encode_in_envelope::<AacVariableBitRate, D>(
22385                        <AacVariableBitRate as fidl::encoding::ValueTypeMarker>::borrow(val),
22386                        encoder,
22387                        offset + 8,
22388                        _depth,
22389                    )
22390                }
22391            }
22392        }
22393    }
22394
22395    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacBitRate {
22396        #[inline(always)]
22397        fn new_empty() -> Self {
22398            Self::Constant(fidl::new_empty!(AacConstantBitRate, D))
22399        }
22400
22401        #[inline]
22402        unsafe fn decode(
22403            &mut self,
22404            decoder: &mut fidl::encoding::Decoder<'_, D>,
22405            offset: usize,
22406            mut depth: fidl::encoding::Depth,
22407        ) -> fidl::Result<()> {
22408            decoder.debug_check_bounds::<Self>(offset);
22409            #[allow(unused_variables)]
22410            let next_out_of_line = decoder.next_out_of_line();
22411            let handles_before = decoder.remaining_handles();
22412            let (ordinal, inlined, num_bytes, num_handles) =
22413                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22414
22415            let member_inline_size = match ordinal {
22416                1 => {
22417                    <AacConstantBitRate as fidl::encoding::TypeMarker>::inline_size(decoder.context)
22418                }
22419                2 => {
22420                    <AacVariableBitRate as fidl::encoding::TypeMarker>::inline_size(decoder.context)
22421                }
22422                _ => return Err(fidl::Error::UnknownUnionTag),
22423            };
22424
22425            if inlined != (member_inline_size <= 4) {
22426                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22427            }
22428            let _inner_offset;
22429            if inlined {
22430                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22431                _inner_offset = offset + 8;
22432            } else {
22433                depth.increment()?;
22434                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22435            }
22436            match ordinal {
22437                1 => {
22438                    #[allow(irrefutable_let_patterns)]
22439                    if let AacBitRate::Constant(_) = self {
22440                        // Do nothing, read the value into the object
22441                    } else {
22442                        // Initialize `self` to the right variant
22443                        *self = AacBitRate::Constant(fidl::new_empty!(AacConstantBitRate, D));
22444                    }
22445                    #[allow(irrefutable_let_patterns)]
22446                    if let AacBitRate::Constant(ref mut val) = self {
22447                        fidl::decode!(AacConstantBitRate, D, val, decoder, _inner_offset, depth)?;
22448                    } else {
22449                        unreachable!()
22450                    }
22451                }
22452                2 => {
22453                    #[allow(irrefutable_let_patterns)]
22454                    if let AacBitRate::Variable(_) = self {
22455                        // Do nothing, read the value into the object
22456                    } else {
22457                        // Initialize `self` to the right variant
22458                        *self = AacBitRate::Variable(fidl::new_empty!(AacVariableBitRate, D));
22459                    }
22460                    #[allow(irrefutable_let_patterns)]
22461                    if let AacBitRate::Variable(ref mut val) = self {
22462                        fidl::decode!(AacVariableBitRate, D, val, decoder, _inner_offset, depth)?;
22463                    } else {
22464                        unreachable!()
22465                    }
22466                }
22467                ordinal => panic!("unexpected ordinal {:?}", ordinal),
22468            }
22469            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22470                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22471            }
22472            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22473                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22474            }
22475            Ok(())
22476        }
22477    }
22478
22479    impl fidl::encoding::ValueTypeMarker for AacTransport {
22480        type Borrowed<'a> = &'a Self;
22481        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22482            value
22483        }
22484    }
22485
22486    unsafe impl fidl::encoding::TypeMarker for AacTransport {
22487        type Owned = Self;
22488
22489        #[inline(always)]
22490        fn inline_align(_context: fidl::encoding::Context) -> usize {
22491            8
22492        }
22493
22494        #[inline(always)]
22495        fn inline_size(_context: fidl::encoding::Context) -> usize {
22496            16
22497        }
22498    }
22499
22500    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AacTransport, D>
22501        for &AacTransport
22502    {
22503        #[inline]
22504        unsafe fn encode(
22505            self,
22506            encoder: &mut fidl::encoding::Encoder<'_, D>,
22507            offset: usize,
22508            _depth: fidl::encoding::Depth,
22509        ) -> fidl::Result<()> {
22510            encoder.debug_check_bounds::<AacTransport>(offset);
22511            encoder.write_num::<u64>(self.ordinal(), offset);
22512            match self {
22513                AacTransport::Raw(ref val) => {
22514                    fidl::encoding::encode_in_envelope::<AacTransportRaw, D>(
22515                        <AacTransportRaw as fidl::encoding::ValueTypeMarker>::borrow(val),
22516                        encoder,
22517                        offset + 8,
22518                        _depth,
22519                    )
22520                }
22521                AacTransport::Latm(ref val) => {
22522                    fidl::encoding::encode_in_envelope::<AacTransportLatm, D>(
22523                        <AacTransportLatm as fidl::encoding::ValueTypeMarker>::borrow(val),
22524                        encoder,
22525                        offset + 8,
22526                        _depth,
22527                    )
22528                }
22529                AacTransport::Adts(ref val) => {
22530                    fidl::encoding::encode_in_envelope::<AacTransportAdts, D>(
22531                        <AacTransportAdts as fidl::encoding::ValueTypeMarker>::borrow(val),
22532                        encoder,
22533                        offset + 8,
22534                        _depth,
22535                    )
22536                }
22537                AacTransport::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
22538            }
22539        }
22540    }
22541
22542    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AacTransport {
22543        #[inline(always)]
22544        fn new_empty() -> Self {
22545            Self::__SourceBreaking { unknown_ordinal: 0 }
22546        }
22547
22548        #[inline]
22549        unsafe fn decode(
22550            &mut self,
22551            decoder: &mut fidl::encoding::Decoder<'_, D>,
22552            offset: usize,
22553            mut depth: fidl::encoding::Depth,
22554        ) -> fidl::Result<()> {
22555            decoder.debug_check_bounds::<Self>(offset);
22556            #[allow(unused_variables)]
22557            let next_out_of_line = decoder.next_out_of_line();
22558            let handles_before = decoder.remaining_handles();
22559            let (ordinal, inlined, num_bytes, num_handles) =
22560                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22561
22562            let member_inline_size = match ordinal {
22563                1 => <AacTransportRaw as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22564                2 => <AacTransportLatm as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22565                3 => <AacTransportAdts as fidl::encoding::TypeMarker>::inline_size(decoder.context),
22566                0 => return Err(fidl::Error::UnknownUnionTag),
22567                _ => num_bytes as usize,
22568            };
22569
22570            if inlined != (member_inline_size <= 4) {
22571                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22572            }
22573            let _inner_offset;
22574            if inlined {
22575                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22576                _inner_offset = offset + 8;
22577            } else {
22578                depth.increment()?;
22579                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22580            }
22581            match ordinal {
22582                1 => {
22583                    #[allow(irrefutable_let_patterns)]
22584                    if let AacTransport::Raw(_) = self {
22585                        // Do nothing, read the value into the object
22586                    } else {
22587                        // Initialize `self` to the right variant
22588                        *self = AacTransport::Raw(fidl::new_empty!(AacTransportRaw, D));
22589                    }
22590                    #[allow(irrefutable_let_patterns)]
22591                    if let AacTransport::Raw(ref mut val) = self {
22592                        fidl::decode!(AacTransportRaw, D, val, decoder, _inner_offset, depth)?;
22593                    } else {
22594                        unreachable!()
22595                    }
22596                }
22597                2 => {
22598                    #[allow(irrefutable_let_patterns)]
22599                    if let AacTransport::Latm(_) = self {
22600                        // Do nothing, read the value into the object
22601                    } else {
22602                        // Initialize `self` to the right variant
22603                        *self = AacTransport::Latm(fidl::new_empty!(AacTransportLatm, D));
22604                    }
22605                    #[allow(irrefutable_let_patterns)]
22606                    if let AacTransport::Latm(ref mut val) = self {
22607                        fidl::decode!(AacTransportLatm, D, val, decoder, _inner_offset, depth)?;
22608                    } else {
22609                        unreachable!()
22610                    }
22611                }
22612                3 => {
22613                    #[allow(irrefutable_let_patterns)]
22614                    if let AacTransport::Adts(_) = self {
22615                        // Do nothing, read the value into the object
22616                    } else {
22617                        // Initialize `self` to the right variant
22618                        *self = AacTransport::Adts(fidl::new_empty!(AacTransportAdts, D));
22619                    }
22620                    #[allow(irrefutable_let_patterns)]
22621                    if let AacTransport::Adts(ref mut val) = self {
22622                        fidl::decode!(AacTransportAdts, D, val, decoder, _inner_offset, depth)?;
22623                    } else {
22624                        unreachable!()
22625                    }
22626                }
22627                #[allow(deprecated)]
22628                ordinal => {
22629                    for _ in 0..num_handles {
22630                        decoder.drop_next_handle()?;
22631                    }
22632                    *self = AacTransport::__SourceBreaking { unknown_ordinal: ordinal };
22633                }
22634            }
22635            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22636                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22637            }
22638            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22639                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22640            }
22641            Ok(())
22642        }
22643    }
22644
22645    impl fidl::encoding::ValueTypeMarker for AudioCapturerConfiguration {
22646        type Borrowed<'a> = &'a Self;
22647        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22648            value
22649        }
22650    }
22651
22652    unsafe impl fidl::encoding::TypeMarker for AudioCapturerConfiguration {
22653        type Owned = Self;
22654
22655        #[inline(always)]
22656        fn inline_align(_context: fidl::encoding::Context) -> usize {
22657            8
22658        }
22659
22660        #[inline(always)]
22661        fn inline_size(_context: fidl::encoding::Context) -> usize {
22662            16
22663        }
22664    }
22665
22666    unsafe impl<D: fidl::encoding::ResourceDialect>
22667        fidl::encoding::Encode<AudioCapturerConfiguration, D> for &AudioCapturerConfiguration
22668    {
22669        #[inline]
22670        unsafe fn encode(
22671            self,
22672            encoder: &mut fidl::encoding::Encoder<'_, D>,
22673            offset: usize,
22674            _depth: fidl::encoding::Depth,
22675        ) -> fidl::Result<()> {
22676            encoder.debug_check_bounds::<AudioCapturerConfiguration>(offset);
22677            encoder.write_num::<u64>(self.ordinal(), offset);
22678            match self {
22679                AudioCapturerConfiguration::Loopback(ref val) => fidl::encoding::encode_in_envelope::<
22680                    LoopbackAudioCapturerConfiguration,
22681                    D,
22682                >(
22683                    <LoopbackAudioCapturerConfiguration as fidl::encoding::ValueTypeMarker>::borrow(
22684                        val,
22685                    ),
22686                    encoder,
22687                    offset + 8,
22688                    _depth,
22689                ),
22690                AudioCapturerConfiguration::Input(ref val) => fidl::encoding::encode_in_envelope::<
22691                    InputAudioCapturerConfiguration,
22692                    D,
22693                >(
22694                    <InputAudioCapturerConfiguration as fidl::encoding::ValueTypeMarker>::borrow(
22695                        val,
22696                    ),
22697                    encoder,
22698                    offset + 8,
22699                    _depth,
22700                ),
22701            }
22702        }
22703    }
22704
22705    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
22706        for AudioCapturerConfiguration
22707    {
22708        #[inline(always)]
22709        fn new_empty() -> Self {
22710            Self::Loopback(fidl::new_empty!(LoopbackAudioCapturerConfiguration, D))
22711        }
22712
22713        #[inline]
22714        unsafe fn decode(
22715            &mut self,
22716            decoder: &mut fidl::encoding::Decoder<'_, D>,
22717            offset: usize,
22718            mut depth: fidl::encoding::Depth,
22719        ) -> fidl::Result<()> {
22720            decoder.debug_check_bounds::<Self>(offset);
22721            #[allow(unused_variables)]
22722            let next_out_of_line = decoder.next_out_of_line();
22723            let handles_before = decoder.remaining_handles();
22724            let (ordinal, inlined, num_bytes, num_handles) =
22725                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22726
22727            let member_inline_size = match ordinal {
22728                1 => {
22729                    <LoopbackAudioCapturerConfiguration as fidl::encoding::TypeMarker>::inline_size(
22730                        decoder.context,
22731                    )
22732                }
22733                2 => <InputAudioCapturerConfiguration as fidl::encoding::TypeMarker>::inline_size(
22734                    decoder.context,
22735                ),
22736                _ => return Err(fidl::Error::UnknownUnionTag),
22737            };
22738
22739            if inlined != (member_inline_size <= 4) {
22740                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22741            }
22742            let _inner_offset;
22743            if inlined {
22744                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22745                _inner_offset = offset + 8;
22746            } else {
22747                depth.increment()?;
22748                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22749            }
22750            match ordinal {
22751                1 => {
22752                    #[allow(irrefutable_let_patterns)]
22753                    if let AudioCapturerConfiguration::Loopback(_) = self {
22754                        // Do nothing, read the value into the object
22755                    } else {
22756                        // Initialize `self` to the right variant
22757                        *self = AudioCapturerConfiguration::Loopback(fidl::new_empty!(
22758                            LoopbackAudioCapturerConfiguration,
22759                            D
22760                        ));
22761                    }
22762                    #[allow(irrefutable_let_patterns)]
22763                    if let AudioCapturerConfiguration::Loopback(ref mut val) = self {
22764                        fidl::decode!(
22765                            LoopbackAudioCapturerConfiguration,
22766                            D,
22767                            val,
22768                            decoder,
22769                            _inner_offset,
22770                            depth
22771                        )?;
22772                    } else {
22773                        unreachable!()
22774                    }
22775                }
22776                2 => {
22777                    #[allow(irrefutable_let_patterns)]
22778                    if let AudioCapturerConfiguration::Input(_) = self {
22779                        // Do nothing, read the value into the object
22780                    } else {
22781                        // Initialize `self` to the right variant
22782                        *self = AudioCapturerConfiguration::Input(fidl::new_empty!(
22783                            InputAudioCapturerConfiguration,
22784                            D
22785                        ));
22786                    }
22787                    #[allow(irrefutable_let_patterns)]
22788                    if let AudioCapturerConfiguration::Input(ref mut val) = self {
22789                        fidl::decode!(
22790                            InputAudioCapturerConfiguration,
22791                            D,
22792                            val,
22793                            decoder,
22794                            _inner_offset,
22795                            depth
22796                        )?;
22797                    } else {
22798                        unreachable!()
22799                    }
22800                }
22801                ordinal => panic!("unexpected ordinal {:?}", ordinal),
22802            }
22803            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
22804                return Err(fidl::Error::InvalidNumBytesInEnvelope);
22805            }
22806            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
22807                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
22808            }
22809            Ok(())
22810        }
22811    }
22812
22813    impl fidl::encoding::ValueTypeMarker for AudioCompressedFormat {
22814        type Borrowed<'a> = &'a Self;
22815        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
22816            value
22817        }
22818    }
22819
22820    unsafe impl fidl::encoding::TypeMarker for AudioCompressedFormat {
22821        type Owned = Self;
22822
22823        #[inline(always)]
22824        fn inline_align(_context: fidl::encoding::Context) -> usize {
22825            8
22826        }
22827
22828        #[inline(always)]
22829        fn inline_size(_context: fidl::encoding::Context) -> usize {
22830            16
22831        }
22832    }
22833
22834    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioCompressedFormat, D>
22835        for &AudioCompressedFormat
22836    {
22837        #[inline]
22838        unsafe fn encode(
22839            self,
22840            encoder: &mut fidl::encoding::Encoder<'_, D>,
22841            offset: usize,
22842            _depth: fidl::encoding::Depth,
22843        ) -> fidl::Result<()> {
22844            encoder.debug_check_bounds::<AudioCompressedFormat>(offset);
22845            encoder.write_num::<u64>(self.ordinal(), offset);
22846            match self {
22847                AudioCompressedFormat::Aac(ref val) => {
22848                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatAac, D>(
22849                        <AudioCompressedFormatAac as fidl::encoding::ValueTypeMarker>::borrow(val),
22850                        encoder,
22851                        offset + 8,
22852                        _depth,
22853                    )
22854                }
22855                AudioCompressedFormat::Sbc(ref val) => {
22856                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatSbc, D>(
22857                        <AudioCompressedFormatSbc as fidl::encoding::ValueTypeMarker>::borrow(val),
22858                        encoder,
22859                        offset + 8,
22860                        _depth,
22861                    )
22862                }
22863                AudioCompressedFormat::Cvsd(ref val) => {
22864                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatCvsd, D>(
22865                        <AudioCompressedFormatCvsd as fidl::encoding::ValueTypeMarker>::borrow(val),
22866                        encoder,
22867                        offset + 8,
22868                        _depth,
22869                    )
22870                }
22871                AudioCompressedFormat::Lc3(ref val) => {
22872                    fidl::encoding::encode_in_envelope::<AudioCompressedFormatLc3, D>(
22873                        <AudioCompressedFormatLc3 as fidl::encoding::ValueTypeMarker>::borrow(val),
22874                        encoder,
22875                        offset + 8,
22876                        _depth,
22877                    )
22878                }
22879                AudioCompressedFormat::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
22880            }
22881        }
22882    }
22883
22884    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioCompressedFormat {
22885        #[inline(always)]
22886        fn new_empty() -> Self {
22887            Self::__SourceBreaking { unknown_ordinal: 0 }
22888        }
22889
22890        #[inline]
22891        unsafe fn decode(
22892            &mut self,
22893            decoder: &mut fidl::encoding::Decoder<'_, D>,
22894            offset: usize,
22895            mut depth: fidl::encoding::Depth,
22896        ) -> fidl::Result<()> {
22897            decoder.debug_check_bounds::<Self>(offset);
22898            #[allow(unused_variables)]
22899            let next_out_of_line = decoder.next_out_of_line();
22900            let handles_before = decoder.remaining_handles();
22901            let (ordinal, inlined, num_bytes, num_handles) =
22902                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
22903
22904            let member_inline_size = match ordinal {
22905                1 => <AudioCompressedFormatAac as fidl::encoding::TypeMarker>::inline_size(
22906                    decoder.context,
22907                ),
22908                2 => <AudioCompressedFormatSbc as fidl::encoding::TypeMarker>::inline_size(
22909                    decoder.context,
22910                ),
22911                3 => <AudioCompressedFormatCvsd as fidl::encoding::TypeMarker>::inline_size(
22912                    decoder.context,
22913                ),
22914                4 => <AudioCompressedFormatLc3 as fidl::encoding::TypeMarker>::inline_size(
22915                    decoder.context,
22916                ),
22917                0 => return Err(fidl::Error::UnknownUnionTag),
22918                _ => num_bytes as usize,
22919            };
22920
22921            if inlined != (member_inline_size <= 4) {
22922                return Err(fidl::Error::InvalidInlineBitInEnvelope);
22923            }
22924            let _inner_offset;
22925            if inlined {
22926                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
22927                _inner_offset = offset + 8;
22928            } else {
22929                depth.increment()?;
22930                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
22931            }
22932            match ordinal {
22933                1 => {
22934                    #[allow(irrefutable_let_patterns)]
22935                    if let AudioCompressedFormat::Aac(_) = self {
22936                        // Do nothing, read the value into the object
22937                    } else {
22938                        // Initialize `self` to the right variant
22939                        *self = AudioCompressedFormat::Aac(fidl::new_empty!(
22940                            AudioCompressedFormatAac,
22941                            D
22942                        ));
22943                    }
22944                    #[allow(irrefutable_let_patterns)]
22945                    if let AudioCompressedFormat::Aac(ref mut val) = self {
22946                        fidl::decode!(
22947                            AudioCompressedFormatAac,
22948                            D,
22949                            val,
22950                            decoder,
22951                            _inner_offset,
22952                            depth
22953                        )?;
22954                    } else {
22955                        unreachable!()
22956                    }
22957                }
22958                2 => {
22959                    #[allow(irrefutable_let_patterns)]
22960                    if let AudioCompressedFormat::Sbc(_) = self {
22961                        // Do nothing, read the value into the object
22962                    } else {
22963                        // Initialize `self` to the right variant
22964                        *self = AudioCompressedFormat::Sbc(fidl::new_empty!(
22965                            AudioCompressedFormatSbc,
22966                            D
22967                        ));
22968                    }
22969                    #[allow(irrefutable_let_patterns)]
22970                    if let AudioCompressedFormat::Sbc(ref mut val) = self {
22971                        fidl::decode!(
22972                            AudioCompressedFormatSbc,
22973                            D,
22974                            val,
22975                            decoder,
22976                            _inner_offset,
22977                            depth
22978                        )?;
22979                    } else {
22980                        unreachable!()
22981                    }
22982                }
22983                3 => {
22984                    #[allow(irrefutable_let_patterns)]
22985                    if let AudioCompressedFormat::Cvsd(_) = self {
22986                        // Do nothing, read the value into the object
22987                    } else {
22988                        // Initialize `self` to the right variant
22989                        *self = AudioCompressedFormat::Cvsd(fidl::new_empty!(
22990                            AudioCompressedFormatCvsd,
22991                            D
22992                        ));
22993                    }
22994                    #[allow(irrefutable_let_patterns)]
22995                    if let AudioCompressedFormat::Cvsd(ref mut val) = self {
22996                        fidl::decode!(
22997                            AudioCompressedFormatCvsd,
22998                            D,
22999                            val,
23000                            decoder,
23001                            _inner_offset,
23002                            depth
23003                        )?;
23004                    } else {
23005                        unreachable!()
23006                    }
23007                }
23008                4 => {
23009                    #[allow(irrefutable_let_patterns)]
23010                    if let AudioCompressedFormat::Lc3(_) = self {
23011                        // Do nothing, read the value into the object
23012                    } else {
23013                        // Initialize `self` to the right variant
23014                        *self = AudioCompressedFormat::Lc3(fidl::new_empty!(
23015                            AudioCompressedFormatLc3,
23016                            D
23017                        ));
23018                    }
23019                    #[allow(irrefutable_let_patterns)]
23020                    if let AudioCompressedFormat::Lc3(ref mut val) = self {
23021                        fidl::decode!(
23022                            AudioCompressedFormatLc3,
23023                            D,
23024                            val,
23025                            decoder,
23026                            _inner_offset,
23027                            depth
23028                        )?;
23029                    } else {
23030                        unreachable!()
23031                    }
23032                }
23033                #[allow(deprecated)]
23034                ordinal => {
23035                    for _ in 0..num_handles {
23036                        decoder.drop_next_handle()?;
23037                    }
23038                    *self = AudioCompressedFormat::__SourceBreaking { unknown_ordinal: ordinal };
23039                }
23040            }
23041            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23042                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23043            }
23044            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23045                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23046            }
23047            Ok(())
23048        }
23049    }
23050
23051    impl fidl::encoding::ValueTypeMarker for AudioConsumerError {
23052        type Borrowed<'a> = &'a Self;
23053        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23054            value
23055        }
23056    }
23057
23058    unsafe impl fidl::encoding::TypeMarker for AudioConsumerError {
23059        type Owned = Self;
23060
23061        #[inline(always)]
23062        fn inline_align(_context: fidl::encoding::Context) -> usize {
23063            8
23064        }
23065
23066        #[inline(always)]
23067        fn inline_size(_context: fidl::encoding::Context) -> usize {
23068            16
23069        }
23070    }
23071
23072    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioConsumerError, D>
23073        for &AudioConsumerError
23074    {
23075        #[inline]
23076        unsafe fn encode(
23077            self,
23078            encoder: &mut fidl::encoding::Encoder<'_, D>,
23079            offset: usize,
23080            _depth: fidl::encoding::Depth,
23081        ) -> fidl::Result<()> {
23082            encoder.debug_check_bounds::<AudioConsumerError>(offset);
23083            encoder.write_num::<u64>(self.ordinal(), offset);
23084            match self {
23085                AudioConsumerError::PlaceHolder(ref val) => {
23086                    fidl::encoding::encode_in_envelope::<Void, D>(
23087                        <Void as fidl::encoding::ValueTypeMarker>::borrow(val),
23088                        encoder,
23089                        offset + 8,
23090                        _depth,
23091                    )
23092                }
23093            }
23094        }
23095    }
23096
23097    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioConsumerError {
23098        #[inline(always)]
23099        fn new_empty() -> Self {
23100            Self::PlaceHolder(fidl::new_empty!(Void, D))
23101        }
23102
23103        #[inline]
23104        unsafe fn decode(
23105            &mut self,
23106            decoder: &mut fidl::encoding::Decoder<'_, D>,
23107            offset: usize,
23108            mut depth: fidl::encoding::Depth,
23109        ) -> fidl::Result<()> {
23110            decoder.debug_check_bounds::<Self>(offset);
23111            #[allow(unused_variables)]
23112            let next_out_of_line = decoder.next_out_of_line();
23113            let handles_before = decoder.remaining_handles();
23114            let (ordinal, inlined, num_bytes, num_handles) =
23115                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23116
23117            let member_inline_size = match ordinal {
23118                1 => <Void as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23119                _ => return Err(fidl::Error::UnknownUnionTag),
23120            };
23121
23122            if inlined != (member_inline_size <= 4) {
23123                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23124            }
23125            let _inner_offset;
23126            if inlined {
23127                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23128                _inner_offset = offset + 8;
23129            } else {
23130                depth.increment()?;
23131                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23132            }
23133            match ordinal {
23134                1 => {
23135                    #[allow(irrefutable_let_patterns)]
23136                    if let AudioConsumerError::PlaceHolder(_) = self {
23137                        // Do nothing, read the value into the object
23138                    } else {
23139                        // Initialize `self` to the right variant
23140                        *self = AudioConsumerError::PlaceHolder(fidl::new_empty!(Void, D));
23141                    }
23142                    #[allow(irrefutable_let_patterns)]
23143                    if let AudioConsumerError::PlaceHolder(ref mut val) = self {
23144                        fidl::decode!(Void, D, val, decoder, _inner_offset, depth)?;
23145                    } else {
23146                        unreachable!()
23147                    }
23148                }
23149                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23150            }
23151            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23152                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23153            }
23154            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23155                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23156            }
23157            Ok(())
23158        }
23159    }
23160
23161    impl fidl::encoding::ValueTypeMarker for AudioFormat {
23162        type Borrowed<'a> = &'a Self;
23163        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23164            value
23165        }
23166    }
23167
23168    unsafe impl fidl::encoding::TypeMarker for AudioFormat {
23169        type Owned = Self;
23170
23171        #[inline(always)]
23172        fn inline_align(_context: fidl::encoding::Context) -> usize {
23173            8
23174        }
23175
23176        #[inline(always)]
23177        fn inline_size(_context: fidl::encoding::Context) -> usize {
23178            16
23179        }
23180    }
23181
23182    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioFormat, D>
23183        for &AudioFormat
23184    {
23185        #[inline]
23186        unsafe fn encode(
23187            self,
23188            encoder: &mut fidl::encoding::Encoder<'_, D>,
23189            offset: usize,
23190            _depth: fidl::encoding::Depth,
23191        ) -> fidl::Result<()> {
23192            encoder.debug_check_bounds::<AudioFormat>(offset);
23193            encoder.write_num::<u64>(self.ordinal(), offset);
23194            match self {
23195                AudioFormat::Compressed(ref val) => {
23196                    fidl::encoding::encode_in_envelope::<AudioCompressedFormat, D>(
23197                        <AudioCompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23198                        encoder,
23199                        offset + 8,
23200                        _depth,
23201                    )
23202                }
23203                AudioFormat::Uncompressed(ref val) => {
23204                    fidl::encoding::encode_in_envelope::<AudioUncompressedFormat, D>(
23205                        <AudioUncompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23206                        encoder,
23207                        offset + 8,
23208                        _depth,
23209                    )
23210                }
23211            }
23212        }
23213    }
23214
23215    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioFormat {
23216        #[inline(always)]
23217        fn new_empty() -> Self {
23218            Self::Compressed(fidl::new_empty!(AudioCompressedFormat, D))
23219        }
23220
23221        #[inline]
23222        unsafe fn decode(
23223            &mut self,
23224            decoder: &mut fidl::encoding::Decoder<'_, D>,
23225            offset: usize,
23226            mut depth: fidl::encoding::Depth,
23227        ) -> fidl::Result<()> {
23228            decoder.debug_check_bounds::<Self>(offset);
23229            #[allow(unused_variables)]
23230            let next_out_of_line = decoder.next_out_of_line();
23231            let handles_before = decoder.remaining_handles();
23232            let (ordinal, inlined, num_bytes, num_handles) =
23233                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23234
23235            let member_inline_size = match ordinal {
23236                1 => <AudioCompressedFormat as fidl::encoding::TypeMarker>::inline_size(
23237                    decoder.context,
23238                ),
23239                2 => <AudioUncompressedFormat as fidl::encoding::TypeMarker>::inline_size(
23240                    decoder.context,
23241                ),
23242                _ => return Err(fidl::Error::UnknownUnionTag),
23243            };
23244
23245            if inlined != (member_inline_size <= 4) {
23246                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23247            }
23248            let _inner_offset;
23249            if inlined {
23250                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23251                _inner_offset = offset + 8;
23252            } else {
23253                depth.increment()?;
23254                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23255            }
23256            match ordinal {
23257                1 => {
23258                    #[allow(irrefutable_let_patterns)]
23259                    if let AudioFormat::Compressed(_) = self {
23260                        // Do nothing, read the value into the object
23261                    } else {
23262                        // Initialize `self` to the right variant
23263                        *self = AudioFormat::Compressed(fidl::new_empty!(AudioCompressedFormat, D));
23264                    }
23265                    #[allow(irrefutable_let_patterns)]
23266                    if let AudioFormat::Compressed(ref mut val) = self {
23267                        fidl::decode!(
23268                            AudioCompressedFormat,
23269                            D,
23270                            val,
23271                            decoder,
23272                            _inner_offset,
23273                            depth
23274                        )?;
23275                    } else {
23276                        unreachable!()
23277                    }
23278                }
23279                2 => {
23280                    #[allow(irrefutable_let_patterns)]
23281                    if let AudioFormat::Uncompressed(_) = self {
23282                        // Do nothing, read the value into the object
23283                    } else {
23284                        // Initialize `self` to the right variant
23285                        *self =
23286                            AudioFormat::Uncompressed(fidl::new_empty!(AudioUncompressedFormat, D));
23287                    }
23288                    #[allow(irrefutable_let_patterns)]
23289                    if let AudioFormat::Uncompressed(ref mut val) = self {
23290                        fidl::decode!(
23291                            AudioUncompressedFormat,
23292                            D,
23293                            val,
23294                            decoder,
23295                            _inner_offset,
23296                            depth
23297                        )?;
23298                    } else {
23299                        unreachable!()
23300                    }
23301                }
23302                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23303            }
23304            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23305                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23306            }
23307            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23308                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23309            }
23310            Ok(())
23311        }
23312    }
23313
23314    impl fidl::encoding::ValueTypeMarker for AudioUncompressedFormat {
23315        type Borrowed<'a> = &'a Self;
23316        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23317            value
23318        }
23319    }
23320
23321    unsafe impl fidl::encoding::TypeMarker for AudioUncompressedFormat {
23322        type Owned = Self;
23323
23324        #[inline(always)]
23325        fn inline_align(_context: fidl::encoding::Context) -> usize {
23326            8
23327        }
23328
23329        #[inline(always)]
23330        fn inline_size(_context: fidl::encoding::Context) -> usize {
23331            16
23332        }
23333    }
23334
23335    unsafe impl<D: fidl::encoding::ResourceDialect>
23336        fidl::encoding::Encode<AudioUncompressedFormat, D> for &AudioUncompressedFormat
23337    {
23338        #[inline]
23339        unsafe fn encode(
23340            self,
23341            encoder: &mut fidl::encoding::Encoder<'_, D>,
23342            offset: usize,
23343            _depth: fidl::encoding::Depth,
23344        ) -> fidl::Result<()> {
23345            encoder.debug_check_bounds::<AudioUncompressedFormat>(offset);
23346            encoder.write_num::<u64>(self.ordinal(), offset);
23347            match self {
23348                AudioUncompressedFormat::Pcm(ref val) => {
23349                    fidl::encoding::encode_in_envelope::<PcmFormat, D>(
23350                        <PcmFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23351                        encoder,
23352                        offset + 8,
23353                        _depth,
23354                    )
23355                }
23356            }
23357        }
23358    }
23359
23360    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
23361        for AudioUncompressedFormat
23362    {
23363        #[inline(always)]
23364        fn new_empty() -> Self {
23365            Self::Pcm(fidl::new_empty!(PcmFormat, D))
23366        }
23367
23368        #[inline]
23369        unsafe fn decode(
23370            &mut self,
23371            decoder: &mut fidl::encoding::Decoder<'_, D>,
23372            offset: usize,
23373            mut depth: fidl::encoding::Depth,
23374        ) -> fidl::Result<()> {
23375            decoder.debug_check_bounds::<Self>(offset);
23376            #[allow(unused_variables)]
23377            let next_out_of_line = decoder.next_out_of_line();
23378            let handles_before = decoder.remaining_handles();
23379            let (ordinal, inlined, num_bytes, num_handles) =
23380                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23381
23382            let member_inline_size = match ordinal {
23383                1 => <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23384                _ => return Err(fidl::Error::UnknownUnionTag),
23385            };
23386
23387            if inlined != (member_inline_size <= 4) {
23388                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23389            }
23390            let _inner_offset;
23391            if inlined {
23392                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23393                _inner_offset = offset + 8;
23394            } else {
23395                depth.increment()?;
23396                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23397            }
23398            match ordinal {
23399                1 => {
23400                    #[allow(irrefutable_let_patterns)]
23401                    if let AudioUncompressedFormat::Pcm(_) = self {
23402                        // Do nothing, read the value into the object
23403                    } else {
23404                        // Initialize `self` to the right variant
23405                        *self = AudioUncompressedFormat::Pcm(fidl::new_empty!(PcmFormat, D));
23406                    }
23407                    #[allow(irrefutable_let_patterns)]
23408                    if let AudioUncompressedFormat::Pcm(ref mut val) = self {
23409                        fidl::decode!(PcmFormat, D, val, decoder, _inner_offset, depth)?;
23410                    } else {
23411                        unreachable!()
23412                    }
23413                }
23414                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23415            }
23416            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23417                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23418            }
23419            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23420                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23421            }
23422            Ok(())
23423        }
23424    }
23425
23426    impl fidl::encoding::ValueTypeMarker for CryptoFormat {
23427        type Borrowed<'a> = &'a Self;
23428        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23429            value
23430        }
23431    }
23432
23433    unsafe impl fidl::encoding::TypeMarker for CryptoFormat {
23434        type Owned = Self;
23435
23436        #[inline(always)]
23437        fn inline_align(_context: fidl::encoding::Context) -> usize {
23438            8
23439        }
23440
23441        #[inline(always)]
23442        fn inline_size(_context: fidl::encoding::Context) -> usize {
23443            16
23444        }
23445    }
23446
23447    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CryptoFormat, D>
23448        for &CryptoFormat
23449    {
23450        #[inline]
23451        unsafe fn encode(
23452            self,
23453            encoder: &mut fidl::encoding::Encoder<'_, D>,
23454            offset: usize,
23455            _depth: fidl::encoding::Depth,
23456        ) -> fidl::Result<()> {
23457            encoder.debug_check_bounds::<CryptoFormat>(offset);
23458            encoder.write_num::<u64>(self.ordinal(), offset);
23459            match self {
23460                CryptoFormat::Encrypted(ref val) => {
23461                    fidl::encoding::encode_in_envelope::<EncryptedFormat, D>(
23462                        <EncryptedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23463                        encoder,
23464                        offset + 8,
23465                        _depth,
23466                    )
23467                }
23468                CryptoFormat::Decrypted(ref val) => {
23469                    fidl::encoding::encode_in_envelope::<DecryptedFormat, D>(
23470                        <DecryptedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23471                        encoder,
23472                        offset + 8,
23473                        _depth,
23474                    )
23475                }
23476                CryptoFormat::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
23477            }
23478        }
23479    }
23480
23481    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CryptoFormat {
23482        #[inline(always)]
23483        fn new_empty() -> Self {
23484            Self::__SourceBreaking { unknown_ordinal: 0 }
23485        }
23486
23487        #[inline]
23488        unsafe fn decode(
23489            &mut self,
23490            decoder: &mut fidl::encoding::Decoder<'_, D>,
23491            offset: usize,
23492            mut depth: fidl::encoding::Depth,
23493        ) -> fidl::Result<()> {
23494            decoder.debug_check_bounds::<Self>(offset);
23495            #[allow(unused_variables)]
23496            let next_out_of_line = decoder.next_out_of_line();
23497            let handles_before = decoder.remaining_handles();
23498            let (ordinal, inlined, num_bytes, num_handles) =
23499                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23500
23501            let member_inline_size = match ordinal {
23502                1 => <EncryptedFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23503                2 => <DecryptedFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23504                0 => return Err(fidl::Error::UnknownUnionTag),
23505                _ => num_bytes as usize,
23506            };
23507
23508            if inlined != (member_inline_size <= 4) {
23509                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23510            }
23511            let _inner_offset;
23512            if inlined {
23513                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23514                _inner_offset = offset + 8;
23515            } else {
23516                depth.increment()?;
23517                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23518            }
23519            match ordinal {
23520                1 => {
23521                    #[allow(irrefutable_let_patterns)]
23522                    if let CryptoFormat::Encrypted(_) = self {
23523                        // Do nothing, read the value into the object
23524                    } else {
23525                        // Initialize `self` to the right variant
23526                        *self = CryptoFormat::Encrypted(fidl::new_empty!(EncryptedFormat, D));
23527                    }
23528                    #[allow(irrefutable_let_patterns)]
23529                    if let CryptoFormat::Encrypted(ref mut val) = self {
23530                        fidl::decode!(EncryptedFormat, D, val, decoder, _inner_offset, depth)?;
23531                    } else {
23532                        unreachable!()
23533                    }
23534                }
23535                2 => {
23536                    #[allow(irrefutable_let_patterns)]
23537                    if let CryptoFormat::Decrypted(_) = self {
23538                        // Do nothing, read the value into the object
23539                    } else {
23540                        // Initialize `self` to the right variant
23541                        *self = CryptoFormat::Decrypted(fidl::new_empty!(DecryptedFormat, D));
23542                    }
23543                    #[allow(irrefutable_let_patterns)]
23544                    if let CryptoFormat::Decrypted(ref mut val) = self {
23545                        fidl::decode!(DecryptedFormat, D, val, decoder, _inner_offset, depth)?;
23546                    } else {
23547                        unreachable!()
23548                    }
23549                }
23550                #[allow(deprecated)]
23551                ordinal => {
23552                    for _ in 0..num_handles {
23553                        decoder.drop_next_handle()?;
23554                    }
23555                    *self = CryptoFormat::__SourceBreaking { unknown_ordinal: ordinal };
23556                }
23557            }
23558            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23559                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23560            }
23561            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23562                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23563            }
23564            Ok(())
23565        }
23566    }
23567
23568    impl fidl::encoding::ValueTypeMarker for DomainFormat {
23569        type Borrowed<'a> = &'a Self;
23570        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23571            value
23572        }
23573    }
23574
23575    unsafe impl fidl::encoding::TypeMarker for DomainFormat {
23576        type Owned = Self;
23577
23578        #[inline(always)]
23579        fn inline_align(_context: fidl::encoding::Context) -> usize {
23580            8
23581        }
23582
23583        #[inline(always)]
23584        fn inline_size(_context: fidl::encoding::Context) -> usize {
23585            16
23586        }
23587    }
23588
23589    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DomainFormat, D>
23590        for &DomainFormat
23591    {
23592        #[inline]
23593        unsafe fn encode(
23594            self,
23595            encoder: &mut fidl::encoding::Encoder<'_, D>,
23596            offset: usize,
23597            _depth: fidl::encoding::Depth,
23598        ) -> fidl::Result<()> {
23599            encoder.debug_check_bounds::<DomainFormat>(offset);
23600            encoder.write_num::<u64>(self.ordinal(), offset);
23601            match self {
23602                DomainFormat::Audio(ref val) => {
23603                    fidl::encoding::encode_in_envelope::<AudioFormat, D>(
23604                        <AudioFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23605                        encoder,
23606                        offset + 8,
23607                        _depth,
23608                    )
23609                }
23610                DomainFormat::Video(ref val) => {
23611                    fidl::encoding::encode_in_envelope::<VideoFormat, D>(
23612                        <VideoFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23613                        encoder,
23614                        offset + 8,
23615                        _depth,
23616                    )
23617                }
23618                DomainFormat::Crypto(ref val) => {
23619                    fidl::encoding::encode_in_envelope::<CryptoFormat, D>(
23620                        <CryptoFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
23621                        encoder,
23622                        offset + 8,
23623                        _depth,
23624                    )
23625                }
23626            }
23627        }
23628    }
23629
23630    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DomainFormat {
23631        #[inline(always)]
23632        fn new_empty() -> Self {
23633            Self::Audio(fidl::new_empty!(AudioFormat, D))
23634        }
23635
23636        #[inline]
23637        unsafe fn decode(
23638            &mut self,
23639            decoder: &mut fidl::encoding::Decoder<'_, D>,
23640            offset: usize,
23641            mut depth: fidl::encoding::Depth,
23642        ) -> fidl::Result<()> {
23643            decoder.debug_check_bounds::<Self>(offset);
23644            #[allow(unused_variables)]
23645            let next_out_of_line = decoder.next_out_of_line();
23646            let handles_before = decoder.remaining_handles();
23647            let (ordinal, inlined, num_bytes, num_handles) =
23648                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23649
23650            let member_inline_size = match ordinal {
23651                1 => <AudioFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23652                2 => <VideoFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23653                3 => <CryptoFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
23654                _ => return Err(fidl::Error::UnknownUnionTag),
23655            };
23656
23657            if inlined != (member_inline_size <= 4) {
23658                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23659            }
23660            let _inner_offset;
23661            if inlined {
23662                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23663                _inner_offset = offset + 8;
23664            } else {
23665                depth.increment()?;
23666                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23667            }
23668            match ordinal {
23669                1 => {
23670                    #[allow(irrefutable_let_patterns)]
23671                    if let DomainFormat::Audio(_) = self {
23672                        // Do nothing, read the value into the object
23673                    } else {
23674                        // Initialize `self` to the right variant
23675                        *self = DomainFormat::Audio(fidl::new_empty!(AudioFormat, D));
23676                    }
23677                    #[allow(irrefutable_let_patterns)]
23678                    if let DomainFormat::Audio(ref mut val) = self {
23679                        fidl::decode!(AudioFormat, D, val, decoder, _inner_offset, depth)?;
23680                    } else {
23681                        unreachable!()
23682                    }
23683                }
23684                2 => {
23685                    #[allow(irrefutable_let_patterns)]
23686                    if let DomainFormat::Video(_) = self {
23687                        // Do nothing, read the value into the object
23688                    } else {
23689                        // Initialize `self` to the right variant
23690                        *self = DomainFormat::Video(fidl::new_empty!(VideoFormat, D));
23691                    }
23692                    #[allow(irrefutable_let_patterns)]
23693                    if let DomainFormat::Video(ref mut val) = self {
23694                        fidl::decode!(VideoFormat, D, val, decoder, _inner_offset, depth)?;
23695                    } else {
23696                        unreachable!()
23697                    }
23698                }
23699                3 => {
23700                    #[allow(irrefutable_let_patterns)]
23701                    if let DomainFormat::Crypto(_) = self {
23702                        // Do nothing, read the value into the object
23703                    } else {
23704                        // Initialize `self` to the right variant
23705                        *self = DomainFormat::Crypto(fidl::new_empty!(CryptoFormat, D));
23706                    }
23707                    #[allow(irrefutable_let_patterns)]
23708                    if let DomainFormat::Crypto(ref mut val) = self {
23709                        fidl::decode!(CryptoFormat, D, val, decoder, _inner_offset, depth)?;
23710                    } else {
23711                        unreachable!()
23712                    }
23713                }
23714                ordinal => panic!("unexpected ordinal {:?}", ordinal),
23715            }
23716            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23717                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23718            }
23719            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23720                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23721            }
23722            Ok(())
23723        }
23724    }
23725
23726    impl fidl::encoding::ValueTypeMarker for EncoderSettings {
23727        type Borrowed<'a> = &'a Self;
23728        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
23729            value
23730        }
23731    }
23732
23733    unsafe impl fidl::encoding::TypeMarker for EncoderSettings {
23734        type Owned = Self;
23735
23736        #[inline(always)]
23737        fn inline_align(_context: fidl::encoding::Context) -> usize {
23738            8
23739        }
23740
23741        #[inline(always)]
23742        fn inline_size(_context: fidl::encoding::Context) -> usize {
23743            16
23744        }
23745    }
23746
23747    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncoderSettings, D>
23748        for &EncoderSettings
23749    {
23750        #[inline]
23751        unsafe fn encode(
23752            self,
23753            encoder: &mut fidl::encoding::Encoder<'_, D>,
23754            offset: usize,
23755            _depth: fidl::encoding::Depth,
23756        ) -> fidl::Result<()> {
23757            encoder.debug_check_bounds::<EncoderSettings>(offset);
23758            encoder.write_num::<u64>(self.ordinal(), offset);
23759            match self {
23760                EncoderSettings::Sbc(ref val) => {
23761                    fidl::encoding::encode_in_envelope::<SbcEncoderSettings, D>(
23762                        <SbcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23763                        encoder,
23764                        offset + 8,
23765                        _depth,
23766                    )
23767                }
23768                EncoderSettings::Aac(ref val) => {
23769                    fidl::encoding::encode_in_envelope::<AacEncoderSettings, D>(
23770                        <AacEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23771                        encoder,
23772                        offset + 8,
23773                        _depth,
23774                    )
23775                }
23776                EncoderSettings::H264(ref val) => {
23777                    fidl::encoding::encode_in_envelope::<H264EncoderSettings, D>(
23778                        <H264EncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23779                        encoder,
23780                        offset + 8,
23781                        _depth,
23782                    )
23783                }
23784                EncoderSettings::Hevc(ref val) => {
23785                    fidl::encoding::encode_in_envelope::<HevcEncoderSettings, D>(
23786                        <HevcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23787                        encoder,
23788                        offset + 8,
23789                        _depth,
23790                    )
23791                }
23792                EncoderSettings::Cvsd(ref val) => {
23793                    fidl::encoding::encode_in_envelope::<CvsdEncoderSettings, D>(
23794                        <CvsdEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23795                        encoder,
23796                        offset + 8,
23797                        _depth,
23798                    )
23799                }
23800                EncoderSettings::Lc3(ref val) => {
23801                    fidl::encoding::encode_in_envelope::<Lc3EncoderSettings, D>(
23802                        <Lc3EncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23803                        encoder,
23804                        offset + 8,
23805                        _depth,
23806                    )
23807                }
23808                EncoderSettings::Msbc(ref val) => {
23809                    fidl::encoding::encode_in_envelope::<MSbcEncoderSettings, D>(
23810                        <MSbcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
23811                        encoder,
23812                        offset + 8,
23813                        _depth,
23814                    )
23815                }
23816                EncoderSettings::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
23817            }
23818        }
23819    }
23820
23821    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncoderSettings {
23822        #[inline(always)]
23823        fn new_empty() -> Self {
23824            Self::__SourceBreaking { unknown_ordinal: 0 }
23825        }
23826
23827        #[inline]
23828        unsafe fn decode(
23829            &mut self,
23830            decoder: &mut fidl::encoding::Decoder<'_, D>,
23831            offset: usize,
23832            mut depth: fidl::encoding::Depth,
23833        ) -> fidl::Result<()> {
23834            decoder.debug_check_bounds::<Self>(offset);
23835            #[allow(unused_variables)]
23836            let next_out_of_line = decoder.next_out_of_line();
23837            let handles_before = decoder.remaining_handles();
23838            let (ordinal, inlined, num_bytes, num_handles) =
23839                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
23840
23841            let member_inline_size = match ordinal {
23842                1 => {
23843                    <SbcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
23844                }
23845                2 => {
23846                    <AacEncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
23847                }
23848                3 => <H264EncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23849                    decoder.context,
23850                ),
23851                4 => <HevcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23852                    decoder.context,
23853                ),
23854                5 => <CvsdEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23855                    decoder.context,
23856                ),
23857                6 => {
23858                    <Lc3EncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
23859                }
23860                7 => <MSbcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
23861                    decoder.context,
23862                ),
23863                0 => return Err(fidl::Error::UnknownUnionTag),
23864                _ => num_bytes as usize,
23865            };
23866
23867            if inlined != (member_inline_size <= 4) {
23868                return Err(fidl::Error::InvalidInlineBitInEnvelope);
23869            }
23870            let _inner_offset;
23871            if inlined {
23872                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
23873                _inner_offset = offset + 8;
23874            } else {
23875                depth.increment()?;
23876                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
23877            }
23878            match ordinal {
23879                1 => {
23880                    #[allow(irrefutable_let_patterns)]
23881                    if let EncoderSettings::Sbc(_) = self {
23882                        // Do nothing, read the value into the object
23883                    } else {
23884                        // Initialize `self` to the right variant
23885                        *self = EncoderSettings::Sbc(fidl::new_empty!(SbcEncoderSettings, D));
23886                    }
23887                    #[allow(irrefutable_let_patterns)]
23888                    if let EncoderSettings::Sbc(ref mut val) = self {
23889                        fidl::decode!(SbcEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23890                    } else {
23891                        unreachable!()
23892                    }
23893                }
23894                2 => {
23895                    #[allow(irrefutable_let_patterns)]
23896                    if let EncoderSettings::Aac(_) = self {
23897                        // Do nothing, read the value into the object
23898                    } else {
23899                        // Initialize `self` to the right variant
23900                        *self = EncoderSettings::Aac(fidl::new_empty!(AacEncoderSettings, D));
23901                    }
23902                    #[allow(irrefutable_let_patterns)]
23903                    if let EncoderSettings::Aac(ref mut val) = self {
23904                        fidl::decode!(AacEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23905                    } else {
23906                        unreachable!()
23907                    }
23908                }
23909                3 => {
23910                    #[allow(irrefutable_let_patterns)]
23911                    if let EncoderSettings::H264(_) = self {
23912                        // Do nothing, read the value into the object
23913                    } else {
23914                        // Initialize `self` to the right variant
23915                        *self = EncoderSettings::H264(fidl::new_empty!(H264EncoderSettings, D));
23916                    }
23917                    #[allow(irrefutable_let_patterns)]
23918                    if let EncoderSettings::H264(ref mut val) = self {
23919                        fidl::decode!(H264EncoderSettings, D, val, decoder, _inner_offset, depth)?;
23920                    } else {
23921                        unreachable!()
23922                    }
23923                }
23924                4 => {
23925                    #[allow(irrefutable_let_patterns)]
23926                    if let EncoderSettings::Hevc(_) = self {
23927                        // Do nothing, read the value into the object
23928                    } else {
23929                        // Initialize `self` to the right variant
23930                        *self = EncoderSettings::Hevc(fidl::new_empty!(HevcEncoderSettings, D));
23931                    }
23932                    #[allow(irrefutable_let_patterns)]
23933                    if let EncoderSettings::Hevc(ref mut val) = self {
23934                        fidl::decode!(HevcEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23935                    } else {
23936                        unreachable!()
23937                    }
23938                }
23939                5 => {
23940                    #[allow(irrefutable_let_patterns)]
23941                    if let EncoderSettings::Cvsd(_) = self {
23942                        // Do nothing, read the value into the object
23943                    } else {
23944                        // Initialize `self` to the right variant
23945                        *self = EncoderSettings::Cvsd(fidl::new_empty!(CvsdEncoderSettings, D));
23946                    }
23947                    #[allow(irrefutable_let_patterns)]
23948                    if let EncoderSettings::Cvsd(ref mut val) = self {
23949                        fidl::decode!(CvsdEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23950                    } else {
23951                        unreachable!()
23952                    }
23953                }
23954                6 => {
23955                    #[allow(irrefutable_let_patterns)]
23956                    if let EncoderSettings::Lc3(_) = self {
23957                        // Do nothing, read the value into the object
23958                    } else {
23959                        // Initialize `self` to the right variant
23960                        *self = EncoderSettings::Lc3(fidl::new_empty!(Lc3EncoderSettings, D));
23961                    }
23962                    #[allow(irrefutable_let_patterns)]
23963                    if let EncoderSettings::Lc3(ref mut val) = self {
23964                        fidl::decode!(Lc3EncoderSettings, D, val, decoder, _inner_offset, depth)?;
23965                    } else {
23966                        unreachable!()
23967                    }
23968                }
23969                7 => {
23970                    #[allow(irrefutable_let_patterns)]
23971                    if let EncoderSettings::Msbc(_) = self {
23972                        // Do nothing, read the value into the object
23973                    } else {
23974                        // Initialize `self` to the right variant
23975                        *self = EncoderSettings::Msbc(fidl::new_empty!(MSbcEncoderSettings, D));
23976                    }
23977                    #[allow(irrefutable_let_patterns)]
23978                    if let EncoderSettings::Msbc(ref mut val) = self {
23979                        fidl::decode!(MSbcEncoderSettings, D, val, decoder, _inner_offset, depth)?;
23980                    } else {
23981                        unreachable!()
23982                    }
23983                }
23984                #[allow(deprecated)]
23985                ordinal => {
23986                    for _ in 0..num_handles {
23987                        decoder.drop_next_handle()?;
23988                    }
23989                    *self = EncoderSettings::__SourceBreaking { unknown_ordinal: ordinal };
23990                }
23991            }
23992            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
23993                return Err(fidl::Error::InvalidNumBytesInEnvelope);
23994            }
23995            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
23996                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
23997            }
23998            Ok(())
23999        }
24000    }
24001
24002    impl fidl::encoding::ValueTypeMarker for MediumSpecificStreamType {
24003        type Borrowed<'a> = &'a Self;
24004        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24005            value
24006        }
24007    }
24008
24009    unsafe impl fidl::encoding::TypeMarker for MediumSpecificStreamType {
24010        type Owned = Self;
24011
24012        #[inline(always)]
24013        fn inline_align(_context: fidl::encoding::Context) -> usize {
24014            8
24015        }
24016
24017        #[inline(always)]
24018        fn inline_size(_context: fidl::encoding::Context) -> usize {
24019            16
24020        }
24021    }
24022
24023    unsafe impl<D: fidl::encoding::ResourceDialect>
24024        fidl::encoding::Encode<MediumSpecificStreamType, D> for &MediumSpecificStreamType
24025    {
24026        #[inline]
24027        unsafe fn encode(
24028            self,
24029            encoder: &mut fidl::encoding::Encoder<'_, D>,
24030            offset: usize,
24031            _depth: fidl::encoding::Depth,
24032        ) -> fidl::Result<()> {
24033            encoder.debug_check_bounds::<MediumSpecificStreamType>(offset);
24034            encoder.write_num::<u64>(self.ordinal(), offset);
24035            match self {
24036                MediumSpecificStreamType::Audio(ref val) => {
24037                    fidl::encoding::encode_in_envelope::<AudioStreamType, D>(
24038                        <AudioStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
24039                        encoder,
24040                        offset + 8,
24041                        _depth,
24042                    )
24043                }
24044                MediumSpecificStreamType::Video(ref val) => {
24045                    fidl::encoding::encode_in_envelope::<VideoStreamType, D>(
24046                        <VideoStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
24047                        encoder,
24048                        offset + 8,
24049                        _depth,
24050                    )
24051                }
24052                MediumSpecificStreamType::Text(ref val) => {
24053                    fidl::encoding::encode_in_envelope::<TextStreamType, D>(
24054                        <TextStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
24055                        encoder,
24056                        offset + 8,
24057                        _depth,
24058                    )
24059                }
24060                MediumSpecificStreamType::Subpicture(ref val) => {
24061                    fidl::encoding::encode_in_envelope::<SubpictureStreamType, D>(
24062                        <SubpictureStreamType as fidl::encoding::ValueTypeMarker>::borrow(val),
24063                        encoder,
24064                        offset + 8,
24065                        _depth,
24066                    )
24067                }
24068            }
24069        }
24070    }
24071
24072    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
24073        for MediumSpecificStreamType
24074    {
24075        #[inline(always)]
24076        fn new_empty() -> Self {
24077            Self::Audio(fidl::new_empty!(AudioStreamType, D))
24078        }
24079
24080        #[inline]
24081        unsafe fn decode(
24082            &mut self,
24083            decoder: &mut fidl::encoding::Decoder<'_, D>,
24084            offset: usize,
24085            mut depth: fidl::encoding::Depth,
24086        ) -> fidl::Result<()> {
24087            decoder.debug_check_bounds::<Self>(offset);
24088            #[allow(unused_variables)]
24089            let next_out_of_line = decoder.next_out_of_line();
24090            let handles_before = decoder.remaining_handles();
24091            let (ordinal, inlined, num_bytes, num_handles) =
24092                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24093
24094            let member_inline_size = match ordinal {
24095                1 => <AudioStreamType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24096                2 => <VideoStreamType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24097                3 => <TextStreamType as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24098                4 => <SubpictureStreamType as fidl::encoding::TypeMarker>::inline_size(
24099                    decoder.context,
24100                ),
24101                _ => return Err(fidl::Error::UnknownUnionTag),
24102            };
24103
24104            if inlined != (member_inline_size <= 4) {
24105                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24106            }
24107            let _inner_offset;
24108            if inlined {
24109                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24110                _inner_offset = offset + 8;
24111            } else {
24112                depth.increment()?;
24113                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24114            }
24115            match ordinal {
24116                1 => {
24117                    #[allow(irrefutable_let_patterns)]
24118                    if let MediumSpecificStreamType::Audio(_) = self {
24119                        // Do nothing, read the value into the object
24120                    } else {
24121                        // Initialize `self` to the right variant
24122                        *self =
24123                            MediumSpecificStreamType::Audio(fidl::new_empty!(AudioStreamType, D));
24124                    }
24125                    #[allow(irrefutable_let_patterns)]
24126                    if let MediumSpecificStreamType::Audio(ref mut val) = self {
24127                        fidl::decode!(AudioStreamType, D, val, decoder, _inner_offset, depth)?;
24128                    } else {
24129                        unreachable!()
24130                    }
24131                }
24132                2 => {
24133                    #[allow(irrefutable_let_patterns)]
24134                    if let MediumSpecificStreamType::Video(_) = self {
24135                        // Do nothing, read the value into the object
24136                    } else {
24137                        // Initialize `self` to the right variant
24138                        *self =
24139                            MediumSpecificStreamType::Video(fidl::new_empty!(VideoStreamType, D));
24140                    }
24141                    #[allow(irrefutable_let_patterns)]
24142                    if let MediumSpecificStreamType::Video(ref mut val) = self {
24143                        fidl::decode!(VideoStreamType, D, val, decoder, _inner_offset, depth)?;
24144                    } else {
24145                        unreachable!()
24146                    }
24147                }
24148                3 => {
24149                    #[allow(irrefutable_let_patterns)]
24150                    if let MediumSpecificStreamType::Text(_) = self {
24151                        // Do nothing, read the value into the object
24152                    } else {
24153                        // Initialize `self` to the right variant
24154                        *self = MediumSpecificStreamType::Text(fidl::new_empty!(TextStreamType, D));
24155                    }
24156                    #[allow(irrefutable_let_patterns)]
24157                    if let MediumSpecificStreamType::Text(ref mut val) = self {
24158                        fidl::decode!(TextStreamType, D, val, decoder, _inner_offset, depth)?;
24159                    } else {
24160                        unreachable!()
24161                    }
24162                }
24163                4 => {
24164                    #[allow(irrefutable_let_patterns)]
24165                    if let MediumSpecificStreamType::Subpicture(_) = self {
24166                        // Do nothing, read the value into the object
24167                    } else {
24168                        // Initialize `self` to the right variant
24169                        *self = MediumSpecificStreamType::Subpicture(fidl::new_empty!(
24170                            SubpictureStreamType,
24171                            D
24172                        ));
24173                    }
24174                    #[allow(irrefutable_let_patterns)]
24175                    if let MediumSpecificStreamType::Subpicture(ref mut val) = self {
24176                        fidl::decode!(SubpictureStreamType, D, val, decoder, _inner_offset, depth)?;
24177                    } else {
24178                        unreachable!()
24179                    }
24180                }
24181                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24182            }
24183            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24184                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24185            }
24186            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24187                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24188            }
24189            Ok(())
24190        }
24191    }
24192
24193    impl fidl::encoding::ValueTypeMarker for Usage {
24194        type Borrowed<'a> = &'a Self;
24195        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24196            value
24197        }
24198    }
24199
24200    unsafe impl fidl::encoding::TypeMarker for Usage {
24201        type Owned = Self;
24202
24203        #[inline(always)]
24204        fn inline_align(_context: fidl::encoding::Context) -> usize {
24205            8
24206        }
24207
24208        #[inline(always)]
24209        fn inline_size(_context: fidl::encoding::Context) -> usize {
24210            16
24211        }
24212    }
24213
24214    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Usage, D> for &Usage {
24215        #[inline]
24216        unsafe fn encode(
24217            self,
24218            encoder: &mut fidl::encoding::Encoder<'_, D>,
24219            offset: usize,
24220            _depth: fidl::encoding::Depth,
24221        ) -> fidl::Result<()> {
24222            encoder.debug_check_bounds::<Usage>(offset);
24223            encoder.write_num::<u64>(self.ordinal(), offset);
24224            match self {
24225                Usage::RenderUsage(ref val) => {
24226                    fidl::encoding::encode_in_envelope::<AudioRenderUsage, D>(
24227                        <AudioRenderUsage as fidl::encoding::ValueTypeMarker>::borrow(val),
24228                        encoder,
24229                        offset + 8,
24230                        _depth,
24231                    )
24232                }
24233                Usage::CaptureUsage(ref val) => {
24234                    fidl::encoding::encode_in_envelope::<AudioCaptureUsage, D>(
24235                        <AudioCaptureUsage as fidl::encoding::ValueTypeMarker>::borrow(val),
24236                        encoder,
24237                        offset + 8,
24238                        _depth,
24239                    )
24240                }
24241            }
24242        }
24243    }
24244
24245    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Usage {
24246        #[inline(always)]
24247        fn new_empty() -> Self {
24248            Self::RenderUsage(fidl::new_empty!(AudioRenderUsage, D))
24249        }
24250
24251        #[inline]
24252        unsafe fn decode(
24253            &mut self,
24254            decoder: &mut fidl::encoding::Decoder<'_, D>,
24255            offset: usize,
24256            mut depth: fidl::encoding::Depth,
24257        ) -> fidl::Result<()> {
24258            decoder.debug_check_bounds::<Self>(offset);
24259            #[allow(unused_variables)]
24260            let next_out_of_line = decoder.next_out_of_line();
24261            let handles_before = decoder.remaining_handles();
24262            let (ordinal, inlined, num_bytes, num_handles) =
24263                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24264
24265            let member_inline_size = match ordinal {
24266                1 => <AudioRenderUsage as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24267                2 => {
24268                    <AudioCaptureUsage as fidl::encoding::TypeMarker>::inline_size(decoder.context)
24269                }
24270                _ => return Err(fidl::Error::UnknownUnionTag),
24271            };
24272
24273            if inlined != (member_inline_size <= 4) {
24274                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24275            }
24276            let _inner_offset;
24277            if inlined {
24278                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24279                _inner_offset = offset + 8;
24280            } else {
24281                depth.increment()?;
24282                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24283            }
24284            match ordinal {
24285                1 => {
24286                    #[allow(irrefutable_let_patterns)]
24287                    if let Usage::RenderUsage(_) = self {
24288                        // Do nothing, read the value into the object
24289                    } else {
24290                        // Initialize `self` to the right variant
24291                        *self = Usage::RenderUsage(fidl::new_empty!(AudioRenderUsage, D));
24292                    }
24293                    #[allow(irrefutable_let_patterns)]
24294                    if let Usage::RenderUsage(ref mut val) = self {
24295                        fidl::decode!(AudioRenderUsage, D, val, decoder, _inner_offset, depth)?;
24296                    } else {
24297                        unreachable!()
24298                    }
24299                }
24300                2 => {
24301                    #[allow(irrefutable_let_patterns)]
24302                    if let Usage::CaptureUsage(_) = self {
24303                        // Do nothing, read the value into the object
24304                    } else {
24305                        // Initialize `self` to the right variant
24306                        *self = Usage::CaptureUsage(fidl::new_empty!(AudioCaptureUsage, D));
24307                    }
24308                    #[allow(irrefutable_let_patterns)]
24309                    if let Usage::CaptureUsage(ref mut val) = self {
24310                        fidl::decode!(AudioCaptureUsage, D, val, decoder, _inner_offset, depth)?;
24311                    } else {
24312                        unreachable!()
24313                    }
24314                }
24315                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24316            }
24317            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24318                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24319            }
24320            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24321                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24322            }
24323            Ok(())
24324        }
24325    }
24326
24327    impl fidl::encoding::ValueTypeMarker for Usage2 {
24328        type Borrowed<'a> = &'a Self;
24329        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24330            value
24331        }
24332    }
24333
24334    unsafe impl fidl::encoding::TypeMarker for Usage2 {
24335        type Owned = Self;
24336
24337        #[inline(always)]
24338        fn inline_align(_context: fidl::encoding::Context) -> usize {
24339            8
24340        }
24341
24342        #[inline(always)]
24343        fn inline_size(_context: fidl::encoding::Context) -> usize {
24344            16
24345        }
24346    }
24347
24348    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Usage2, D> for &Usage2 {
24349        #[inline]
24350        unsafe fn encode(
24351            self,
24352            encoder: &mut fidl::encoding::Encoder<'_, D>,
24353            offset: usize,
24354            _depth: fidl::encoding::Depth,
24355        ) -> fidl::Result<()> {
24356            encoder.debug_check_bounds::<Usage2>(offset);
24357            encoder.write_num::<u64>(self.ordinal(), offset);
24358            match self {
24359                Usage2::RenderUsage(ref val) => {
24360                    fidl::encoding::encode_in_envelope::<AudioRenderUsage2, D>(
24361                        <AudioRenderUsage2 as fidl::encoding::ValueTypeMarker>::borrow(val),
24362                        encoder,
24363                        offset + 8,
24364                        _depth,
24365                    )
24366                }
24367                Usage2::CaptureUsage(ref val) => {
24368                    fidl::encoding::encode_in_envelope::<AudioCaptureUsage2, D>(
24369                        <AudioCaptureUsage2 as fidl::encoding::ValueTypeMarker>::borrow(val),
24370                        encoder,
24371                        offset + 8,
24372                        _depth,
24373                    )
24374                }
24375                Usage2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
24376            }
24377        }
24378    }
24379
24380    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Usage2 {
24381        #[inline(always)]
24382        fn new_empty() -> Self {
24383            Self::__SourceBreaking { unknown_ordinal: 0 }
24384        }
24385
24386        #[inline]
24387        unsafe fn decode(
24388            &mut self,
24389            decoder: &mut fidl::encoding::Decoder<'_, D>,
24390            offset: usize,
24391            mut depth: fidl::encoding::Depth,
24392        ) -> fidl::Result<()> {
24393            decoder.debug_check_bounds::<Self>(offset);
24394            #[allow(unused_variables)]
24395            let next_out_of_line = decoder.next_out_of_line();
24396            let handles_before = decoder.remaining_handles();
24397            let (ordinal, inlined, num_bytes, num_handles) =
24398                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24399
24400            let member_inline_size = match ordinal {
24401                1 => {
24402                    <AudioRenderUsage2 as fidl::encoding::TypeMarker>::inline_size(decoder.context)
24403                }
24404                2 => {
24405                    <AudioCaptureUsage2 as fidl::encoding::TypeMarker>::inline_size(decoder.context)
24406                }
24407                0 => return Err(fidl::Error::UnknownUnionTag),
24408                _ => num_bytes as usize,
24409            };
24410
24411            if inlined != (member_inline_size <= 4) {
24412                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24413            }
24414            let _inner_offset;
24415            if inlined {
24416                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24417                _inner_offset = offset + 8;
24418            } else {
24419                depth.increment()?;
24420                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24421            }
24422            match ordinal {
24423                1 => {
24424                    #[allow(irrefutable_let_patterns)]
24425                    if let Usage2::RenderUsage(_) = self {
24426                        // Do nothing, read the value into the object
24427                    } else {
24428                        // Initialize `self` to the right variant
24429                        *self = Usage2::RenderUsage(fidl::new_empty!(AudioRenderUsage2, D));
24430                    }
24431                    #[allow(irrefutable_let_patterns)]
24432                    if let Usage2::RenderUsage(ref mut val) = self {
24433                        fidl::decode!(AudioRenderUsage2, D, val, decoder, _inner_offset, depth)?;
24434                    } else {
24435                        unreachable!()
24436                    }
24437                }
24438                2 => {
24439                    #[allow(irrefutable_let_patterns)]
24440                    if let Usage2::CaptureUsage(_) = self {
24441                        // Do nothing, read the value into the object
24442                    } else {
24443                        // Initialize `self` to the right variant
24444                        *self = Usage2::CaptureUsage(fidl::new_empty!(AudioCaptureUsage2, D));
24445                    }
24446                    #[allow(irrefutable_let_patterns)]
24447                    if let Usage2::CaptureUsage(ref mut val) = self {
24448                        fidl::decode!(AudioCaptureUsage2, D, val, decoder, _inner_offset, depth)?;
24449                    } else {
24450                        unreachable!()
24451                    }
24452                }
24453                #[allow(deprecated)]
24454                ordinal => {
24455                    for _ in 0..num_handles {
24456                        decoder.drop_next_handle()?;
24457                    }
24458                    *self = Usage2::__SourceBreaking { unknown_ordinal: ordinal };
24459                }
24460            }
24461            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24462                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24463            }
24464            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24465                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24466            }
24467            Ok(())
24468        }
24469    }
24470
24471    impl fidl::encoding::ValueTypeMarker for UsageState {
24472        type Borrowed<'a> = &'a Self;
24473        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24474            value
24475        }
24476    }
24477
24478    unsafe impl fidl::encoding::TypeMarker for UsageState {
24479        type Owned = Self;
24480
24481        #[inline(always)]
24482        fn inline_align(_context: fidl::encoding::Context) -> usize {
24483            8
24484        }
24485
24486        #[inline(always)]
24487        fn inline_size(_context: fidl::encoding::Context) -> usize {
24488            16
24489        }
24490    }
24491
24492    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UsageState, D>
24493        for &UsageState
24494    {
24495        #[inline]
24496        unsafe fn encode(
24497            self,
24498            encoder: &mut fidl::encoding::Encoder<'_, D>,
24499            offset: usize,
24500            _depth: fidl::encoding::Depth,
24501        ) -> fidl::Result<()> {
24502            encoder.debug_check_bounds::<UsageState>(offset);
24503            encoder.write_num::<u64>(self.ordinal(), offset);
24504            match self {
24505                UsageState::Unadjusted(ref val) => {
24506                    fidl::encoding::encode_in_envelope::<UsageStateUnadjusted, D>(
24507                        <UsageStateUnadjusted as fidl::encoding::ValueTypeMarker>::borrow(val),
24508                        encoder,
24509                        offset + 8,
24510                        _depth,
24511                    )
24512                }
24513                UsageState::Ducked(ref val) => {
24514                    fidl::encoding::encode_in_envelope::<UsageStateDucked, D>(
24515                        <UsageStateDucked as fidl::encoding::ValueTypeMarker>::borrow(val),
24516                        encoder,
24517                        offset + 8,
24518                        _depth,
24519                    )
24520                }
24521                UsageState::Muted(ref val) => {
24522                    fidl::encoding::encode_in_envelope::<UsageStateMuted, D>(
24523                        <UsageStateMuted as fidl::encoding::ValueTypeMarker>::borrow(val),
24524                        encoder,
24525                        offset + 8,
24526                        _depth,
24527                    )
24528                }
24529                UsageState::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
24530            }
24531        }
24532    }
24533
24534    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UsageState {
24535        #[inline(always)]
24536        fn new_empty() -> Self {
24537            Self::__SourceBreaking { unknown_ordinal: 0 }
24538        }
24539
24540        #[inline]
24541        unsafe fn decode(
24542            &mut self,
24543            decoder: &mut fidl::encoding::Decoder<'_, D>,
24544            offset: usize,
24545            mut depth: fidl::encoding::Depth,
24546        ) -> fidl::Result<()> {
24547            decoder.debug_check_bounds::<Self>(offset);
24548            #[allow(unused_variables)]
24549            let next_out_of_line = decoder.next_out_of_line();
24550            let handles_before = decoder.remaining_handles();
24551            let (ordinal, inlined, num_bytes, num_handles) =
24552                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24553
24554            let member_inline_size = match ordinal {
24555                1 => <UsageStateUnadjusted as fidl::encoding::TypeMarker>::inline_size(
24556                    decoder.context,
24557                ),
24558                2 => <UsageStateDucked as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24559                3 => <UsageStateMuted as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24560                0 => return Err(fidl::Error::UnknownUnionTag),
24561                _ => num_bytes as usize,
24562            };
24563
24564            if inlined != (member_inline_size <= 4) {
24565                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24566            }
24567            let _inner_offset;
24568            if inlined {
24569                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24570                _inner_offset = offset + 8;
24571            } else {
24572                depth.increment()?;
24573                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24574            }
24575            match ordinal {
24576                1 => {
24577                    #[allow(irrefutable_let_patterns)]
24578                    if let UsageState::Unadjusted(_) = self {
24579                        // Do nothing, read the value into the object
24580                    } else {
24581                        // Initialize `self` to the right variant
24582                        *self = UsageState::Unadjusted(fidl::new_empty!(UsageStateUnadjusted, D));
24583                    }
24584                    #[allow(irrefutable_let_patterns)]
24585                    if let UsageState::Unadjusted(ref mut val) = self {
24586                        fidl::decode!(UsageStateUnadjusted, D, val, decoder, _inner_offset, depth)?;
24587                    } else {
24588                        unreachable!()
24589                    }
24590                }
24591                2 => {
24592                    #[allow(irrefutable_let_patterns)]
24593                    if let UsageState::Ducked(_) = self {
24594                        // Do nothing, read the value into the object
24595                    } else {
24596                        // Initialize `self` to the right variant
24597                        *self = UsageState::Ducked(fidl::new_empty!(UsageStateDucked, D));
24598                    }
24599                    #[allow(irrefutable_let_patterns)]
24600                    if let UsageState::Ducked(ref mut val) = self {
24601                        fidl::decode!(UsageStateDucked, D, val, decoder, _inner_offset, depth)?;
24602                    } else {
24603                        unreachable!()
24604                    }
24605                }
24606                3 => {
24607                    #[allow(irrefutable_let_patterns)]
24608                    if let UsageState::Muted(_) = self {
24609                        // Do nothing, read the value into the object
24610                    } else {
24611                        // Initialize `self` to the right variant
24612                        *self = UsageState::Muted(fidl::new_empty!(UsageStateMuted, D));
24613                    }
24614                    #[allow(irrefutable_let_patterns)]
24615                    if let UsageState::Muted(ref mut val) = self {
24616                        fidl::decode!(UsageStateMuted, D, val, decoder, _inner_offset, depth)?;
24617                    } else {
24618                        unreachable!()
24619                    }
24620                }
24621                #[allow(deprecated)]
24622                ordinal => {
24623                    for _ in 0..num_handles {
24624                        decoder.drop_next_handle()?;
24625                    }
24626                    *self = UsageState::__SourceBreaking { unknown_ordinal: ordinal };
24627                }
24628            }
24629            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24630                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24631            }
24632            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24633                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24634            }
24635            Ok(())
24636        }
24637    }
24638
24639    impl fidl::encoding::ValueTypeMarker for Value {
24640        type Borrowed<'a> = &'a Self;
24641        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24642            value
24643        }
24644    }
24645
24646    unsafe impl fidl::encoding::TypeMarker for Value {
24647        type Owned = Self;
24648
24649        #[inline(always)]
24650        fn inline_align(_context: fidl::encoding::Context) -> usize {
24651            8
24652        }
24653
24654        #[inline(always)]
24655        fn inline_size(_context: fidl::encoding::Context) -> usize {
24656            16
24657        }
24658    }
24659
24660    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Value, D> for &Value {
24661        #[inline]
24662        unsafe fn encode(
24663            self,
24664            encoder: &mut fidl::encoding::Encoder<'_, D>,
24665            offset: usize,
24666            _depth: fidl::encoding::Depth,
24667        ) -> fidl::Result<()> {
24668            encoder.debug_check_bounds::<Value>(offset);
24669            encoder.write_num::<u64>(self.ordinal(), offset);
24670            match self {
24671            Value::BoolValue(ref val) => {
24672                fidl::encoding::encode_in_envelope::<bool, D>(
24673                    <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
24674                    encoder, offset + 8, _depth
24675                )
24676            }
24677            Value::Uint64Value(ref val) => {
24678                fidl::encoding::encode_in_envelope::<u64, D>(
24679                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
24680                    encoder, offset + 8, _depth
24681                )
24682            }
24683            Value::Int64Value(ref val) => {
24684                fidl::encoding::encode_in_envelope::<i64, D>(
24685                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
24686                    encoder, offset + 8, _depth
24687                )
24688            }
24689            Value::StringValue(ref val) => {
24690                fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedString, D>(
24691                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(val),
24692                    encoder, offset + 8, _depth
24693                )
24694            }
24695            Value::BytesValue(ref val) => {
24696                fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedVector<u8>, D>(
24697                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(val),
24698                    encoder, offset + 8, _depth
24699                )
24700            }
24701        }
24702        }
24703    }
24704
24705    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Value {
24706        #[inline(always)]
24707        fn new_empty() -> Self {
24708            Self::BoolValue(fidl::new_empty!(bool, D))
24709        }
24710
24711        #[inline]
24712        unsafe fn decode(
24713            &mut self,
24714            decoder: &mut fidl::encoding::Decoder<'_, D>,
24715            offset: usize,
24716            mut depth: fidl::encoding::Depth,
24717        ) -> fidl::Result<()> {
24718            decoder.debug_check_bounds::<Self>(offset);
24719            #[allow(unused_variables)]
24720            let next_out_of_line = decoder.next_out_of_line();
24721            let handles_before = decoder.remaining_handles();
24722            let (ordinal, inlined, num_bytes, num_handles) =
24723                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24724
24725            let member_inline_size = match ordinal {
24726                1 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24727                2 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24728                3 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24729                4 => <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
24730                    decoder.context,
24731                ),
24732                5 => {
24733                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(
24734                        decoder.context,
24735                    )
24736                }
24737                _ => return Err(fidl::Error::UnknownUnionTag),
24738            };
24739
24740            if inlined != (member_inline_size <= 4) {
24741                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24742            }
24743            let _inner_offset;
24744            if inlined {
24745                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24746                _inner_offset = offset + 8;
24747            } else {
24748                depth.increment()?;
24749                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24750            }
24751            match ordinal {
24752                1 => {
24753                    #[allow(irrefutable_let_patterns)]
24754                    if let Value::BoolValue(_) = self {
24755                        // Do nothing, read the value into the object
24756                    } else {
24757                        // Initialize `self` to the right variant
24758                        *self = Value::BoolValue(fidl::new_empty!(bool, D));
24759                    }
24760                    #[allow(irrefutable_let_patterns)]
24761                    if let Value::BoolValue(ref mut val) = self {
24762                        fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
24763                    } else {
24764                        unreachable!()
24765                    }
24766                }
24767                2 => {
24768                    #[allow(irrefutable_let_patterns)]
24769                    if let Value::Uint64Value(_) = self {
24770                        // Do nothing, read the value into the object
24771                    } else {
24772                        // Initialize `self` to the right variant
24773                        *self = Value::Uint64Value(fidl::new_empty!(u64, D));
24774                    }
24775                    #[allow(irrefutable_let_patterns)]
24776                    if let Value::Uint64Value(ref mut val) = self {
24777                        fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
24778                    } else {
24779                        unreachable!()
24780                    }
24781                }
24782                3 => {
24783                    #[allow(irrefutable_let_patterns)]
24784                    if let Value::Int64Value(_) = self {
24785                        // Do nothing, read the value into the object
24786                    } else {
24787                        // Initialize `self` to the right variant
24788                        *self = Value::Int64Value(fidl::new_empty!(i64, D));
24789                    }
24790                    #[allow(irrefutable_let_patterns)]
24791                    if let Value::Int64Value(ref mut val) = self {
24792                        fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
24793                    } else {
24794                        unreachable!()
24795                    }
24796                }
24797                4 => {
24798                    #[allow(irrefutable_let_patterns)]
24799                    if let Value::StringValue(_) = self {
24800                        // Do nothing, read the value into the object
24801                    } else {
24802                        // Initialize `self` to the right variant
24803                        *self = Value::StringValue(fidl::new_empty!(
24804                            fidl::encoding::UnboundedString,
24805                            D
24806                        ));
24807                    }
24808                    #[allow(irrefutable_let_patterns)]
24809                    if let Value::StringValue(ref mut val) = self {
24810                        fidl::decode!(
24811                            fidl::encoding::UnboundedString,
24812                            D,
24813                            val,
24814                            decoder,
24815                            _inner_offset,
24816                            depth
24817                        )?;
24818                    } else {
24819                        unreachable!()
24820                    }
24821                }
24822                5 => {
24823                    #[allow(irrefutable_let_patterns)]
24824                    if let Value::BytesValue(_) = self {
24825                        // Do nothing, read the value into the object
24826                    } else {
24827                        // Initialize `self` to the right variant
24828                        *self = Value::BytesValue(fidl::new_empty!(
24829                            fidl::encoding::UnboundedVector<u8>,
24830                            D
24831                        ));
24832                    }
24833                    #[allow(irrefutable_let_patterns)]
24834                    if let Value::BytesValue(ref mut val) = self {
24835                        fidl::decode!(
24836                            fidl::encoding::UnboundedVector<u8>,
24837                            D,
24838                            val,
24839                            decoder,
24840                            _inner_offset,
24841                            depth
24842                        )?;
24843                    } else {
24844                        unreachable!()
24845                    }
24846                }
24847                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24848            }
24849            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24850                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24851            }
24852            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24853                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24854            }
24855            Ok(())
24856        }
24857    }
24858
24859    impl fidl::encoding::ValueTypeMarker for VideoCompressedFormat {
24860        type Borrowed<'a> = &'a Self;
24861        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24862            value
24863        }
24864    }
24865
24866    unsafe impl fidl::encoding::TypeMarker for VideoCompressedFormat {
24867        type Owned = Self;
24868
24869        #[inline(always)]
24870        fn inline_align(_context: fidl::encoding::Context) -> usize {
24871            8
24872        }
24873
24874        #[inline(always)]
24875        fn inline_size(_context: fidl::encoding::Context) -> usize {
24876            16
24877        }
24878    }
24879
24880    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VideoCompressedFormat, D>
24881        for &VideoCompressedFormat
24882    {
24883        #[inline]
24884        unsafe fn encode(
24885            self,
24886            encoder: &mut fidl::encoding::Encoder<'_, D>,
24887            offset: usize,
24888            _depth: fidl::encoding::Depth,
24889        ) -> fidl::Result<()> {
24890            encoder.debug_check_bounds::<VideoCompressedFormat>(offset);
24891            encoder.write_num::<u64>(self.ordinal(), offset);
24892            match self {
24893                VideoCompressedFormat::TempFieldTodoRemove(ref val) => {
24894                    fidl::encoding::encode_in_envelope::<u32, D>(
24895                        <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
24896                        encoder,
24897                        offset + 8,
24898                        _depth,
24899                    )
24900                }
24901            }
24902        }
24903    }
24904
24905    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoCompressedFormat {
24906        #[inline(always)]
24907        fn new_empty() -> Self {
24908            Self::TempFieldTodoRemove(fidl::new_empty!(u32, D))
24909        }
24910
24911        #[inline]
24912        unsafe fn decode(
24913            &mut self,
24914            decoder: &mut fidl::encoding::Decoder<'_, D>,
24915            offset: usize,
24916            mut depth: fidl::encoding::Depth,
24917        ) -> fidl::Result<()> {
24918            decoder.debug_check_bounds::<Self>(offset);
24919            #[allow(unused_variables)]
24920            let next_out_of_line = decoder.next_out_of_line();
24921            let handles_before = decoder.remaining_handles();
24922            let (ordinal, inlined, num_bytes, num_handles) =
24923                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
24924
24925            let member_inline_size = match ordinal {
24926                1 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
24927                _ => return Err(fidl::Error::UnknownUnionTag),
24928            };
24929
24930            if inlined != (member_inline_size <= 4) {
24931                return Err(fidl::Error::InvalidInlineBitInEnvelope);
24932            }
24933            let _inner_offset;
24934            if inlined {
24935                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
24936                _inner_offset = offset + 8;
24937            } else {
24938                depth.increment()?;
24939                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
24940            }
24941            match ordinal {
24942                1 => {
24943                    #[allow(irrefutable_let_patterns)]
24944                    if let VideoCompressedFormat::TempFieldTodoRemove(_) = self {
24945                        // Do nothing, read the value into the object
24946                    } else {
24947                        // Initialize `self` to the right variant
24948                        *self =
24949                            VideoCompressedFormat::TempFieldTodoRemove(fidl::new_empty!(u32, D));
24950                    }
24951                    #[allow(irrefutable_let_patterns)]
24952                    if let VideoCompressedFormat::TempFieldTodoRemove(ref mut val) = self {
24953                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
24954                    } else {
24955                        unreachable!()
24956                    }
24957                }
24958                ordinal => panic!("unexpected ordinal {:?}", ordinal),
24959            }
24960            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
24961                return Err(fidl::Error::InvalidNumBytesInEnvelope);
24962            }
24963            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
24964                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
24965            }
24966            Ok(())
24967        }
24968    }
24969
24970    impl fidl::encoding::ValueTypeMarker for VideoFormat {
24971        type Borrowed<'a> = &'a Self;
24972        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
24973            value
24974        }
24975    }
24976
24977    unsafe impl fidl::encoding::TypeMarker for VideoFormat {
24978        type Owned = Self;
24979
24980        #[inline(always)]
24981        fn inline_align(_context: fidl::encoding::Context) -> usize {
24982            8
24983        }
24984
24985        #[inline(always)]
24986        fn inline_size(_context: fidl::encoding::Context) -> usize {
24987            16
24988        }
24989    }
24990
24991    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VideoFormat, D>
24992        for &VideoFormat
24993    {
24994        #[inline]
24995        unsafe fn encode(
24996            self,
24997            encoder: &mut fidl::encoding::Encoder<'_, D>,
24998            offset: usize,
24999            _depth: fidl::encoding::Depth,
25000        ) -> fidl::Result<()> {
25001            encoder.debug_check_bounds::<VideoFormat>(offset);
25002            encoder.write_num::<u64>(self.ordinal(), offset);
25003            match self {
25004                VideoFormat::Compressed(ref val) => {
25005                    fidl::encoding::encode_in_envelope::<VideoCompressedFormat, D>(
25006                        <VideoCompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
25007                        encoder,
25008                        offset + 8,
25009                        _depth,
25010                    )
25011                }
25012                VideoFormat::Uncompressed(ref val) => {
25013                    fidl::encoding::encode_in_envelope::<VideoUncompressedFormat, D>(
25014                        <VideoUncompressedFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
25015                        encoder,
25016                        offset + 8,
25017                        _depth,
25018                    )
25019                }
25020            }
25021        }
25022    }
25023
25024    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VideoFormat {
25025        #[inline(always)]
25026        fn new_empty() -> Self {
25027            Self::Compressed(fidl::new_empty!(VideoCompressedFormat, D))
25028        }
25029
25030        #[inline]
25031        unsafe fn decode(
25032            &mut self,
25033            decoder: &mut fidl::encoding::Decoder<'_, D>,
25034            offset: usize,
25035            mut depth: fidl::encoding::Depth,
25036        ) -> fidl::Result<()> {
25037            decoder.debug_check_bounds::<Self>(offset);
25038            #[allow(unused_variables)]
25039            let next_out_of_line = decoder.next_out_of_line();
25040            let handles_before = decoder.remaining_handles();
25041            let (ordinal, inlined, num_bytes, num_handles) =
25042                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
25043
25044            let member_inline_size = match ordinal {
25045                1 => <VideoCompressedFormat as fidl::encoding::TypeMarker>::inline_size(
25046                    decoder.context,
25047                ),
25048                2 => <VideoUncompressedFormat as fidl::encoding::TypeMarker>::inline_size(
25049                    decoder.context,
25050                ),
25051                _ => return Err(fidl::Error::UnknownUnionTag),
25052            };
25053
25054            if inlined != (member_inline_size <= 4) {
25055                return Err(fidl::Error::InvalidInlineBitInEnvelope);
25056            }
25057            let _inner_offset;
25058            if inlined {
25059                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
25060                _inner_offset = offset + 8;
25061            } else {
25062                depth.increment()?;
25063                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
25064            }
25065            match ordinal {
25066                1 => {
25067                    #[allow(irrefutable_let_patterns)]
25068                    if let VideoFormat::Compressed(_) = self {
25069                        // Do nothing, read the value into the object
25070                    } else {
25071                        // Initialize `self` to the right variant
25072                        *self = VideoFormat::Compressed(fidl::new_empty!(VideoCompressedFormat, D));
25073                    }
25074                    #[allow(irrefutable_let_patterns)]
25075                    if let VideoFormat::Compressed(ref mut val) = self {
25076                        fidl::decode!(
25077                            VideoCompressedFormat,
25078                            D,
25079                            val,
25080                            decoder,
25081                            _inner_offset,
25082                            depth
25083                        )?;
25084                    } else {
25085                        unreachable!()
25086                    }
25087                }
25088                2 => {
25089                    #[allow(irrefutable_let_patterns)]
25090                    if let VideoFormat::Uncompressed(_) = self {
25091                        // Do nothing, read the value into the object
25092                    } else {
25093                        // Initialize `self` to the right variant
25094                        *self =
25095                            VideoFormat::Uncompressed(fidl::new_empty!(VideoUncompressedFormat, D));
25096                    }
25097                    #[allow(irrefutable_let_patterns)]
25098                    if let VideoFormat::Uncompressed(ref mut val) = self {
25099                        fidl::decode!(
25100                            VideoUncompressedFormat,
25101                            D,
25102                            val,
25103                            decoder,
25104                            _inner_offset,
25105                            depth
25106                        )?;
25107                    } else {
25108                        unreachable!()
25109                    }
25110                }
25111                ordinal => panic!("unexpected ordinal {:?}", ordinal),
25112            }
25113            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
25114                return Err(fidl::Error::InvalidNumBytesInEnvelope);
25115            }
25116            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
25117                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
25118            }
25119            Ok(())
25120        }
25121    }
25122}