fidl_fuchsia_diagnostics__common/
fidl_fuchsia_diagnostics__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
11pub const COMPONENT_URL_ARG_NAME: &str = "$__url";
12
13/// The size 64 was chosen because entries in batches are handles to
14/// VMOs and there is a limit of 64 handles per fidl message.
15pub const MAXIMUM_ENTRIES_PER_BATCH: u16 = 64;
16
17///  The size bound of 1024 is a reasonably low size restriction that meets most
18///  canonical selectors we've ecountered.
19pub const MAXIMUM_RAW_SELECTOR_LENGTH: u16 = 1024;
20
21pub const MAX_DATA_HIERARCHY_DEPTH: u16 = 100;
22
23/// Max number of LogInterestSelectors that can be specified via a listener.
24pub const MAX_LOG_SELECTORS: u8 = 64;
25
26pub const MAX_MONIKER_SEGMENTS: u16 = 25;
27
28/// The maximum number of parameters that can be sent in one `Set` call.
29pub const MAX_SAMPLE_PARAMETERS_PER_SET: u64 = 100;
30
31pub const MAX_STRING_SELECTOR_LENGTH: u16 = 1024;
32
33pub const MONIKER_ARG_NAME: &str = "$__moniker";
34
35pub const ROLLED_OUT_ARG_NAME: &str = "$__rolled_out";
36
37/// ConfigurationError indicates a bad setting in `Sample::Set`. This value
38/// is returned before the first sample is taken.
39#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
40pub enum ConfigurationError {
41    /// This indicates that when calculating the sample period, it was less than
42    /// `MINIMUM_SAMPLE_PERIOD_SECONDS`.
43    SamplePeriodTooSmall,
44    /// This indicates that there was an invalid setting in `SampleParameters`.
45    /// Check Archivist's logs for more information.
46    SampleParametersInvalid,
47    /// Indicates that an invalid selector was sent. Check Archivist's logs for more
48    /// information.
49    InvalidSelectors,
50    #[doc(hidden)]
51    __SourceBreaking { unknown_ordinal: u32 },
52}
53
54/// Pattern that matches an unknown `ConfigurationError` member.
55#[macro_export]
56macro_rules! ConfigurationErrorUnknown {
57    () => {
58        _
59    };
60}
61
62impl ConfigurationError {
63    #[inline]
64    pub fn from_primitive(prim: u32) -> Option<Self> {
65        match prim {
66            1 => Some(Self::SamplePeriodTooSmall),
67            2 => Some(Self::SampleParametersInvalid),
68            3 => Some(Self::InvalidSelectors),
69            _ => None,
70        }
71    }
72
73    #[inline]
74    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
75        match prim {
76            1 => Self::SamplePeriodTooSmall,
77            2 => Self::SampleParametersInvalid,
78            3 => Self::InvalidSelectors,
79            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
80        }
81    }
82
83    #[inline]
84    pub fn unknown() -> Self {
85        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
86    }
87
88    #[inline]
89    pub const fn into_primitive(self) -> u32 {
90        match self {
91            Self::SamplePeriodTooSmall => 1,
92            Self::SampleParametersInvalid => 2,
93            Self::InvalidSelectors => 3,
94            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
95        }
96    }
97
98    #[inline]
99    pub fn is_unknown(&self) -> bool {
100        match self {
101            Self::__SourceBreaking { unknown_ordinal: _ } => true,
102            _ => false,
103        }
104    }
105}
106
107#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
108#[repr(u8)]
109pub enum DataType {
110    /// Complete inspect hierarchies on the system.
111    Inspect = 1,
112    /// Log streams on the system.
113    Logs = 3,
114}
115
116impl DataType {
117    #[inline]
118    pub fn from_primitive(prim: u8) -> Option<Self> {
119        match prim {
120            1 => Some(Self::Inspect),
121            3 => Some(Self::Logs),
122            _ => None,
123        }
124    }
125
126    #[inline]
127    pub const fn into_primitive(self) -> u8 {
128        self as u8
129    }
130}
131
132/// Enum used to specify the output format for
133/// Reader results.
134#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
135#[repr(u32)]
136pub enum Format {
137    /// Dump read results per the Diagnostics Json
138    /// Schema specifications.
139    Json = 1,
140    /// Dump read results per the Iquery text specifications.
141    Text = 2,
142    /// Dump read results per the Diagnostics CBOR
143    /// Schema specifications.
144    Cbor = 3,
145    /// Dump read results per the Diagnostics FXT
146    /// Schema specifications. This is only supported
147    /// for logs.
148    Fxt = 4,
149}
150
151impl Format {
152    #[inline]
153    pub fn from_primitive(prim: u32) -> Option<Self> {
154        match prim {
155            1 => Some(Self::Json),
156            2 => Some(Self::Text),
157            3 => Some(Self::Cbor),
158            4 => Some(Self::Fxt),
159            _ => None,
160        }
161    }
162
163    #[inline]
164    pub const fn into_primitive(self) -> u32 {
165        self as u32
166    }
167}
168
169/// Enum describing the potential failure states of the streaming protocol when serving results
170/// to the client over the result iterator.
171#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
172#[repr(u32)]
173pub enum ReaderError {
174    Io = 1,
175}
176
177impl ReaderError {
178    #[inline]
179    pub fn from_primitive(prim: u32) -> Option<Self> {
180        match prim {
181            1 => Some(Self::Io),
182            _ => None,
183        }
184    }
185
186    #[inline]
187    pub const fn into_primitive(self) -> u32 {
188        self as u32
189    }
190}
191
192/// `RuntimeError` indicates errors that manifest after the Sample server has
193/// begun periodically sampling data. Clients can ignore these errors, though
194/// they could potentially indicate that no `SampleReady` request will ever arrive,
195/// or that the batch iterator might behave in unexpected ways, such as hanging.
196#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
197pub enum RuntimeError {
198    /// There was some error when starting a batch iterator server.
199    /// Check Archivist's logs for more information.
200    BatchIteratorFailed,
201    #[doc(hidden)]
202    __SourceBreaking { unknown_ordinal: u32 },
203}
204
205/// Pattern that matches an unknown `RuntimeError` member.
206#[macro_export]
207macro_rules! RuntimeErrorUnknown {
208    () => {
209        _
210    };
211}
212
213impl RuntimeError {
214    #[inline]
215    pub fn from_primitive(prim: u32) -> Option<Self> {
216        match prim {
217            1 => Some(Self::BatchIteratorFailed),
218            _ => None,
219        }
220    }
221
222    #[inline]
223    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
224        match prim {
225            1 => Self::BatchIteratorFailed,
226            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
227        }
228    }
229
230    #[inline]
231    pub fn unknown() -> Self {
232        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
233    }
234
235    #[inline]
236    pub const fn into_primitive(self) -> u32 {
237        match self {
238            Self::BatchIteratorFailed => 1,
239            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
240        }
241    }
242
243    #[inline]
244    pub fn is_unknown(&self) -> bool {
245        match self {
246            Self::__SourceBreaking { unknown_ordinal: _ } => true,
247            _ => false,
248        }
249    }
250}
251
252/// `SampleStrategy` instructs Archivist on the circumstances under which you
253/// want to receive data for the given `SampleDatum`.
254#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
255pub enum SampleStrategy {
256    /// `ON_DIFF` causes the server to keep a cache of previous values.
257    /// At each sample period, it compares the new value to the old one
258    /// and only alerts if there is a change.
259    OnDiff,
260    /// `ALWAYS` alerts at each sample period it finds data, whether it
261    /// has changed or not.
262    ///
263    /// Note: it does NOT alert if there is no data at all.
264    Always,
265    #[doc(hidden)]
266    __SourceBreaking { unknown_ordinal: u8 },
267}
268
269/// Pattern that matches an unknown `SampleStrategy` member.
270#[macro_export]
271macro_rules! SampleStrategyUnknown {
272    () => {
273        _
274    };
275}
276
277impl SampleStrategy {
278    #[inline]
279    pub fn from_primitive(prim: u8) -> Option<Self> {
280        match prim {
281            1 => Some(Self::OnDiff),
282            2 => Some(Self::Always),
283            _ => None,
284        }
285    }
286
287    #[inline]
288    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
289        match prim {
290            1 => Self::OnDiff,
291            2 => Self::Always,
292            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
293        }
294    }
295
296    #[inline]
297    pub fn unknown() -> Self {
298        Self::__SourceBreaking { unknown_ordinal: 0xff }
299    }
300
301    #[inline]
302    pub const fn into_primitive(self) -> u8 {
303        match self {
304            Self::OnDiff => 1,
305            Self::Always => 2,
306            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
307        }
308    }
309
310    #[inline]
311    pub fn is_unknown(&self) -> bool {
312        match self {
313            Self::__SourceBreaking { unknown_ordinal: _ } => true,
314            _ => false,
315        }
316    }
317}
318
319/// The severity of a given record.
320#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
321#[repr(u8)]
322pub enum Severity {
323    /// Trace records include detailed information about program execution.
324    Trace = 16,
325    /// Debug records include development-facing information about program execution.
326    Debug = 32,
327    /// Info records include general information about program execution. (default)
328    Info = 48,
329    /// Warning records include information about potentially problematic operations.
330    Warn = 64,
331    /// Error records include information about failed operations.
332    Error = 80,
333    /// Fatal records convey information about operations which cause a program's termination.
334    Fatal = 96,
335}
336
337impl Severity {
338    #[inline]
339    pub fn from_primitive(prim: u8) -> Option<Self> {
340        match prim {
341            16 => Some(Self::Trace),
342            32 => Some(Self::Debug),
343            48 => Some(Self::Info),
344            64 => Some(Self::Warn),
345            80 => Some(Self::Error),
346            96 => Some(Self::Fatal),
347            _ => None,
348        }
349    }
350
351    #[inline]
352    pub const fn into_primitive(self) -> u8 {
353        self as u8
354    }
355}
356
357/// Enum specifying the modes by which a user can connect to and stream diagnostics metrics.
358#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
359#[repr(u8)]
360pub enum StreamMode {
361    /// The stream will serve a snapshot of the diagnostics data at the time of
362    /// connection, then end.
363    Snapshot = 1,
364    /// The stream will serve a snapshot of the diagnostics data at the time of
365    /// connection, then subsequent calls to the stream will hang until
366    /// new diagnostics data is available.
367    SnapshotThenSubscribe = 2,
368    /// Calls to the stream will hang until new diagnostics data is available. Between calls to
369    /// the stream, newly arrived data is buffered.
370    Subscribe = 3,
371}
372
373impl StreamMode {
374    #[inline]
375    pub fn from_primitive(prim: u8) -> Option<Self> {
376        match prim {
377            1 => Some(Self::Snapshot),
378            2 => Some(Self::SnapshotThenSubscribe),
379            3 => Some(Self::Subscribe),
380            _ => None,
381        }
382    }
383
384    #[inline]
385    pub const fn into_primitive(self) -> u8 {
386        self as u8
387    }
388}
389
390#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
391pub struct All;
392
393impl fidl::Persistable for All {}
394
395#[derive(Clone, Debug, PartialEq)]
396pub struct LogInterestSelector {
397    /// Matches the components for which the interest will be requested.
398    pub selector: ComponentSelector,
399    /// The interest level that will be sent to components matching the selector.
400    pub interest: fidl_fuchsia_diagnostics_types__common::Interest,
401}
402
403impl fidl::Persistable for LogInterestSelector {}
404
405#[derive(Clone, Debug, PartialEq)]
406pub struct LogSettingsSetInterestRequest {
407    pub selectors: Vec<LogInterestSelector>,
408}
409
410impl fidl::Persistable for LogSettingsSetInterestRequest {}
411
412/// A selector defining a set of nodes to match, and on those matched nodes a set of named
413/// properties to match.
414#[derive(Clone, Debug, PartialEq)]
415pub struct PropertySelector {
416    /// A vector of StringSelectors which serve as a pattern matcher
417    ///   for paths through a hierarchy of named nodes. Each entry in the vector
418    ///   is a selector for a single named node in a data hierarchy. The vector
419    ///   of selectors for named nodes, then, defines a selector on paths through the
420    ///   data hierarchy.
421    ///
422    /// Node paths support wildcarding, which will glob a single level of a
423    /// node hierarchy. eg:
424    ///    root/a/b/*/d
425    /// will match all nodes named d which are below some child of node b.
426    ///    root/a/b/c*
427    /// will match all nodes below b which start with the character "c".
428    pub node_path: Vec<StringSelector>,
429    /// A StringSelector which serves as a pattern matcher for
430    ///   string-named properties on a node in a data hierarchy.
431    ///
432    /// target_properties supports wildcarding, which will match against all properties
433    /// on any node matched by node_path.
434    pub target_properties: StringSelector,
435}
436
437impl fidl::Persistable for PropertySelector {}
438
439/// A selector defining a set of nodes to match, for which the entire subtree including
440/// those nodes are selected.
441#[derive(Clone, Debug, PartialEq)]
442pub struct SubtreeSelector {
443    /// A vector of StringSelectors which serve as a pattern matcher
444    ///   for paths through a hierarchy of named nodes. Each entry in the vector
445    ///   is a selector for a single named node in a data hierarchy. The vector
446    ///   of selectors for named nodes, then, defines a selector on paths through the
447    ///   data hierarchy.
448    ///
449    /// Node paths support wildcarding, which will glob a single level of a
450    /// node hierarchy. eg:
451    ///    root/a/b/*/d
452    /// will match all nodes named d which are below some child of node b.
453    ///    root/a/b/c*
454    /// will match all nodes below b which start with the character "c".
455    pub node_path: Vec<StringSelector>,
456}
457
458impl fidl::Persistable for SubtreeSelector {}
459
460/// Specifies a pattern of component monikers which
461/// identify components being selected for.
462///
463/// Component selectors support wildcarding, which will glob a single "level" of a
464/// component moniker. eg:
465///    core/*/echo
466/// will match all echo instances running only in realms directly under core, but none
467/// nested further.
468///
469/// Component selectors also support a recursive wildcard, which will glob multiple
470/// "levels" of a component moniker. eg:
471///    core/**
472/// will match all component instances running under core/ and all descendants of it.
473/// Note that the wildcard does not select core itself. Clients that wish to choose a
474/// subtree including the root should pass two selectors, eg:
475///    core
476///    core/**
477/// The recursive wildcard is only allowed as the final segment of the selector.
478#[derive(Clone, Debug, Default, PartialEq)]
479pub struct ComponentSelector {
480    /// Vector encoding the a pattern for monikers of components being selected for.
481    /// These monikers are child-monikers relative to a "root" hierarchy that the archivist
482    /// is aware of.
483    ///
484    /// There must be at least one StringSelector provided, which
485    /// specifies the component names that are matched by
486    /// the current selector.
487    pub moniker_segments: Option<Vec<StringSelector>>,
488    #[doc(hidden)]
489    pub __source_breaking: fidl::marker::SourceBreaking,
490}
491
492impl fidl::Persistable for ComponentSelector {}
493
494/// Interest expresses the scope of clients' desired diagnostics data,
495/// e.g. for filtering messages or controlling their generation.
496#[derive(Clone, Debug, Default, PartialEq)]
497pub struct Interest {
498    /// Minimum desired severity. Components should include records at or
499    /// above this severity.
500    ///
501    /// If not present, interpreted as Severity.INFO.
502    pub min_severity: Option<Severity>,
503    #[doc(hidden)]
504    pub __source_breaking: fidl::marker::SourceBreaking,
505}
506
507impl fidl::Persistable for Interest {}
508
509#[derive(Clone, Debug, Default, PartialEq)]
510pub struct LogSettingsSetComponentInterestRequest {
511    /// List of selectors. Required.
512    pub selectors: Option<Vec<LogInterestSelector>>,
513    /// Whether or not to persist the setting change after disconnection.
514    /// Optional. Defaults to false.
515    pub persist: Option<bool>,
516    #[doc(hidden)]
517    pub __source_breaking: fidl::marker::SourceBreaking,
518}
519
520impl fidl::Persistable for LogSettingsSetComponentInterestRequest {}
521
522#[derive(Clone, Debug, Default, PartialEq)]
523pub struct LogStreamOptions {
524    /// What logs to stream through this socket.
525    pub mode: Option<StreamMode>,
526    /// Whether or not to include the moniker in the record arguments.
527    /// Default: false
528    pub include_moniker: Option<bool>,
529    /// Whether or not to include the component url in the record arguments.
530    /// Default: false
531    pub include_component_url: Option<bool>,
532    /// Whether or not to include the number of rolled out logs in the record
533    /// arguments.
534    /// Default: false
535    pub include_rolled_out: Option<bool>,
536    #[doc(hidden)]
537    pub __source_breaking: fidl::marker::SourceBreaking,
538}
539
540impl fidl::Persistable for LogStreamOptions {}
541
542/// Parameters which configure a diagnostics stream's performance properties.
543#[derive(Clone, Debug, Default, PartialEq)]
544pub struct PerformanceConfiguration {
545    /// Maximum aggregate size of all formatted contents returned by
546    /// the batch iterator for a diagnostics stream. If this value is set for a stream
547    /// configured in subscribe mode, the stream will terminate when the max size has
548    /// been reached.
549    /// NOTE: OPTIONAL
550    pub max_aggregate_content_size_bytes: Option<u64>,
551    /// Configuration specifying max number of seconds to wait for a single
552    /// component to have its diagnostics data "pumped". This value can used
553    /// for testing or if you know the component you are interested is in under
554    /// heavy load.
555    /// If not provided, then PER_COMPONENT_ASYNC_TIMEOUT_SECONDS as defined in
556    /// https://fuchsia.googlesource.com/fuchsia/+/refs/heads/master/src/diagnostics/archivist/src/constants.rs
557    /// will be used.
558    /// NOTE: OPTIONAL
559    pub batch_retrieval_timeout_seconds: Option<i64>,
560    #[doc(hidden)]
561    pub __source_breaking: fidl::marker::SourceBreaking,
562}
563
564impl fidl::Persistable for PerformanceConfiguration {}
565
566#[derive(Clone, Debug, Default, PartialEq)]
567pub struct SampleDatum {
568    /// The selector to check.
569    pub selector: Option<SelectorArgument>,
570    /// The strategy by which the server decides to notify the client.
571    pub strategy: Option<SampleStrategy>,
572    /// The interval at which this datum should be sampled.
573    ///
574    /// Each `SampleDatum` has its own specified interval. It is preferred to send
575    /// as many selectors on one `Sample` connection as possible, to allow
576    /// Archivist to batch requests. However, Archivist will query at a period that
577    /// is the greatest common divisor of all intervals. So, balance the desire for
578    /// a small number of `Sample` connections with keeping the intervals compatible.
579    ///
580    /// Example: two data with intervals of 3 and 4 respectively would check for work
581    /// every second. Archivist won't actually sample if neither batch is ready, but
582    /// it will check.
583    ///
584    /// Example: two data with intervals of 10 and 5 respectively would only check for
585    /// work every 5 seconds.
586    ///
587    /// (In practice, the calculated sample period must be valid. See
588    /// MINIMUM_SAMPLE_PERIOD_SECONDS above.)
589    pub interval_secs: Option<i64>,
590    #[doc(hidden)]
591    pub __source_breaking: fidl::marker::SourceBreaking,
592}
593
594impl fidl::Persistable for SampleDatum {}
595
596/// The data for one Sample server.
597#[derive(Clone, Debug, Default, PartialEq)]
598pub struct SampleParameters {
599    /// The set of data to sample.
600    ///
601    /// These samples will be batched by the intervals in each SampleDatum.
602    /// You should use `MAX_SAMPLE_PARAMETERS_PER_SET` to paginate inputs; it should
603    /// generally be well-sized for most selectors.
604    pub data: Option<Vec<SampleDatum>>,
605    #[doc(hidden)]
606    pub __source_breaking: fidl::marker::SourceBreaking,
607}
608
609impl fidl::Persistable for SampleParameters {}
610
611/// Structured selector containing all required information for pattern-matching onto
612/// string-named properties owned by nodes in a data hierarchy, where data hierarchies belong
613/// to specific components.
614///
615/// These selectors are represented in text form as three segments, colon delimited,
616/// specifying:
617///         <component_moniker>:<node_selector>:<property_selector>
618/// Examples:
619///    Property selection:
620///         realm1/realm2/echo:root/active_users:user_count
621///
622///    Subtree selection:
623///         realm1/realm2/echo:root/active_users
624#[derive(Clone, Debug, Default, PartialEq)]
625pub struct Selector {
626    /// The selector defining a pattern of component monikers to match
627    /// against.
628    pub component_selector: Option<ComponentSelector>,
629    /// The selector defining data hierarchy properties to match against
630    /// within the data hierarchies owned by components matched by
631    /// `component_selector`.
632    pub tree_selector: Option<TreeSelector>,
633    /// A set of fuchsia.inspect.Tree names to filter with before applying
634    /// hierarchy/property selectors.
635    ///
636    /// Omitting a name-filter is equivalent to TreeNames::some(["root"]).
637    /// Note that "root" is the default tree name.
638    pub tree_names: Option<TreeNames>,
639    #[doc(hidden)]
640    pub __source_breaking: fidl::marker::SourceBreaking,
641}
642
643impl fidl::Persistable for Selector {}
644
645/// Parameters needed to configure a stream of diagnostics information.
646#[derive(Clone, Debug, Default, PartialEq)]
647pub struct StreamParameters {
648    /// A [fuchsia.diagnostics/DataType] that specifies the diagnostics data type
649    /// to stream to the client.
650    /// NOTE: REQUIRED
651    pub data_type: Option<DataType>,
652    /// A [fuchsia.diagnostics/StreamMode] that specifies how the
653    /// streaming server provides streamed results.
654    /// NOTE: REQUIRED
655    pub stream_mode: Option<StreamMode>,
656    /// A [fuchsia.diagnostics/Format] that specifies how to format the returned
657    /// diagnostics data.
658    /// NOTE: REQUIRED
659    pub format: Option<Format>,
660    /// Configuration specifying what results the client wants returned from their
661    /// connection. The client can request a specific subset of data using a vector
662    /// of provided selectors, or can specify that they want all available data.
663    /// NOTE: REQUIRED
664    pub client_selector_configuration: Option<ClientSelectorConfiguration>,
665    /// Configuration specifying max number of seconds to wait for a single
666    /// component to have its diagnostics data "pumped". This value can used
667    /// for testing or if you know the component you are interested is in under
668    /// heavy load.
669    /// If not provided, then PER_COMPONENT_ASYNC_TIMEOUT_SECONDS as defined in
670    /// https://fuchsia.googlesource.com/fuchsia/+/refs/heads/master/src/diagnostics/archivist/src/constants.rs
671    /// will be used.
672    /// NOTE: OPTIONAL
673    pub batch_retrieval_timeout_seconds: Option<i64>,
674    /// Parameters which configure a diagnostics stream's performance properties.
675    /// NOTE: OPTIONAL
676    pub performance_configuration: Option<PerformanceConfiguration>,
677    #[doc(hidden)]
678    pub __source_breaking: fidl::marker::SourceBreaking,
679}
680
681impl fidl::Persistable for StreamParameters {}
682
683#[derive(Clone, Debug)]
684pub enum ClientSelectorConfiguration {
685    /// A vector of [fuchsia.diagnostics/SelectorArgument] which
686    /// provide additional filters to scope data streams with. An empty vector is considered
687    /// a misconfiguration and will result in an epitaph signaling incorrect parameters.
688    Selectors(Vec<SelectorArgument>),
689    /// select_all must be true if set, and specifies that the client wants to retrieve
690    /// all data that their connection is able to expose.
691    SelectAll(bool),
692    #[doc(hidden)]
693    __SourceBreaking { unknown_ordinal: u64 },
694}
695
696/// Pattern that matches an unknown `ClientSelectorConfiguration` member.
697#[macro_export]
698macro_rules! ClientSelectorConfigurationUnknown {
699    () => {
700        _
701    };
702}
703
704// Custom PartialEq so that unknown variants are not equal to themselves.
705impl PartialEq for ClientSelectorConfiguration {
706    fn eq(&self, other: &Self) -> bool {
707        match (self, other) {
708            (Self::Selectors(x), Self::Selectors(y)) => *x == *y,
709            (Self::SelectAll(x), Self::SelectAll(y)) => *x == *y,
710            _ => false,
711        }
712    }
713}
714
715impl ClientSelectorConfiguration {
716    #[inline]
717    pub fn ordinal(&self) -> u64 {
718        match *self {
719            Self::Selectors(_) => 1,
720            Self::SelectAll(_) => 2,
721            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
722        }
723    }
724
725    #[inline]
726    pub fn unknown_variant_for_testing() -> Self {
727        Self::__SourceBreaking { unknown_ordinal: 0 }
728    }
729
730    #[inline]
731    pub fn is_unknown(&self) -> bool {
732        match self {
733            Self::__SourceBreaking { .. } => true,
734            _ => false,
735        }
736    }
737}
738
739impl fidl::Persistable for ClientSelectorConfiguration {}
740
741/// Argument used for Archive selectors, can be either the pre-parsed
742/// fidl struct or string representation.
743#[derive(Clone, Debug)]
744pub enum SelectorArgument {
745    /// A Selector defining a pattern-matcher which selects for components within a hierarchy
746    /// and properties in a data hierarchy namespaced by component.
747    StructuredSelector(Selector),
748    /// A raw string representing a [fuchsia.diagnostics/Selector].
749    /// The Selector defines a pattern-matcher which selects for components within a hierarchy
750    /// and properties in a data hierarchy namespaced by component.
751    /// NOTE: All StringSelectors parsed from the raw_selector will be interpreted in
752    ///       string_pattern mode, giving significance to special characters.
753    /// See https://fuchsia.dev/fuchsia-src/reference/diagnostics/selectors for more information
754    RawSelector(String),
755    #[doc(hidden)]
756    __SourceBreaking { unknown_ordinal: u64 },
757}
758
759/// Pattern that matches an unknown `SelectorArgument` member.
760#[macro_export]
761macro_rules! SelectorArgumentUnknown {
762    () => {
763        _
764    };
765}
766
767// Custom PartialEq so that unknown variants are not equal to themselves.
768impl PartialEq for SelectorArgument {
769    fn eq(&self, other: &Self) -> bool {
770        match (self, other) {
771            (Self::StructuredSelector(x), Self::StructuredSelector(y)) => *x == *y,
772            (Self::RawSelector(x), Self::RawSelector(y)) => *x == *y,
773            _ => false,
774        }
775    }
776}
777
778impl SelectorArgument {
779    #[inline]
780    pub fn ordinal(&self) -> u64 {
781        match *self {
782            Self::StructuredSelector(_) => 1,
783            Self::RawSelector(_) => 2,
784            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
785        }
786    }
787
788    #[inline]
789    pub fn unknown_variant_for_testing() -> Self {
790        Self::__SourceBreaking { unknown_ordinal: 0 }
791    }
792
793    #[inline]
794    pub fn is_unknown(&self) -> bool {
795        match self {
796            Self::__SourceBreaking { .. } => true,
797            _ => false,
798        }
799    }
800}
801
802impl fidl::Persistable for SelectorArgument {}
803
804/// StringSelector is an union defining different ways to describe a pattern to match
805/// strings against.
806#[derive(Clone, Debug)]
807pub enum StringSelector {
808    ///   This is a provided string that defines a pattern to
809    ///   match against. The parser treats asterisks (*), colons (:) and backslashes
810    ///   (\) as special characters.
811    ///
812    ///   If you wish to match against literal asterisks (*), they must be escaped.
813    ///   If you wish to match against literal backslashes (\), they must be escaped.
814    ///   If you wish to match against literal colons (:), they must be escaped.
815    ///
816    ///   eg: abc will match any string with the exact name "abc".
817    ///   eg: a\* will match any string with the exact name "a*".
818    ///   eg: a\\* will match any that starts with exactly "a\".
819    ///   eg: a* will match any string that starts with "a".
820    ///   eg: a*b will match any string that starts with a and ends with b.
821    ///   eg: a*b*c will match any string that starts with a and ends with c, with `b`
822    ///       in the middle.
823    ///
824    ///   In addition, the "**" literal is treated as a special sequence that may match
825    ///   multiple levels in a component selector only. See |ComponentSelector| for
826    ///   details.
827    StringPattern(String),
828    ExactMatch(String),
829    #[doc(hidden)]
830    __SourceBreaking {
831        unknown_ordinal: u64,
832    },
833}
834
835/// Pattern that matches an unknown `StringSelector` member.
836#[macro_export]
837macro_rules! StringSelectorUnknown {
838    () => {
839        _
840    };
841}
842
843// Custom PartialEq so that unknown variants are not equal to themselves.
844impl PartialEq for StringSelector {
845    fn eq(&self, other: &Self) -> bool {
846        match (self, other) {
847            (Self::StringPattern(x), Self::StringPattern(y)) => *x == *y,
848            (Self::ExactMatch(x), Self::ExactMatch(y)) => *x == *y,
849            _ => false,
850        }
851    }
852}
853
854impl StringSelector {
855    #[inline]
856    pub fn ordinal(&self) -> u64 {
857        match *self {
858            Self::StringPattern(_) => 1,
859            Self::ExactMatch(_) => 2,
860            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
861        }
862    }
863
864    #[inline]
865    pub fn unknown_variant_for_testing() -> Self {
866        Self::__SourceBreaking { unknown_ordinal: 0 }
867    }
868
869    #[inline]
870    pub fn is_unknown(&self) -> bool {
871        match self {
872            Self::__SourceBreaking { .. } => true,
873            _ => false,
874        }
875    }
876}
877
878impl fidl::Persistable for StringSelector {}
879
880/// TreeNames are the set of names of fuchsia.inspect.Trees for a component that
881/// were parsed out of a selector. The hierarchy and property selector portions
882/// will only be applied to trees that match this set.
883#[derive(Clone, Debug)]
884pub enum TreeNames {
885    /// A specified subset of tree names.
886    Some(Vec<String>),
887    /// All of the available trees. Equivalent to listing all of the names of
888    /// trees.
889    All(All),
890    #[doc(hidden)]
891    __SourceBreaking { unknown_ordinal: u64 },
892}
893
894/// Pattern that matches an unknown `TreeNames` member.
895#[macro_export]
896macro_rules! TreeNamesUnknown {
897    () => {
898        _
899    };
900}
901
902// Custom PartialEq so that unknown variants are not equal to themselves.
903impl PartialEq for TreeNames {
904    fn eq(&self, other: &Self) -> bool {
905        match (self, other) {
906            (Self::Some(x), Self::Some(y)) => *x == *y,
907            (Self::All(x), Self::All(y)) => *x == *y,
908            _ => false,
909        }
910    }
911}
912
913impl TreeNames {
914    #[inline]
915    pub fn ordinal(&self) -> u64 {
916        match *self {
917            Self::Some(_) => 1,
918            Self::All(_) => 2,
919            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
920        }
921    }
922
923    #[inline]
924    pub fn unknown_variant_for_testing() -> Self {
925        Self::__SourceBreaking { unknown_ordinal: 0 }
926    }
927
928    #[inline]
929    pub fn is_unknown(&self) -> bool {
930        match self {
931            Self::__SourceBreaking { .. } => true,
932            _ => false,
933        }
934    }
935}
936
937impl fidl::Persistable for TreeNames {}
938
939/// TreeSelector represents a selection request on a hierarchy of named nodes, with
940/// named properties on those nodes.
941#[derive(Clone, Debug)]
942pub enum TreeSelector {
943    /// A selector defining a set of nodes to match, for which the entire subtree including
944    /// those nodes are selected.
945    SubtreeSelector(SubtreeSelector),
946    /// A selector defining a set of nodes to match, and on those matched nodes a set of named
947    /// propperties to match.
948    PropertySelector(PropertySelector),
949    #[doc(hidden)]
950    __SourceBreaking { unknown_ordinal: u64 },
951}
952
953/// Pattern that matches an unknown `TreeSelector` member.
954#[macro_export]
955macro_rules! TreeSelectorUnknown {
956    () => {
957        _
958    };
959}
960
961// Custom PartialEq so that unknown variants are not equal to themselves.
962impl PartialEq for TreeSelector {
963    fn eq(&self, other: &Self) -> bool {
964        match (self, other) {
965            (Self::SubtreeSelector(x), Self::SubtreeSelector(y)) => *x == *y,
966            (Self::PropertySelector(x), Self::PropertySelector(y)) => *x == *y,
967            _ => false,
968        }
969    }
970}
971
972impl TreeSelector {
973    #[inline]
974    pub fn ordinal(&self) -> u64 {
975        match *self {
976            Self::SubtreeSelector(_) => 1,
977            Self::PropertySelector(_) => 2,
978            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
979        }
980    }
981
982    #[inline]
983    pub fn unknown_variant_for_testing() -> Self {
984        Self::__SourceBreaking { unknown_ordinal: 0 }
985    }
986
987    #[inline]
988    pub fn is_unknown(&self) -> bool {
989        match self {
990            Self::__SourceBreaking { .. } => true,
991            _ => false,
992        }
993    }
994}
995
996impl fidl::Persistable for TreeSelector {}
997
998pub mod archive_accessor_ordinals {
999    pub const STREAM_DIAGNOSTICS: u64 = 0x20c73e2ecd653c3e;
1000    pub const WAIT_FOR_READY: u64 = 0x122963198011bd24;
1001}
1002
1003pub mod batch_iterator_ordinals {
1004    pub const GET_NEXT: u64 = 0x781986486c6254a5;
1005    pub const WAIT_FOR_READY: u64 = 0x70598ee271597603;
1006}
1007
1008pub mod log_flusher_ordinals {
1009    pub const WAIT_UNTIL_FLUSHED: u64 = 0x7dc4892e46748b5b;
1010}
1011
1012pub mod log_settings_ordinals {
1013    pub const SET_INTEREST: u64 = 0x71beced9d2411f90;
1014    pub const SET_COMPONENT_INTEREST: u64 = 0x35f7004d2367f6c1;
1015}
1016
1017pub mod log_stream_ordinals {
1018    pub const CONNECT: u64 = 0x745eb34f10d51a88;
1019}
1020
1021pub mod sample_ordinals {
1022    pub const SET: u64 = 0x421a79bdbf45418e;
1023    pub const COMMIT: u64 = 0x25a3bc5f26787e9b;
1024}
1025
1026pub mod sample_sink_ordinals {
1027    pub const ON_SAMPLE_READIED: u64 = 0x39096d97ed03335f;
1028    pub const ON_NOW_OR_NEVER: u64 = 0x3dc94ca1e1290894;
1029}
1030
1031mod internal {
1032    use super::*;
1033    unsafe impl fidl::encoding::TypeMarker for ConfigurationError {
1034        type Owned = Self;
1035
1036        #[inline(always)]
1037        fn inline_align(_context: fidl::encoding::Context) -> usize {
1038            std::mem::align_of::<u32>()
1039        }
1040
1041        #[inline(always)]
1042        fn inline_size(_context: fidl::encoding::Context) -> usize {
1043            std::mem::size_of::<u32>()
1044        }
1045
1046        #[inline(always)]
1047        fn encode_is_copy() -> bool {
1048            false
1049        }
1050
1051        #[inline(always)]
1052        fn decode_is_copy() -> bool {
1053            false
1054        }
1055    }
1056
1057    impl fidl::encoding::ValueTypeMarker for ConfigurationError {
1058        type Borrowed<'a> = Self;
1059        #[inline(always)]
1060        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1061            *value
1062        }
1063    }
1064
1065    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1066        for ConfigurationError
1067    {
1068        #[inline]
1069        unsafe fn encode(
1070            self,
1071            encoder: &mut fidl::encoding::Encoder<'_, D>,
1072            offset: usize,
1073            _depth: fidl::encoding::Depth,
1074        ) -> fidl::Result<()> {
1075            encoder.debug_check_bounds::<Self>(offset);
1076            encoder.write_num(self.into_primitive(), offset);
1077            Ok(())
1078        }
1079    }
1080
1081    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConfigurationError {
1082        #[inline(always)]
1083        fn new_empty() -> Self {
1084            Self::unknown()
1085        }
1086
1087        #[inline]
1088        unsafe fn decode(
1089            &mut self,
1090            decoder: &mut fidl::encoding::Decoder<'_, D>,
1091            offset: usize,
1092            _depth: fidl::encoding::Depth,
1093        ) -> fidl::Result<()> {
1094            decoder.debug_check_bounds::<Self>(offset);
1095            let prim = decoder.read_num::<u32>(offset);
1096
1097            *self = Self::from_primitive_allow_unknown(prim);
1098            Ok(())
1099        }
1100    }
1101    unsafe impl fidl::encoding::TypeMarker for DataType {
1102        type Owned = Self;
1103
1104        #[inline(always)]
1105        fn inline_align(_context: fidl::encoding::Context) -> usize {
1106            std::mem::align_of::<u8>()
1107        }
1108
1109        #[inline(always)]
1110        fn inline_size(_context: fidl::encoding::Context) -> usize {
1111            std::mem::size_of::<u8>()
1112        }
1113
1114        #[inline(always)]
1115        fn encode_is_copy() -> bool {
1116            true
1117        }
1118
1119        #[inline(always)]
1120        fn decode_is_copy() -> bool {
1121            false
1122        }
1123    }
1124
1125    impl fidl::encoding::ValueTypeMarker for DataType {
1126        type Borrowed<'a> = Self;
1127        #[inline(always)]
1128        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1129            *value
1130        }
1131    }
1132
1133    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DataType {
1134        #[inline]
1135        unsafe fn encode(
1136            self,
1137            encoder: &mut fidl::encoding::Encoder<'_, D>,
1138            offset: usize,
1139            _depth: fidl::encoding::Depth,
1140        ) -> fidl::Result<()> {
1141            encoder.debug_check_bounds::<Self>(offset);
1142            encoder.write_num(self.into_primitive(), offset);
1143            Ok(())
1144        }
1145    }
1146
1147    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DataType {
1148        #[inline(always)]
1149        fn new_empty() -> Self {
1150            Self::Inspect
1151        }
1152
1153        #[inline]
1154        unsafe fn decode(
1155            &mut self,
1156            decoder: &mut fidl::encoding::Decoder<'_, D>,
1157            offset: usize,
1158            _depth: fidl::encoding::Depth,
1159        ) -> fidl::Result<()> {
1160            decoder.debug_check_bounds::<Self>(offset);
1161            let prim = decoder.read_num::<u8>(offset);
1162
1163            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1164            Ok(())
1165        }
1166    }
1167    unsafe impl fidl::encoding::TypeMarker for Format {
1168        type Owned = Self;
1169
1170        #[inline(always)]
1171        fn inline_align(_context: fidl::encoding::Context) -> usize {
1172            std::mem::align_of::<u32>()
1173        }
1174
1175        #[inline(always)]
1176        fn inline_size(_context: fidl::encoding::Context) -> usize {
1177            std::mem::size_of::<u32>()
1178        }
1179
1180        #[inline(always)]
1181        fn encode_is_copy() -> bool {
1182            true
1183        }
1184
1185        #[inline(always)]
1186        fn decode_is_copy() -> bool {
1187            false
1188        }
1189    }
1190
1191    impl fidl::encoding::ValueTypeMarker for Format {
1192        type Borrowed<'a> = Self;
1193        #[inline(always)]
1194        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1195            *value
1196        }
1197    }
1198
1199    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Format {
1200        #[inline]
1201        unsafe fn encode(
1202            self,
1203            encoder: &mut fidl::encoding::Encoder<'_, D>,
1204            offset: usize,
1205            _depth: fidl::encoding::Depth,
1206        ) -> fidl::Result<()> {
1207            encoder.debug_check_bounds::<Self>(offset);
1208            encoder.write_num(self.into_primitive(), offset);
1209            Ok(())
1210        }
1211    }
1212
1213    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format {
1214        #[inline(always)]
1215        fn new_empty() -> Self {
1216            Self::Json
1217        }
1218
1219        #[inline]
1220        unsafe fn decode(
1221            &mut self,
1222            decoder: &mut fidl::encoding::Decoder<'_, D>,
1223            offset: usize,
1224            _depth: fidl::encoding::Depth,
1225        ) -> fidl::Result<()> {
1226            decoder.debug_check_bounds::<Self>(offset);
1227            let prim = decoder.read_num::<u32>(offset);
1228
1229            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1230            Ok(())
1231        }
1232    }
1233    unsafe impl fidl::encoding::TypeMarker for ReaderError {
1234        type Owned = Self;
1235
1236        #[inline(always)]
1237        fn inline_align(_context: fidl::encoding::Context) -> usize {
1238            std::mem::align_of::<u32>()
1239        }
1240
1241        #[inline(always)]
1242        fn inline_size(_context: fidl::encoding::Context) -> usize {
1243            std::mem::size_of::<u32>()
1244        }
1245
1246        #[inline(always)]
1247        fn encode_is_copy() -> bool {
1248            true
1249        }
1250
1251        #[inline(always)]
1252        fn decode_is_copy() -> bool {
1253            false
1254        }
1255    }
1256
1257    impl fidl::encoding::ValueTypeMarker for ReaderError {
1258        type Borrowed<'a> = Self;
1259        #[inline(always)]
1260        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1261            *value
1262        }
1263    }
1264
1265    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ReaderError {
1266        #[inline]
1267        unsafe fn encode(
1268            self,
1269            encoder: &mut fidl::encoding::Encoder<'_, D>,
1270            offset: usize,
1271            _depth: fidl::encoding::Depth,
1272        ) -> fidl::Result<()> {
1273            encoder.debug_check_bounds::<Self>(offset);
1274            encoder.write_num(self.into_primitive(), offset);
1275            Ok(())
1276        }
1277    }
1278
1279    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ReaderError {
1280        #[inline(always)]
1281        fn new_empty() -> Self {
1282            Self::Io
1283        }
1284
1285        #[inline]
1286        unsafe fn decode(
1287            &mut self,
1288            decoder: &mut fidl::encoding::Decoder<'_, D>,
1289            offset: usize,
1290            _depth: fidl::encoding::Depth,
1291        ) -> fidl::Result<()> {
1292            decoder.debug_check_bounds::<Self>(offset);
1293            let prim = decoder.read_num::<u32>(offset);
1294
1295            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1296            Ok(())
1297        }
1298    }
1299    unsafe impl fidl::encoding::TypeMarker for RuntimeError {
1300        type Owned = Self;
1301
1302        #[inline(always)]
1303        fn inline_align(_context: fidl::encoding::Context) -> usize {
1304            std::mem::align_of::<u32>()
1305        }
1306
1307        #[inline(always)]
1308        fn inline_size(_context: fidl::encoding::Context) -> usize {
1309            std::mem::size_of::<u32>()
1310        }
1311
1312        #[inline(always)]
1313        fn encode_is_copy() -> bool {
1314            false
1315        }
1316
1317        #[inline(always)]
1318        fn decode_is_copy() -> bool {
1319            false
1320        }
1321    }
1322
1323    impl fidl::encoding::ValueTypeMarker for RuntimeError {
1324        type Borrowed<'a> = Self;
1325        #[inline(always)]
1326        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1327            *value
1328        }
1329    }
1330
1331    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for RuntimeError {
1332        #[inline]
1333        unsafe fn encode(
1334            self,
1335            encoder: &mut fidl::encoding::Encoder<'_, D>,
1336            offset: usize,
1337            _depth: fidl::encoding::Depth,
1338        ) -> fidl::Result<()> {
1339            encoder.debug_check_bounds::<Self>(offset);
1340            encoder.write_num(self.into_primitive(), offset);
1341            Ok(())
1342        }
1343    }
1344
1345    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RuntimeError {
1346        #[inline(always)]
1347        fn new_empty() -> Self {
1348            Self::unknown()
1349        }
1350
1351        #[inline]
1352        unsafe fn decode(
1353            &mut self,
1354            decoder: &mut fidl::encoding::Decoder<'_, D>,
1355            offset: usize,
1356            _depth: fidl::encoding::Depth,
1357        ) -> fidl::Result<()> {
1358            decoder.debug_check_bounds::<Self>(offset);
1359            let prim = decoder.read_num::<u32>(offset);
1360
1361            *self = Self::from_primitive_allow_unknown(prim);
1362            Ok(())
1363        }
1364    }
1365    unsafe impl fidl::encoding::TypeMarker for SampleStrategy {
1366        type Owned = Self;
1367
1368        #[inline(always)]
1369        fn inline_align(_context: fidl::encoding::Context) -> usize {
1370            std::mem::align_of::<u8>()
1371        }
1372
1373        #[inline(always)]
1374        fn inline_size(_context: fidl::encoding::Context) -> usize {
1375            std::mem::size_of::<u8>()
1376        }
1377
1378        #[inline(always)]
1379        fn encode_is_copy() -> bool {
1380            false
1381        }
1382
1383        #[inline(always)]
1384        fn decode_is_copy() -> bool {
1385            false
1386        }
1387    }
1388
1389    impl fidl::encoding::ValueTypeMarker for SampleStrategy {
1390        type Borrowed<'a> = Self;
1391        #[inline(always)]
1392        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1393            *value
1394        }
1395    }
1396
1397    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SampleStrategy {
1398        #[inline]
1399        unsafe fn encode(
1400            self,
1401            encoder: &mut fidl::encoding::Encoder<'_, D>,
1402            offset: usize,
1403            _depth: fidl::encoding::Depth,
1404        ) -> fidl::Result<()> {
1405            encoder.debug_check_bounds::<Self>(offset);
1406            encoder.write_num(self.into_primitive(), offset);
1407            Ok(())
1408        }
1409    }
1410
1411    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SampleStrategy {
1412        #[inline(always)]
1413        fn new_empty() -> Self {
1414            Self::unknown()
1415        }
1416
1417        #[inline]
1418        unsafe fn decode(
1419            &mut self,
1420            decoder: &mut fidl::encoding::Decoder<'_, D>,
1421            offset: usize,
1422            _depth: fidl::encoding::Depth,
1423        ) -> fidl::Result<()> {
1424            decoder.debug_check_bounds::<Self>(offset);
1425            let prim = decoder.read_num::<u8>(offset);
1426
1427            *self = Self::from_primitive_allow_unknown(prim);
1428            Ok(())
1429        }
1430    }
1431    unsafe impl fidl::encoding::TypeMarker for Severity {
1432        type Owned = Self;
1433
1434        #[inline(always)]
1435        fn inline_align(_context: fidl::encoding::Context) -> usize {
1436            std::mem::align_of::<u8>()
1437        }
1438
1439        #[inline(always)]
1440        fn inline_size(_context: fidl::encoding::Context) -> usize {
1441            std::mem::size_of::<u8>()
1442        }
1443
1444        #[inline(always)]
1445        fn encode_is_copy() -> bool {
1446            true
1447        }
1448
1449        #[inline(always)]
1450        fn decode_is_copy() -> bool {
1451            false
1452        }
1453    }
1454
1455    impl fidl::encoding::ValueTypeMarker for Severity {
1456        type Borrowed<'a> = Self;
1457        #[inline(always)]
1458        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1459            *value
1460        }
1461    }
1462
1463    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Severity {
1464        #[inline]
1465        unsafe fn encode(
1466            self,
1467            encoder: &mut fidl::encoding::Encoder<'_, D>,
1468            offset: usize,
1469            _depth: fidl::encoding::Depth,
1470        ) -> fidl::Result<()> {
1471            encoder.debug_check_bounds::<Self>(offset);
1472            encoder.write_num(self.into_primitive(), offset);
1473            Ok(())
1474        }
1475    }
1476
1477    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Severity {
1478        #[inline(always)]
1479        fn new_empty() -> Self {
1480            Self::Trace
1481        }
1482
1483        #[inline]
1484        unsafe fn decode(
1485            &mut self,
1486            decoder: &mut fidl::encoding::Decoder<'_, D>,
1487            offset: usize,
1488            _depth: fidl::encoding::Depth,
1489        ) -> fidl::Result<()> {
1490            decoder.debug_check_bounds::<Self>(offset);
1491            let prim = decoder.read_num::<u8>(offset);
1492
1493            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1494            Ok(())
1495        }
1496    }
1497    unsafe impl fidl::encoding::TypeMarker for StreamMode {
1498        type Owned = Self;
1499
1500        #[inline(always)]
1501        fn inline_align(_context: fidl::encoding::Context) -> usize {
1502            std::mem::align_of::<u8>()
1503        }
1504
1505        #[inline(always)]
1506        fn inline_size(_context: fidl::encoding::Context) -> usize {
1507            std::mem::size_of::<u8>()
1508        }
1509
1510        #[inline(always)]
1511        fn encode_is_copy() -> bool {
1512            true
1513        }
1514
1515        #[inline(always)]
1516        fn decode_is_copy() -> bool {
1517            false
1518        }
1519    }
1520
1521    impl fidl::encoding::ValueTypeMarker for StreamMode {
1522        type Borrowed<'a> = Self;
1523        #[inline(always)]
1524        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1525            *value
1526        }
1527    }
1528
1529    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for StreamMode {
1530        #[inline]
1531        unsafe fn encode(
1532            self,
1533            encoder: &mut fidl::encoding::Encoder<'_, D>,
1534            offset: usize,
1535            _depth: fidl::encoding::Depth,
1536        ) -> fidl::Result<()> {
1537            encoder.debug_check_bounds::<Self>(offset);
1538            encoder.write_num(self.into_primitive(), offset);
1539            Ok(())
1540        }
1541    }
1542
1543    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamMode {
1544        #[inline(always)]
1545        fn new_empty() -> Self {
1546            Self::Snapshot
1547        }
1548
1549        #[inline]
1550        unsafe fn decode(
1551            &mut self,
1552            decoder: &mut fidl::encoding::Decoder<'_, D>,
1553            offset: usize,
1554            _depth: fidl::encoding::Depth,
1555        ) -> fidl::Result<()> {
1556            decoder.debug_check_bounds::<Self>(offset);
1557            let prim = decoder.read_num::<u8>(offset);
1558
1559            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1560            Ok(())
1561        }
1562    }
1563
1564    impl fidl::encoding::ValueTypeMarker for All {
1565        type Borrowed<'a> = &'a Self;
1566        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1567            value
1568        }
1569    }
1570
1571    unsafe impl fidl::encoding::TypeMarker for All {
1572        type Owned = Self;
1573
1574        #[inline(always)]
1575        fn inline_align(_context: fidl::encoding::Context) -> usize {
1576            1
1577        }
1578
1579        #[inline(always)]
1580        fn inline_size(_context: fidl::encoding::Context) -> usize {
1581            1
1582        }
1583    }
1584
1585    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<All, D> for &All {
1586        #[inline]
1587        unsafe fn encode(
1588            self,
1589            encoder: &mut fidl::encoding::Encoder<'_, D>,
1590            offset: usize,
1591            _depth: fidl::encoding::Depth,
1592        ) -> fidl::Result<()> {
1593            encoder.debug_check_bounds::<All>(offset);
1594            encoder.write_num(0u8, offset);
1595            Ok(())
1596        }
1597    }
1598
1599    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for All {
1600        #[inline(always)]
1601        fn new_empty() -> Self {
1602            Self
1603        }
1604
1605        #[inline]
1606        unsafe fn decode(
1607            &mut self,
1608            decoder: &mut fidl::encoding::Decoder<'_, D>,
1609            offset: usize,
1610            _depth: fidl::encoding::Depth,
1611        ) -> fidl::Result<()> {
1612            decoder.debug_check_bounds::<Self>(offset);
1613            match decoder.read_num::<u8>(offset) {
1614                0 => Ok(()),
1615                _ => Err(fidl::Error::Invalid),
1616            }
1617        }
1618    }
1619
1620    impl fidl::encoding::ValueTypeMarker for LogInterestSelector {
1621        type Borrowed<'a> = &'a Self;
1622        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1623            value
1624        }
1625    }
1626
1627    unsafe impl fidl::encoding::TypeMarker for LogInterestSelector {
1628        type Owned = Self;
1629
1630        #[inline(always)]
1631        fn inline_align(_context: fidl::encoding::Context) -> usize {
1632            8
1633        }
1634
1635        #[inline(always)]
1636        fn inline_size(_context: fidl::encoding::Context) -> usize {
1637            32
1638        }
1639    }
1640
1641    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LogInterestSelector, D>
1642        for &LogInterestSelector
1643    {
1644        #[inline]
1645        unsafe fn encode(
1646            self,
1647            encoder: &mut fidl::encoding::Encoder<'_, D>,
1648            offset: usize,
1649            _depth: fidl::encoding::Depth,
1650        ) -> fidl::Result<()> {
1651            encoder.debug_check_bounds::<LogInterestSelector>(offset);
1652            // Delegate to tuple encoding.
1653            fidl::encoding::Encode::<LogInterestSelector, D>::encode(
1654                (
1655                    <ComponentSelector as fidl::encoding::ValueTypeMarker>::borrow(&self.selector),
1656                    <fidl_fuchsia_diagnostics_types__common::Interest as fidl::encoding::ValueTypeMarker>::borrow(&self.interest),
1657                ),
1658                encoder, offset, _depth
1659            )
1660        }
1661    }
1662    unsafe impl<
1663        D: fidl::encoding::ResourceDialect,
1664        T0: fidl::encoding::Encode<ComponentSelector, D>,
1665        T1: fidl::encoding::Encode<fidl_fuchsia_diagnostics_types__common::Interest, D>,
1666    > fidl::encoding::Encode<LogInterestSelector, D> for (T0, T1)
1667    {
1668        #[inline]
1669        unsafe fn encode(
1670            self,
1671            encoder: &mut fidl::encoding::Encoder<'_, D>,
1672            offset: usize,
1673            depth: fidl::encoding::Depth,
1674        ) -> fidl::Result<()> {
1675            encoder.debug_check_bounds::<LogInterestSelector>(offset);
1676            // Zero out padding regions. There's no need to apply masks
1677            // because the unmasked parts will be overwritten by fields.
1678            // Write the fields.
1679            self.0.encode(encoder, offset + 0, depth)?;
1680            self.1.encode(encoder, offset + 16, depth)?;
1681            Ok(())
1682        }
1683    }
1684
1685    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LogInterestSelector {
1686        #[inline(always)]
1687        fn new_empty() -> Self {
1688            Self {
1689                selector: fidl::new_empty!(ComponentSelector, D),
1690                interest: fidl::new_empty!(fidl_fuchsia_diagnostics_types__common::Interest, D),
1691            }
1692        }
1693
1694        #[inline]
1695        unsafe fn decode(
1696            &mut self,
1697            decoder: &mut fidl::encoding::Decoder<'_, D>,
1698            offset: usize,
1699            _depth: fidl::encoding::Depth,
1700        ) -> fidl::Result<()> {
1701            decoder.debug_check_bounds::<Self>(offset);
1702            // Verify that padding bytes are zero.
1703            fidl::decode!(ComponentSelector, D, &mut self.selector, decoder, offset + 0, _depth)?;
1704            fidl::decode!(
1705                fidl_fuchsia_diagnostics_types__common::Interest,
1706                D,
1707                &mut self.interest,
1708                decoder,
1709                offset + 16,
1710                _depth
1711            )?;
1712            Ok(())
1713        }
1714    }
1715
1716    impl fidl::encoding::ValueTypeMarker for LogSettingsSetInterestRequest {
1717        type Borrowed<'a> = &'a Self;
1718        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1719            value
1720        }
1721    }
1722
1723    unsafe impl fidl::encoding::TypeMarker for LogSettingsSetInterestRequest {
1724        type Owned = Self;
1725
1726        #[inline(always)]
1727        fn inline_align(_context: fidl::encoding::Context) -> usize {
1728            8
1729        }
1730
1731        #[inline(always)]
1732        fn inline_size(_context: fidl::encoding::Context) -> usize {
1733            16
1734        }
1735    }
1736
1737    unsafe impl<D: fidl::encoding::ResourceDialect>
1738        fidl::encoding::Encode<LogSettingsSetInterestRequest, D>
1739        for &LogSettingsSetInterestRequest
1740    {
1741        #[inline]
1742        unsafe fn encode(
1743            self,
1744            encoder: &mut fidl::encoding::Encoder<'_, D>,
1745            offset: usize,
1746            _depth: fidl::encoding::Depth,
1747        ) -> fidl::Result<()> {
1748            encoder.debug_check_bounds::<LogSettingsSetInterestRequest>(offset);
1749            // Delegate to tuple encoding.
1750            fidl::encoding::Encode::<LogSettingsSetInterestRequest, D>::encode(
1751                (
1752                    <fidl::encoding::Vector<LogInterestSelector, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.selectors),
1753                ),
1754                encoder, offset, _depth
1755            )
1756        }
1757    }
1758    unsafe impl<
1759        D: fidl::encoding::ResourceDialect,
1760        T0: fidl::encoding::Encode<fidl::encoding::Vector<LogInterestSelector, 64>, D>,
1761    > fidl::encoding::Encode<LogSettingsSetInterestRequest, D> for (T0,)
1762    {
1763        #[inline]
1764        unsafe fn encode(
1765            self,
1766            encoder: &mut fidl::encoding::Encoder<'_, D>,
1767            offset: usize,
1768            depth: fidl::encoding::Depth,
1769        ) -> fidl::Result<()> {
1770            encoder.debug_check_bounds::<LogSettingsSetInterestRequest>(offset);
1771            // Zero out padding regions. There's no need to apply masks
1772            // because the unmasked parts will be overwritten by fields.
1773            // Write the fields.
1774            self.0.encode(encoder, offset + 0, depth)?;
1775            Ok(())
1776        }
1777    }
1778
1779    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1780        for LogSettingsSetInterestRequest
1781    {
1782        #[inline(always)]
1783        fn new_empty() -> Self {
1784            Self { selectors: fidl::new_empty!(fidl::encoding::Vector<LogInterestSelector, 64>, D) }
1785        }
1786
1787        #[inline]
1788        unsafe fn decode(
1789            &mut self,
1790            decoder: &mut fidl::encoding::Decoder<'_, D>,
1791            offset: usize,
1792            _depth: fidl::encoding::Depth,
1793        ) -> fidl::Result<()> {
1794            decoder.debug_check_bounds::<Self>(offset);
1795            // Verify that padding bytes are zero.
1796            fidl::decode!(fidl::encoding::Vector<LogInterestSelector, 64>, D, &mut self.selectors, decoder, offset + 0, _depth)?;
1797            Ok(())
1798        }
1799    }
1800
1801    impl fidl::encoding::ValueTypeMarker for PropertySelector {
1802        type Borrowed<'a> = &'a Self;
1803        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1804            value
1805        }
1806    }
1807
1808    unsafe impl fidl::encoding::TypeMarker for PropertySelector {
1809        type Owned = Self;
1810
1811        #[inline(always)]
1812        fn inline_align(_context: fidl::encoding::Context) -> usize {
1813            8
1814        }
1815
1816        #[inline(always)]
1817        fn inline_size(_context: fidl::encoding::Context) -> usize {
1818            32
1819        }
1820    }
1821
1822    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PropertySelector, D>
1823        for &PropertySelector
1824    {
1825        #[inline]
1826        unsafe fn encode(
1827            self,
1828            encoder: &mut fidl::encoding::Encoder<'_, D>,
1829            offset: usize,
1830            _depth: fidl::encoding::Depth,
1831        ) -> fidl::Result<()> {
1832            encoder.debug_check_bounds::<PropertySelector>(offset);
1833            // Delegate to tuple encoding.
1834            fidl::encoding::Encode::<PropertySelector, D>::encode(
1835                (
1836                    <fidl::encoding::Vector<StringSelector, 100> as fidl::encoding::ValueTypeMarker>::borrow(&self.node_path),
1837                    <StringSelector as fidl::encoding::ValueTypeMarker>::borrow(&self.target_properties),
1838                ),
1839                encoder, offset, _depth
1840            )
1841        }
1842    }
1843    unsafe impl<
1844        D: fidl::encoding::ResourceDialect,
1845        T0: fidl::encoding::Encode<fidl::encoding::Vector<StringSelector, 100>, D>,
1846        T1: fidl::encoding::Encode<StringSelector, D>,
1847    > fidl::encoding::Encode<PropertySelector, D> for (T0, T1)
1848    {
1849        #[inline]
1850        unsafe fn encode(
1851            self,
1852            encoder: &mut fidl::encoding::Encoder<'_, D>,
1853            offset: usize,
1854            depth: fidl::encoding::Depth,
1855        ) -> fidl::Result<()> {
1856            encoder.debug_check_bounds::<PropertySelector>(offset);
1857            // Zero out padding regions. There's no need to apply masks
1858            // because the unmasked parts will be overwritten by fields.
1859            // Write the fields.
1860            self.0.encode(encoder, offset + 0, depth)?;
1861            self.1.encode(encoder, offset + 16, depth)?;
1862            Ok(())
1863        }
1864    }
1865
1866    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PropertySelector {
1867        #[inline(always)]
1868        fn new_empty() -> Self {
1869            Self {
1870                node_path: fidl::new_empty!(fidl::encoding::Vector<StringSelector, 100>, D),
1871                target_properties: fidl::new_empty!(StringSelector, D),
1872            }
1873        }
1874
1875        #[inline]
1876        unsafe fn decode(
1877            &mut self,
1878            decoder: &mut fidl::encoding::Decoder<'_, D>,
1879            offset: usize,
1880            _depth: fidl::encoding::Depth,
1881        ) -> fidl::Result<()> {
1882            decoder.debug_check_bounds::<Self>(offset);
1883            // Verify that padding bytes are zero.
1884            fidl::decode!(fidl::encoding::Vector<StringSelector, 100>, D, &mut self.node_path, decoder, offset + 0, _depth)?;
1885            fidl::decode!(
1886                StringSelector,
1887                D,
1888                &mut self.target_properties,
1889                decoder,
1890                offset + 16,
1891                _depth
1892            )?;
1893            Ok(())
1894        }
1895    }
1896
1897    impl fidl::encoding::ValueTypeMarker for SubtreeSelector {
1898        type Borrowed<'a> = &'a Self;
1899        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1900            value
1901        }
1902    }
1903
1904    unsafe impl fidl::encoding::TypeMarker for SubtreeSelector {
1905        type Owned = Self;
1906
1907        #[inline(always)]
1908        fn inline_align(_context: fidl::encoding::Context) -> usize {
1909            8
1910        }
1911
1912        #[inline(always)]
1913        fn inline_size(_context: fidl::encoding::Context) -> usize {
1914            16
1915        }
1916    }
1917
1918    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SubtreeSelector, D>
1919        for &SubtreeSelector
1920    {
1921        #[inline]
1922        unsafe fn encode(
1923            self,
1924            encoder: &mut fidl::encoding::Encoder<'_, D>,
1925            offset: usize,
1926            _depth: fidl::encoding::Depth,
1927        ) -> fidl::Result<()> {
1928            encoder.debug_check_bounds::<SubtreeSelector>(offset);
1929            // Delegate to tuple encoding.
1930            fidl::encoding::Encode::<SubtreeSelector, D>::encode(
1931                (
1932                    <fidl::encoding::Vector<StringSelector, 100> as fidl::encoding::ValueTypeMarker>::borrow(&self.node_path),
1933                ),
1934                encoder, offset, _depth
1935            )
1936        }
1937    }
1938    unsafe impl<
1939        D: fidl::encoding::ResourceDialect,
1940        T0: fidl::encoding::Encode<fidl::encoding::Vector<StringSelector, 100>, D>,
1941    > fidl::encoding::Encode<SubtreeSelector, D> for (T0,)
1942    {
1943        #[inline]
1944        unsafe fn encode(
1945            self,
1946            encoder: &mut fidl::encoding::Encoder<'_, D>,
1947            offset: usize,
1948            depth: fidl::encoding::Depth,
1949        ) -> fidl::Result<()> {
1950            encoder.debug_check_bounds::<SubtreeSelector>(offset);
1951            // Zero out padding regions. There's no need to apply masks
1952            // because the unmasked parts will be overwritten by fields.
1953            // Write the fields.
1954            self.0.encode(encoder, offset + 0, depth)?;
1955            Ok(())
1956        }
1957    }
1958
1959    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SubtreeSelector {
1960        #[inline(always)]
1961        fn new_empty() -> Self {
1962            Self { node_path: fidl::new_empty!(fidl::encoding::Vector<StringSelector, 100>, D) }
1963        }
1964
1965        #[inline]
1966        unsafe fn decode(
1967            &mut self,
1968            decoder: &mut fidl::encoding::Decoder<'_, D>,
1969            offset: usize,
1970            _depth: fidl::encoding::Depth,
1971        ) -> fidl::Result<()> {
1972            decoder.debug_check_bounds::<Self>(offset);
1973            // Verify that padding bytes are zero.
1974            fidl::decode!(fidl::encoding::Vector<StringSelector, 100>, D, &mut self.node_path, decoder, offset + 0, _depth)?;
1975            Ok(())
1976        }
1977    }
1978
1979    impl ComponentSelector {
1980        #[inline(always)]
1981        fn max_ordinal_present(&self) -> u64 {
1982            if let Some(_) = self.moniker_segments {
1983                return 1;
1984            }
1985            0
1986        }
1987    }
1988
1989    impl fidl::encoding::ValueTypeMarker for ComponentSelector {
1990        type Borrowed<'a> = &'a Self;
1991        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1992            value
1993        }
1994    }
1995
1996    unsafe impl fidl::encoding::TypeMarker for ComponentSelector {
1997        type Owned = Self;
1998
1999        #[inline(always)]
2000        fn inline_align(_context: fidl::encoding::Context) -> usize {
2001            8
2002        }
2003
2004        #[inline(always)]
2005        fn inline_size(_context: fidl::encoding::Context) -> usize {
2006            16
2007        }
2008    }
2009
2010    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ComponentSelector, D>
2011        for &ComponentSelector
2012    {
2013        unsafe fn encode(
2014            self,
2015            encoder: &mut fidl::encoding::Encoder<'_, D>,
2016            offset: usize,
2017            mut depth: fidl::encoding::Depth,
2018        ) -> fidl::Result<()> {
2019            encoder.debug_check_bounds::<ComponentSelector>(offset);
2020            // Vector header
2021            let max_ordinal: u64 = self.max_ordinal_present();
2022            encoder.write_num(max_ordinal, offset);
2023            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2024            // Calling encoder.out_of_line_offset(0) is not allowed.
2025            if max_ordinal == 0 {
2026                return Ok(());
2027            }
2028            depth.increment()?;
2029            let envelope_size = 8;
2030            let bytes_len = max_ordinal as usize * envelope_size;
2031            #[allow(unused_variables)]
2032            let offset = encoder.out_of_line_offset(bytes_len);
2033            let mut _prev_end_offset: usize = 0;
2034            if 1 > max_ordinal {
2035                return Ok(());
2036            }
2037
2038            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2039            // are envelope_size bytes.
2040            let cur_offset: usize = (1 - 1) * envelope_size;
2041
2042            // Zero reserved fields.
2043            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2044
2045            // Safety:
2046            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2047            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2048            //   envelope_size bytes, there is always sufficient room.
2049            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<StringSelector, 25>, D>(
2050            self.moniker_segments.as_ref().map(<fidl::encoding::Vector<StringSelector, 25> as fidl::encoding::ValueTypeMarker>::borrow),
2051            encoder, offset + cur_offset, depth
2052        )?;
2053
2054            _prev_end_offset = cur_offset + envelope_size;
2055
2056            Ok(())
2057        }
2058    }
2059
2060    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ComponentSelector {
2061        #[inline(always)]
2062        fn new_empty() -> Self {
2063            Self::default()
2064        }
2065
2066        unsafe fn decode(
2067            &mut self,
2068            decoder: &mut fidl::encoding::Decoder<'_, D>,
2069            offset: usize,
2070            mut depth: fidl::encoding::Depth,
2071        ) -> fidl::Result<()> {
2072            decoder.debug_check_bounds::<Self>(offset);
2073            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2074                None => return Err(fidl::Error::NotNullable),
2075                Some(len) => len,
2076            };
2077            // Calling decoder.out_of_line_offset(0) is not allowed.
2078            if len == 0 {
2079                return Ok(());
2080            };
2081            depth.increment()?;
2082            let envelope_size = 8;
2083            let bytes_len = len * envelope_size;
2084            let offset = decoder.out_of_line_offset(bytes_len)?;
2085            // Decode the envelope for each type.
2086            let mut _next_ordinal_to_read = 0;
2087            let mut next_offset = offset;
2088            let end_offset = offset + bytes_len;
2089            _next_ordinal_to_read += 1;
2090            if next_offset >= end_offset {
2091                return Ok(());
2092            }
2093
2094            // Decode unknown envelopes for gaps in ordinals.
2095            while _next_ordinal_to_read < 1 {
2096                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2097                _next_ordinal_to_read += 1;
2098                next_offset += envelope_size;
2099            }
2100
2101            let next_out_of_line = decoder.next_out_of_line();
2102            let handles_before = decoder.remaining_handles();
2103            if let Some((inlined, num_bytes, num_handles)) =
2104                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2105            {
2106                let member_inline_size = <fidl::encoding::Vector<StringSelector, 25> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2107                if inlined != (member_inline_size <= 4) {
2108                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2109                }
2110                let inner_offset;
2111                let mut inner_depth = depth.clone();
2112                if inlined {
2113                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2114                    inner_offset = next_offset;
2115                } else {
2116                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2117                    inner_depth.increment()?;
2118                }
2119                let val_ref = self.moniker_segments.get_or_insert_with(
2120                    || fidl::new_empty!(fidl::encoding::Vector<StringSelector, 25>, D),
2121                );
2122                fidl::decode!(fidl::encoding::Vector<StringSelector, 25>, D, val_ref, decoder, inner_offset, inner_depth)?;
2123                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2124                {
2125                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2126                }
2127                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2128                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2129                }
2130            }
2131
2132            next_offset += envelope_size;
2133
2134            // Decode the remaining unknown envelopes.
2135            while next_offset < end_offset {
2136                _next_ordinal_to_read += 1;
2137                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2138                next_offset += envelope_size;
2139            }
2140
2141            Ok(())
2142        }
2143    }
2144
2145    impl Interest {
2146        #[inline(always)]
2147        fn max_ordinal_present(&self) -> u64 {
2148            if let Some(_) = self.min_severity {
2149                return 1;
2150            }
2151            0
2152        }
2153    }
2154
2155    impl fidl::encoding::ValueTypeMarker for Interest {
2156        type Borrowed<'a> = &'a Self;
2157        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2158            value
2159        }
2160    }
2161
2162    unsafe impl fidl::encoding::TypeMarker for Interest {
2163        type Owned = Self;
2164
2165        #[inline(always)]
2166        fn inline_align(_context: fidl::encoding::Context) -> usize {
2167            8
2168        }
2169
2170        #[inline(always)]
2171        fn inline_size(_context: fidl::encoding::Context) -> usize {
2172            16
2173        }
2174    }
2175
2176    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Interest, D> for &Interest {
2177        unsafe fn encode(
2178            self,
2179            encoder: &mut fidl::encoding::Encoder<'_, D>,
2180            offset: usize,
2181            mut depth: fidl::encoding::Depth,
2182        ) -> fidl::Result<()> {
2183            encoder.debug_check_bounds::<Interest>(offset);
2184            // Vector header
2185            let max_ordinal: u64 = self.max_ordinal_present();
2186            encoder.write_num(max_ordinal, offset);
2187            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2188            // Calling encoder.out_of_line_offset(0) is not allowed.
2189            if max_ordinal == 0 {
2190                return Ok(());
2191            }
2192            depth.increment()?;
2193            let envelope_size = 8;
2194            let bytes_len = max_ordinal as usize * envelope_size;
2195            #[allow(unused_variables)]
2196            let offset = encoder.out_of_line_offset(bytes_len);
2197            let mut _prev_end_offset: usize = 0;
2198            if 1 > max_ordinal {
2199                return Ok(());
2200            }
2201
2202            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2203            // are envelope_size bytes.
2204            let cur_offset: usize = (1 - 1) * envelope_size;
2205
2206            // Zero reserved fields.
2207            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2208
2209            // Safety:
2210            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2211            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2212            //   envelope_size bytes, there is always sufficient room.
2213            fidl::encoding::encode_in_envelope_optional::<Severity, D>(
2214                self.min_severity
2215                    .as_ref()
2216                    .map(<Severity as fidl::encoding::ValueTypeMarker>::borrow),
2217                encoder,
2218                offset + cur_offset,
2219                depth,
2220            )?;
2221
2222            _prev_end_offset = cur_offset + envelope_size;
2223
2224            Ok(())
2225        }
2226    }
2227
2228    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Interest {
2229        #[inline(always)]
2230        fn new_empty() -> Self {
2231            Self::default()
2232        }
2233
2234        unsafe fn decode(
2235            &mut self,
2236            decoder: &mut fidl::encoding::Decoder<'_, D>,
2237            offset: usize,
2238            mut depth: fidl::encoding::Depth,
2239        ) -> fidl::Result<()> {
2240            decoder.debug_check_bounds::<Self>(offset);
2241            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2242                None => return Err(fidl::Error::NotNullable),
2243                Some(len) => len,
2244            };
2245            // Calling decoder.out_of_line_offset(0) is not allowed.
2246            if len == 0 {
2247                return Ok(());
2248            };
2249            depth.increment()?;
2250            let envelope_size = 8;
2251            let bytes_len = len * envelope_size;
2252            let offset = decoder.out_of_line_offset(bytes_len)?;
2253            // Decode the envelope for each type.
2254            let mut _next_ordinal_to_read = 0;
2255            let mut next_offset = offset;
2256            let end_offset = offset + bytes_len;
2257            _next_ordinal_to_read += 1;
2258            if next_offset >= end_offset {
2259                return Ok(());
2260            }
2261
2262            // Decode unknown envelopes for gaps in ordinals.
2263            while _next_ordinal_to_read < 1 {
2264                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2265                _next_ordinal_to_read += 1;
2266                next_offset += envelope_size;
2267            }
2268
2269            let next_out_of_line = decoder.next_out_of_line();
2270            let handles_before = decoder.remaining_handles();
2271            if let Some((inlined, num_bytes, num_handles)) =
2272                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2273            {
2274                let member_inline_size =
2275                    <Severity as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2276                if inlined != (member_inline_size <= 4) {
2277                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2278                }
2279                let inner_offset;
2280                let mut inner_depth = depth.clone();
2281                if inlined {
2282                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2283                    inner_offset = next_offset;
2284                } else {
2285                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2286                    inner_depth.increment()?;
2287                }
2288                let val_ref =
2289                    self.min_severity.get_or_insert_with(|| fidl::new_empty!(Severity, D));
2290                fidl::decode!(Severity, D, val_ref, decoder, inner_offset, inner_depth)?;
2291                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2292                {
2293                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2294                }
2295                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2296                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2297                }
2298            }
2299
2300            next_offset += envelope_size;
2301
2302            // Decode the remaining unknown envelopes.
2303            while next_offset < end_offset {
2304                _next_ordinal_to_read += 1;
2305                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2306                next_offset += envelope_size;
2307            }
2308
2309            Ok(())
2310        }
2311    }
2312
2313    impl LogSettingsSetComponentInterestRequest {
2314        #[inline(always)]
2315        fn max_ordinal_present(&self) -> u64 {
2316            if let Some(_) = self.persist {
2317                return 2;
2318            }
2319            if let Some(_) = self.selectors {
2320                return 1;
2321            }
2322            0
2323        }
2324    }
2325
2326    impl fidl::encoding::ValueTypeMarker for LogSettingsSetComponentInterestRequest {
2327        type Borrowed<'a> = &'a Self;
2328        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2329            value
2330        }
2331    }
2332
2333    unsafe impl fidl::encoding::TypeMarker for LogSettingsSetComponentInterestRequest {
2334        type Owned = Self;
2335
2336        #[inline(always)]
2337        fn inline_align(_context: fidl::encoding::Context) -> usize {
2338            8
2339        }
2340
2341        #[inline(always)]
2342        fn inline_size(_context: fidl::encoding::Context) -> usize {
2343            16
2344        }
2345    }
2346
2347    unsafe impl<D: fidl::encoding::ResourceDialect>
2348        fidl::encoding::Encode<LogSettingsSetComponentInterestRequest, D>
2349        for &LogSettingsSetComponentInterestRequest
2350    {
2351        unsafe fn encode(
2352            self,
2353            encoder: &mut fidl::encoding::Encoder<'_, D>,
2354            offset: usize,
2355            mut depth: fidl::encoding::Depth,
2356        ) -> fidl::Result<()> {
2357            encoder.debug_check_bounds::<LogSettingsSetComponentInterestRequest>(offset);
2358            // Vector header
2359            let max_ordinal: u64 = self.max_ordinal_present();
2360            encoder.write_num(max_ordinal, offset);
2361            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2362            // Calling encoder.out_of_line_offset(0) is not allowed.
2363            if max_ordinal == 0 {
2364                return Ok(());
2365            }
2366            depth.increment()?;
2367            let envelope_size = 8;
2368            let bytes_len = max_ordinal as usize * envelope_size;
2369            #[allow(unused_variables)]
2370            let offset = encoder.out_of_line_offset(bytes_len);
2371            let mut _prev_end_offset: usize = 0;
2372            if 1 > max_ordinal {
2373                return Ok(());
2374            }
2375
2376            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2377            // are envelope_size bytes.
2378            let cur_offset: usize = (1 - 1) * envelope_size;
2379
2380            // Zero reserved fields.
2381            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2382
2383            // Safety:
2384            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2385            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2386            //   envelope_size bytes, there is always sufficient room.
2387            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LogInterestSelector, 64>, D>(
2388            self.selectors.as_ref().map(<fidl::encoding::Vector<LogInterestSelector, 64> as fidl::encoding::ValueTypeMarker>::borrow),
2389            encoder, offset + cur_offset, depth
2390        )?;
2391
2392            _prev_end_offset = cur_offset + envelope_size;
2393            if 2 > max_ordinal {
2394                return Ok(());
2395            }
2396
2397            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2398            // are envelope_size bytes.
2399            let cur_offset: usize = (2 - 1) * envelope_size;
2400
2401            // Zero reserved fields.
2402            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2403
2404            // Safety:
2405            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2406            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2407            //   envelope_size bytes, there is always sufficient room.
2408            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2409                self.persist.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2410                encoder,
2411                offset + cur_offset,
2412                depth,
2413            )?;
2414
2415            _prev_end_offset = cur_offset + envelope_size;
2416
2417            Ok(())
2418        }
2419    }
2420
2421    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2422        for LogSettingsSetComponentInterestRequest
2423    {
2424        #[inline(always)]
2425        fn new_empty() -> Self {
2426            Self::default()
2427        }
2428
2429        unsafe fn decode(
2430            &mut self,
2431            decoder: &mut fidl::encoding::Decoder<'_, D>,
2432            offset: usize,
2433            mut depth: fidl::encoding::Depth,
2434        ) -> fidl::Result<()> {
2435            decoder.debug_check_bounds::<Self>(offset);
2436            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2437                None => return Err(fidl::Error::NotNullable),
2438                Some(len) => len,
2439            };
2440            // Calling decoder.out_of_line_offset(0) is not allowed.
2441            if len == 0 {
2442                return Ok(());
2443            };
2444            depth.increment()?;
2445            let envelope_size = 8;
2446            let bytes_len = len * envelope_size;
2447            let offset = decoder.out_of_line_offset(bytes_len)?;
2448            // Decode the envelope for each type.
2449            let mut _next_ordinal_to_read = 0;
2450            let mut next_offset = offset;
2451            let end_offset = offset + bytes_len;
2452            _next_ordinal_to_read += 1;
2453            if next_offset >= end_offset {
2454                return Ok(());
2455            }
2456
2457            // Decode unknown envelopes for gaps in ordinals.
2458            while _next_ordinal_to_read < 1 {
2459                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2460                _next_ordinal_to_read += 1;
2461                next_offset += envelope_size;
2462            }
2463
2464            let next_out_of_line = decoder.next_out_of_line();
2465            let handles_before = decoder.remaining_handles();
2466            if let Some((inlined, num_bytes, num_handles)) =
2467                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2468            {
2469                let member_inline_size = <fidl::encoding::Vector<LogInterestSelector, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2470                if inlined != (member_inline_size <= 4) {
2471                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2472                }
2473                let inner_offset;
2474                let mut inner_depth = depth.clone();
2475                if inlined {
2476                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2477                    inner_offset = next_offset;
2478                } else {
2479                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2480                    inner_depth.increment()?;
2481                }
2482                let val_ref = self.selectors.get_or_insert_with(
2483                    || fidl::new_empty!(fidl::encoding::Vector<LogInterestSelector, 64>, D),
2484                );
2485                fidl::decode!(fidl::encoding::Vector<LogInterestSelector, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
2486                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2487                {
2488                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2489                }
2490                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2491                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2492                }
2493            }
2494
2495            next_offset += envelope_size;
2496            _next_ordinal_to_read += 1;
2497            if next_offset >= end_offset {
2498                return Ok(());
2499            }
2500
2501            // Decode unknown envelopes for gaps in ordinals.
2502            while _next_ordinal_to_read < 2 {
2503                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2504                _next_ordinal_to_read += 1;
2505                next_offset += envelope_size;
2506            }
2507
2508            let next_out_of_line = decoder.next_out_of_line();
2509            let handles_before = decoder.remaining_handles();
2510            if let Some((inlined, num_bytes, num_handles)) =
2511                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2512            {
2513                let member_inline_size =
2514                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2515                if inlined != (member_inline_size <= 4) {
2516                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2517                }
2518                let inner_offset;
2519                let mut inner_depth = depth.clone();
2520                if inlined {
2521                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2522                    inner_offset = next_offset;
2523                } else {
2524                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2525                    inner_depth.increment()?;
2526                }
2527                let val_ref = self.persist.get_or_insert_with(|| fidl::new_empty!(bool, D));
2528                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2529                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2530                {
2531                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2532                }
2533                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2534                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2535                }
2536            }
2537
2538            next_offset += envelope_size;
2539
2540            // Decode the remaining unknown envelopes.
2541            while next_offset < end_offset {
2542                _next_ordinal_to_read += 1;
2543                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2544                next_offset += envelope_size;
2545            }
2546
2547            Ok(())
2548        }
2549    }
2550
2551    impl LogStreamOptions {
2552        #[inline(always)]
2553        fn max_ordinal_present(&self) -> u64 {
2554            if let Some(_) = self.include_rolled_out {
2555                return 4;
2556            }
2557            if let Some(_) = self.include_component_url {
2558                return 3;
2559            }
2560            if let Some(_) = self.include_moniker {
2561                return 2;
2562            }
2563            if let Some(_) = self.mode {
2564                return 1;
2565            }
2566            0
2567        }
2568    }
2569
2570    impl fidl::encoding::ValueTypeMarker for LogStreamOptions {
2571        type Borrowed<'a> = &'a Self;
2572        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2573            value
2574        }
2575    }
2576
2577    unsafe impl fidl::encoding::TypeMarker for LogStreamOptions {
2578        type Owned = Self;
2579
2580        #[inline(always)]
2581        fn inline_align(_context: fidl::encoding::Context) -> usize {
2582            8
2583        }
2584
2585        #[inline(always)]
2586        fn inline_size(_context: fidl::encoding::Context) -> usize {
2587            16
2588        }
2589    }
2590
2591    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LogStreamOptions, D>
2592        for &LogStreamOptions
2593    {
2594        unsafe fn encode(
2595            self,
2596            encoder: &mut fidl::encoding::Encoder<'_, D>,
2597            offset: usize,
2598            mut depth: fidl::encoding::Depth,
2599        ) -> fidl::Result<()> {
2600            encoder.debug_check_bounds::<LogStreamOptions>(offset);
2601            // Vector header
2602            let max_ordinal: u64 = self.max_ordinal_present();
2603            encoder.write_num(max_ordinal, offset);
2604            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2605            // Calling encoder.out_of_line_offset(0) is not allowed.
2606            if max_ordinal == 0 {
2607                return Ok(());
2608            }
2609            depth.increment()?;
2610            let envelope_size = 8;
2611            let bytes_len = max_ordinal as usize * envelope_size;
2612            #[allow(unused_variables)]
2613            let offset = encoder.out_of_line_offset(bytes_len);
2614            let mut _prev_end_offset: usize = 0;
2615            if 1 > max_ordinal {
2616                return Ok(());
2617            }
2618
2619            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2620            // are envelope_size bytes.
2621            let cur_offset: usize = (1 - 1) * envelope_size;
2622
2623            // Zero reserved fields.
2624            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2625
2626            // Safety:
2627            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2628            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2629            //   envelope_size bytes, there is always sufficient room.
2630            fidl::encoding::encode_in_envelope_optional::<StreamMode, D>(
2631                self.mode.as_ref().map(<StreamMode as fidl::encoding::ValueTypeMarker>::borrow),
2632                encoder,
2633                offset + cur_offset,
2634                depth,
2635            )?;
2636
2637            _prev_end_offset = cur_offset + envelope_size;
2638            if 2 > max_ordinal {
2639                return Ok(());
2640            }
2641
2642            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2643            // are envelope_size bytes.
2644            let cur_offset: usize = (2 - 1) * envelope_size;
2645
2646            // Zero reserved fields.
2647            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2648
2649            // Safety:
2650            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2651            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2652            //   envelope_size bytes, there is always sufficient room.
2653            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2654                self.include_moniker
2655                    .as_ref()
2656                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2657                encoder,
2658                offset + cur_offset,
2659                depth,
2660            )?;
2661
2662            _prev_end_offset = cur_offset + envelope_size;
2663            if 3 > max_ordinal {
2664                return Ok(());
2665            }
2666
2667            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2668            // are envelope_size bytes.
2669            let cur_offset: usize = (3 - 1) * envelope_size;
2670
2671            // Zero reserved fields.
2672            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2673
2674            // Safety:
2675            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2676            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2677            //   envelope_size bytes, there is always sufficient room.
2678            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2679                self.include_component_url
2680                    .as_ref()
2681                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2682                encoder,
2683                offset + cur_offset,
2684                depth,
2685            )?;
2686
2687            _prev_end_offset = cur_offset + envelope_size;
2688            if 4 > max_ordinal {
2689                return Ok(());
2690            }
2691
2692            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2693            // are envelope_size bytes.
2694            let cur_offset: usize = (4 - 1) * envelope_size;
2695
2696            // Zero reserved fields.
2697            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2698
2699            // Safety:
2700            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2701            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2702            //   envelope_size bytes, there is always sufficient room.
2703            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2704                self.include_rolled_out
2705                    .as_ref()
2706                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2707                encoder,
2708                offset + cur_offset,
2709                depth,
2710            )?;
2711
2712            _prev_end_offset = cur_offset + envelope_size;
2713
2714            Ok(())
2715        }
2716    }
2717
2718    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LogStreamOptions {
2719        #[inline(always)]
2720        fn new_empty() -> Self {
2721            Self::default()
2722        }
2723
2724        unsafe fn decode(
2725            &mut self,
2726            decoder: &mut fidl::encoding::Decoder<'_, D>,
2727            offset: usize,
2728            mut depth: fidl::encoding::Depth,
2729        ) -> fidl::Result<()> {
2730            decoder.debug_check_bounds::<Self>(offset);
2731            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2732                None => return Err(fidl::Error::NotNullable),
2733                Some(len) => len,
2734            };
2735            // Calling decoder.out_of_line_offset(0) is not allowed.
2736            if len == 0 {
2737                return Ok(());
2738            };
2739            depth.increment()?;
2740            let envelope_size = 8;
2741            let bytes_len = len * envelope_size;
2742            let offset = decoder.out_of_line_offset(bytes_len)?;
2743            // Decode the envelope for each type.
2744            let mut _next_ordinal_to_read = 0;
2745            let mut next_offset = offset;
2746            let end_offset = offset + bytes_len;
2747            _next_ordinal_to_read += 1;
2748            if next_offset >= end_offset {
2749                return Ok(());
2750            }
2751
2752            // Decode unknown envelopes for gaps in ordinals.
2753            while _next_ordinal_to_read < 1 {
2754                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2755                _next_ordinal_to_read += 1;
2756                next_offset += envelope_size;
2757            }
2758
2759            let next_out_of_line = decoder.next_out_of_line();
2760            let handles_before = decoder.remaining_handles();
2761            if let Some((inlined, num_bytes, num_handles)) =
2762                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2763            {
2764                let member_inline_size =
2765                    <StreamMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2766                if inlined != (member_inline_size <= 4) {
2767                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2768                }
2769                let inner_offset;
2770                let mut inner_depth = depth.clone();
2771                if inlined {
2772                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2773                    inner_offset = next_offset;
2774                } else {
2775                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2776                    inner_depth.increment()?;
2777                }
2778                let val_ref = self.mode.get_or_insert_with(|| fidl::new_empty!(StreamMode, D));
2779                fidl::decode!(StreamMode, D, val_ref, decoder, inner_offset, inner_depth)?;
2780                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2781                {
2782                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2783                }
2784                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2785                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2786                }
2787            }
2788
2789            next_offset += envelope_size;
2790            _next_ordinal_to_read += 1;
2791            if next_offset >= end_offset {
2792                return Ok(());
2793            }
2794
2795            // Decode unknown envelopes for gaps in ordinals.
2796            while _next_ordinal_to_read < 2 {
2797                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2798                _next_ordinal_to_read += 1;
2799                next_offset += envelope_size;
2800            }
2801
2802            let next_out_of_line = decoder.next_out_of_line();
2803            let handles_before = decoder.remaining_handles();
2804            if let Some((inlined, num_bytes, num_handles)) =
2805                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2806            {
2807                let member_inline_size =
2808                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2809                if inlined != (member_inline_size <= 4) {
2810                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2811                }
2812                let inner_offset;
2813                let mut inner_depth = depth.clone();
2814                if inlined {
2815                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2816                    inner_offset = next_offset;
2817                } else {
2818                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2819                    inner_depth.increment()?;
2820                }
2821                let val_ref = self.include_moniker.get_or_insert_with(|| fidl::new_empty!(bool, D));
2822                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2823                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2824                {
2825                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2826                }
2827                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2828                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2829                }
2830            }
2831
2832            next_offset += envelope_size;
2833            _next_ordinal_to_read += 1;
2834            if next_offset >= end_offset {
2835                return Ok(());
2836            }
2837
2838            // Decode unknown envelopes for gaps in ordinals.
2839            while _next_ordinal_to_read < 3 {
2840                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2841                _next_ordinal_to_read += 1;
2842                next_offset += envelope_size;
2843            }
2844
2845            let next_out_of_line = decoder.next_out_of_line();
2846            let handles_before = decoder.remaining_handles();
2847            if let Some((inlined, num_bytes, num_handles)) =
2848                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2849            {
2850                let member_inline_size =
2851                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2852                if inlined != (member_inline_size <= 4) {
2853                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2854                }
2855                let inner_offset;
2856                let mut inner_depth = depth.clone();
2857                if inlined {
2858                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2859                    inner_offset = next_offset;
2860                } else {
2861                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2862                    inner_depth.increment()?;
2863                }
2864                let val_ref =
2865                    self.include_component_url.get_or_insert_with(|| fidl::new_empty!(bool, D));
2866                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2867                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2868                {
2869                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2870                }
2871                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2872                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2873                }
2874            }
2875
2876            next_offset += envelope_size;
2877            _next_ordinal_to_read += 1;
2878            if next_offset >= end_offset {
2879                return Ok(());
2880            }
2881
2882            // Decode unknown envelopes for gaps in ordinals.
2883            while _next_ordinal_to_read < 4 {
2884                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2885                _next_ordinal_to_read += 1;
2886                next_offset += envelope_size;
2887            }
2888
2889            let next_out_of_line = decoder.next_out_of_line();
2890            let handles_before = decoder.remaining_handles();
2891            if let Some((inlined, num_bytes, num_handles)) =
2892                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2893            {
2894                let member_inline_size =
2895                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2896                if inlined != (member_inline_size <= 4) {
2897                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2898                }
2899                let inner_offset;
2900                let mut inner_depth = depth.clone();
2901                if inlined {
2902                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2903                    inner_offset = next_offset;
2904                } else {
2905                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2906                    inner_depth.increment()?;
2907                }
2908                let val_ref =
2909                    self.include_rolled_out.get_or_insert_with(|| fidl::new_empty!(bool, D));
2910                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2911                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2912                {
2913                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2914                }
2915                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2916                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2917                }
2918            }
2919
2920            next_offset += envelope_size;
2921
2922            // Decode the remaining unknown envelopes.
2923            while next_offset < end_offset {
2924                _next_ordinal_to_read += 1;
2925                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2926                next_offset += envelope_size;
2927            }
2928
2929            Ok(())
2930        }
2931    }
2932
2933    impl PerformanceConfiguration {
2934        #[inline(always)]
2935        fn max_ordinal_present(&self) -> u64 {
2936            if let Some(_) = self.batch_retrieval_timeout_seconds {
2937                return 2;
2938            }
2939            if let Some(_) = self.max_aggregate_content_size_bytes {
2940                return 1;
2941            }
2942            0
2943        }
2944    }
2945
2946    impl fidl::encoding::ValueTypeMarker for PerformanceConfiguration {
2947        type Borrowed<'a> = &'a Self;
2948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2949            value
2950        }
2951    }
2952
2953    unsafe impl fidl::encoding::TypeMarker for PerformanceConfiguration {
2954        type Owned = Self;
2955
2956        #[inline(always)]
2957        fn inline_align(_context: fidl::encoding::Context) -> usize {
2958            8
2959        }
2960
2961        #[inline(always)]
2962        fn inline_size(_context: fidl::encoding::Context) -> usize {
2963            16
2964        }
2965    }
2966
2967    unsafe impl<D: fidl::encoding::ResourceDialect>
2968        fidl::encoding::Encode<PerformanceConfiguration, D> for &PerformanceConfiguration
2969    {
2970        unsafe fn encode(
2971            self,
2972            encoder: &mut fidl::encoding::Encoder<'_, D>,
2973            offset: usize,
2974            mut depth: fidl::encoding::Depth,
2975        ) -> fidl::Result<()> {
2976            encoder.debug_check_bounds::<PerformanceConfiguration>(offset);
2977            // Vector header
2978            let max_ordinal: u64 = self.max_ordinal_present();
2979            encoder.write_num(max_ordinal, offset);
2980            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2981            // Calling encoder.out_of_line_offset(0) is not allowed.
2982            if max_ordinal == 0 {
2983                return Ok(());
2984            }
2985            depth.increment()?;
2986            let envelope_size = 8;
2987            let bytes_len = max_ordinal as usize * envelope_size;
2988            #[allow(unused_variables)]
2989            let offset = encoder.out_of_line_offset(bytes_len);
2990            let mut _prev_end_offset: usize = 0;
2991            if 1 > max_ordinal {
2992                return Ok(());
2993            }
2994
2995            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2996            // are envelope_size bytes.
2997            let cur_offset: usize = (1 - 1) * envelope_size;
2998
2999            // Zero reserved fields.
3000            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3001
3002            // Safety:
3003            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3004            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3005            //   envelope_size bytes, there is always sufficient room.
3006            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3007                self.max_aggregate_content_size_bytes
3008                    .as_ref()
3009                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3010                encoder,
3011                offset + cur_offset,
3012                depth,
3013            )?;
3014
3015            _prev_end_offset = cur_offset + envelope_size;
3016            if 2 > max_ordinal {
3017                return Ok(());
3018            }
3019
3020            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3021            // are envelope_size bytes.
3022            let cur_offset: usize = (2 - 1) * envelope_size;
3023
3024            // Zero reserved fields.
3025            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3026
3027            // Safety:
3028            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3029            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3030            //   envelope_size bytes, there is always sufficient room.
3031            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3032                self.batch_retrieval_timeout_seconds
3033                    .as_ref()
3034                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3035                encoder,
3036                offset + cur_offset,
3037                depth,
3038            )?;
3039
3040            _prev_end_offset = cur_offset + envelope_size;
3041
3042            Ok(())
3043        }
3044    }
3045
3046    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3047        for PerformanceConfiguration
3048    {
3049        #[inline(always)]
3050        fn new_empty() -> Self {
3051            Self::default()
3052        }
3053
3054        unsafe fn decode(
3055            &mut self,
3056            decoder: &mut fidl::encoding::Decoder<'_, D>,
3057            offset: usize,
3058            mut depth: fidl::encoding::Depth,
3059        ) -> fidl::Result<()> {
3060            decoder.debug_check_bounds::<Self>(offset);
3061            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3062                None => return Err(fidl::Error::NotNullable),
3063                Some(len) => len,
3064            };
3065            // Calling decoder.out_of_line_offset(0) is not allowed.
3066            if len == 0 {
3067                return Ok(());
3068            };
3069            depth.increment()?;
3070            let envelope_size = 8;
3071            let bytes_len = len * envelope_size;
3072            let offset = decoder.out_of_line_offset(bytes_len)?;
3073            // Decode the envelope for each type.
3074            let mut _next_ordinal_to_read = 0;
3075            let mut next_offset = offset;
3076            let end_offset = offset + bytes_len;
3077            _next_ordinal_to_read += 1;
3078            if next_offset >= end_offset {
3079                return Ok(());
3080            }
3081
3082            // Decode unknown envelopes for gaps in ordinals.
3083            while _next_ordinal_to_read < 1 {
3084                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3085                _next_ordinal_to_read += 1;
3086                next_offset += envelope_size;
3087            }
3088
3089            let next_out_of_line = decoder.next_out_of_line();
3090            let handles_before = decoder.remaining_handles();
3091            if let Some((inlined, num_bytes, num_handles)) =
3092                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3093            {
3094                let member_inline_size =
3095                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3096                if inlined != (member_inline_size <= 4) {
3097                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3098                }
3099                let inner_offset;
3100                let mut inner_depth = depth.clone();
3101                if inlined {
3102                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3103                    inner_offset = next_offset;
3104                } else {
3105                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3106                    inner_depth.increment()?;
3107                }
3108                let val_ref = self
3109                    .max_aggregate_content_size_bytes
3110                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
3111                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3112                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3113                {
3114                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3115                }
3116                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3117                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3118                }
3119            }
3120
3121            next_offset += envelope_size;
3122            _next_ordinal_to_read += 1;
3123            if next_offset >= end_offset {
3124                return Ok(());
3125            }
3126
3127            // Decode unknown envelopes for gaps in ordinals.
3128            while _next_ordinal_to_read < 2 {
3129                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3130                _next_ordinal_to_read += 1;
3131                next_offset += envelope_size;
3132            }
3133
3134            let next_out_of_line = decoder.next_out_of_line();
3135            let handles_before = decoder.remaining_handles();
3136            if let Some((inlined, num_bytes, num_handles)) =
3137                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3138            {
3139                let member_inline_size =
3140                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3141                if inlined != (member_inline_size <= 4) {
3142                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3143                }
3144                let inner_offset;
3145                let mut inner_depth = depth.clone();
3146                if inlined {
3147                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3148                    inner_offset = next_offset;
3149                } else {
3150                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3151                    inner_depth.increment()?;
3152                }
3153                let val_ref = self
3154                    .batch_retrieval_timeout_seconds
3155                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
3156                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3158                {
3159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3160                }
3161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3163                }
3164            }
3165
3166            next_offset += envelope_size;
3167
3168            // Decode the remaining unknown envelopes.
3169            while next_offset < end_offset {
3170                _next_ordinal_to_read += 1;
3171                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3172                next_offset += envelope_size;
3173            }
3174
3175            Ok(())
3176        }
3177    }
3178
3179    impl SampleDatum {
3180        #[inline(always)]
3181        fn max_ordinal_present(&self) -> u64 {
3182            if let Some(_) = self.interval_secs {
3183                return 3;
3184            }
3185            if let Some(_) = self.strategy {
3186                return 2;
3187            }
3188            if let Some(_) = self.selector {
3189                return 1;
3190            }
3191            0
3192        }
3193    }
3194
3195    impl fidl::encoding::ValueTypeMarker for SampleDatum {
3196        type Borrowed<'a> = &'a Self;
3197        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3198            value
3199        }
3200    }
3201
3202    unsafe impl fidl::encoding::TypeMarker for SampleDatum {
3203        type Owned = Self;
3204
3205        #[inline(always)]
3206        fn inline_align(_context: fidl::encoding::Context) -> usize {
3207            8
3208        }
3209
3210        #[inline(always)]
3211        fn inline_size(_context: fidl::encoding::Context) -> usize {
3212            16
3213        }
3214    }
3215
3216    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SampleDatum, D>
3217        for &SampleDatum
3218    {
3219        unsafe fn encode(
3220            self,
3221            encoder: &mut fidl::encoding::Encoder<'_, D>,
3222            offset: usize,
3223            mut depth: fidl::encoding::Depth,
3224        ) -> fidl::Result<()> {
3225            encoder.debug_check_bounds::<SampleDatum>(offset);
3226            // Vector header
3227            let max_ordinal: u64 = self.max_ordinal_present();
3228            encoder.write_num(max_ordinal, offset);
3229            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3230            // Calling encoder.out_of_line_offset(0) is not allowed.
3231            if max_ordinal == 0 {
3232                return Ok(());
3233            }
3234            depth.increment()?;
3235            let envelope_size = 8;
3236            let bytes_len = max_ordinal as usize * envelope_size;
3237            #[allow(unused_variables)]
3238            let offset = encoder.out_of_line_offset(bytes_len);
3239            let mut _prev_end_offset: usize = 0;
3240            if 1 > max_ordinal {
3241                return Ok(());
3242            }
3243
3244            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3245            // are envelope_size bytes.
3246            let cur_offset: usize = (1 - 1) * envelope_size;
3247
3248            // Zero reserved fields.
3249            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3250
3251            // Safety:
3252            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3253            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3254            //   envelope_size bytes, there is always sufficient room.
3255            fidl::encoding::encode_in_envelope_optional::<SelectorArgument, D>(
3256                self.selector
3257                    .as_ref()
3258                    .map(<SelectorArgument as fidl::encoding::ValueTypeMarker>::borrow),
3259                encoder,
3260                offset + cur_offset,
3261                depth,
3262            )?;
3263
3264            _prev_end_offset = cur_offset + envelope_size;
3265            if 2 > max_ordinal {
3266                return Ok(());
3267            }
3268
3269            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3270            // are envelope_size bytes.
3271            let cur_offset: usize = (2 - 1) * envelope_size;
3272
3273            // Zero reserved fields.
3274            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3275
3276            // Safety:
3277            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3278            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3279            //   envelope_size bytes, there is always sufficient room.
3280            fidl::encoding::encode_in_envelope_optional::<SampleStrategy, D>(
3281                self.strategy
3282                    .as_ref()
3283                    .map(<SampleStrategy as fidl::encoding::ValueTypeMarker>::borrow),
3284                encoder,
3285                offset + cur_offset,
3286                depth,
3287            )?;
3288
3289            _prev_end_offset = cur_offset + envelope_size;
3290            if 3 > max_ordinal {
3291                return Ok(());
3292            }
3293
3294            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3295            // are envelope_size bytes.
3296            let cur_offset: usize = (3 - 1) * envelope_size;
3297
3298            // Zero reserved fields.
3299            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3300
3301            // Safety:
3302            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3303            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3304            //   envelope_size bytes, there is always sufficient room.
3305            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3306                self.interval_secs.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3307                encoder,
3308                offset + cur_offset,
3309                depth,
3310            )?;
3311
3312            _prev_end_offset = cur_offset + envelope_size;
3313
3314            Ok(())
3315        }
3316    }
3317
3318    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SampleDatum {
3319        #[inline(always)]
3320        fn new_empty() -> Self {
3321            Self::default()
3322        }
3323
3324        unsafe fn decode(
3325            &mut self,
3326            decoder: &mut fidl::encoding::Decoder<'_, D>,
3327            offset: usize,
3328            mut depth: fidl::encoding::Depth,
3329        ) -> fidl::Result<()> {
3330            decoder.debug_check_bounds::<Self>(offset);
3331            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3332                None => return Err(fidl::Error::NotNullable),
3333                Some(len) => len,
3334            };
3335            // Calling decoder.out_of_line_offset(0) is not allowed.
3336            if len == 0 {
3337                return Ok(());
3338            };
3339            depth.increment()?;
3340            let envelope_size = 8;
3341            let bytes_len = len * envelope_size;
3342            let offset = decoder.out_of_line_offset(bytes_len)?;
3343            // Decode the envelope for each type.
3344            let mut _next_ordinal_to_read = 0;
3345            let mut next_offset = offset;
3346            let end_offset = offset + bytes_len;
3347            _next_ordinal_to_read += 1;
3348            if next_offset >= end_offset {
3349                return Ok(());
3350            }
3351
3352            // Decode unknown envelopes for gaps in ordinals.
3353            while _next_ordinal_to_read < 1 {
3354                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3355                _next_ordinal_to_read += 1;
3356                next_offset += envelope_size;
3357            }
3358
3359            let next_out_of_line = decoder.next_out_of_line();
3360            let handles_before = decoder.remaining_handles();
3361            if let Some((inlined, num_bytes, num_handles)) =
3362                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3363            {
3364                let member_inline_size =
3365                    <SelectorArgument as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3366                if inlined != (member_inline_size <= 4) {
3367                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3368                }
3369                let inner_offset;
3370                let mut inner_depth = depth.clone();
3371                if inlined {
3372                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3373                    inner_offset = next_offset;
3374                } else {
3375                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3376                    inner_depth.increment()?;
3377                }
3378                let val_ref =
3379                    self.selector.get_or_insert_with(|| fidl::new_empty!(SelectorArgument, D));
3380                fidl::decode!(SelectorArgument, D, val_ref, decoder, inner_offset, inner_depth)?;
3381                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3382                {
3383                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3384                }
3385                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3386                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3387                }
3388            }
3389
3390            next_offset += envelope_size;
3391            _next_ordinal_to_read += 1;
3392            if next_offset >= end_offset {
3393                return Ok(());
3394            }
3395
3396            // Decode unknown envelopes for gaps in ordinals.
3397            while _next_ordinal_to_read < 2 {
3398                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3399                _next_ordinal_to_read += 1;
3400                next_offset += envelope_size;
3401            }
3402
3403            let next_out_of_line = decoder.next_out_of_line();
3404            let handles_before = decoder.remaining_handles();
3405            if let Some((inlined, num_bytes, num_handles)) =
3406                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3407            {
3408                let member_inline_size =
3409                    <SampleStrategy as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3410                if inlined != (member_inline_size <= 4) {
3411                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3412                }
3413                let inner_offset;
3414                let mut inner_depth = depth.clone();
3415                if inlined {
3416                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3417                    inner_offset = next_offset;
3418                } else {
3419                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3420                    inner_depth.increment()?;
3421                }
3422                let val_ref =
3423                    self.strategy.get_or_insert_with(|| fidl::new_empty!(SampleStrategy, D));
3424                fidl::decode!(SampleStrategy, D, val_ref, decoder, inner_offset, inner_depth)?;
3425                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3426                {
3427                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3428                }
3429                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3430                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3431                }
3432            }
3433
3434            next_offset += envelope_size;
3435            _next_ordinal_to_read += 1;
3436            if next_offset >= end_offset {
3437                return Ok(());
3438            }
3439
3440            // Decode unknown envelopes for gaps in ordinals.
3441            while _next_ordinal_to_read < 3 {
3442                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3443                _next_ordinal_to_read += 1;
3444                next_offset += envelope_size;
3445            }
3446
3447            let next_out_of_line = decoder.next_out_of_line();
3448            let handles_before = decoder.remaining_handles();
3449            if let Some((inlined, num_bytes, num_handles)) =
3450                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3451            {
3452                let member_inline_size =
3453                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3454                if inlined != (member_inline_size <= 4) {
3455                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3456                }
3457                let inner_offset;
3458                let mut inner_depth = depth.clone();
3459                if inlined {
3460                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3461                    inner_offset = next_offset;
3462                } else {
3463                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3464                    inner_depth.increment()?;
3465                }
3466                let val_ref = self.interval_secs.get_or_insert_with(|| fidl::new_empty!(i64, D));
3467                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3468                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3469                {
3470                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3471                }
3472                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3473                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3474                }
3475            }
3476
3477            next_offset += envelope_size;
3478
3479            // Decode the remaining unknown envelopes.
3480            while next_offset < end_offset {
3481                _next_ordinal_to_read += 1;
3482                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3483                next_offset += envelope_size;
3484            }
3485
3486            Ok(())
3487        }
3488    }
3489
3490    impl SampleParameters {
3491        #[inline(always)]
3492        fn max_ordinal_present(&self) -> u64 {
3493            if let Some(_) = self.data {
3494                return 1;
3495            }
3496            0
3497        }
3498    }
3499
3500    impl fidl::encoding::ValueTypeMarker for SampleParameters {
3501        type Borrowed<'a> = &'a Self;
3502        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3503            value
3504        }
3505    }
3506
3507    unsafe impl fidl::encoding::TypeMarker for SampleParameters {
3508        type Owned = Self;
3509
3510        #[inline(always)]
3511        fn inline_align(_context: fidl::encoding::Context) -> usize {
3512            8
3513        }
3514
3515        #[inline(always)]
3516        fn inline_size(_context: fidl::encoding::Context) -> usize {
3517            16
3518        }
3519    }
3520
3521    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SampleParameters, D>
3522        for &SampleParameters
3523    {
3524        unsafe fn encode(
3525            self,
3526            encoder: &mut fidl::encoding::Encoder<'_, D>,
3527            offset: usize,
3528            mut depth: fidl::encoding::Depth,
3529        ) -> fidl::Result<()> {
3530            encoder.debug_check_bounds::<SampleParameters>(offset);
3531            // Vector header
3532            let max_ordinal: u64 = self.max_ordinal_present();
3533            encoder.write_num(max_ordinal, offset);
3534            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3535            // Calling encoder.out_of_line_offset(0) is not allowed.
3536            if max_ordinal == 0 {
3537                return Ok(());
3538            }
3539            depth.increment()?;
3540            let envelope_size = 8;
3541            let bytes_len = max_ordinal as usize * envelope_size;
3542            #[allow(unused_variables)]
3543            let offset = encoder.out_of_line_offset(bytes_len);
3544            let mut _prev_end_offset: usize = 0;
3545            if 1 > max_ordinal {
3546                return Ok(());
3547            }
3548
3549            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3550            // are envelope_size bytes.
3551            let cur_offset: usize = (1 - 1) * envelope_size;
3552
3553            // Zero reserved fields.
3554            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3555
3556            // Safety:
3557            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3558            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3559            //   envelope_size bytes, there is always sufficient room.
3560            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SampleDatum, 100>, D>(
3561            self.data.as_ref().map(<fidl::encoding::Vector<SampleDatum, 100> as fidl::encoding::ValueTypeMarker>::borrow),
3562            encoder, offset + cur_offset, depth
3563        )?;
3564
3565            _prev_end_offset = cur_offset + envelope_size;
3566
3567            Ok(())
3568        }
3569    }
3570
3571    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SampleParameters {
3572        #[inline(always)]
3573        fn new_empty() -> Self {
3574            Self::default()
3575        }
3576
3577        unsafe fn decode(
3578            &mut self,
3579            decoder: &mut fidl::encoding::Decoder<'_, D>,
3580            offset: usize,
3581            mut depth: fidl::encoding::Depth,
3582        ) -> fidl::Result<()> {
3583            decoder.debug_check_bounds::<Self>(offset);
3584            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3585                None => return Err(fidl::Error::NotNullable),
3586                Some(len) => len,
3587            };
3588            // Calling decoder.out_of_line_offset(0) is not allowed.
3589            if len == 0 {
3590                return Ok(());
3591            };
3592            depth.increment()?;
3593            let envelope_size = 8;
3594            let bytes_len = len * envelope_size;
3595            let offset = decoder.out_of_line_offset(bytes_len)?;
3596            // Decode the envelope for each type.
3597            let mut _next_ordinal_to_read = 0;
3598            let mut next_offset = offset;
3599            let end_offset = offset + bytes_len;
3600            _next_ordinal_to_read += 1;
3601            if next_offset >= end_offset {
3602                return Ok(());
3603            }
3604
3605            // Decode unknown envelopes for gaps in ordinals.
3606            while _next_ordinal_to_read < 1 {
3607                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3608                _next_ordinal_to_read += 1;
3609                next_offset += envelope_size;
3610            }
3611
3612            let next_out_of_line = decoder.next_out_of_line();
3613            let handles_before = decoder.remaining_handles();
3614            if let Some((inlined, num_bytes, num_handles)) =
3615                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3616            {
3617                let member_inline_size = <fidl::encoding::Vector<SampleDatum, 100> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3618                if inlined != (member_inline_size <= 4) {
3619                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3620                }
3621                let inner_offset;
3622                let mut inner_depth = depth.clone();
3623                if inlined {
3624                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3625                    inner_offset = next_offset;
3626                } else {
3627                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3628                    inner_depth.increment()?;
3629                }
3630                let val_ref = self.data.get_or_insert_with(
3631                    || fidl::new_empty!(fidl::encoding::Vector<SampleDatum, 100>, D),
3632                );
3633                fidl::decode!(fidl::encoding::Vector<SampleDatum, 100>, D, val_ref, decoder, inner_offset, inner_depth)?;
3634                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3635                {
3636                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3637                }
3638                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3639                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3640                }
3641            }
3642
3643            next_offset += envelope_size;
3644
3645            // Decode the remaining unknown envelopes.
3646            while next_offset < end_offset {
3647                _next_ordinal_to_read += 1;
3648                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3649                next_offset += envelope_size;
3650            }
3651
3652            Ok(())
3653        }
3654    }
3655
3656    impl Selector {
3657        #[inline(always)]
3658        fn max_ordinal_present(&self) -> u64 {
3659            if let Some(_) = self.tree_names {
3660                return 3;
3661            }
3662            if let Some(_) = self.tree_selector {
3663                return 2;
3664            }
3665            if let Some(_) = self.component_selector {
3666                return 1;
3667            }
3668            0
3669        }
3670    }
3671
3672    impl fidl::encoding::ValueTypeMarker for Selector {
3673        type Borrowed<'a> = &'a Self;
3674        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3675            value
3676        }
3677    }
3678
3679    unsafe impl fidl::encoding::TypeMarker for Selector {
3680        type Owned = Self;
3681
3682        #[inline(always)]
3683        fn inline_align(_context: fidl::encoding::Context) -> usize {
3684            8
3685        }
3686
3687        #[inline(always)]
3688        fn inline_size(_context: fidl::encoding::Context) -> usize {
3689            16
3690        }
3691    }
3692
3693    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Selector, D> for &Selector {
3694        unsafe fn encode(
3695            self,
3696            encoder: &mut fidl::encoding::Encoder<'_, D>,
3697            offset: usize,
3698            mut depth: fidl::encoding::Depth,
3699        ) -> fidl::Result<()> {
3700            encoder.debug_check_bounds::<Selector>(offset);
3701            // Vector header
3702            let max_ordinal: u64 = self.max_ordinal_present();
3703            encoder.write_num(max_ordinal, offset);
3704            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3705            // Calling encoder.out_of_line_offset(0) is not allowed.
3706            if max_ordinal == 0 {
3707                return Ok(());
3708            }
3709            depth.increment()?;
3710            let envelope_size = 8;
3711            let bytes_len = max_ordinal as usize * envelope_size;
3712            #[allow(unused_variables)]
3713            let offset = encoder.out_of_line_offset(bytes_len);
3714            let mut _prev_end_offset: usize = 0;
3715            if 1 > max_ordinal {
3716                return Ok(());
3717            }
3718
3719            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3720            // are envelope_size bytes.
3721            let cur_offset: usize = (1 - 1) * envelope_size;
3722
3723            // Zero reserved fields.
3724            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3725
3726            // Safety:
3727            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3728            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3729            //   envelope_size bytes, there is always sufficient room.
3730            fidl::encoding::encode_in_envelope_optional::<ComponentSelector, D>(
3731                self.component_selector
3732                    .as_ref()
3733                    .map(<ComponentSelector as fidl::encoding::ValueTypeMarker>::borrow),
3734                encoder,
3735                offset + cur_offset,
3736                depth,
3737            )?;
3738
3739            _prev_end_offset = cur_offset + envelope_size;
3740            if 2 > max_ordinal {
3741                return Ok(());
3742            }
3743
3744            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3745            // are envelope_size bytes.
3746            let cur_offset: usize = (2 - 1) * envelope_size;
3747
3748            // Zero reserved fields.
3749            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3750
3751            // Safety:
3752            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3753            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3754            //   envelope_size bytes, there is always sufficient room.
3755            fidl::encoding::encode_in_envelope_optional::<TreeSelector, D>(
3756                self.tree_selector
3757                    .as_ref()
3758                    .map(<TreeSelector as fidl::encoding::ValueTypeMarker>::borrow),
3759                encoder,
3760                offset + cur_offset,
3761                depth,
3762            )?;
3763
3764            _prev_end_offset = cur_offset + envelope_size;
3765            if 3 > max_ordinal {
3766                return Ok(());
3767            }
3768
3769            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3770            // are envelope_size bytes.
3771            let cur_offset: usize = (3 - 1) * envelope_size;
3772
3773            // Zero reserved fields.
3774            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3775
3776            // Safety:
3777            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3778            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3779            //   envelope_size bytes, there is always sufficient room.
3780            fidl::encoding::encode_in_envelope_optional::<TreeNames, D>(
3781                self.tree_names
3782                    .as_ref()
3783                    .map(<TreeNames as fidl::encoding::ValueTypeMarker>::borrow),
3784                encoder,
3785                offset + cur_offset,
3786                depth,
3787            )?;
3788
3789            _prev_end_offset = cur_offset + envelope_size;
3790
3791            Ok(())
3792        }
3793    }
3794
3795    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Selector {
3796        #[inline(always)]
3797        fn new_empty() -> Self {
3798            Self::default()
3799        }
3800
3801        unsafe fn decode(
3802            &mut self,
3803            decoder: &mut fidl::encoding::Decoder<'_, D>,
3804            offset: usize,
3805            mut depth: fidl::encoding::Depth,
3806        ) -> fidl::Result<()> {
3807            decoder.debug_check_bounds::<Self>(offset);
3808            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3809                None => return Err(fidl::Error::NotNullable),
3810                Some(len) => len,
3811            };
3812            // Calling decoder.out_of_line_offset(0) is not allowed.
3813            if len == 0 {
3814                return Ok(());
3815            };
3816            depth.increment()?;
3817            let envelope_size = 8;
3818            let bytes_len = len * envelope_size;
3819            let offset = decoder.out_of_line_offset(bytes_len)?;
3820            // Decode the envelope for each type.
3821            let mut _next_ordinal_to_read = 0;
3822            let mut next_offset = offset;
3823            let end_offset = offset + bytes_len;
3824            _next_ordinal_to_read += 1;
3825            if next_offset >= end_offset {
3826                return Ok(());
3827            }
3828
3829            // Decode unknown envelopes for gaps in ordinals.
3830            while _next_ordinal_to_read < 1 {
3831                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3832                _next_ordinal_to_read += 1;
3833                next_offset += envelope_size;
3834            }
3835
3836            let next_out_of_line = decoder.next_out_of_line();
3837            let handles_before = decoder.remaining_handles();
3838            if let Some((inlined, num_bytes, num_handles)) =
3839                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3840            {
3841                let member_inline_size =
3842                    <ComponentSelector as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3843                if inlined != (member_inline_size <= 4) {
3844                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3845                }
3846                let inner_offset;
3847                let mut inner_depth = depth.clone();
3848                if inlined {
3849                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3850                    inner_offset = next_offset;
3851                } else {
3852                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3853                    inner_depth.increment()?;
3854                }
3855                let val_ref = self
3856                    .component_selector
3857                    .get_or_insert_with(|| fidl::new_empty!(ComponentSelector, D));
3858                fidl::decode!(ComponentSelector, D, val_ref, decoder, inner_offset, inner_depth)?;
3859                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3860                {
3861                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3862                }
3863                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3864                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3865                }
3866            }
3867
3868            next_offset += envelope_size;
3869            _next_ordinal_to_read += 1;
3870            if next_offset >= end_offset {
3871                return Ok(());
3872            }
3873
3874            // Decode unknown envelopes for gaps in ordinals.
3875            while _next_ordinal_to_read < 2 {
3876                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3877                _next_ordinal_to_read += 1;
3878                next_offset += envelope_size;
3879            }
3880
3881            let next_out_of_line = decoder.next_out_of_line();
3882            let handles_before = decoder.remaining_handles();
3883            if let Some((inlined, num_bytes, num_handles)) =
3884                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3885            {
3886                let member_inline_size =
3887                    <TreeSelector as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3888                if inlined != (member_inline_size <= 4) {
3889                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3890                }
3891                let inner_offset;
3892                let mut inner_depth = depth.clone();
3893                if inlined {
3894                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3895                    inner_offset = next_offset;
3896                } else {
3897                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3898                    inner_depth.increment()?;
3899                }
3900                let val_ref =
3901                    self.tree_selector.get_or_insert_with(|| fidl::new_empty!(TreeSelector, D));
3902                fidl::decode!(TreeSelector, D, val_ref, decoder, inner_offset, inner_depth)?;
3903                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3904                {
3905                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3906                }
3907                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3908                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3909                }
3910            }
3911
3912            next_offset += envelope_size;
3913            _next_ordinal_to_read += 1;
3914            if next_offset >= end_offset {
3915                return Ok(());
3916            }
3917
3918            // Decode unknown envelopes for gaps in ordinals.
3919            while _next_ordinal_to_read < 3 {
3920                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3921                _next_ordinal_to_read += 1;
3922                next_offset += envelope_size;
3923            }
3924
3925            let next_out_of_line = decoder.next_out_of_line();
3926            let handles_before = decoder.remaining_handles();
3927            if let Some((inlined, num_bytes, num_handles)) =
3928                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3929            {
3930                let member_inline_size =
3931                    <TreeNames as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3932                if inlined != (member_inline_size <= 4) {
3933                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3934                }
3935                let inner_offset;
3936                let mut inner_depth = depth.clone();
3937                if inlined {
3938                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3939                    inner_offset = next_offset;
3940                } else {
3941                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3942                    inner_depth.increment()?;
3943                }
3944                let val_ref = self.tree_names.get_or_insert_with(|| fidl::new_empty!(TreeNames, D));
3945                fidl::decode!(TreeNames, D, val_ref, decoder, inner_offset, inner_depth)?;
3946                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3947                {
3948                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3949                }
3950                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3951                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3952                }
3953            }
3954
3955            next_offset += envelope_size;
3956
3957            // Decode the remaining unknown envelopes.
3958            while next_offset < end_offset {
3959                _next_ordinal_to_read += 1;
3960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3961                next_offset += envelope_size;
3962            }
3963
3964            Ok(())
3965        }
3966    }
3967
3968    impl StreamParameters {
3969        #[inline(always)]
3970        fn max_ordinal_present(&self) -> u64 {
3971            if let Some(_) = self.performance_configuration {
3972                return 6;
3973            }
3974            if let Some(_) = self.batch_retrieval_timeout_seconds {
3975                return 5;
3976            }
3977            if let Some(_) = self.client_selector_configuration {
3978                return 4;
3979            }
3980            if let Some(_) = self.format {
3981                return 3;
3982            }
3983            if let Some(_) = self.stream_mode {
3984                return 2;
3985            }
3986            if let Some(_) = self.data_type {
3987                return 1;
3988            }
3989            0
3990        }
3991    }
3992
3993    impl fidl::encoding::ValueTypeMarker for StreamParameters {
3994        type Borrowed<'a> = &'a Self;
3995        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3996            value
3997        }
3998    }
3999
4000    unsafe impl fidl::encoding::TypeMarker for StreamParameters {
4001        type Owned = Self;
4002
4003        #[inline(always)]
4004        fn inline_align(_context: fidl::encoding::Context) -> usize {
4005            8
4006        }
4007
4008        #[inline(always)]
4009        fn inline_size(_context: fidl::encoding::Context) -> usize {
4010            16
4011        }
4012    }
4013
4014    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamParameters, D>
4015        for &StreamParameters
4016    {
4017        unsafe fn encode(
4018            self,
4019            encoder: &mut fidl::encoding::Encoder<'_, D>,
4020            offset: usize,
4021            mut depth: fidl::encoding::Depth,
4022        ) -> fidl::Result<()> {
4023            encoder.debug_check_bounds::<StreamParameters>(offset);
4024            // Vector header
4025            let max_ordinal: u64 = self.max_ordinal_present();
4026            encoder.write_num(max_ordinal, offset);
4027            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4028            // Calling encoder.out_of_line_offset(0) is not allowed.
4029            if max_ordinal == 0 {
4030                return Ok(());
4031            }
4032            depth.increment()?;
4033            let envelope_size = 8;
4034            let bytes_len = max_ordinal as usize * envelope_size;
4035            #[allow(unused_variables)]
4036            let offset = encoder.out_of_line_offset(bytes_len);
4037            let mut _prev_end_offset: usize = 0;
4038            if 1 > max_ordinal {
4039                return Ok(());
4040            }
4041
4042            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4043            // are envelope_size bytes.
4044            let cur_offset: usize = (1 - 1) * envelope_size;
4045
4046            // Zero reserved fields.
4047            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4048
4049            // Safety:
4050            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4051            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4052            //   envelope_size bytes, there is always sufficient room.
4053            fidl::encoding::encode_in_envelope_optional::<DataType, D>(
4054                self.data_type.as_ref().map(<DataType as fidl::encoding::ValueTypeMarker>::borrow),
4055                encoder,
4056                offset + cur_offset,
4057                depth,
4058            )?;
4059
4060            _prev_end_offset = cur_offset + envelope_size;
4061            if 2 > max_ordinal {
4062                return Ok(());
4063            }
4064
4065            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4066            // are envelope_size bytes.
4067            let cur_offset: usize = (2 - 1) * envelope_size;
4068
4069            // Zero reserved fields.
4070            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4071
4072            // Safety:
4073            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4074            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4075            //   envelope_size bytes, there is always sufficient room.
4076            fidl::encoding::encode_in_envelope_optional::<StreamMode, D>(
4077                self.stream_mode
4078                    .as_ref()
4079                    .map(<StreamMode as fidl::encoding::ValueTypeMarker>::borrow),
4080                encoder,
4081                offset + cur_offset,
4082                depth,
4083            )?;
4084
4085            _prev_end_offset = cur_offset + envelope_size;
4086            if 3 > max_ordinal {
4087                return Ok(());
4088            }
4089
4090            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4091            // are envelope_size bytes.
4092            let cur_offset: usize = (3 - 1) * envelope_size;
4093
4094            // Zero reserved fields.
4095            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4096
4097            // Safety:
4098            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4099            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4100            //   envelope_size bytes, there is always sufficient room.
4101            fidl::encoding::encode_in_envelope_optional::<Format, D>(
4102                self.format.as_ref().map(<Format as fidl::encoding::ValueTypeMarker>::borrow),
4103                encoder,
4104                offset + cur_offset,
4105                depth,
4106            )?;
4107
4108            _prev_end_offset = cur_offset + envelope_size;
4109            if 4 > max_ordinal {
4110                return Ok(());
4111            }
4112
4113            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4114            // are envelope_size bytes.
4115            let cur_offset: usize = (4 - 1) * envelope_size;
4116
4117            // Zero reserved fields.
4118            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4119
4120            // Safety:
4121            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4122            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4123            //   envelope_size bytes, there is always sufficient room.
4124            fidl::encoding::encode_in_envelope_optional::<ClientSelectorConfiguration, D>(
4125                self.client_selector_configuration
4126                    .as_ref()
4127                    .map(<ClientSelectorConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4128                encoder,
4129                offset + cur_offset,
4130                depth,
4131            )?;
4132
4133            _prev_end_offset = cur_offset + envelope_size;
4134            if 5 > max_ordinal {
4135                return Ok(());
4136            }
4137
4138            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4139            // are envelope_size bytes.
4140            let cur_offset: usize = (5 - 1) * envelope_size;
4141
4142            // Zero reserved fields.
4143            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4144
4145            // Safety:
4146            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4147            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4148            //   envelope_size bytes, there is always sufficient room.
4149            fidl::encoding::encode_in_envelope_optional::<i64, D>(
4150                self.batch_retrieval_timeout_seconds
4151                    .as_ref()
4152                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
4153                encoder,
4154                offset + cur_offset,
4155                depth,
4156            )?;
4157
4158            _prev_end_offset = cur_offset + envelope_size;
4159            if 6 > max_ordinal {
4160                return Ok(());
4161            }
4162
4163            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4164            // are envelope_size bytes.
4165            let cur_offset: usize = (6 - 1) * envelope_size;
4166
4167            // Zero reserved fields.
4168            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4169
4170            // Safety:
4171            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4172            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4173            //   envelope_size bytes, there is always sufficient room.
4174            fidl::encoding::encode_in_envelope_optional::<PerformanceConfiguration, D>(
4175                self.performance_configuration
4176                    .as_ref()
4177                    .map(<PerformanceConfiguration as fidl::encoding::ValueTypeMarker>::borrow),
4178                encoder,
4179                offset + cur_offset,
4180                depth,
4181            )?;
4182
4183            _prev_end_offset = cur_offset + envelope_size;
4184
4185            Ok(())
4186        }
4187    }
4188
4189    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamParameters {
4190        #[inline(always)]
4191        fn new_empty() -> Self {
4192            Self::default()
4193        }
4194
4195        unsafe fn decode(
4196            &mut self,
4197            decoder: &mut fidl::encoding::Decoder<'_, D>,
4198            offset: usize,
4199            mut depth: fidl::encoding::Depth,
4200        ) -> fidl::Result<()> {
4201            decoder.debug_check_bounds::<Self>(offset);
4202            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4203                None => return Err(fidl::Error::NotNullable),
4204                Some(len) => len,
4205            };
4206            // Calling decoder.out_of_line_offset(0) is not allowed.
4207            if len == 0 {
4208                return Ok(());
4209            };
4210            depth.increment()?;
4211            let envelope_size = 8;
4212            let bytes_len = len * envelope_size;
4213            let offset = decoder.out_of_line_offset(bytes_len)?;
4214            // Decode the envelope for each type.
4215            let mut _next_ordinal_to_read = 0;
4216            let mut next_offset = offset;
4217            let end_offset = offset + bytes_len;
4218            _next_ordinal_to_read += 1;
4219            if next_offset >= end_offset {
4220                return Ok(());
4221            }
4222
4223            // Decode unknown envelopes for gaps in ordinals.
4224            while _next_ordinal_to_read < 1 {
4225                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4226                _next_ordinal_to_read += 1;
4227                next_offset += envelope_size;
4228            }
4229
4230            let next_out_of_line = decoder.next_out_of_line();
4231            let handles_before = decoder.remaining_handles();
4232            if let Some((inlined, num_bytes, num_handles)) =
4233                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4234            {
4235                let member_inline_size =
4236                    <DataType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4237                if inlined != (member_inline_size <= 4) {
4238                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4239                }
4240                let inner_offset;
4241                let mut inner_depth = depth.clone();
4242                if inlined {
4243                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4244                    inner_offset = next_offset;
4245                } else {
4246                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4247                    inner_depth.increment()?;
4248                }
4249                let val_ref = self.data_type.get_or_insert_with(|| fidl::new_empty!(DataType, D));
4250                fidl::decode!(DataType, D, val_ref, decoder, inner_offset, inner_depth)?;
4251                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4252                {
4253                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4254                }
4255                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4256                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4257                }
4258            }
4259
4260            next_offset += envelope_size;
4261            _next_ordinal_to_read += 1;
4262            if next_offset >= end_offset {
4263                return Ok(());
4264            }
4265
4266            // Decode unknown envelopes for gaps in ordinals.
4267            while _next_ordinal_to_read < 2 {
4268                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4269                _next_ordinal_to_read += 1;
4270                next_offset += envelope_size;
4271            }
4272
4273            let next_out_of_line = decoder.next_out_of_line();
4274            let handles_before = decoder.remaining_handles();
4275            if let Some((inlined, num_bytes, num_handles)) =
4276                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4277            {
4278                let member_inline_size =
4279                    <StreamMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4280                if inlined != (member_inline_size <= 4) {
4281                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4282                }
4283                let inner_offset;
4284                let mut inner_depth = depth.clone();
4285                if inlined {
4286                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4287                    inner_offset = next_offset;
4288                } else {
4289                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4290                    inner_depth.increment()?;
4291                }
4292                let val_ref =
4293                    self.stream_mode.get_or_insert_with(|| fidl::new_empty!(StreamMode, D));
4294                fidl::decode!(StreamMode, D, val_ref, decoder, inner_offset, inner_depth)?;
4295                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4296                {
4297                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4298                }
4299                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4300                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4301                }
4302            }
4303
4304            next_offset += envelope_size;
4305            _next_ordinal_to_read += 1;
4306            if next_offset >= end_offset {
4307                return Ok(());
4308            }
4309
4310            // Decode unknown envelopes for gaps in ordinals.
4311            while _next_ordinal_to_read < 3 {
4312                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4313                _next_ordinal_to_read += 1;
4314                next_offset += envelope_size;
4315            }
4316
4317            let next_out_of_line = decoder.next_out_of_line();
4318            let handles_before = decoder.remaining_handles();
4319            if let Some((inlined, num_bytes, num_handles)) =
4320                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4321            {
4322                let member_inline_size =
4323                    <Format as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4324                if inlined != (member_inline_size <= 4) {
4325                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4326                }
4327                let inner_offset;
4328                let mut inner_depth = depth.clone();
4329                if inlined {
4330                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4331                    inner_offset = next_offset;
4332                } else {
4333                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4334                    inner_depth.increment()?;
4335                }
4336                let val_ref = self.format.get_or_insert_with(|| fidl::new_empty!(Format, D));
4337                fidl::decode!(Format, D, val_ref, decoder, inner_offset, inner_depth)?;
4338                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4339                {
4340                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4341                }
4342                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4343                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4344                }
4345            }
4346
4347            next_offset += envelope_size;
4348            _next_ordinal_to_read += 1;
4349            if next_offset >= end_offset {
4350                return Ok(());
4351            }
4352
4353            // Decode unknown envelopes for gaps in ordinals.
4354            while _next_ordinal_to_read < 4 {
4355                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4356                _next_ordinal_to_read += 1;
4357                next_offset += envelope_size;
4358            }
4359
4360            let next_out_of_line = decoder.next_out_of_line();
4361            let handles_before = decoder.remaining_handles();
4362            if let Some((inlined, num_bytes, num_handles)) =
4363                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4364            {
4365                let member_inline_size =
4366                    <ClientSelectorConfiguration as fidl::encoding::TypeMarker>::inline_size(
4367                        decoder.context,
4368                    );
4369                if inlined != (member_inline_size <= 4) {
4370                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4371                }
4372                let inner_offset;
4373                let mut inner_depth = depth.clone();
4374                if inlined {
4375                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4376                    inner_offset = next_offset;
4377                } else {
4378                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4379                    inner_depth.increment()?;
4380                }
4381                let val_ref = self
4382                    .client_selector_configuration
4383                    .get_or_insert_with(|| fidl::new_empty!(ClientSelectorConfiguration, D));
4384                fidl::decode!(
4385                    ClientSelectorConfiguration,
4386                    D,
4387                    val_ref,
4388                    decoder,
4389                    inner_offset,
4390                    inner_depth
4391                )?;
4392                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4393                {
4394                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4395                }
4396                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4397                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4398                }
4399            }
4400
4401            next_offset += envelope_size;
4402            _next_ordinal_to_read += 1;
4403            if next_offset >= end_offset {
4404                return Ok(());
4405            }
4406
4407            // Decode unknown envelopes for gaps in ordinals.
4408            while _next_ordinal_to_read < 5 {
4409                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4410                _next_ordinal_to_read += 1;
4411                next_offset += envelope_size;
4412            }
4413
4414            let next_out_of_line = decoder.next_out_of_line();
4415            let handles_before = decoder.remaining_handles();
4416            if let Some((inlined, num_bytes, num_handles)) =
4417                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4418            {
4419                let member_inline_size =
4420                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4421                if inlined != (member_inline_size <= 4) {
4422                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4423                }
4424                let inner_offset;
4425                let mut inner_depth = depth.clone();
4426                if inlined {
4427                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4428                    inner_offset = next_offset;
4429                } else {
4430                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4431                    inner_depth.increment()?;
4432                }
4433                let val_ref = self
4434                    .batch_retrieval_timeout_seconds
4435                    .get_or_insert_with(|| fidl::new_empty!(i64, D));
4436                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
4437                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4438                {
4439                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4440                }
4441                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4442                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4443                }
4444            }
4445
4446            next_offset += envelope_size;
4447            _next_ordinal_to_read += 1;
4448            if next_offset >= end_offset {
4449                return Ok(());
4450            }
4451
4452            // Decode unknown envelopes for gaps in ordinals.
4453            while _next_ordinal_to_read < 6 {
4454                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4455                _next_ordinal_to_read += 1;
4456                next_offset += envelope_size;
4457            }
4458
4459            let next_out_of_line = decoder.next_out_of_line();
4460            let handles_before = decoder.remaining_handles();
4461            if let Some((inlined, num_bytes, num_handles)) =
4462                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4463            {
4464                let member_inline_size =
4465                    <PerformanceConfiguration as fidl::encoding::TypeMarker>::inline_size(
4466                        decoder.context,
4467                    );
4468                if inlined != (member_inline_size <= 4) {
4469                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4470                }
4471                let inner_offset;
4472                let mut inner_depth = depth.clone();
4473                if inlined {
4474                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4475                    inner_offset = next_offset;
4476                } else {
4477                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4478                    inner_depth.increment()?;
4479                }
4480                let val_ref = self
4481                    .performance_configuration
4482                    .get_or_insert_with(|| fidl::new_empty!(PerformanceConfiguration, D));
4483                fidl::decode!(
4484                    PerformanceConfiguration,
4485                    D,
4486                    val_ref,
4487                    decoder,
4488                    inner_offset,
4489                    inner_depth
4490                )?;
4491                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4492                {
4493                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4494                }
4495                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4496                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4497                }
4498            }
4499
4500            next_offset += envelope_size;
4501
4502            // Decode the remaining unknown envelopes.
4503            while next_offset < end_offset {
4504                _next_ordinal_to_read += 1;
4505                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4506                next_offset += envelope_size;
4507            }
4508
4509            Ok(())
4510        }
4511    }
4512
4513    impl fidl::encoding::ValueTypeMarker for ClientSelectorConfiguration {
4514        type Borrowed<'a> = &'a Self;
4515        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4516            value
4517        }
4518    }
4519
4520    unsafe impl fidl::encoding::TypeMarker for ClientSelectorConfiguration {
4521        type Owned = Self;
4522
4523        #[inline(always)]
4524        fn inline_align(_context: fidl::encoding::Context) -> usize {
4525            8
4526        }
4527
4528        #[inline(always)]
4529        fn inline_size(_context: fidl::encoding::Context) -> usize {
4530            16
4531        }
4532    }
4533
4534    unsafe impl<D: fidl::encoding::ResourceDialect>
4535        fidl::encoding::Encode<ClientSelectorConfiguration, D> for &ClientSelectorConfiguration
4536    {
4537        #[inline]
4538        unsafe fn encode(
4539            self,
4540            encoder: &mut fidl::encoding::Encoder<'_, D>,
4541            offset: usize,
4542            _depth: fidl::encoding::Depth,
4543        ) -> fidl::Result<()> {
4544            encoder.debug_check_bounds::<ClientSelectorConfiguration>(offset);
4545            encoder.write_num::<u64>(self.ordinal(), offset);
4546            match self {
4547            ClientSelectorConfiguration::Selectors(ref val) => {
4548                fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedVector<SelectorArgument>, D>(
4549                    <fidl::encoding::UnboundedVector<SelectorArgument> as fidl::encoding::ValueTypeMarker>::borrow(val),
4550                    encoder, offset + 8, _depth
4551                )
4552            }
4553            ClientSelectorConfiguration::SelectAll(ref val) => {
4554                fidl::encoding::encode_in_envelope::<bool, D>(
4555                    <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
4556                    encoder, offset + 8, _depth
4557                )
4558            }
4559            ClientSelectorConfiguration::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
4560        }
4561        }
4562    }
4563
4564    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4565        for ClientSelectorConfiguration
4566    {
4567        #[inline(always)]
4568        fn new_empty() -> Self {
4569            Self::__SourceBreaking { unknown_ordinal: 0 }
4570        }
4571
4572        #[inline]
4573        unsafe fn decode(
4574            &mut self,
4575            decoder: &mut fidl::encoding::Decoder<'_, D>,
4576            offset: usize,
4577            mut depth: fidl::encoding::Depth,
4578        ) -> fidl::Result<()> {
4579            decoder.debug_check_bounds::<Self>(offset);
4580            #[allow(unused_variables)]
4581            let next_out_of_line = decoder.next_out_of_line();
4582            let handles_before = decoder.remaining_handles();
4583            let (ordinal, inlined, num_bytes, num_handles) =
4584                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
4585
4586            let member_inline_size = match ordinal {
4587            1 => <fidl::encoding::UnboundedVector<SelectorArgument> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
4588            2 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
4589            0 => return Err(fidl::Error::UnknownUnionTag),
4590            _ => num_bytes as usize,
4591        };
4592
4593            if inlined != (member_inline_size <= 4) {
4594                return Err(fidl::Error::InvalidInlineBitInEnvelope);
4595            }
4596            let _inner_offset;
4597            if inlined {
4598                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
4599                _inner_offset = offset + 8;
4600            } else {
4601                depth.increment()?;
4602                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4603            }
4604            match ordinal {
4605                1 => {
4606                    #[allow(irrefutable_let_patterns)]
4607                    if let ClientSelectorConfiguration::Selectors(_) = self {
4608                        // Do nothing, read the value into the object
4609                    } else {
4610                        // Initialize `self` to the right variant
4611                        *self = ClientSelectorConfiguration::Selectors(fidl::new_empty!(
4612                            fidl::encoding::UnboundedVector<SelectorArgument>,
4613                            D
4614                        ));
4615                    }
4616                    #[allow(irrefutable_let_patterns)]
4617                    if let ClientSelectorConfiguration::Selectors(ref mut val) = self {
4618                        fidl::decode!(
4619                            fidl::encoding::UnboundedVector<SelectorArgument>,
4620                            D,
4621                            val,
4622                            decoder,
4623                            _inner_offset,
4624                            depth
4625                        )?;
4626                    } else {
4627                        unreachable!()
4628                    }
4629                }
4630                2 => {
4631                    #[allow(irrefutable_let_patterns)]
4632                    if let ClientSelectorConfiguration::SelectAll(_) = self {
4633                        // Do nothing, read the value into the object
4634                    } else {
4635                        // Initialize `self` to the right variant
4636                        *self = ClientSelectorConfiguration::SelectAll(fidl::new_empty!(bool, D));
4637                    }
4638                    #[allow(irrefutable_let_patterns)]
4639                    if let ClientSelectorConfiguration::SelectAll(ref mut val) = self {
4640                        fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
4641                    } else {
4642                        unreachable!()
4643                    }
4644                }
4645                #[allow(deprecated)]
4646                ordinal => {
4647                    for _ in 0..num_handles {
4648                        decoder.drop_next_handle()?;
4649                    }
4650                    *self =
4651                        ClientSelectorConfiguration::__SourceBreaking { unknown_ordinal: ordinal };
4652                }
4653            }
4654            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
4655                return Err(fidl::Error::InvalidNumBytesInEnvelope);
4656            }
4657            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4658                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4659            }
4660            Ok(())
4661        }
4662    }
4663
4664    impl fidl::encoding::ValueTypeMarker for SelectorArgument {
4665        type Borrowed<'a> = &'a Self;
4666        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4667            value
4668        }
4669    }
4670
4671    unsafe impl fidl::encoding::TypeMarker for SelectorArgument {
4672        type Owned = Self;
4673
4674        #[inline(always)]
4675        fn inline_align(_context: fidl::encoding::Context) -> usize {
4676            8
4677        }
4678
4679        #[inline(always)]
4680        fn inline_size(_context: fidl::encoding::Context) -> usize {
4681            16
4682        }
4683    }
4684
4685    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SelectorArgument, D>
4686        for &SelectorArgument
4687    {
4688        #[inline]
4689        unsafe fn encode(
4690            self,
4691            encoder: &mut fidl::encoding::Encoder<'_, D>,
4692            offset: usize,
4693            _depth: fidl::encoding::Depth,
4694        ) -> fidl::Result<()> {
4695            encoder.debug_check_bounds::<SelectorArgument>(offset);
4696            encoder.write_num::<u64>(self.ordinal(), offset);
4697            match self {
4698            SelectorArgument::StructuredSelector(ref val) => {
4699                fidl::encoding::encode_in_envelope::<Selector, D>(
4700                    <Selector as fidl::encoding::ValueTypeMarker>::borrow(val),
4701                    encoder, offset + 8, _depth
4702                )
4703            }
4704            SelectorArgument::RawSelector(ref val) => {
4705                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<1024>, D>(
4706                    <fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow(val),
4707                    encoder, offset + 8, _depth
4708                )
4709            }
4710            SelectorArgument::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
4711        }
4712        }
4713    }
4714
4715    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SelectorArgument {
4716        #[inline(always)]
4717        fn new_empty() -> Self {
4718            Self::__SourceBreaking { unknown_ordinal: 0 }
4719        }
4720
4721        #[inline]
4722        unsafe fn decode(
4723            &mut self,
4724            decoder: &mut fidl::encoding::Decoder<'_, D>,
4725            offset: usize,
4726            mut depth: fidl::encoding::Depth,
4727        ) -> fidl::Result<()> {
4728            decoder.debug_check_bounds::<Self>(offset);
4729            #[allow(unused_variables)]
4730            let next_out_of_line = decoder.next_out_of_line();
4731            let handles_before = decoder.remaining_handles();
4732            let (ordinal, inlined, num_bytes, num_handles) =
4733                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
4734
4735            let member_inline_size = match ordinal {
4736                1 => <Selector as fidl::encoding::TypeMarker>::inline_size(decoder.context),
4737                2 => {
4738                    <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(
4739                        decoder.context,
4740                    )
4741                }
4742                0 => return Err(fidl::Error::UnknownUnionTag),
4743                _ => num_bytes as usize,
4744            };
4745
4746            if inlined != (member_inline_size <= 4) {
4747                return Err(fidl::Error::InvalidInlineBitInEnvelope);
4748            }
4749            let _inner_offset;
4750            if inlined {
4751                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
4752                _inner_offset = offset + 8;
4753            } else {
4754                depth.increment()?;
4755                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4756            }
4757            match ordinal {
4758                1 => {
4759                    #[allow(irrefutable_let_patterns)]
4760                    if let SelectorArgument::StructuredSelector(_) = self {
4761                        // Do nothing, read the value into the object
4762                    } else {
4763                        // Initialize `self` to the right variant
4764                        *self = SelectorArgument::StructuredSelector(fidl::new_empty!(Selector, D));
4765                    }
4766                    #[allow(irrefutable_let_patterns)]
4767                    if let SelectorArgument::StructuredSelector(ref mut val) = self {
4768                        fidl::decode!(Selector, D, val, decoder, _inner_offset, depth)?;
4769                    } else {
4770                        unreachable!()
4771                    }
4772                }
4773                2 => {
4774                    #[allow(irrefutable_let_patterns)]
4775                    if let SelectorArgument::RawSelector(_) = self {
4776                        // Do nothing, read the value into the object
4777                    } else {
4778                        // Initialize `self` to the right variant
4779                        *self = SelectorArgument::RawSelector(fidl::new_empty!(
4780                            fidl::encoding::BoundedString<1024>,
4781                            D
4782                        ));
4783                    }
4784                    #[allow(irrefutable_let_patterns)]
4785                    if let SelectorArgument::RawSelector(ref mut val) = self {
4786                        fidl::decode!(
4787                            fidl::encoding::BoundedString<1024>,
4788                            D,
4789                            val,
4790                            decoder,
4791                            _inner_offset,
4792                            depth
4793                        )?;
4794                    } else {
4795                        unreachable!()
4796                    }
4797                }
4798                #[allow(deprecated)]
4799                ordinal => {
4800                    for _ in 0..num_handles {
4801                        decoder.drop_next_handle()?;
4802                    }
4803                    *self = SelectorArgument::__SourceBreaking { unknown_ordinal: ordinal };
4804                }
4805            }
4806            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
4807                return Err(fidl::Error::InvalidNumBytesInEnvelope);
4808            }
4809            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4810                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4811            }
4812            Ok(())
4813        }
4814    }
4815
4816    impl fidl::encoding::ValueTypeMarker for StringSelector {
4817        type Borrowed<'a> = &'a Self;
4818        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4819            value
4820        }
4821    }
4822
4823    unsafe impl fidl::encoding::TypeMarker for StringSelector {
4824        type Owned = Self;
4825
4826        #[inline(always)]
4827        fn inline_align(_context: fidl::encoding::Context) -> usize {
4828            8
4829        }
4830
4831        #[inline(always)]
4832        fn inline_size(_context: fidl::encoding::Context) -> usize {
4833            16
4834        }
4835    }
4836
4837    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StringSelector, D>
4838        for &StringSelector
4839    {
4840        #[inline]
4841        unsafe fn encode(
4842            self,
4843            encoder: &mut fidl::encoding::Encoder<'_, D>,
4844            offset: usize,
4845            _depth: fidl::encoding::Depth,
4846        ) -> fidl::Result<()> {
4847            encoder.debug_check_bounds::<StringSelector>(offset);
4848            encoder.write_num::<u64>(self.ordinal(), offset);
4849            match self {
4850            StringSelector::StringPattern(ref val) => {
4851                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<1024>, D>(
4852                    <fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow(val),
4853                    encoder, offset + 8, _depth
4854                )
4855            }
4856            StringSelector::ExactMatch(ref val) => {
4857                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<1024>, D>(
4858                    <fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow(val),
4859                    encoder, offset + 8, _depth
4860                )
4861            }
4862            StringSelector::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
4863        }
4864        }
4865    }
4866
4867    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StringSelector {
4868        #[inline(always)]
4869        fn new_empty() -> Self {
4870            Self::__SourceBreaking { unknown_ordinal: 0 }
4871        }
4872
4873        #[inline]
4874        unsafe fn decode(
4875            &mut self,
4876            decoder: &mut fidl::encoding::Decoder<'_, D>,
4877            offset: usize,
4878            mut depth: fidl::encoding::Depth,
4879        ) -> fidl::Result<()> {
4880            decoder.debug_check_bounds::<Self>(offset);
4881            #[allow(unused_variables)]
4882            let next_out_of_line = decoder.next_out_of_line();
4883            let handles_before = decoder.remaining_handles();
4884            let (ordinal, inlined, num_bytes, num_handles) =
4885                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
4886
4887            let member_inline_size = match ordinal {
4888                1 => {
4889                    <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(
4890                        decoder.context,
4891                    )
4892                }
4893                2 => {
4894                    <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(
4895                        decoder.context,
4896                    )
4897                }
4898                0 => return Err(fidl::Error::UnknownUnionTag),
4899                _ => num_bytes as usize,
4900            };
4901
4902            if inlined != (member_inline_size <= 4) {
4903                return Err(fidl::Error::InvalidInlineBitInEnvelope);
4904            }
4905            let _inner_offset;
4906            if inlined {
4907                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
4908                _inner_offset = offset + 8;
4909            } else {
4910                depth.increment()?;
4911                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4912            }
4913            match ordinal {
4914                1 => {
4915                    #[allow(irrefutable_let_patterns)]
4916                    if let StringSelector::StringPattern(_) = self {
4917                        // Do nothing, read the value into the object
4918                    } else {
4919                        // Initialize `self` to the right variant
4920                        *self = StringSelector::StringPattern(fidl::new_empty!(
4921                            fidl::encoding::BoundedString<1024>,
4922                            D
4923                        ));
4924                    }
4925                    #[allow(irrefutable_let_patterns)]
4926                    if let StringSelector::StringPattern(ref mut val) = self {
4927                        fidl::decode!(
4928                            fidl::encoding::BoundedString<1024>,
4929                            D,
4930                            val,
4931                            decoder,
4932                            _inner_offset,
4933                            depth
4934                        )?;
4935                    } else {
4936                        unreachable!()
4937                    }
4938                }
4939                2 => {
4940                    #[allow(irrefutable_let_patterns)]
4941                    if let StringSelector::ExactMatch(_) = self {
4942                        // Do nothing, read the value into the object
4943                    } else {
4944                        // Initialize `self` to the right variant
4945                        *self = StringSelector::ExactMatch(fidl::new_empty!(
4946                            fidl::encoding::BoundedString<1024>,
4947                            D
4948                        ));
4949                    }
4950                    #[allow(irrefutable_let_patterns)]
4951                    if let StringSelector::ExactMatch(ref mut val) = self {
4952                        fidl::decode!(
4953                            fidl::encoding::BoundedString<1024>,
4954                            D,
4955                            val,
4956                            decoder,
4957                            _inner_offset,
4958                            depth
4959                        )?;
4960                    } else {
4961                        unreachable!()
4962                    }
4963                }
4964                #[allow(deprecated)]
4965                ordinal => {
4966                    for _ in 0..num_handles {
4967                        decoder.drop_next_handle()?;
4968                    }
4969                    *self = StringSelector::__SourceBreaking { unknown_ordinal: ordinal };
4970                }
4971            }
4972            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
4973                return Err(fidl::Error::InvalidNumBytesInEnvelope);
4974            }
4975            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4976                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4977            }
4978            Ok(())
4979        }
4980    }
4981
4982    impl fidl::encoding::ValueTypeMarker for TreeNames {
4983        type Borrowed<'a> = &'a Self;
4984        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4985            value
4986        }
4987    }
4988
4989    unsafe impl fidl::encoding::TypeMarker for TreeNames {
4990        type Owned = Self;
4991
4992        #[inline(always)]
4993        fn inline_align(_context: fidl::encoding::Context) -> usize {
4994            8
4995        }
4996
4997        #[inline(always)]
4998        fn inline_size(_context: fidl::encoding::Context) -> usize {
4999            16
5000        }
5001    }
5002
5003    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TreeNames, D>
5004        for &TreeNames
5005    {
5006        #[inline]
5007        unsafe fn encode(
5008            self,
5009            encoder: &mut fidl::encoding::Encoder<'_, D>,
5010            offset: usize,
5011            _depth: fidl::encoding::Depth,
5012        ) -> fidl::Result<()> {
5013            encoder.debug_check_bounds::<TreeNames>(offset);
5014            encoder.write_num::<u64>(self.ordinal(), offset);
5015            match self {
5016            TreeNames::Some(ref val) => {
5017                fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<1024>>, D>(
5018                    <fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<1024>> as fidl::encoding::ValueTypeMarker>::borrow(val),
5019                    encoder, offset + 8, _depth
5020                )
5021            }
5022            TreeNames::All(ref val) => {
5023                fidl::encoding::encode_in_envelope::<All, D>(
5024                    <All as fidl::encoding::ValueTypeMarker>::borrow(val),
5025                    encoder, offset + 8, _depth
5026                )
5027            }
5028            TreeNames::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
5029        }
5030        }
5031    }
5032
5033    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TreeNames {
5034        #[inline(always)]
5035        fn new_empty() -> Self {
5036            Self::__SourceBreaking { unknown_ordinal: 0 }
5037        }
5038
5039        #[inline]
5040        unsafe fn decode(
5041            &mut self,
5042            decoder: &mut fidl::encoding::Decoder<'_, D>,
5043            offset: usize,
5044            mut depth: fidl::encoding::Depth,
5045        ) -> fidl::Result<()> {
5046            decoder.debug_check_bounds::<Self>(offset);
5047            #[allow(unused_variables)]
5048            let next_out_of_line = decoder.next_out_of_line();
5049            let handles_before = decoder.remaining_handles();
5050            let (ordinal, inlined, num_bytes, num_handles) =
5051                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
5052
5053            let member_inline_size = match ordinal {
5054            1 => <fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<1024>> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5055            2 => <All as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5056            0 => return Err(fidl::Error::UnknownUnionTag),
5057            _ => num_bytes as usize,
5058        };
5059
5060            if inlined != (member_inline_size <= 4) {
5061                return Err(fidl::Error::InvalidInlineBitInEnvelope);
5062            }
5063            let _inner_offset;
5064            if inlined {
5065                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
5066                _inner_offset = offset + 8;
5067            } else {
5068                depth.increment()?;
5069                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5070            }
5071            match ordinal {
5072                1 => {
5073                    #[allow(irrefutable_let_patterns)]
5074                    if let TreeNames::Some(_) = self {
5075                        // Do nothing, read the value into the object
5076                    } else {
5077                        // Initialize `self` to the right variant
5078                        *self = TreeNames::Some(fidl::new_empty!(
5079                            fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<1024>>,
5080                            D
5081                        ));
5082                    }
5083                    #[allow(irrefutable_let_patterns)]
5084                    if let TreeNames::Some(ref mut val) = self {
5085                        fidl::decode!(
5086                            fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<1024>>,
5087                            D,
5088                            val,
5089                            decoder,
5090                            _inner_offset,
5091                            depth
5092                        )?;
5093                    } else {
5094                        unreachable!()
5095                    }
5096                }
5097                2 => {
5098                    #[allow(irrefutable_let_patterns)]
5099                    if let TreeNames::All(_) = self {
5100                        // Do nothing, read the value into the object
5101                    } else {
5102                        // Initialize `self` to the right variant
5103                        *self = TreeNames::All(fidl::new_empty!(All, D));
5104                    }
5105                    #[allow(irrefutable_let_patterns)]
5106                    if let TreeNames::All(ref mut val) = self {
5107                        fidl::decode!(All, D, val, decoder, _inner_offset, depth)?;
5108                    } else {
5109                        unreachable!()
5110                    }
5111                }
5112                #[allow(deprecated)]
5113                ordinal => {
5114                    for _ in 0..num_handles {
5115                        decoder.drop_next_handle()?;
5116                    }
5117                    *self = TreeNames::__SourceBreaking { unknown_ordinal: ordinal };
5118                }
5119            }
5120            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
5121                return Err(fidl::Error::InvalidNumBytesInEnvelope);
5122            }
5123            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5124                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5125            }
5126            Ok(())
5127        }
5128    }
5129
5130    impl fidl::encoding::ValueTypeMarker for TreeSelector {
5131        type Borrowed<'a> = &'a Self;
5132        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5133            value
5134        }
5135    }
5136
5137    unsafe impl fidl::encoding::TypeMarker for TreeSelector {
5138        type Owned = Self;
5139
5140        #[inline(always)]
5141        fn inline_align(_context: fidl::encoding::Context) -> usize {
5142            8
5143        }
5144
5145        #[inline(always)]
5146        fn inline_size(_context: fidl::encoding::Context) -> usize {
5147            16
5148        }
5149    }
5150
5151    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TreeSelector, D>
5152        for &TreeSelector
5153    {
5154        #[inline]
5155        unsafe fn encode(
5156            self,
5157            encoder: &mut fidl::encoding::Encoder<'_, D>,
5158            offset: usize,
5159            _depth: fidl::encoding::Depth,
5160        ) -> fidl::Result<()> {
5161            encoder.debug_check_bounds::<TreeSelector>(offset);
5162            encoder.write_num::<u64>(self.ordinal(), offset);
5163            match self {
5164                TreeSelector::SubtreeSelector(ref val) => {
5165                    fidl::encoding::encode_in_envelope::<SubtreeSelector, D>(
5166                        <SubtreeSelector as fidl::encoding::ValueTypeMarker>::borrow(val),
5167                        encoder,
5168                        offset + 8,
5169                        _depth,
5170                    )
5171                }
5172                TreeSelector::PropertySelector(ref val) => {
5173                    fidl::encoding::encode_in_envelope::<PropertySelector, D>(
5174                        <PropertySelector as fidl::encoding::ValueTypeMarker>::borrow(val),
5175                        encoder,
5176                        offset + 8,
5177                        _depth,
5178                    )
5179                }
5180                TreeSelector::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
5181            }
5182        }
5183    }
5184
5185    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TreeSelector {
5186        #[inline(always)]
5187        fn new_empty() -> Self {
5188            Self::__SourceBreaking { unknown_ordinal: 0 }
5189        }
5190
5191        #[inline]
5192        unsafe fn decode(
5193            &mut self,
5194            decoder: &mut fidl::encoding::Decoder<'_, D>,
5195            offset: usize,
5196            mut depth: fidl::encoding::Depth,
5197        ) -> fidl::Result<()> {
5198            decoder.debug_check_bounds::<Self>(offset);
5199            #[allow(unused_variables)]
5200            let next_out_of_line = decoder.next_out_of_line();
5201            let handles_before = decoder.remaining_handles();
5202            let (ordinal, inlined, num_bytes, num_handles) =
5203                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
5204
5205            let member_inline_size = match ordinal {
5206                1 => <SubtreeSelector as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5207                2 => <PropertySelector as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5208                0 => return Err(fidl::Error::UnknownUnionTag),
5209                _ => num_bytes as usize,
5210            };
5211
5212            if inlined != (member_inline_size <= 4) {
5213                return Err(fidl::Error::InvalidInlineBitInEnvelope);
5214            }
5215            let _inner_offset;
5216            if inlined {
5217                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
5218                _inner_offset = offset + 8;
5219            } else {
5220                depth.increment()?;
5221                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5222            }
5223            match ordinal {
5224                1 => {
5225                    #[allow(irrefutable_let_patterns)]
5226                    if let TreeSelector::SubtreeSelector(_) = self {
5227                        // Do nothing, read the value into the object
5228                    } else {
5229                        // Initialize `self` to the right variant
5230                        *self = TreeSelector::SubtreeSelector(fidl::new_empty!(SubtreeSelector, D));
5231                    }
5232                    #[allow(irrefutable_let_patterns)]
5233                    if let TreeSelector::SubtreeSelector(ref mut val) = self {
5234                        fidl::decode!(SubtreeSelector, D, val, decoder, _inner_offset, depth)?;
5235                    } else {
5236                        unreachable!()
5237                    }
5238                }
5239                2 => {
5240                    #[allow(irrefutable_let_patterns)]
5241                    if let TreeSelector::PropertySelector(_) = self {
5242                        // Do nothing, read the value into the object
5243                    } else {
5244                        // Initialize `self` to the right variant
5245                        *self =
5246                            TreeSelector::PropertySelector(fidl::new_empty!(PropertySelector, D));
5247                    }
5248                    #[allow(irrefutable_let_patterns)]
5249                    if let TreeSelector::PropertySelector(ref mut val) = self {
5250                        fidl::decode!(PropertySelector, D, val, decoder, _inner_offset, depth)?;
5251                    } else {
5252                        unreachable!()
5253                    }
5254                }
5255                #[allow(deprecated)]
5256                ordinal => {
5257                    for _ in 0..num_handles {
5258                        decoder.drop_next_handle()?;
5259                    }
5260                    *self = TreeSelector::__SourceBreaking { unknown_ordinal: ordinal };
5261                }
5262            }
5263            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
5264                return Err(fidl::Error::InvalidNumBytesInEnvelope);
5265            }
5266            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5267                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5268            }
5269            Ok(())
5270        }
5271    }
5272}