Skip to main content

fidl_fuchsia_diagnostics_common/
fidl_fuchsia_diagnostics_common.rs

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