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