fidl_fuchsia_fuzzer__common/
fidl_fuchsia_fuzzer__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// Marker indicating the last message in a diagnostic output stream.
12///
13/// In addition to an `Artifact`, long-running workflows may also produce the
14/// standard output, standard error, and system logs. These fuzzer output
15/// streams are provided by `fuchsia.test_manager/SuiteRunner` and have no
16/// guaranteed order with respect to FIDL responses. As a result, the streams
17/// need to include an "in-band" signal that indicates when they are complete
18/// for a particular workflow. Clients processing the fuzzer output may use this
19/// marker to synchronize the streams and the FIDL response for `GetArtifact`.
20///
21/// The string is intentionally somewhat long to mitigate the likelihood of it
22/// being emitted by the code under test.
23pub const DONE_MARKER: &str =
24    "DONE: A long-running `fuchsia.fuzzer.Controller` workflow is complete.";
25
26/// Command line flag requesting fuzzing to be performed.
27///
28/// This flag is passed by the `fuzz_manager` to the `test_manager` when
29/// starting fuzzers. Since the fuzzers are run as part of the Test Runner
30/// Framework, they can be started by normal test workflows, e.g. `fx test`. The
31/// presence of this flag indicates the fuzzer is being started to perform
32/// fuzzing; in its absence the fuzzer should simply execute a bounded number of
33/// inputs as a test.
34pub const FUZZ_MODE: &str = "--fuzz";
35
36/// Maximum length of a vector of CoverageData structs.
37///
38/// This value matches the maximum number of LLVM modules libFuzzer can track.
39pub const MAX_COVERAGE_DATA: u64 = 4096;
40
41pub const MAX_PARAMETERS: u16 = 128;
42
43pub const MAX_PARAMETER_LEN: u16 = 256;
44
45/// The maximum number of processes for which stats will be returned via
46/// `Status`.
47pub const MAX_PROCESS_STATS: u16 = 256;
48
49/// Maximum length of a sanitizer options environment variable name.
50///
51/// `sanitizer_options.name` must be something like "...SAN_OPTIONS". The
52/// longest name currently supported on Fuchsia is "UBSAN_OPTIONS". The longest
53/// currently supported on any platform is "HWASAN_OPTIONS".
54pub const MAX_SANITIZER_OPTIONS_NAME_SIZE: u16 = 32;
55
56/// Maximum length of a sanitizer options environment variable value.
57///
58/// `sanitizer_options.value` is a concatenation of "<key>=<value>" pairs
59/// delimited by ':'. AddressSanitizer currently has the most flags, with ~40
60/// sanitizer specific ones and ~70 common ones. Most of these are either
61/// boolean values or short integers. The only long types of flags are paths,
62/// but none these of these are supported on Fuchsia.
63pub const MAX_SANITIZER_OPTIONS_VALUE_SIZE: u16 = 8192;
64
65bitflags! {
66    /// Specifies how a fuzzing engine should configure output streams.
67    ///
68    /// Flags may be combined, e.g. `CLOSE_STDOUT | CLOSE_STDERR`. Support for each
69    /// flag is engine-specific. Specifying an unsupported output mode flag may
70    /// cause `Controller.Configure` to return `ZX_ERR_NOT_SUPPORTED`.
71    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
72    pub struct OutputFlags: u32 {
73        /// Suppress standard output from the engine process. This is analogous to
74        /// libFuzzer's `-close_fd_mask=1`.
75        const CLOSE_STDOUT = 1;
76        /// Suppress standard error from the engine process. Use with care: this may
77        /// remove diagnostic output from the target code (e.g. messages on assert
78        /// failure). This is analogous to libFuzzer's `-close_fd_mask=2`.
79        const CLOSE_STDERR = 2;
80        /// Produce more verbose output from the fuzzer engine. The exact meaning of
81        /// "more verbose" is engine-specific. This is analogous to libFuzzer's
82        /// `-verbosity=2`.
83        const VERBOSE = 4;
84        /// Produce libFuzzer-style output on standard error. This facilitates
85        /// integration with systems like ClusterFuzz.
86        /// See https://llvm.org/docs/LibFuzzer.html#output for example output.
87        const LIBFUZZER = 8;
88    }
89}
90
91impl OutputFlags {}
92
93/// See |Controller.GetCorpusWriter| and |Controller.GetCorpusReader|.
94#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
95pub enum Corpus {
96    /// Indicates a set of fixed, immutable inputs typically provided at
97    /// start-up. These inputs are never discarded when merging.
98    Seed,
99    /// Indicates a set of inputs generated by the fuzzer. These may be modified
100    /// and/or discarded when merging and minimizing the corpus.
101    Live,
102    #[doc(hidden)]
103    __SourceBreaking { unknown_ordinal: u8 },
104}
105
106/// Pattern that matches an unknown `Corpus` member.
107#[macro_export]
108macro_rules! CorpusUnknown {
109    () => {
110        _
111    };
112}
113
114impl Corpus {
115    #[inline]
116    pub fn from_primitive(prim: u8) -> Option<Self> {
117        match prim {
118            1 => Some(Self::Seed),
119            2 => Some(Self::Live),
120            _ => None,
121        }
122    }
123
124    #[inline]
125    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
126        match prim {
127            1 => Self::Seed,
128            2 => Self::Live,
129            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
130        }
131    }
132
133    #[inline]
134    pub fn unknown() -> Self {
135        Self::__SourceBreaking { unknown_ordinal: 0xff }
136    }
137
138    #[inline]
139    pub const fn into_primitive(self) -> u8 {
140        match self {
141            Self::Seed => 1,
142            Self::Live => 2,
143            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
144        }
145    }
146
147    #[inline]
148    pub fn is_unknown(&self) -> bool {
149        match self {
150            Self::__SourceBreaking { unknown_ordinal: _ } => true,
151            _ => false,
152        }
153    }
154}
155
156/// Indicates the result of a long-running fuzzing workflow.
157///
158/// Fuzzers have several "long-running" workflows; that is, the fuzzer may
159/// perform actions for an indefinite period of time. Fuzzing itself is the most
160/// notable example, as the fuzzing engine may continuously generate new inputs
161/// until an error is found. This workflow is represented by the `Fuzz` method
162/// below. Other long-running workflows include `TryOne`, `Cleanse`, `Minimize`
163/// and `Merge`.
164///
165/// These workflows continue executing after their associated call returns. Only
166/// one workflow at a time may be executing. Callers can use `AddMonitor` to
167/// monitor the status of the workflow, and `GetArtifact` to retrieve the
168/// `Result` and optionally associated `Input` when it completes.
169#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
170pub enum Result_ {
171    /// The associated input did not cause any errors to be detected when tried.
172    NoErrors,
173    /// Trying the associated input triggered a memory allocation by an
174    /// instrumented process that exceeded the configured limit.  Some fuzzing
175    /// engines, such as libFuzzer, may not distinguish between this result and
176    /// `OOM`. To differentiate,  examine the fuzzer output.
177    BadMalloc,
178    /// Trying the associated input triggered an exception in an instrumented
179    /// process.
180    Crash,
181    /// Trying the associated input triggered an error in an instrumented
182    /// process that was detected by a sanitizer runtime.
183    Death,
184    /// Trying the associated input caused an instrumented process to exit
185    /// unexpectedly. Some fuzzing engines such as libFuzzer may combine this
186    /// result with `CRASH`. To differentiate, examine the fuzzer output.
187    Exit,
188    /// Trying the associated input triggered a memory leak in an instrumented
189    /// process.
190    Leak,
191    /// Trying the associated input caused an instrumented process's memory
192    /// usage to exceed the configured limit.
193    Oom,
194    /// Trying the associated input took longer than the configured limit.
195    Timeout,
196    /// The associated input was produced by finding the shortest input that
197    /// produces the same error as an original input. See `Minimize`.
198    Minimized,
199    /// The associated input was produced by replacing bytes in an original
200    /// input with PII-free values while preserving the error produced. See
201    /// `Cleanse`.
202    Cleansed,
203    /// The fuzzer corpus has been compacted to only include the shortest inputs
204    /// that preserve overall coverage. This workflow does not have an
205    /// associated input. See `Merge`.
206    Merged,
207    #[doc(hidden)]
208    __SourceBreaking { unknown_ordinal: u32 },
209}
210
211/// Pattern that matches an unknown `Result_` member.
212#[macro_export]
213macro_rules! Result_Unknown {
214    () => {
215        _
216    };
217}
218
219impl Result_ {
220    #[inline]
221    pub fn from_primitive(prim: u32) -> Option<Self> {
222        match prim {
223            1 => Some(Self::NoErrors),
224            2 => Some(Self::BadMalloc),
225            3 => Some(Self::Crash),
226            4 => Some(Self::Death),
227            5 => Some(Self::Exit),
228            6 => Some(Self::Leak),
229            7 => Some(Self::Oom),
230            8 => Some(Self::Timeout),
231            9 => Some(Self::Minimized),
232            10 => Some(Self::Cleansed),
233            11 => Some(Self::Merged),
234            _ => None,
235        }
236    }
237
238    #[inline]
239    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
240        match prim {
241            1 => Self::NoErrors,
242            2 => Self::BadMalloc,
243            3 => Self::Crash,
244            4 => Self::Death,
245            5 => Self::Exit,
246            6 => Self::Leak,
247            7 => Self::Oom,
248            8 => Self::Timeout,
249            9 => Self::Minimized,
250            10 => Self::Cleansed,
251            11 => Self::Merged,
252            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
253        }
254    }
255
256    #[inline]
257    pub fn unknown() -> Self {
258        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
259    }
260
261    #[inline]
262    pub const fn into_primitive(self) -> u32 {
263        match self {
264            Self::NoErrors => 1,
265            Self::BadMalloc => 2,
266            Self::Crash => 3,
267            Self::Death => 4,
268            Self::Exit => 5,
269            Self::Leak => 6,
270            Self::Oom => 7,
271            Self::Timeout => 8,
272            Self::Minimized => 9,
273            Self::Cleansed => 10,
274            Self::Merged => 11,
275            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
276        }
277    }
278
279    #[inline]
280    pub fn is_unknown(&self) -> bool {
281        match self {
282            Self::__SourceBreaking { unknown_ordinal: _ } => true,
283            _ => false,
284        }
285    }
286}
287
288/// Represents types of fuzzer output.
289///
290/// These correspond to the subset of the `fuchsia.test_manager/Artifact`s that
291/// `fuzz_manager` can forward. The name "artifact" is avoided due to its
292/// distinct meaning for fuzzers; namely, `fuchsia.fuzzer.Artifact`.
293#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
294pub enum TestOutput {
295    /// Standard output from fuzzer.
296    Stdout,
297    /// Standard error from fuzzer.
298    Stderr,
299    /// System logs from fuzzer.
300    Syslog,
301    #[doc(hidden)]
302    __SourceBreaking { unknown_ordinal: u32 },
303}
304
305/// Pattern that matches an unknown `TestOutput` member.
306#[macro_export]
307macro_rules! TestOutputUnknown {
308    () => {
309        _
310    };
311}
312
313impl TestOutput {
314    #[inline]
315    pub fn from_primitive(prim: u32) -> Option<Self> {
316        match prim {
317            1 => Some(Self::Stdout),
318            2 => Some(Self::Stderr),
319            3 => Some(Self::Syslog),
320            _ => None,
321        }
322    }
323
324    #[inline]
325    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
326        match prim {
327            1 => Self::Stdout,
328            2 => Self::Stderr,
329            3 => Self::Syslog,
330            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
331        }
332    }
333
334    #[inline]
335    pub fn unknown() -> Self {
336        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
337    }
338
339    #[inline]
340    pub const fn into_primitive(self) -> u32 {
341        match self {
342            Self::Stdout => 1,
343            Self::Stderr => 2,
344            Self::Syslog => 3,
345            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
346        }
347    }
348
349    #[inline]
350    pub fn is_unknown(&self) -> bool {
351        match self {
352            Self::__SourceBreaking { unknown_ordinal: _ } => true,
353            _ => false,
354        }
355    }
356}
357
358/// See `Controller.Monitor`. Used to indicate why an update was sent.
359#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
360pub enum UpdateReason {
361    /// Represents an otherwise unspecified update. Useful when integrating
362    /// other engines as runners, e.g. libFuzzer.
363    Misc,
364    /// A fuzzing action is starting. See, e.g. `Controller.Fuzz`,
365    /// `Controller.Merge`, etc.
366    Init,
367    /// An input produced new feedback.
368    New,
369    /// Periodic status update, configured with `Options.pulse_interval`.
370    Pulse,
371    /// A shorter input for some particular feedback has been found.
372    Reduce,
373    /// A fuzzing action is complete.
374    Done,
375    #[doc(hidden)]
376    __SourceBreaking { unknown_ordinal: u8 },
377}
378
379/// Pattern that matches an unknown `UpdateReason` member.
380#[macro_export]
381macro_rules! UpdateReasonUnknown {
382    () => {
383        _
384    };
385}
386
387impl UpdateReason {
388    #[inline]
389    pub fn from_primitive(prim: u8) -> Option<Self> {
390        match prim {
391            1 => Some(Self::Misc),
392            2 => Some(Self::Init),
393            3 => Some(Self::New),
394            4 => Some(Self::Pulse),
395            5 => Some(Self::Reduce),
396            6 => Some(Self::Done),
397            _ => None,
398        }
399    }
400
401    #[inline]
402    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
403        match prim {
404            1 => Self::Misc,
405            2 => Self::Init,
406            3 => Self::New,
407            4 => Self::Pulse,
408            5 => Self::Reduce,
409            6 => Self::Done,
410            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
411        }
412    }
413
414    #[inline]
415    pub fn unknown() -> Self {
416        Self::__SourceBreaking { unknown_ordinal: 0xff }
417    }
418
419    #[inline]
420    pub const fn into_primitive(self) -> u8 {
421        match self {
422            Self::Misc => 1,
423            Self::Init => 2,
424            Self::New => 3,
425            Self::Pulse => 4,
426            Self::Reduce => 5,
427            Self::Done => 6,
428            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
429        }
430    }
431
432    #[inline]
433    pub fn is_unknown(&self) -> bool {
434        match self {
435            Self::__SourceBreaking { unknown_ordinal: _ } => true,
436            _ => false,
437        }
438    }
439}
440
441#[derive(Clone, Debug, PartialEq)]
442pub struct ControllerConfigureRequest {
443    pub options: Options,
444}
445
446impl fidl::Persistable for ControllerConfigureRequest {}
447
448#[derive(Clone, Debug, PartialEq)]
449pub struct ControllerGetOptionsResponse {
450    pub options: Options,
451}
452
453impl fidl::Persistable for ControllerGetOptionsResponse {}
454
455#[derive(Clone, Debug, PartialEq)]
456pub struct ControllerGetStatusResponse {
457    pub status: Status,
458}
459
460impl fidl::Persistable for ControllerGetStatusResponse {}
461
462#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
463#[repr(C)]
464pub struct CorpusReaderNextResponse {
465    pub result: i32,
466}
467
468impl fidl::Persistable for CorpusReaderNextResponse {}
469
470#[derive(Clone, Debug, PartialEq)]
471pub struct CoverageDataCollectorInitializeResponse {
472    pub options: Options,
473}
474
475impl fidl::Persistable for CoverageDataCollectorInitializeResponse {}
476
477#[derive(Clone, Debug, PartialEq)]
478pub struct CoverageDataProviderSetOptionsRequest {
479    pub options: Options,
480}
481
482impl fidl::Persistable for CoverageDataProviderSetOptionsRequest {}
483
484#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
485pub struct ManagerStopRequest {
486    pub fuzzer_url: String,
487}
488
489impl fidl::Persistable for ManagerStopRequest {}
490
491#[derive(Clone, Debug, PartialEq)]
492pub struct MonitorUpdateRequest {
493    pub reason: UpdateReason,
494    pub status: Status,
495}
496
497impl fidl::Persistable for MonitorUpdateRequest {}
498
499/// Details about an instrumented process.
500///
501/// See also:
502///
503/// * https://fuchsia.dev/fuchsia-src/reference/syscalls/object_get_info#zx_info_task_stats
504/// * https://fuchsia.dev/fuchsia-src/reference/syscalls/object_get_info#zx_info_task_runtime
505#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
506#[repr(C)]
507pub struct ProcessStats {
508    /// The kernel object identifier of the task.
509    pub koid: u64,
510    /// The total size of mapped memory ranges in this process.
511    pub mem_mapped_bytes: u64,
512    /// Committed memory that is only mapped into this process.
513    pub mem_private_bytes: u64,
514    /// Committed memory that is mapped into this and at least one other
515    /// process.
516    pub mem_shared_bytes: u64,
517    /// Estimate of how much of |mem_shared_bytes| that this process owns.
518    pub mem_scaled_shared_bytes: u64,
519    /// The total amount of time this process was running on a CPU and not
520    /// blocked.
521    pub cpu_time: i64,
522    /// The total amount of time this process was ready but not actually using a
523    /// CPU.
524    pub queue_time: i64,
525    /// The total amount of time this process spent handling page faults.
526    pub page_fault_time: i64,
527    /// The total amount of time this process spent waiting on contended kernel
528    /// locks.
529    pub lock_contention_time: i64,
530}
531
532impl fidl::Persistable for ProcessStats {}
533
534#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
535pub struct RegistryDisconnectRequest {
536    pub fuzzer_url: String,
537}
538
539impl fidl::Persistable for RegistryDisconnectRequest {}
540
541/// Corresponds to sanitizer enviroment variables.
542///
543/// The options are ignored unless `name` must end in "...SAN_OPTIONS", e.g.
544/// "ASAN_OPTIONS". `value` should be a ':'-delimited list of options, e.g.
545/// "verbosity=1:malloc_context_size=20".
546///
547/// For more details, see the following:
548///
549/// * https://github.com/google/sanitizers/wiki/SanitizerCommonFlags
550/// * https://github.com/google/sanitizers/wiki/AddressSanitizerFlags
551#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
552pub struct SanitizerOptions {
553    pub name: String,
554    pub value: String,
555}
556
557impl fidl::Persistable for SanitizerOptions {}
558
559#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
560pub struct TargetAdapterGetParametersResponse {
561    pub parameters: Vec<String>,
562}
563
564impl fidl::Persistable for TargetAdapterGetParametersResponse {}
565
566/// See `fuchsia.fuzzer.Controller/Configure`.
567#[derive(Clone, Debug, Default, PartialEq)]
568pub struct Options {
569    /// Perform this many fuzzing runs, then exit normally. If unset (or zero),
570    /// fuzz indefinitely.
571    pub runs: Option<u32>,
572    /// If non-zero, fuzz for this duration and then exit normally. If zero,
573    /// fuzz indefinitely. Defaults to 0.
574    pub max_total_time: Option<i64>,
575    /// PRNG seed to use when generating inputs. The same seed for the same
576    /// target should produce the same inputs. If zero, the current ticks will
577    /// be used. Defaults to 0.
578    pub seed: Option<u32>,
579    /// If non-zero, limit the maximum size of a test input to this size, in
580    /// bytes. Use 0 to disable the limit. Defaults to 1 MB.
581    pub max_input_size: Option<u64>,
582    /// Maximum number of consecutive mutations to apply to an input. Defaults
583    /// to 5.
584    pub mutation_depth: Option<u16>,
585    /// If an AFL-style dictionary is supplied using
586    /// `Controller.WriteDictionary`, include words up to this level. Defaults
587    /// to 0, i.e. words without an explicit level.
588    pub dictionary_level: Option<u16>,
589    /// If true, treat instrumented process exits as fuzzing errors. Defaults to
590    /// false.
591    pub detect_exits: Option<bool>,
592    /// If true, and ASan or LSan are available, try to detect memory leaks.
593    /// Defaults to false. Leak detection can be expensive, so it is recommended
594    /// to first develop a corpus that covers a reasonable amount of the code
595    /// under test before attempting to detect leaks.
596    pub detect_leaks: Option<bool>,
597    /// If non-zero, any run that takes longer than this duration will raise a
598    /// TIMEOUT error. Use 0 to disable the limit. Defaults to 20 minutes.
599    pub run_limit: Option<i64>,
600    /// If non-zero, any allocation over this size in bytes will raise a
601    /// BAD_MALLOC error. Use 0 to disable the limit. Defaults to 2 GB.
602    pub malloc_limit: Option<u64>,
603    /// If non-zero, any process that uses more than this amount of memory in
604    /// bytes will raise an OOM error. Use 0 to disable the limit. Defaults to
605    /// 2 GB.
606    pub oom_limit: Option<u64>,
607    /// If non-zero, purge the sanitizer's allocator quarantine and reclaim
608    /// memory periodically between runs after an interval of this many seconds.
609    /// Use 0 to disable allocator purging. Defaults to 1 second.
610    pub purge_interval: Option<i64>,
611    /// Exit code used by the instrumented process if it encounters a bad
612    /// allocation. Set this if the target already uses the default for another
613    /// reason. Defaults to 2000.
614    pub malloc_exitcode: Option<i32>,
615    /// Exit code used by the instrumented process if it encounters a sanitizer
616    /// error. Set this if the target already uses the default for another
617    /// reason. Defaults to 2001.
618    pub death_exitcode: Option<i32>,
619    /// Exit code used by the instrumented process if it encounters a leak. Set
620    /// this if the target already uses the default for another reason. Defaults
621    /// to 2002.
622    pub leak_exitcode: Option<i32>,
623    /// Exit code used by the instrumented process if it exceeds the OOM limit.
624    /// Set this if the target already uses the default for another reason.
625    /// Defaults to 2003.
626    pub oom_exitcode: Option<i32>,
627    /// If non-zero, the engine will periodically update any added monitors
628    /// after this duration. Defaults to 20 seconds.
629    pub pulse_interval: Option<i64>,
630    /// If true, allow a debugger like `zxdb` to be attached to an instrumented
631    /// process. This may interfere with the engine's ability to detect
632    /// exceptions and is not recommended when fuzzing. It can be useful when
633    /// reproducing an error with a known error-causing input. Defaults to
634    /// false.
635    pub debug: Option<bool>,
636    /// If true, include ClusterFuzz-compatible final statistics in the output
637    /// of a call to `fuchsia.fuzzer.Controller/WatchArtifact`.
638    pub print_final_stats: Option<bool>,
639    /// If true, also use data flow traces as part of the fuzzing coverage data.
640    /// See https://clang.llvm.org/docs/SanitizerCoverage.html#tracing-data-flow
641    /// for more details.
642    pub use_value_profile: Option<bool>,
643    /// Sanitizer options. See `SanitizerOptions`.
644    pub sanitizer_options: Option<SanitizerOptions>,
645    /// Output flags. See `OutputFlags`.
646    pub output_flags: Option<OutputFlags>,
647    #[doc(hidden)]
648    pub __source_breaking: fidl::marker::SourceBreaking,
649}
650
651impl fidl::Persistable for Options {}
652
653/// See `Controller.GetStatus`.
654#[derive(Clone, Debug, Default, PartialEq)]
655pub struct Status {
656    /// True if the fuzzer is working on a commands, e.g. it is fuzzing.
657    pub running: Option<bool>,
658    /// Number of runs performed so far.
659    pub runs: Option<u32>,
660    /// Time spent so far.
661    pub elapsed: Option<i64>,
662    /// Number of program edges covered so far.
663    pub covered_pcs: Option<u64>,
664    /// Number of opaque features encountered so far.
665    pub covered_features: Option<u64>,
666    /// Number of inputs in the "live" corpus.
667    pub corpus_num_inputs: Option<u64>,
668    /// Total size of the inputs in the "live" corpus.
669    pub corpus_total_size: Option<u64>,
670    /// Information about the instrumented processes attached to the engine.
671    pub process_stats: Option<Vec<ProcessStats>>,
672    #[doc(hidden)]
673    pub __source_breaking: fidl::marker::SourceBreaking,
674}
675
676impl fidl::Persistable for Status {}
677
678pub mod controller_ordinals {
679    pub const CONFIGURE: u64 = 0x35c8cba7fa3d32e4;
680    pub const GET_OPTIONS: u64 = 0x683d93332504b9cd;
681    pub const ADD_TO_CORPUS: u64 = 0x7bdf8336ab534cee;
682    pub const READ_CORPUS: u64 = 0x501279b430b34514;
683    pub const WRITE_DICTIONARY: u64 = 0x4ecfc1274fe4a70b;
684    pub const READ_DICTIONARY: u64 = 0x1be6724c87b51c37;
685    pub const ADD_MONITOR: u64 = 0x2efbf7d3dc21438e;
686    pub const FUZZ: u64 = 0x62fe3684ea23af62;
687    pub const TRY_ONE: u64 = 0x368dc762d8e16d46;
688    pub const MINIMIZE: u64 = 0x105a242ee0552794;
689    pub const CLEANSE: u64 = 0x6d7892f62735f3e0;
690    pub const MERGE: u64 = 0x3614e5c39413b5eb;
691    pub const GET_STATUS: u64 = 0x51db4975d93ce768;
692    pub const WATCH_ARTIFACT: u64 = 0x6cfca3730944a414;
693}
694
695pub mod controller_provider_ordinals {
696    pub const CONNECT: u64 = 0xc0325f0732defcb;
697    pub const STOP: u64 = 0x6cd6a98fc38bcbf2;
698}
699
700pub mod corpus_reader_ordinals {
701    pub const NEXT: u64 = 0x68d19e55ea635356;
702}
703
704pub mod coverage_data_collector_ordinals {
705    pub const INITIALIZE: u64 = 0x51d6f91d6f02d9d6;
706    pub const ADD_INLINE8BIT_COUNTERS: u64 = 0x75f87cadfc94d1be;
707}
708
709pub mod coverage_data_provider_ordinals {
710    pub const SET_OPTIONS: u64 = 0x4873c4a5c7683384;
711    pub const WATCH_COVERAGE_DATA: u64 = 0x34a92fc9c73bea5a;
712}
713
714pub mod manager_ordinals {
715    pub const CONNECT: u64 = 0x1620cd742a89f064;
716    pub const GET_OUTPUT: u64 = 0x755c28eecf20a88d;
717    pub const STOP: u64 = 0x27e53d86badd21f3;
718}
719
720pub mod monitor_ordinals {
721    pub const UPDATE: u64 = 0x7c773b93c1e6080f;
722}
723
724pub mod registrar_ordinals {
725    pub const REGISTER: u64 = 0x1716ac38e74b2840;
726}
727
728pub mod registry_ordinals {
729    pub const CONNECT: u64 = 0x5128cb31967a446f;
730    pub const DISCONNECT: u64 = 0x7bb4b7591146d4cb;
731}
732
733pub mod target_adapter_ordinals {
734    pub const GET_PARAMETERS: u64 = 0x5c7e40a47f753e3e;
735    pub const CONNECT: u64 = 0x7ea603a119866618;
736}
737
738mod internal {
739    use super::*;
740    unsafe impl fidl::encoding::TypeMarker for OutputFlags {
741        type Owned = Self;
742
743        #[inline(always)]
744        fn inline_align(_context: fidl::encoding::Context) -> usize {
745            4
746        }
747
748        #[inline(always)]
749        fn inline_size(_context: fidl::encoding::Context) -> usize {
750            4
751        }
752    }
753
754    impl fidl::encoding::ValueTypeMarker for OutputFlags {
755        type Borrowed<'a> = Self;
756        #[inline(always)]
757        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
758            *value
759        }
760    }
761
762    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for OutputFlags {
763        #[inline]
764        unsafe fn encode(
765            self,
766            encoder: &mut fidl::encoding::Encoder<'_, D>,
767            offset: usize,
768            _depth: fidl::encoding::Depth,
769        ) -> fidl::Result<()> {
770            encoder.debug_check_bounds::<Self>(offset);
771            if self.bits() & Self::all().bits() != self.bits() {
772                return Err(fidl::Error::InvalidBitsValue);
773            }
774            encoder.write_num(self.bits(), offset);
775            Ok(())
776        }
777    }
778
779    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OutputFlags {
780        #[inline(always)]
781        fn new_empty() -> Self {
782            Self::empty()
783        }
784
785        #[inline]
786        unsafe fn decode(
787            &mut self,
788            decoder: &mut fidl::encoding::Decoder<'_, D>,
789            offset: usize,
790            _depth: fidl::encoding::Depth,
791        ) -> fidl::Result<()> {
792            decoder.debug_check_bounds::<Self>(offset);
793            let prim = decoder.read_num::<u32>(offset);
794            *self = Self::from_bits(prim).ok_or(fidl::Error::InvalidBitsValue)?;
795            Ok(())
796        }
797    }
798    unsafe impl fidl::encoding::TypeMarker for Corpus {
799        type Owned = Self;
800
801        #[inline(always)]
802        fn inline_align(_context: fidl::encoding::Context) -> usize {
803            std::mem::align_of::<u8>()
804        }
805
806        #[inline(always)]
807        fn inline_size(_context: fidl::encoding::Context) -> usize {
808            std::mem::size_of::<u8>()
809        }
810
811        #[inline(always)]
812        fn encode_is_copy() -> bool {
813            false
814        }
815
816        #[inline(always)]
817        fn decode_is_copy() -> bool {
818            false
819        }
820    }
821
822    impl fidl::encoding::ValueTypeMarker for Corpus {
823        type Borrowed<'a> = Self;
824        #[inline(always)]
825        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
826            *value
827        }
828    }
829
830    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Corpus {
831        #[inline]
832        unsafe fn encode(
833            self,
834            encoder: &mut fidl::encoding::Encoder<'_, D>,
835            offset: usize,
836            _depth: fidl::encoding::Depth,
837        ) -> fidl::Result<()> {
838            encoder.debug_check_bounds::<Self>(offset);
839            encoder.write_num(self.into_primitive(), offset);
840            Ok(())
841        }
842    }
843
844    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Corpus {
845        #[inline(always)]
846        fn new_empty() -> Self {
847            Self::unknown()
848        }
849
850        #[inline]
851        unsafe fn decode(
852            &mut self,
853            decoder: &mut fidl::encoding::Decoder<'_, D>,
854            offset: usize,
855            _depth: fidl::encoding::Depth,
856        ) -> fidl::Result<()> {
857            decoder.debug_check_bounds::<Self>(offset);
858            let prim = decoder.read_num::<u8>(offset);
859
860            *self = Self::from_primitive_allow_unknown(prim);
861            Ok(())
862        }
863    }
864    unsafe impl fidl::encoding::TypeMarker for Result_ {
865        type Owned = Self;
866
867        #[inline(always)]
868        fn inline_align(_context: fidl::encoding::Context) -> usize {
869            std::mem::align_of::<u32>()
870        }
871
872        #[inline(always)]
873        fn inline_size(_context: fidl::encoding::Context) -> usize {
874            std::mem::size_of::<u32>()
875        }
876
877        #[inline(always)]
878        fn encode_is_copy() -> bool {
879            false
880        }
881
882        #[inline(always)]
883        fn decode_is_copy() -> bool {
884            false
885        }
886    }
887
888    impl fidl::encoding::ValueTypeMarker for Result_ {
889        type Borrowed<'a> = Self;
890        #[inline(always)]
891        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
892            *value
893        }
894    }
895
896    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Result_ {
897        #[inline]
898        unsafe fn encode(
899            self,
900            encoder: &mut fidl::encoding::Encoder<'_, D>,
901            offset: usize,
902            _depth: fidl::encoding::Depth,
903        ) -> fidl::Result<()> {
904            encoder.debug_check_bounds::<Self>(offset);
905            encoder.write_num(self.into_primitive(), offset);
906            Ok(())
907        }
908    }
909
910    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Result_ {
911        #[inline(always)]
912        fn new_empty() -> Self {
913            Self::unknown()
914        }
915
916        #[inline]
917        unsafe fn decode(
918            &mut self,
919            decoder: &mut fidl::encoding::Decoder<'_, D>,
920            offset: usize,
921            _depth: fidl::encoding::Depth,
922        ) -> fidl::Result<()> {
923            decoder.debug_check_bounds::<Self>(offset);
924            let prim = decoder.read_num::<u32>(offset);
925
926            *self = Self::from_primitive_allow_unknown(prim);
927            Ok(())
928        }
929    }
930    unsafe impl fidl::encoding::TypeMarker for TestOutput {
931        type Owned = Self;
932
933        #[inline(always)]
934        fn inline_align(_context: fidl::encoding::Context) -> usize {
935            std::mem::align_of::<u32>()
936        }
937
938        #[inline(always)]
939        fn inline_size(_context: fidl::encoding::Context) -> usize {
940            std::mem::size_of::<u32>()
941        }
942
943        #[inline(always)]
944        fn encode_is_copy() -> bool {
945            false
946        }
947
948        #[inline(always)]
949        fn decode_is_copy() -> bool {
950            false
951        }
952    }
953
954    impl fidl::encoding::ValueTypeMarker for TestOutput {
955        type Borrowed<'a> = Self;
956        #[inline(always)]
957        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
958            *value
959        }
960    }
961
962    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for TestOutput {
963        #[inline]
964        unsafe fn encode(
965            self,
966            encoder: &mut fidl::encoding::Encoder<'_, D>,
967            offset: usize,
968            _depth: fidl::encoding::Depth,
969        ) -> fidl::Result<()> {
970            encoder.debug_check_bounds::<Self>(offset);
971            encoder.write_num(self.into_primitive(), offset);
972            Ok(())
973        }
974    }
975
976    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TestOutput {
977        #[inline(always)]
978        fn new_empty() -> Self {
979            Self::unknown()
980        }
981
982        #[inline]
983        unsafe fn decode(
984            &mut self,
985            decoder: &mut fidl::encoding::Decoder<'_, D>,
986            offset: usize,
987            _depth: fidl::encoding::Depth,
988        ) -> fidl::Result<()> {
989            decoder.debug_check_bounds::<Self>(offset);
990            let prim = decoder.read_num::<u32>(offset);
991
992            *self = Self::from_primitive_allow_unknown(prim);
993            Ok(())
994        }
995    }
996    unsafe impl fidl::encoding::TypeMarker for UpdateReason {
997        type Owned = Self;
998
999        #[inline(always)]
1000        fn inline_align(_context: fidl::encoding::Context) -> usize {
1001            std::mem::align_of::<u8>()
1002        }
1003
1004        #[inline(always)]
1005        fn inline_size(_context: fidl::encoding::Context) -> usize {
1006            std::mem::size_of::<u8>()
1007        }
1008
1009        #[inline(always)]
1010        fn encode_is_copy() -> bool {
1011            false
1012        }
1013
1014        #[inline(always)]
1015        fn decode_is_copy() -> bool {
1016            false
1017        }
1018    }
1019
1020    impl fidl::encoding::ValueTypeMarker for UpdateReason {
1021        type Borrowed<'a> = Self;
1022        #[inline(always)]
1023        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1024            *value
1025        }
1026    }
1027
1028    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for UpdateReason {
1029        #[inline]
1030        unsafe fn encode(
1031            self,
1032            encoder: &mut fidl::encoding::Encoder<'_, D>,
1033            offset: usize,
1034            _depth: fidl::encoding::Depth,
1035        ) -> fidl::Result<()> {
1036            encoder.debug_check_bounds::<Self>(offset);
1037            encoder.write_num(self.into_primitive(), offset);
1038            Ok(())
1039        }
1040    }
1041
1042    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UpdateReason {
1043        #[inline(always)]
1044        fn new_empty() -> Self {
1045            Self::unknown()
1046        }
1047
1048        #[inline]
1049        unsafe fn decode(
1050            &mut self,
1051            decoder: &mut fidl::encoding::Decoder<'_, D>,
1052            offset: usize,
1053            _depth: fidl::encoding::Depth,
1054        ) -> fidl::Result<()> {
1055            decoder.debug_check_bounds::<Self>(offset);
1056            let prim = decoder.read_num::<u8>(offset);
1057
1058            *self = Self::from_primitive_allow_unknown(prim);
1059            Ok(())
1060        }
1061    }
1062
1063    impl fidl::encoding::ValueTypeMarker for ControllerConfigureRequest {
1064        type Borrowed<'a> = &'a Self;
1065        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1066            value
1067        }
1068    }
1069
1070    unsafe impl fidl::encoding::TypeMarker for ControllerConfigureRequest {
1071        type Owned = Self;
1072
1073        #[inline(always)]
1074        fn inline_align(_context: fidl::encoding::Context) -> usize {
1075            8
1076        }
1077
1078        #[inline(always)]
1079        fn inline_size(_context: fidl::encoding::Context) -> usize {
1080            16
1081        }
1082    }
1083
1084    unsafe impl<D: fidl::encoding::ResourceDialect>
1085        fidl::encoding::Encode<ControllerConfigureRequest, D> for &ControllerConfigureRequest
1086    {
1087        #[inline]
1088        unsafe fn encode(
1089            self,
1090            encoder: &mut fidl::encoding::Encoder<'_, D>,
1091            offset: usize,
1092            _depth: fidl::encoding::Depth,
1093        ) -> fidl::Result<()> {
1094            encoder.debug_check_bounds::<ControllerConfigureRequest>(offset);
1095            // Delegate to tuple encoding.
1096            fidl::encoding::Encode::<ControllerConfigureRequest, D>::encode(
1097                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1098                encoder,
1099                offset,
1100                _depth,
1101            )
1102        }
1103    }
1104    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1105        fidl::encoding::Encode<ControllerConfigureRequest, D> for (T0,)
1106    {
1107        #[inline]
1108        unsafe fn encode(
1109            self,
1110            encoder: &mut fidl::encoding::Encoder<'_, D>,
1111            offset: usize,
1112            depth: fidl::encoding::Depth,
1113        ) -> fidl::Result<()> {
1114            encoder.debug_check_bounds::<ControllerConfigureRequest>(offset);
1115            // Zero out padding regions. There's no need to apply masks
1116            // because the unmasked parts will be overwritten by fields.
1117            // Write the fields.
1118            self.0.encode(encoder, offset + 0, depth)?;
1119            Ok(())
1120        }
1121    }
1122
1123    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1124        for ControllerConfigureRequest
1125    {
1126        #[inline(always)]
1127        fn new_empty() -> Self {
1128            Self { options: fidl::new_empty!(Options, D) }
1129        }
1130
1131        #[inline]
1132        unsafe fn decode(
1133            &mut self,
1134            decoder: &mut fidl::encoding::Decoder<'_, D>,
1135            offset: usize,
1136            _depth: fidl::encoding::Depth,
1137        ) -> fidl::Result<()> {
1138            decoder.debug_check_bounds::<Self>(offset);
1139            // Verify that padding bytes are zero.
1140            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1141            Ok(())
1142        }
1143    }
1144
1145    impl fidl::encoding::ValueTypeMarker for ControllerGetOptionsResponse {
1146        type Borrowed<'a> = &'a Self;
1147        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1148            value
1149        }
1150    }
1151
1152    unsafe impl fidl::encoding::TypeMarker for ControllerGetOptionsResponse {
1153        type Owned = Self;
1154
1155        #[inline(always)]
1156        fn inline_align(_context: fidl::encoding::Context) -> usize {
1157            8
1158        }
1159
1160        #[inline(always)]
1161        fn inline_size(_context: fidl::encoding::Context) -> usize {
1162            16
1163        }
1164    }
1165
1166    unsafe impl<D: fidl::encoding::ResourceDialect>
1167        fidl::encoding::Encode<ControllerGetOptionsResponse, D> for &ControllerGetOptionsResponse
1168    {
1169        #[inline]
1170        unsafe fn encode(
1171            self,
1172            encoder: &mut fidl::encoding::Encoder<'_, D>,
1173            offset: usize,
1174            _depth: fidl::encoding::Depth,
1175        ) -> fidl::Result<()> {
1176            encoder.debug_check_bounds::<ControllerGetOptionsResponse>(offset);
1177            // Delegate to tuple encoding.
1178            fidl::encoding::Encode::<ControllerGetOptionsResponse, D>::encode(
1179                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1180                encoder,
1181                offset,
1182                _depth,
1183            )
1184        }
1185    }
1186    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1187        fidl::encoding::Encode<ControllerGetOptionsResponse, D> for (T0,)
1188    {
1189        #[inline]
1190        unsafe fn encode(
1191            self,
1192            encoder: &mut fidl::encoding::Encoder<'_, D>,
1193            offset: usize,
1194            depth: fidl::encoding::Depth,
1195        ) -> fidl::Result<()> {
1196            encoder.debug_check_bounds::<ControllerGetOptionsResponse>(offset);
1197            // Zero out padding regions. There's no need to apply masks
1198            // because the unmasked parts will be overwritten by fields.
1199            // Write the fields.
1200            self.0.encode(encoder, offset + 0, depth)?;
1201            Ok(())
1202        }
1203    }
1204
1205    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1206        for ControllerGetOptionsResponse
1207    {
1208        #[inline(always)]
1209        fn new_empty() -> Self {
1210            Self { options: fidl::new_empty!(Options, D) }
1211        }
1212
1213        #[inline]
1214        unsafe fn decode(
1215            &mut self,
1216            decoder: &mut fidl::encoding::Decoder<'_, D>,
1217            offset: usize,
1218            _depth: fidl::encoding::Depth,
1219        ) -> fidl::Result<()> {
1220            decoder.debug_check_bounds::<Self>(offset);
1221            // Verify that padding bytes are zero.
1222            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1223            Ok(())
1224        }
1225    }
1226
1227    impl fidl::encoding::ValueTypeMarker for ControllerGetStatusResponse {
1228        type Borrowed<'a> = &'a Self;
1229        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1230            value
1231        }
1232    }
1233
1234    unsafe impl fidl::encoding::TypeMarker for ControllerGetStatusResponse {
1235        type Owned = Self;
1236
1237        #[inline(always)]
1238        fn inline_align(_context: fidl::encoding::Context) -> usize {
1239            8
1240        }
1241
1242        #[inline(always)]
1243        fn inline_size(_context: fidl::encoding::Context) -> usize {
1244            16
1245        }
1246    }
1247
1248    unsafe impl<D: fidl::encoding::ResourceDialect>
1249        fidl::encoding::Encode<ControllerGetStatusResponse, D> for &ControllerGetStatusResponse
1250    {
1251        #[inline]
1252        unsafe fn encode(
1253            self,
1254            encoder: &mut fidl::encoding::Encoder<'_, D>,
1255            offset: usize,
1256            _depth: fidl::encoding::Depth,
1257        ) -> fidl::Result<()> {
1258            encoder.debug_check_bounds::<ControllerGetStatusResponse>(offset);
1259            // Delegate to tuple encoding.
1260            fidl::encoding::Encode::<ControllerGetStatusResponse, D>::encode(
1261                (<Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
1262                encoder,
1263                offset,
1264                _depth,
1265            )
1266        }
1267    }
1268    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Status, D>>
1269        fidl::encoding::Encode<ControllerGetStatusResponse, D> for (T0,)
1270    {
1271        #[inline]
1272        unsafe fn encode(
1273            self,
1274            encoder: &mut fidl::encoding::Encoder<'_, D>,
1275            offset: usize,
1276            depth: fidl::encoding::Depth,
1277        ) -> fidl::Result<()> {
1278            encoder.debug_check_bounds::<ControllerGetStatusResponse>(offset);
1279            // Zero out padding regions. There's no need to apply masks
1280            // because the unmasked parts will be overwritten by fields.
1281            // Write the fields.
1282            self.0.encode(encoder, offset + 0, depth)?;
1283            Ok(())
1284        }
1285    }
1286
1287    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1288        for ControllerGetStatusResponse
1289    {
1290        #[inline(always)]
1291        fn new_empty() -> Self {
1292            Self { status: fidl::new_empty!(Status, D) }
1293        }
1294
1295        #[inline]
1296        unsafe fn decode(
1297            &mut self,
1298            decoder: &mut fidl::encoding::Decoder<'_, D>,
1299            offset: usize,
1300            _depth: fidl::encoding::Depth,
1301        ) -> fidl::Result<()> {
1302            decoder.debug_check_bounds::<Self>(offset);
1303            // Verify that padding bytes are zero.
1304            fidl::decode!(Status, D, &mut self.status, decoder, offset + 0, _depth)?;
1305            Ok(())
1306        }
1307    }
1308
1309    impl fidl::encoding::ValueTypeMarker for CorpusReaderNextResponse {
1310        type Borrowed<'a> = &'a Self;
1311        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1312            value
1313        }
1314    }
1315
1316    unsafe impl fidl::encoding::TypeMarker for CorpusReaderNextResponse {
1317        type Owned = Self;
1318
1319        #[inline(always)]
1320        fn inline_align(_context: fidl::encoding::Context) -> usize {
1321            4
1322        }
1323
1324        #[inline(always)]
1325        fn inline_size(_context: fidl::encoding::Context) -> usize {
1326            4
1327        }
1328        #[inline(always)]
1329        fn encode_is_copy() -> bool {
1330            true
1331        }
1332
1333        #[inline(always)]
1334        fn decode_is_copy() -> bool {
1335            true
1336        }
1337    }
1338
1339    unsafe impl<D: fidl::encoding::ResourceDialect>
1340        fidl::encoding::Encode<CorpusReaderNextResponse, D> for &CorpusReaderNextResponse
1341    {
1342        #[inline]
1343        unsafe fn encode(
1344            self,
1345            encoder: &mut fidl::encoding::Encoder<'_, D>,
1346            offset: usize,
1347            _depth: fidl::encoding::Depth,
1348        ) -> fidl::Result<()> {
1349            encoder.debug_check_bounds::<CorpusReaderNextResponse>(offset);
1350            unsafe {
1351                // Copy the object into the buffer.
1352                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1353                (buf_ptr as *mut CorpusReaderNextResponse)
1354                    .write_unaligned((self as *const CorpusReaderNextResponse).read());
1355                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1356                // done second because the memcpy will write garbage to these bytes.
1357            }
1358            Ok(())
1359        }
1360    }
1361    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
1362        fidl::encoding::Encode<CorpusReaderNextResponse, D> for (T0,)
1363    {
1364        #[inline]
1365        unsafe fn encode(
1366            self,
1367            encoder: &mut fidl::encoding::Encoder<'_, D>,
1368            offset: usize,
1369            depth: fidl::encoding::Depth,
1370        ) -> fidl::Result<()> {
1371            encoder.debug_check_bounds::<CorpusReaderNextResponse>(offset);
1372            // Zero out padding regions. There's no need to apply masks
1373            // because the unmasked parts will be overwritten by fields.
1374            // Write the fields.
1375            self.0.encode(encoder, offset + 0, depth)?;
1376            Ok(())
1377        }
1378    }
1379
1380    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1381        for CorpusReaderNextResponse
1382    {
1383        #[inline(always)]
1384        fn new_empty() -> Self {
1385            Self { result: fidl::new_empty!(i32, D) }
1386        }
1387
1388        #[inline]
1389        unsafe fn decode(
1390            &mut self,
1391            decoder: &mut fidl::encoding::Decoder<'_, D>,
1392            offset: usize,
1393            _depth: fidl::encoding::Depth,
1394        ) -> fidl::Result<()> {
1395            decoder.debug_check_bounds::<Self>(offset);
1396            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1397            // Verify that padding bytes are zero.
1398            // Copy from the buffer into the object.
1399            unsafe {
1400                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1401            }
1402            Ok(())
1403        }
1404    }
1405
1406    impl fidl::encoding::ValueTypeMarker for CoverageDataCollectorInitializeResponse {
1407        type Borrowed<'a> = &'a Self;
1408        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1409            value
1410        }
1411    }
1412
1413    unsafe impl fidl::encoding::TypeMarker for CoverageDataCollectorInitializeResponse {
1414        type Owned = Self;
1415
1416        #[inline(always)]
1417        fn inline_align(_context: fidl::encoding::Context) -> usize {
1418            8
1419        }
1420
1421        #[inline(always)]
1422        fn inline_size(_context: fidl::encoding::Context) -> usize {
1423            16
1424        }
1425    }
1426
1427    unsafe impl<D: fidl::encoding::ResourceDialect>
1428        fidl::encoding::Encode<CoverageDataCollectorInitializeResponse, D>
1429        for &CoverageDataCollectorInitializeResponse
1430    {
1431        #[inline]
1432        unsafe fn encode(
1433            self,
1434            encoder: &mut fidl::encoding::Encoder<'_, D>,
1435            offset: usize,
1436            _depth: fidl::encoding::Depth,
1437        ) -> fidl::Result<()> {
1438            encoder.debug_check_bounds::<CoverageDataCollectorInitializeResponse>(offset);
1439            // Delegate to tuple encoding.
1440            fidl::encoding::Encode::<CoverageDataCollectorInitializeResponse, D>::encode(
1441                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1442                encoder,
1443                offset,
1444                _depth,
1445            )
1446        }
1447    }
1448    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1449        fidl::encoding::Encode<CoverageDataCollectorInitializeResponse, D> for (T0,)
1450    {
1451        #[inline]
1452        unsafe fn encode(
1453            self,
1454            encoder: &mut fidl::encoding::Encoder<'_, D>,
1455            offset: usize,
1456            depth: fidl::encoding::Depth,
1457        ) -> fidl::Result<()> {
1458            encoder.debug_check_bounds::<CoverageDataCollectorInitializeResponse>(offset);
1459            // Zero out padding regions. There's no need to apply masks
1460            // because the unmasked parts will be overwritten by fields.
1461            // Write the fields.
1462            self.0.encode(encoder, offset + 0, depth)?;
1463            Ok(())
1464        }
1465    }
1466
1467    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1468        for CoverageDataCollectorInitializeResponse
1469    {
1470        #[inline(always)]
1471        fn new_empty() -> Self {
1472            Self { options: fidl::new_empty!(Options, D) }
1473        }
1474
1475        #[inline]
1476        unsafe fn decode(
1477            &mut self,
1478            decoder: &mut fidl::encoding::Decoder<'_, D>,
1479            offset: usize,
1480            _depth: fidl::encoding::Depth,
1481        ) -> fidl::Result<()> {
1482            decoder.debug_check_bounds::<Self>(offset);
1483            // Verify that padding bytes are zero.
1484            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1485            Ok(())
1486        }
1487    }
1488
1489    impl fidl::encoding::ValueTypeMarker for CoverageDataProviderSetOptionsRequest {
1490        type Borrowed<'a> = &'a Self;
1491        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1492            value
1493        }
1494    }
1495
1496    unsafe impl fidl::encoding::TypeMarker for CoverageDataProviderSetOptionsRequest {
1497        type Owned = Self;
1498
1499        #[inline(always)]
1500        fn inline_align(_context: fidl::encoding::Context) -> usize {
1501            8
1502        }
1503
1504        #[inline(always)]
1505        fn inline_size(_context: fidl::encoding::Context) -> usize {
1506            16
1507        }
1508    }
1509
1510    unsafe impl<D: fidl::encoding::ResourceDialect>
1511        fidl::encoding::Encode<CoverageDataProviderSetOptionsRequest, D>
1512        for &CoverageDataProviderSetOptionsRequest
1513    {
1514        #[inline]
1515        unsafe fn encode(
1516            self,
1517            encoder: &mut fidl::encoding::Encoder<'_, D>,
1518            offset: usize,
1519            _depth: fidl::encoding::Depth,
1520        ) -> fidl::Result<()> {
1521            encoder.debug_check_bounds::<CoverageDataProviderSetOptionsRequest>(offset);
1522            // Delegate to tuple encoding.
1523            fidl::encoding::Encode::<CoverageDataProviderSetOptionsRequest, D>::encode(
1524                (<Options as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1525                encoder,
1526                offset,
1527                _depth,
1528            )
1529        }
1530    }
1531    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Options, D>>
1532        fidl::encoding::Encode<CoverageDataProviderSetOptionsRequest, D> for (T0,)
1533    {
1534        #[inline]
1535        unsafe fn encode(
1536            self,
1537            encoder: &mut fidl::encoding::Encoder<'_, D>,
1538            offset: usize,
1539            depth: fidl::encoding::Depth,
1540        ) -> fidl::Result<()> {
1541            encoder.debug_check_bounds::<CoverageDataProviderSetOptionsRequest>(offset);
1542            // Zero out padding regions. There's no need to apply masks
1543            // because the unmasked parts will be overwritten by fields.
1544            // Write the fields.
1545            self.0.encode(encoder, offset + 0, depth)?;
1546            Ok(())
1547        }
1548    }
1549
1550    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1551        for CoverageDataProviderSetOptionsRequest
1552    {
1553        #[inline(always)]
1554        fn new_empty() -> Self {
1555            Self { options: fidl::new_empty!(Options, D) }
1556        }
1557
1558        #[inline]
1559        unsafe fn decode(
1560            &mut self,
1561            decoder: &mut fidl::encoding::Decoder<'_, D>,
1562            offset: usize,
1563            _depth: fidl::encoding::Depth,
1564        ) -> fidl::Result<()> {
1565            decoder.debug_check_bounds::<Self>(offset);
1566            // Verify that padding bytes are zero.
1567            fidl::decode!(Options, D, &mut self.options, decoder, offset + 0, _depth)?;
1568            Ok(())
1569        }
1570    }
1571
1572    impl fidl::encoding::ValueTypeMarker for ManagerStopRequest {
1573        type Borrowed<'a> = &'a Self;
1574        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1575            value
1576        }
1577    }
1578
1579    unsafe impl fidl::encoding::TypeMarker for ManagerStopRequest {
1580        type Owned = Self;
1581
1582        #[inline(always)]
1583        fn inline_align(_context: fidl::encoding::Context) -> usize {
1584            8
1585        }
1586
1587        #[inline(always)]
1588        fn inline_size(_context: fidl::encoding::Context) -> usize {
1589            16
1590        }
1591    }
1592
1593    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ManagerStopRequest, D>
1594        for &ManagerStopRequest
1595    {
1596        #[inline]
1597        unsafe fn encode(
1598            self,
1599            encoder: &mut fidl::encoding::Encoder<'_, D>,
1600            offset: usize,
1601            _depth: fidl::encoding::Depth,
1602        ) -> fidl::Result<()> {
1603            encoder.debug_check_bounds::<ManagerStopRequest>(offset);
1604            // Delegate to tuple encoding.
1605            fidl::encoding::Encode::<ManagerStopRequest, D>::encode(
1606                (<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(
1607                    &self.fuzzer_url,
1608                ),),
1609                encoder,
1610                offset,
1611                _depth,
1612            )
1613        }
1614    }
1615    unsafe impl<
1616        D: fidl::encoding::ResourceDialect,
1617        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1618    > fidl::encoding::Encode<ManagerStopRequest, D> for (T0,)
1619    {
1620        #[inline]
1621        unsafe fn encode(
1622            self,
1623            encoder: &mut fidl::encoding::Encoder<'_, D>,
1624            offset: usize,
1625            depth: fidl::encoding::Depth,
1626        ) -> fidl::Result<()> {
1627            encoder.debug_check_bounds::<ManagerStopRequest>(offset);
1628            // Zero out padding regions. There's no need to apply masks
1629            // because the unmasked parts will be overwritten by fields.
1630            // Write the fields.
1631            self.0.encode(encoder, offset + 0, depth)?;
1632            Ok(())
1633        }
1634    }
1635
1636    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ManagerStopRequest {
1637        #[inline(always)]
1638        fn new_empty() -> Self {
1639            Self { fuzzer_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D) }
1640        }
1641
1642        #[inline]
1643        unsafe fn decode(
1644            &mut self,
1645            decoder: &mut fidl::encoding::Decoder<'_, D>,
1646            offset: usize,
1647            _depth: fidl::encoding::Depth,
1648        ) -> fidl::Result<()> {
1649            decoder.debug_check_bounds::<Self>(offset);
1650            // Verify that padding bytes are zero.
1651            fidl::decode!(
1652                fidl::encoding::BoundedString<4096>,
1653                D,
1654                &mut self.fuzzer_url,
1655                decoder,
1656                offset + 0,
1657                _depth
1658            )?;
1659            Ok(())
1660        }
1661    }
1662
1663    impl fidl::encoding::ValueTypeMarker for MonitorUpdateRequest {
1664        type Borrowed<'a> = &'a Self;
1665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1666            value
1667        }
1668    }
1669
1670    unsafe impl fidl::encoding::TypeMarker for MonitorUpdateRequest {
1671        type Owned = Self;
1672
1673        #[inline(always)]
1674        fn inline_align(_context: fidl::encoding::Context) -> usize {
1675            8
1676        }
1677
1678        #[inline(always)]
1679        fn inline_size(_context: fidl::encoding::Context) -> usize {
1680            24
1681        }
1682    }
1683
1684    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MonitorUpdateRequest, D>
1685        for &MonitorUpdateRequest
1686    {
1687        #[inline]
1688        unsafe fn encode(
1689            self,
1690            encoder: &mut fidl::encoding::Encoder<'_, D>,
1691            offset: usize,
1692            _depth: fidl::encoding::Depth,
1693        ) -> fidl::Result<()> {
1694            encoder.debug_check_bounds::<MonitorUpdateRequest>(offset);
1695            // Delegate to tuple encoding.
1696            fidl::encoding::Encode::<MonitorUpdateRequest, D>::encode(
1697                (
1698                    <UpdateReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),
1699                    <Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
1700                ),
1701                encoder,
1702                offset,
1703                _depth,
1704            )
1705        }
1706    }
1707    unsafe impl<
1708        D: fidl::encoding::ResourceDialect,
1709        T0: fidl::encoding::Encode<UpdateReason, D>,
1710        T1: fidl::encoding::Encode<Status, D>,
1711    > fidl::encoding::Encode<MonitorUpdateRequest, D> for (T0, T1)
1712    {
1713        #[inline]
1714        unsafe fn encode(
1715            self,
1716            encoder: &mut fidl::encoding::Encoder<'_, D>,
1717            offset: usize,
1718            depth: fidl::encoding::Depth,
1719        ) -> fidl::Result<()> {
1720            encoder.debug_check_bounds::<MonitorUpdateRequest>(offset);
1721            // Zero out padding regions. There's no need to apply masks
1722            // because the unmasked parts will be overwritten by fields.
1723            unsafe {
1724                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1725                (ptr as *mut u64).write_unaligned(0);
1726            }
1727            // Write the fields.
1728            self.0.encode(encoder, offset + 0, depth)?;
1729            self.1.encode(encoder, offset + 8, depth)?;
1730            Ok(())
1731        }
1732    }
1733
1734    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MonitorUpdateRequest {
1735        #[inline(always)]
1736        fn new_empty() -> Self {
1737            Self { reason: fidl::new_empty!(UpdateReason, D), status: fidl::new_empty!(Status, D) }
1738        }
1739
1740        #[inline]
1741        unsafe fn decode(
1742            &mut self,
1743            decoder: &mut fidl::encoding::Decoder<'_, D>,
1744            offset: usize,
1745            _depth: fidl::encoding::Depth,
1746        ) -> fidl::Result<()> {
1747            decoder.debug_check_bounds::<Self>(offset);
1748            // Verify that padding bytes are zero.
1749            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1750            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1751            let mask = 0xffffffffffffff00u64;
1752            let maskedval = padval & mask;
1753            if maskedval != 0 {
1754                return Err(fidl::Error::NonZeroPadding {
1755                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1756                });
1757            }
1758            fidl::decode!(UpdateReason, D, &mut self.reason, decoder, offset + 0, _depth)?;
1759            fidl::decode!(Status, D, &mut self.status, decoder, offset + 8, _depth)?;
1760            Ok(())
1761        }
1762    }
1763
1764    impl fidl::encoding::ValueTypeMarker for ProcessStats {
1765        type Borrowed<'a> = &'a Self;
1766        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1767            value
1768        }
1769    }
1770
1771    unsafe impl fidl::encoding::TypeMarker for ProcessStats {
1772        type Owned = Self;
1773
1774        #[inline(always)]
1775        fn inline_align(_context: fidl::encoding::Context) -> usize {
1776            8
1777        }
1778
1779        #[inline(always)]
1780        fn inline_size(_context: fidl::encoding::Context) -> usize {
1781            72
1782        }
1783        #[inline(always)]
1784        fn encode_is_copy() -> bool {
1785            true
1786        }
1787
1788        #[inline(always)]
1789        fn decode_is_copy() -> bool {
1790            true
1791        }
1792    }
1793
1794    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProcessStats, D>
1795        for &ProcessStats
1796    {
1797        #[inline]
1798        unsafe fn encode(
1799            self,
1800            encoder: &mut fidl::encoding::Encoder<'_, D>,
1801            offset: usize,
1802            _depth: fidl::encoding::Depth,
1803        ) -> fidl::Result<()> {
1804            encoder.debug_check_bounds::<ProcessStats>(offset);
1805            unsafe {
1806                // Copy the object into the buffer.
1807                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1808                (buf_ptr as *mut ProcessStats)
1809                    .write_unaligned((self as *const ProcessStats).read());
1810                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1811                // done second because the memcpy will write garbage to these bytes.
1812            }
1813            Ok(())
1814        }
1815    }
1816    unsafe impl<
1817        D: fidl::encoding::ResourceDialect,
1818        T0: fidl::encoding::Encode<u64, D>,
1819        T1: fidl::encoding::Encode<u64, D>,
1820        T2: fidl::encoding::Encode<u64, D>,
1821        T3: fidl::encoding::Encode<u64, D>,
1822        T4: fidl::encoding::Encode<u64, D>,
1823        T5: fidl::encoding::Encode<i64, D>,
1824        T6: fidl::encoding::Encode<i64, D>,
1825        T7: fidl::encoding::Encode<i64, D>,
1826        T8: fidl::encoding::Encode<i64, D>,
1827    > fidl::encoding::Encode<ProcessStats, D> for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
1828    {
1829        #[inline]
1830        unsafe fn encode(
1831            self,
1832            encoder: &mut fidl::encoding::Encoder<'_, D>,
1833            offset: usize,
1834            depth: fidl::encoding::Depth,
1835        ) -> fidl::Result<()> {
1836            encoder.debug_check_bounds::<ProcessStats>(offset);
1837            // Zero out padding regions. There's no need to apply masks
1838            // because the unmasked parts will be overwritten by fields.
1839            // Write the fields.
1840            self.0.encode(encoder, offset + 0, depth)?;
1841            self.1.encode(encoder, offset + 8, depth)?;
1842            self.2.encode(encoder, offset + 16, depth)?;
1843            self.3.encode(encoder, offset + 24, depth)?;
1844            self.4.encode(encoder, offset + 32, depth)?;
1845            self.5.encode(encoder, offset + 40, depth)?;
1846            self.6.encode(encoder, offset + 48, depth)?;
1847            self.7.encode(encoder, offset + 56, depth)?;
1848            self.8.encode(encoder, offset + 64, depth)?;
1849            Ok(())
1850        }
1851    }
1852
1853    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProcessStats {
1854        #[inline(always)]
1855        fn new_empty() -> Self {
1856            Self {
1857                koid: fidl::new_empty!(u64, D),
1858                mem_mapped_bytes: fidl::new_empty!(u64, D),
1859                mem_private_bytes: fidl::new_empty!(u64, D),
1860                mem_shared_bytes: fidl::new_empty!(u64, D),
1861                mem_scaled_shared_bytes: fidl::new_empty!(u64, D),
1862                cpu_time: fidl::new_empty!(i64, D),
1863                queue_time: fidl::new_empty!(i64, D),
1864                page_fault_time: fidl::new_empty!(i64, D),
1865                lock_contention_time: fidl::new_empty!(i64, D),
1866            }
1867        }
1868
1869        #[inline]
1870        unsafe fn decode(
1871            &mut self,
1872            decoder: &mut fidl::encoding::Decoder<'_, D>,
1873            offset: usize,
1874            _depth: fidl::encoding::Depth,
1875        ) -> fidl::Result<()> {
1876            decoder.debug_check_bounds::<Self>(offset);
1877            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1878            // Verify that padding bytes are zero.
1879            // Copy from the buffer into the object.
1880            unsafe {
1881                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 72);
1882            }
1883            Ok(())
1884        }
1885    }
1886
1887    impl fidl::encoding::ValueTypeMarker for RegistryDisconnectRequest {
1888        type Borrowed<'a> = &'a Self;
1889        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1890            value
1891        }
1892    }
1893
1894    unsafe impl fidl::encoding::TypeMarker for RegistryDisconnectRequest {
1895        type Owned = Self;
1896
1897        #[inline(always)]
1898        fn inline_align(_context: fidl::encoding::Context) -> usize {
1899            8
1900        }
1901
1902        #[inline(always)]
1903        fn inline_size(_context: fidl::encoding::Context) -> usize {
1904            16
1905        }
1906    }
1907
1908    unsafe impl<D: fidl::encoding::ResourceDialect>
1909        fidl::encoding::Encode<RegistryDisconnectRequest, D> for &RegistryDisconnectRequest
1910    {
1911        #[inline]
1912        unsafe fn encode(
1913            self,
1914            encoder: &mut fidl::encoding::Encoder<'_, D>,
1915            offset: usize,
1916            _depth: fidl::encoding::Depth,
1917        ) -> fidl::Result<()> {
1918            encoder.debug_check_bounds::<RegistryDisconnectRequest>(offset);
1919            // Delegate to tuple encoding.
1920            fidl::encoding::Encode::<RegistryDisconnectRequest, D>::encode(
1921                (<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(
1922                    &self.fuzzer_url,
1923                ),),
1924                encoder,
1925                offset,
1926                _depth,
1927            )
1928        }
1929    }
1930    unsafe impl<
1931        D: fidl::encoding::ResourceDialect,
1932        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1933    > fidl::encoding::Encode<RegistryDisconnectRequest, D> for (T0,)
1934    {
1935        #[inline]
1936        unsafe fn encode(
1937            self,
1938            encoder: &mut fidl::encoding::Encoder<'_, D>,
1939            offset: usize,
1940            depth: fidl::encoding::Depth,
1941        ) -> fidl::Result<()> {
1942            encoder.debug_check_bounds::<RegistryDisconnectRequest>(offset);
1943            // Zero out padding regions. There's no need to apply masks
1944            // because the unmasked parts will be overwritten by fields.
1945            // Write the fields.
1946            self.0.encode(encoder, offset + 0, depth)?;
1947            Ok(())
1948        }
1949    }
1950
1951    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1952        for RegistryDisconnectRequest
1953    {
1954        #[inline(always)]
1955        fn new_empty() -> Self {
1956            Self { fuzzer_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D) }
1957        }
1958
1959        #[inline]
1960        unsafe fn decode(
1961            &mut self,
1962            decoder: &mut fidl::encoding::Decoder<'_, D>,
1963            offset: usize,
1964            _depth: fidl::encoding::Depth,
1965        ) -> fidl::Result<()> {
1966            decoder.debug_check_bounds::<Self>(offset);
1967            // Verify that padding bytes are zero.
1968            fidl::decode!(
1969                fidl::encoding::BoundedString<4096>,
1970                D,
1971                &mut self.fuzzer_url,
1972                decoder,
1973                offset + 0,
1974                _depth
1975            )?;
1976            Ok(())
1977        }
1978    }
1979
1980    impl fidl::encoding::ValueTypeMarker for SanitizerOptions {
1981        type Borrowed<'a> = &'a Self;
1982        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1983            value
1984        }
1985    }
1986
1987    unsafe impl fidl::encoding::TypeMarker for SanitizerOptions {
1988        type Owned = Self;
1989
1990        #[inline(always)]
1991        fn inline_align(_context: fidl::encoding::Context) -> usize {
1992            8
1993        }
1994
1995        #[inline(always)]
1996        fn inline_size(_context: fidl::encoding::Context) -> usize {
1997            32
1998        }
1999    }
2000
2001    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SanitizerOptions, D>
2002        for &SanitizerOptions
2003    {
2004        #[inline]
2005        unsafe fn encode(
2006            self,
2007            encoder: &mut fidl::encoding::Encoder<'_, D>,
2008            offset: usize,
2009            _depth: fidl::encoding::Depth,
2010        ) -> fidl::Result<()> {
2011            encoder.debug_check_bounds::<SanitizerOptions>(offset);
2012            // Delegate to tuple encoding.
2013            fidl::encoding::Encode::<SanitizerOptions, D>::encode(
2014                (
2015                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
2016                    <fidl::encoding::BoundedString<8192> as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
2017                ),
2018                encoder, offset, _depth
2019            )
2020        }
2021    }
2022    unsafe impl<
2023        D: fidl::encoding::ResourceDialect,
2024        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<32>, D>,
2025        T1: fidl::encoding::Encode<fidl::encoding::BoundedString<8192>, D>,
2026    > fidl::encoding::Encode<SanitizerOptions, D> for (T0, T1)
2027    {
2028        #[inline]
2029        unsafe fn encode(
2030            self,
2031            encoder: &mut fidl::encoding::Encoder<'_, D>,
2032            offset: usize,
2033            depth: fidl::encoding::Depth,
2034        ) -> fidl::Result<()> {
2035            encoder.debug_check_bounds::<SanitizerOptions>(offset);
2036            // Zero out padding regions. There's no need to apply masks
2037            // because the unmasked parts will be overwritten by fields.
2038            // Write the fields.
2039            self.0.encode(encoder, offset + 0, depth)?;
2040            self.1.encode(encoder, offset + 16, depth)?;
2041            Ok(())
2042        }
2043    }
2044
2045    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SanitizerOptions {
2046        #[inline(always)]
2047        fn new_empty() -> Self {
2048            Self {
2049                name: fidl::new_empty!(fidl::encoding::BoundedString<32>, D),
2050                value: fidl::new_empty!(fidl::encoding::BoundedString<8192>, D),
2051            }
2052        }
2053
2054        #[inline]
2055        unsafe fn decode(
2056            &mut self,
2057            decoder: &mut fidl::encoding::Decoder<'_, D>,
2058            offset: usize,
2059            _depth: fidl::encoding::Depth,
2060        ) -> fidl::Result<()> {
2061            decoder.debug_check_bounds::<Self>(offset);
2062            // Verify that padding bytes are zero.
2063            fidl::decode!(
2064                fidl::encoding::BoundedString<32>,
2065                D,
2066                &mut self.name,
2067                decoder,
2068                offset + 0,
2069                _depth
2070            )?;
2071            fidl::decode!(
2072                fidl::encoding::BoundedString<8192>,
2073                D,
2074                &mut self.value,
2075                decoder,
2076                offset + 16,
2077                _depth
2078            )?;
2079            Ok(())
2080        }
2081    }
2082
2083    impl fidl::encoding::ValueTypeMarker for TargetAdapterGetParametersResponse {
2084        type Borrowed<'a> = &'a Self;
2085        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2086            value
2087        }
2088    }
2089
2090    unsafe impl fidl::encoding::TypeMarker for TargetAdapterGetParametersResponse {
2091        type Owned = Self;
2092
2093        #[inline(always)]
2094        fn inline_align(_context: fidl::encoding::Context) -> usize {
2095            8
2096        }
2097
2098        #[inline(always)]
2099        fn inline_size(_context: fidl::encoding::Context) -> usize {
2100            16
2101        }
2102    }
2103
2104    unsafe impl<D: fidl::encoding::ResourceDialect>
2105        fidl::encoding::Encode<TargetAdapterGetParametersResponse, D>
2106        for &TargetAdapterGetParametersResponse
2107    {
2108        #[inline]
2109        unsafe fn encode(
2110            self,
2111            encoder: &mut fidl::encoding::Encoder<'_, D>,
2112            offset: usize,
2113            _depth: fidl::encoding::Depth,
2114        ) -> fidl::Result<()> {
2115            encoder.debug_check_bounds::<TargetAdapterGetParametersResponse>(offset);
2116            // Delegate to tuple encoding.
2117            fidl::encoding::Encode::<TargetAdapterGetParametersResponse, D>::encode(
2118                (
2119                    <fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128> as fidl::encoding::ValueTypeMarker>::borrow(&self.parameters),
2120                ),
2121                encoder, offset, _depth
2122            )
2123        }
2124    }
2125    unsafe impl<
2126        D: fidl::encoding::ResourceDialect,
2127        T0: fidl::encoding::Encode<fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128>, D>,
2128    > fidl::encoding::Encode<TargetAdapterGetParametersResponse, D> for (T0,)
2129    {
2130        #[inline]
2131        unsafe fn encode(
2132            self,
2133            encoder: &mut fidl::encoding::Encoder<'_, D>,
2134            offset: usize,
2135            depth: fidl::encoding::Depth,
2136        ) -> fidl::Result<()> {
2137            encoder.debug_check_bounds::<TargetAdapterGetParametersResponse>(offset);
2138            // Zero out padding regions. There's no need to apply masks
2139            // because the unmasked parts will be overwritten by fields.
2140            // Write the fields.
2141            self.0.encode(encoder, offset + 0, depth)?;
2142            Ok(())
2143        }
2144    }
2145
2146    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2147        for TargetAdapterGetParametersResponse
2148    {
2149        #[inline(always)]
2150        fn new_empty() -> Self {
2151            Self {
2152                parameters: fidl::new_empty!(
2153                    fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128>,
2154                    D
2155                ),
2156            }
2157        }
2158
2159        #[inline]
2160        unsafe fn decode(
2161            &mut self,
2162            decoder: &mut fidl::encoding::Decoder<'_, D>,
2163            offset: usize,
2164            _depth: fidl::encoding::Depth,
2165        ) -> fidl::Result<()> {
2166            decoder.debug_check_bounds::<Self>(offset);
2167            // Verify that padding bytes are zero.
2168            fidl::decode!(
2169                fidl::encoding::Vector<fidl::encoding::BoundedString<256>, 128>,
2170                D,
2171                &mut self.parameters,
2172                decoder,
2173                offset + 0,
2174                _depth
2175            )?;
2176            Ok(())
2177        }
2178    }
2179
2180    impl Options {
2181        #[inline(always)]
2182        fn max_ordinal_present(&self) -> u64 {
2183            if let Some(_) = self.output_flags {
2184                return 22;
2185            }
2186            if let Some(_) = self.sanitizer_options {
2187                return 21;
2188            }
2189            if let Some(_) = self.use_value_profile {
2190                return 20;
2191            }
2192            if let Some(_) = self.print_final_stats {
2193                return 19;
2194            }
2195            if let Some(_) = self.debug {
2196                return 18;
2197            }
2198            if let Some(_) = self.pulse_interval {
2199                return 17;
2200            }
2201            if let Some(_) = self.oom_exitcode {
2202                return 16;
2203            }
2204            if let Some(_) = self.leak_exitcode {
2205                return 15;
2206            }
2207            if let Some(_) = self.death_exitcode {
2208                return 14;
2209            }
2210            if let Some(_) = self.malloc_exitcode {
2211                return 13;
2212            }
2213            if let Some(_) = self.purge_interval {
2214                return 12;
2215            }
2216            if let Some(_) = self.oom_limit {
2217                return 11;
2218            }
2219            if let Some(_) = self.malloc_limit {
2220                return 10;
2221            }
2222            if let Some(_) = self.run_limit {
2223                return 9;
2224            }
2225            if let Some(_) = self.detect_leaks {
2226                return 8;
2227            }
2228            if let Some(_) = self.detect_exits {
2229                return 7;
2230            }
2231            if let Some(_) = self.dictionary_level {
2232                return 6;
2233            }
2234            if let Some(_) = self.mutation_depth {
2235                return 5;
2236            }
2237            if let Some(_) = self.max_input_size {
2238                return 4;
2239            }
2240            if let Some(_) = self.seed {
2241                return 3;
2242            }
2243            if let Some(_) = self.max_total_time {
2244                return 2;
2245            }
2246            if let Some(_) = self.runs {
2247                return 1;
2248            }
2249            0
2250        }
2251    }
2252
2253    impl fidl::encoding::ValueTypeMarker for Options {
2254        type Borrowed<'a> = &'a Self;
2255        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2256            value
2257        }
2258    }
2259
2260    unsafe impl fidl::encoding::TypeMarker for Options {
2261        type Owned = Self;
2262
2263        #[inline(always)]
2264        fn inline_align(_context: fidl::encoding::Context) -> usize {
2265            8
2266        }
2267
2268        #[inline(always)]
2269        fn inline_size(_context: fidl::encoding::Context) -> usize {
2270            16
2271        }
2272    }
2273
2274    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Options, D> for &Options {
2275        unsafe fn encode(
2276            self,
2277            encoder: &mut fidl::encoding::Encoder<'_, D>,
2278            offset: usize,
2279            mut depth: fidl::encoding::Depth,
2280        ) -> fidl::Result<()> {
2281            encoder.debug_check_bounds::<Options>(offset);
2282            // Vector header
2283            let max_ordinal: u64 = self.max_ordinal_present();
2284            encoder.write_num(max_ordinal, offset);
2285            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2286            // Calling encoder.out_of_line_offset(0) is not allowed.
2287            if max_ordinal == 0 {
2288                return Ok(());
2289            }
2290            depth.increment()?;
2291            let envelope_size = 8;
2292            let bytes_len = max_ordinal as usize * envelope_size;
2293            #[allow(unused_variables)]
2294            let offset = encoder.out_of_line_offset(bytes_len);
2295            let mut _prev_end_offset: usize = 0;
2296            if 1 > max_ordinal {
2297                return Ok(());
2298            }
2299
2300            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2301            // are envelope_size bytes.
2302            let cur_offset: usize = (1 - 1) * envelope_size;
2303
2304            // Zero reserved fields.
2305            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2306
2307            // Safety:
2308            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2309            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2310            //   envelope_size bytes, there is always sufficient room.
2311            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2312                self.runs.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2313                encoder,
2314                offset + cur_offset,
2315                depth,
2316            )?;
2317
2318            _prev_end_offset = cur_offset + envelope_size;
2319            if 2 > max_ordinal {
2320                return Ok(());
2321            }
2322
2323            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2324            // are envelope_size bytes.
2325            let cur_offset: usize = (2 - 1) * envelope_size;
2326
2327            // Zero reserved fields.
2328            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2329
2330            // Safety:
2331            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2332            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2333            //   envelope_size bytes, there is always sufficient room.
2334            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2335                self.max_total_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2336                encoder,
2337                offset + cur_offset,
2338                depth,
2339            )?;
2340
2341            _prev_end_offset = cur_offset + envelope_size;
2342            if 3 > max_ordinal {
2343                return Ok(());
2344            }
2345
2346            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2347            // are envelope_size bytes.
2348            let cur_offset: usize = (3 - 1) * envelope_size;
2349
2350            // Zero reserved fields.
2351            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2352
2353            // Safety:
2354            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2355            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2356            //   envelope_size bytes, there is always sufficient room.
2357            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2358                self.seed.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2359                encoder,
2360                offset + cur_offset,
2361                depth,
2362            )?;
2363
2364            _prev_end_offset = cur_offset + envelope_size;
2365            if 4 > max_ordinal {
2366                return Ok(());
2367            }
2368
2369            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2370            // are envelope_size bytes.
2371            let cur_offset: usize = (4 - 1) * envelope_size;
2372
2373            // Zero reserved fields.
2374            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2375
2376            // Safety:
2377            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2378            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2379            //   envelope_size bytes, there is always sufficient room.
2380            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2381                self.max_input_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2382                encoder,
2383                offset + cur_offset,
2384                depth,
2385            )?;
2386
2387            _prev_end_offset = cur_offset + envelope_size;
2388            if 5 > max_ordinal {
2389                return Ok(());
2390            }
2391
2392            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2393            // are envelope_size bytes.
2394            let cur_offset: usize = (5 - 1) * envelope_size;
2395
2396            // Zero reserved fields.
2397            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2398
2399            // Safety:
2400            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2401            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2402            //   envelope_size bytes, there is always sufficient room.
2403            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2404                self.mutation_depth.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2405                encoder,
2406                offset + cur_offset,
2407                depth,
2408            )?;
2409
2410            _prev_end_offset = cur_offset + envelope_size;
2411            if 6 > max_ordinal {
2412                return Ok(());
2413            }
2414
2415            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2416            // are envelope_size bytes.
2417            let cur_offset: usize = (6 - 1) * envelope_size;
2418
2419            // Zero reserved fields.
2420            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2421
2422            // Safety:
2423            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2424            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2425            //   envelope_size bytes, there is always sufficient room.
2426            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2427                self.dictionary_level
2428                    .as_ref()
2429                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2430                encoder,
2431                offset + cur_offset,
2432                depth,
2433            )?;
2434
2435            _prev_end_offset = cur_offset + envelope_size;
2436            if 7 > max_ordinal {
2437                return Ok(());
2438            }
2439
2440            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2441            // are envelope_size bytes.
2442            let cur_offset: usize = (7 - 1) * envelope_size;
2443
2444            // Zero reserved fields.
2445            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2446
2447            // Safety:
2448            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2449            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2450            //   envelope_size bytes, there is always sufficient room.
2451            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2452                self.detect_exits.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2453                encoder,
2454                offset + cur_offset,
2455                depth,
2456            )?;
2457
2458            _prev_end_offset = cur_offset + envelope_size;
2459            if 8 > max_ordinal {
2460                return Ok(());
2461            }
2462
2463            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2464            // are envelope_size bytes.
2465            let cur_offset: usize = (8 - 1) * envelope_size;
2466
2467            // Zero reserved fields.
2468            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2469
2470            // Safety:
2471            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2472            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2473            //   envelope_size bytes, there is always sufficient room.
2474            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2475                self.detect_leaks.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2476                encoder,
2477                offset + cur_offset,
2478                depth,
2479            )?;
2480
2481            _prev_end_offset = cur_offset + envelope_size;
2482            if 9 > max_ordinal {
2483                return Ok(());
2484            }
2485
2486            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2487            // are envelope_size bytes.
2488            let cur_offset: usize = (9 - 1) * envelope_size;
2489
2490            // Zero reserved fields.
2491            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2492
2493            // Safety:
2494            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2495            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2496            //   envelope_size bytes, there is always sufficient room.
2497            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2498                self.run_limit.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2499                encoder,
2500                offset + cur_offset,
2501                depth,
2502            )?;
2503
2504            _prev_end_offset = cur_offset + envelope_size;
2505            if 10 > max_ordinal {
2506                return Ok(());
2507            }
2508
2509            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2510            // are envelope_size bytes.
2511            let cur_offset: usize = (10 - 1) * envelope_size;
2512
2513            // Zero reserved fields.
2514            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2515
2516            // Safety:
2517            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2518            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2519            //   envelope_size bytes, there is always sufficient room.
2520            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2521                self.malloc_limit.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2522                encoder,
2523                offset + cur_offset,
2524                depth,
2525            )?;
2526
2527            _prev_end_offset = cur_offset + envelope_size;
2528            if 11 > max_ordinal {
2529                return Ok(());
2530            }
2531
2532            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2533            // are envelope_size bytes.
2534            let cur_offset: usize = (11 - 1) * envelope_size;
2535
2536            // Zero reserved fields.
2537            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2538
2539            // Safety:
2540            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2541            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2542            //   envelope_size bytes, there is always sufficient room.
2543            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2544                self.oom_limit.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2545                encoder,
2546                offset + cur_offset,
2547                depth,
2548            )?;
2549
2550            _prev_end_offset = cur_offset + envelope_size;
2551            if 12 > max_ordinal {
2552                return Ok(());
2553            }
2554
2555            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2556            // are envelope_size bytes.
2557            let cur_offset: usize = (12 - 1) * envelope_size;
2558
2559            // Zero reserved fields.
2560            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2561
2562            // Safety:
2563            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2564            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2565            //   envelope_size bytes, there is always sufficient room.
2566            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2567                self.purge_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2568                encoder,
2569                offset + cur_offset,
2570                depth,
2571            )?;
2572
2573            _prev_end_offset = cur_offset + envelope_size;
2574            if 13 > max_ordinal {
2575                return Ok(());
2576            }
2577
2578            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2579            // are envelope_size bytes.
2580            let cur_offset: usize = (13 - 1) * envelope_size;
2581
2582            // Zero reserved fields.
2583            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2584
2585            // Safety:
2586            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2587            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2588            //   envelope_size bytes, there is always sufficient room.
2589            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2590                self.malloc_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2591                encoder,
2592                offset + cur_offset,
2593                depth,
2594            )?;
2595
2596            _prev_end_offset = cur_offset + envelope_size;
2597            if 14 > max_ordinal {
2598                return Ok(());
2599            }
2600
2601            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2602            // are envelope_size bytes.
2603            let cur_offset: usize = (14 - 1) * envelope_size;
2604
2605            // Zero reserved fields.
2606            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2607
2608            // Safety:
2609            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2610            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2611            //   envelope_size bytes, there is always sufficient room.
2612            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2613                self.death_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2614                encoder,
2615                offset + cur_offset,
2616                depth,
2617            )?;
2618
2619            _prev_end_offset = cur_offset + envelope_size;
2620            if 15 > max_ordinal {
2621                return Ok(());
2622            }
2623
2624            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2625            // are envelope_size bytes.
2626            let cur_offset: usize = (15 - 1) * envelope_size;
2627
2628            // Zero reserved fields.
2629            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2630
2631            // Safety:
2632            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2633            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2634            //   envelope_size bytes, there is always sufficient room.
2635            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2636                self.leak_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2637                encoder,
2638                offset + cur_offset,
2639                depth,
2640            )?;
2641
2642            _prev_end_offset = cur_offset + envelope_size;
2643            if 16 > max_ordinal {
2644                return Ok(());
2645            }
2646
2647            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2648            // are envelope_size bytes.
2649            let cur_offset: usize = (16 - 1) * envelope_size;
2650
2651            // Zero reserved fields.
2652            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2653
2654            // Safety:
2655            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2656            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2657            //   envelope_size bytes, there is always sufficient room.
2658            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2659                self.oom_exitcode.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2660                encoder,
2661                offset + cur_offset,
2662                depth,
2663            )?;
2664
2665            _prev_end_offset = cur_offset + envelope_size;
2666            if 17 > max_ordinal {
2667                return Ok(());
2668            }
2669
2670            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2671            // are envelope_size bytes.
2672            let cur_offset: usize = (17 - 1) * envelope_size;
2673
2674            // Zero reserved fields.
2675            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2676
2677            // Safety:
2678            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2679            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2680            //   envelope_size bytes, there is always sufficient room.
2681            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2682                self.pulse_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2683                encoder,
2684                offset + cur_offset,
2685                depth,
2686            )?;
2687
2688            _prev_end_offset = cur_offset + envelope_size;
2689            if 18 > max_ordinal {
2690                return Ok(());
2691            }
2692
2693            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2694            // are envelope_size bytes.
2695            let cur_offset: usize = (18 - 1) * envelope_size;
2696
2697            // Zero reserved fields.
2698            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2699
2700            // Safety:
2701            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2702            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2703            //   envelope_size bytes, there is always sufficient room.
2704            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2705                self.debug.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2706                encoder,
2707                offset + cur_offset,
2708                depth,
2709            )?;
2710
2711            _prev_end_offset = cur_offset + envelope_size;
2712            if 19 > max_ordinal {
2713                return Ok(());
2714            }
2715
2716            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2717            // are envelope_size bytes.
2718            let cur_offset: usize = (19 - 1) * envelope_size;
2719
2720            // Zero reserved fields.
2721            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2722
2723            // Safety:
2724            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2725            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2726            //   envelope_size bytes, there is always sufficient room.
2727            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2728                self.print_final_stats
2729                    .as_ref()
2730                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2731                encoder,
2732                offset + cur_offset,
2733                depth,
2734            )?;
2735
2736            _prev_end_offset = cur_offset + envelope_size;
2737            if 20 > max_ordinal {
2738                return Ok(());
2739            }
2740
2741            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2742            // are envelope_size bytes.
2743            let cur_offset: usize = (20 - 1) * envelope_size;
2744
2745            // Zero reserved fields.
2746            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2747
2748            // Safety:
2749            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2750            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2751            //   envelope_size bytes, there is always sufficient room.
2752            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2753                self.use_value_profile
2754                    .as_ref()
2755                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2756                encoder,
2757                offset + cur_offset,
2758                depth,
2759            )?;
2760
2761            _prev_end_offset = cur_offset + envelope_size;
2762            if 21 > max_ordinal {
2763                return Ok(());
2764            }
2765
2766            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2767            // are envelope_size bytes.
2768            let cur_offset: usize = (21 - 1) * envelope_size;
2769
2770            // Zero reserved fields.
2771            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2772
2773            // Safety:
2774            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2775            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2776            //   envelope_size bytes, there is always sufficient room.
2777            fidl::encoding::encode_in_envelope_optional::<SanitizerOptions, D>(
2778                self.sanitizer_options
2779                    .as_ref()
2780                    .map(<SanitizerOptions as fidl::encoding::ValueTypeMarker>::borrow),
2781                encoder,
2782                offset + cur_offset,
2783                depth,
2784            )?;
2785
2786            _prev_end_offset = cur_offset + envelope_size;
2787            if 22 > max_ordinal {
2788                return Ok(());
2789            }
2790
2791            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2792            // are envelope_size bytes.
2793            let cur_offset: usize = (22 - 1) * envelope_size;
2794
2795            // Zero reserved fields.
2796            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2797
2798            // Safety:
2799            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2800            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2801            //   envelope_size bytes, there is always sufficient room.
2802            fidl::encoding::encode_in_envelope_optional::<OutputFlags, D>(
2803                self.output_flags
2804                    .as_ref()
2805                    .map(<OutputFlags as fidl::encoding::ValueTypeMarker>::borrow),
2806                encoder,
2807                offset + cur_offset,
2808                depth,
2809            )?;
2810
2811            _prev_end_offset = cur_offset + envelope_size;
2812
2813            Ok(())
2814        }
2815    }
2816
2817    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Options {
2818        #[inline(always)]
2819        fn new_empty() -> Self {
2820            Self::default()
2821        }
2822
2823        unsafe fn decode(
2824            &mut self,
2825            decoder: &mut fidl::encoding::Decoder<'_, D>,
2826            offset: usize,
2827            mut depth: fidl::encoding::Depth,
2828        ) -> fidl::Result<()> {
2829            decoder.debug_check_bounds::<Self>(offset);
2830            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2831                None => return Err(fidl::Error::NotNullable),
2832                Some(len) => len,
2833            };
2834            // Calling decoder.out_of_line_offset(0) is not allowed.
2835            if len == 0 {
2836                return Ok(());
2837            };
2838            depth.increment()?;
2839            let envelope_size = 8;
2840            let bytes_len = len * envelope_size;
2841            let offset = decoder.out_of_line_offset(bytes_len)?;
2842            // Decode the envelope for each type.
2843            let mut _next_ordinal_to_read = 0;
2844            let mut next_offset = offset;
2845            let end_offset = offset + bytes_len;
2846            _next_ordinal_to_read += 1;
2847            if next_offset >= end_offset {
2848                return Ok(());
2849            }
2850
2851            // Decode unknown envelopes for gaps in ordinals.
2852            while _next_ordinal_to_read < 1 {
2853                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2854                _next_ordinal_to_read += 1;
2855                next_offset += envelope_size;
2856            }
2857
2858            let next_out_of_line = decoder.next_out_of_line();
2859            let handles_before = decoder.remaining_handles();
2860            if let Some((inlined, num_bytes, num_handles)) =
2861                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2862            {
2863                let member_inline_size =
2864                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2865                if inlined != (member_inline_size <= 4) {
2866                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2867                }
2868                let inner_offset;
2869                let mut inner_depth = depth.clone();
2870                if inlined {
2871                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2872                    inner_offset = next_offset;
2873                } else {
2874                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2875                    inner_depth.increment()?;
2876                }
2877                let val_ref = self.runs.get_or_insert_with(|| fidl::new_empty!(u32, D));
2878                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2879                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2880                {
2881                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2882                }
2883                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2884                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2885                }
2886            }
2887
2888            next_offset += envelope_size;
2889            _next_ordinal_to_read += 1;
2890            if next_offset >= end_offset {
2891                return Ok(());
2892            }
2893
2894            // Decode unknown envelopes for gaps in ordinals.
2895            while _next_ordinal_to_read < 2 {
2896                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2897                _next_ordinal_to_read += 1;
2898                next_offset += envelope_size;
2899            }
2900
2901            let next_out_of_line = decoder.next_out_of_line();
2902            let handles_before = decoder.remaining_handles();
2903            if let Some((inlined, num_bytes, num_handles)) =
2904                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2905            {
2906                let member_inline_size =
2907                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2908                if inlined != (member_inline_size <= 4) {
2909                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2910                }
2911                let inner_offset;
2912                let mut inner_depth = depth.clone();
2913                if inlined {
2914                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2915                    inner_offset = next_offset;
2916                } else {
2917                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2918                    inner_depth.increment()?;
2919                }
2920                let val_ref = self.max_total_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
2921                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2922                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2923                {
2924                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2925                }
2926                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2927                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2928                }
2929            }
2930
2931            next_offset += envelope_size;
2932            _next_ordinal_to_read += 1;
2933            if next_offset >= end_offset {
2934                return Ok(());
2935            }
2936
2937            // Decode unknown envelopes for gaps in ordinals.
2938            while _next_ordinal_to_read < 3 {
2939                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2940                _next_ordinal_to_read += 1;
2941                next_offset += envelope_size;
2942            }
2943
2944            let next_out_of_line = decoder.next_out_of_line();
2945            let handles_before = decoder.remaining_handles();
2946            if let Some((inlined, num_bytes, num_handles)) =
2947                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2948            {
2949                let member_inline_size =
2950                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2951                if inlined != (member_inline_size <= 4) {
2952                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2953                }
2954                let inner_offset;
2955                let mut inner_depth = depth.clone();
2956                if inlined {
2957                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2958                    inner_offset = next_offset;
2959                } else {
2960                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2961                    inner_depth.increment()?;
2962                }
2963                let val_ref = self.seed.get_or_insert_with(|| fidl::new_empty!(u32, D));
2964                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2965                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2966                {
2967                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2968                }
2969                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2970                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2971                }
2972            }
2973
2974            next_offset += envelope_size;
2975            _next_ordinal_to_read += 1;
2976            if next_offset >= end_offset {
2977                return Ok(());
2978            }
2979
2980            // Decode unknown envelopes for gaps in ordinals.
2981            while _next_ordinal_to_read < 4 {
2982                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2983                _next_ordinal_to_read += 1;
2984                next_offset += envelope_size;
2985            }
2986
2987            let next_out_of_line = decoder.next_out_of_line();
2988            let handles_before = decoder.remaining_handles();
2989            if let Some((inlined, num_bytes, num_handles)) =
2990                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2991            {
2992                let member_inline_size =
2993                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2994                if inlined != (member_inline_size <= 4) {
2995                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2996                }
2997                let inner_offset;
2998                let mut inner_depth = depth.clone();
2999                if inlined {
3000                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3001                    inner_offset = next_offset;
3002                } else {
3003                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3004                    inner_depth.increment()?;
3005                }
3006                let val_ref = self.max_input_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
3007                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3008                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3009                {
3010                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3011                }
3012                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3013                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3014                }
3015            }
3016
3017            next_offset += envelope_size;
3018            _next_ordinal_to_read += 1;
3019            if next_offset >= end_offset {
3020                return Ok(());
3021            }
3022
3023            // Decode unknown envelopes for gaps in ordinals.
3024            while _next_ordinal_to_read < 5 {
3025                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3026                _next_ordinal_to_read += 1;
3027                next_offset += envelope_size;
3028            }
3029
3030            let next_out_of_line = decoder.next_out_of_line();
3031            let handles_before = decoder.remaining_handles();
3032            if let Some((inlined, num_bytes, num_handles)) =
3033                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3034            {
3035                let member_inline_size =
3036                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3037                if inlined != (member_inline_size <= 4) {
3038                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3039                }
3040                let inner_offset;
3041                let mut inner_depth = depth.clone();
3042                if inlined {
3043                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3044                    inner_offset = next_offset;
3045                } else {
3046                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3047                    inner_depth.increment()?;
3048                }
3049                let val_ref = self.mutation_depth.get_or_insert_with(|| fidl::new_empty!(u16, D));
3050                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3051                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3052                {
3053                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3054                }
3055                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3056                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3057                }
3058            }
3059
3060            next_offset += envelope_size;
3061            _next_ordinal_to_read += 1;
3062            if next_offset >= end_offset {
3063                return Ok(());
3064            }
3065
3066            // Decode unknown envelopes for gaps in ordinals.
3067            while _next_ordinal_to_read < 6 {
3068                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3069                _next_ordinal_to_read += 1;
3070                next_offset += envelope_size;
3071            }
3072
3073            let next_out_of_line = decoder.next_out_of_line();
3074            let handles_before = decoder.remaining_handles();
3075            if let Some((inlined, num_bytes, num_handles)) =
3076                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3077            {
3078                let member_inline_size =
3079                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3080                if inlined != (member_inline_size <= 4) {
3081                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3082                }
3083                let inner_offset;
3084                let mut inner_depth = depth.clone();
3085                if inlined {
3086                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3087                    inner_offset = next_offset;
3088                } else {
3089                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3090                    inner_depth.increment()?;
3091                }
3092                let val_ref = self.dictionary_level.get_or_insert_with(|| fidl::new_empty!(u16, D));
3093                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3094                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3095                {
3096                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3097                }
3098                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3099                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3100                }
3101            }
3102
3103            next_offset += envelope_size;
3104            _next_ordinal_to_read += 1;
3105            if next_offset >= end_offset {
3106                return Ok(());
3107            }
3108
3109            // Decode unknown envelopes for gaps in ordinals.
3110            while _next_ordinal_to_read < 7 {
3111                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3112                _next_ordinal_to_read += 1;
3113                next_offset += envelope_size;
3114            }
3115
3116            let next_out_of_line = decoder.next_out_of_line();
3117            let handles_before = decoder.remaining_handles();
3118            if let Some((inlined, num_bytes, num_handles)) =
3119                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3120            {
3121                let member_inline_size =
3122                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3123                if inlined != (member_inline_size <= 4) {
3124                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3125                }
3126                let inner_offset;
3127                let mut inner_depth = depth.clone();
3128                if inlined {
3129                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3130                    inner_offset = next_offset;
3131                } else {
3132                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3133                    inner_depth.increment()?;
3134                }
3135                let val_ref = self.detect_exits.get_or_insert_with(|| fidl::new_empty!(bool, D));
3136                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3137                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3138                {
3139                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3140                }
3141                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3142                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3143                }
3144            }
3145
3146            next_offset += envelope_size;
3147            _next_ordinal_to_read += 1;
3148            if next_offset >= end_offset {
3149                return Ok(());
3150            }
3151
3152            // Decode unknown envelopes for gaps in ordinals.
3153            while _next_ordinal_to_read < 8 {
3154                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3155                _next_ordinal_to_read += 1;
3156                next_offset += envelope_size;
3157            }
3158
3159            let next_out_of_line = decoder.next_out_of_line();
3160            let handles_before = decoder.remaining_handles();
3161            if let Some((inlined, num_bytes, num_handles)) =
3162                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3163            {
3164                let member_inline_size =
3165                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3166                if inlined != (member_inline_size <= 4) {
3167                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3168                }
3169                let inner_offset;
3170                let mut inner_depth = depth.clone();
3171                if inlined {
3172                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3173                    inner_offset = next_offset;
3174                } else {
3175                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3176                    inner_depth.increment()?;
3177                }
3178                let val_ref = self.detect_leaks.get_or_insert_with(|| fidl::new_empty!(bool, D));
3179                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3180                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3181                {
3182                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3183                }
3184                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3185                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3186                }
3187            }
3188
3189            next_offset += envelope_size;
3190            _next_ordinal_to_read += 1;
3191            if next_offset >= end_offset {
3192                return Ok(());
3193            }
3194
3195            // Decode unknown envelopes for gaps in ordinals.
3196            while _next_ordinal_to_read < 9 {
3197                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3198                _next_ordinal_to_read += 1;
3199                next_offset += envelope_size;
3200            }
3201
3202            let next_out_of_line = decoder.next_out_of_line();
3203            let handles_before = decoder.remaining_handles();
3204            if let Some((inlined, num_bytes, num_handles)) =
3205                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3206            {
3207                let member_inline_size =
3208                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3209                if inlined != (member_inline_size <= 4) {
3210                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3211                }
3212                let inner_offset;
3213                let mut inner_depth = depth.clone();
3214                if inlined {
3215                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3216                    inner_offset = next_offset;
3217                } else {
3218                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3219                    inner_depth.increment()?;
3220                }
3221                let val_ref = self.run_limit.get_or_insert_with(|| fidl::new_empty!(i64, D));
3222                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3223                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3224                {
3225                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3226                }
3227                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3228                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3229                }
3230            }
3231
3232            next_offset += envelope_size;
3233            _next_ordinal_to_read += 1;
3234            if next_offset >= end_offset {
3235                return Ok(());
3236            }
3237
3238            // Decode unknown envelopes for gaps in ordinals.
3239            while _next_ordinal_to_read < 10 {
3240                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3241                _next_ordinal_to_read += 1;
3242                next_offset += envelope_size;
3243            }
3244
3245            let next_out_of_line = decoder.next_out_of_line();
3246            let handles_before = decoder.remaining_handles();
3247            if let Some((inlined, num_bytes, num_handles)) =
3248                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3249            {
3250                let member_inline_size =
3251                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3252                if inlined != (member_inline_size <= 4) {
3253                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3254                }
3255                let inner_offset;
3256                let mut inner_depth = depth.clone();
3257                if inlined {
3258                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3259                    inner_offset = next_offset;
3260                } else {
3261                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3262                    inner_depth.increment()?;
3263                }
3264                let val_ref = self.malloc_limit.get_or_insert_with(|| fidl::new_empty!(u64, D));
3265                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3266                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3267                {
3268                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3269                }
3270                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3271                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3272                }
3273            }
3274
3275            next_offset += envelope_size;
3276            _next_ordinal_to_read += 1;
3277            if next_offset >= end_offset {
3278                return Ok(());
3279            }
3280
3281            // Decode unknown envelopes for gaps in ordinals.
3282            while _next_ordinal_to_read < 11 {
3283                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3284                _next_ordinal_to_read += 1;
3285                next_offset += envelope_size;
3286            }
3287
3288            let next_out_of_line = decoder.next_out_of_line();
3289            let handles_before = decoder.remaining_handles();
3290            if let Some((inlined, num_bytes, num_handles)) =
3291                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3292            {
3293                let member_inline_size =
3294                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3295                if inlined != (member_inline_size <= 4) {
3296                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3297                }
3298                let inner_offset;
3299                let mut inner_depth = depth.clone();
3300                if inlined {
3301                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3302                    inner_offset = next_offset;
3303                } else {
3304                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3305                    inner_depth.increment()?;
3306                }
3307                let val_ref = self.oom_limit.get_or_insert_with(|| fidl::new_empty!(u64, D));
3308                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3309                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3310                {
3311                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3312                }
3313                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3314                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3315                }
3316            }
3317
3318            next_offset += envelope_size;
3319            _next_ordinal_to_read += 1;
3320            if next_offset >= end_offset {
3321                return Ok(());
3322            }
3323
3324            // Decode unknown envelopes for gaps in ordinals.
3325            while _next_ordinal_to_read < 12 {
3326                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3327                _next_ordinal_to_read += 1;
3328                next_offset += envelope_size;
3329            }
3330
3331            let next_out_of_line = decoder.next_out_of_line();
3332            let handles_before = decoder.remaining_handles();
3333            if let Some((inlined, num_bytes, num_handles)) =
3334                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3335            {
3336                let member_inline_size =
3337                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3338                if inlined != (member_inline_size <= 4) {
3339                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3340                }
3341                let inner_offset;
3342                let mut inner_depth = depth.clone();
3343                if inlined {
3344                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3345                    inner_offset = next_offset;
3346                } else {
3347                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3348                    inner_depth.increment()?;
3349                }
3350                let val_ref = self.purge_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
3351                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3352                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3353                {
3354                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3355                }
3356                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3357                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3358                }
3359            }
3360
3361            next_offset += envelope_size;
3362            _next_ordinal_to_read += 1;
3363            if next_offset >= end_offset {
3364                return Ok(());
3365            }
3366
3367            // Decode unknown envelopes for gaps in ordinals.
3368            while _next_ordinal_to_read < 13 {
3369                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3370                _next_ordinal_to_read += 1;
3371                next_offset += envelope_size;
3372            }
3373
3374            let next_out_of_line = decoder.next_out_of_line();
3375            let handles_before = decoder.remaining_handles();
3376            if let Some((inlined, num_bytes, num_handles)) =
3377                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3378            {
3379                let member_inline_size =
3380                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3381                if inlined != (member_inline_size <= 4) {
3382                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3383                }
3384                let inner_offset;
3385                let mut inner_depth = depth.clone();
3386                if inlined {
3387                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3388                    inner_offset = next_offset;
3389                } else {
3390                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3391                    inner_depth.increment()?;
3392                }
3393                let val_ref = self.malloc_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3394                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3395                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3396                {
3397                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3398                }
3399                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3400                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3401                }
3402            }
3403
3404            next_offset += envelope_size;
3405            _next_ordinal_to_read += 1;
3406            if next_offset >= end_offset {
3407                return Ok(());
3408            }
3409
3410            // Decode unknown envelopes for gaps in ordinals.
3411            while _next_ordinal_to_read < 14 {
3412                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3413                _next_ordinal_to_read += 1;
3414                next_offset += envelope_size;
3415            }
3416
3417            let next_out_of_line = decoder.next_out_of_line();
3418            let handles_before = decoder.remaining_handles();
3419            if let Some((inlined, num_bytes, num_handles)) =
3420                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3421            {
3422                let member_inline_size =
3423                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3424                if inlined != (member_inline_size <= 4) {
3425                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3426                }
3427                let inner_offset;
3428                let mut inner_depth = depth.clone();
3429                if inlined {
3430                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3431                    inner_offset = next_offset;
3432                } else {
3433                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3434                    inner_depth.increment()?;
3435                }
3436                let val_ref = self.death_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3437                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3438                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3439                {
3440                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3441                }
3442                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3443                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3444                }
3445            }
3446
3447            next_offset += envelope_size;
3448            _next_ordinal_to_read += 1;
3449            if next_offset >= end_offset {
3450                return Ok(());
3451            }
3452
3453            // Decode unknown envelopes for gaps in ordinals.
3454            while _next_ordinal_to_read < 15 {
3455                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3456                _next_ordinal_to_read += 1;
3457                next_offset += envelope_size;
3458            }
3459
3460            let next_out_of_line = decoder.next_out_of_line();
3461            let handles_before = decoder.remaining_handles();
3462            if let Some((inlined, num_bytes, num_handles)) =
3463                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3464            {
3465                let member_inline_size =
3466                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3467                if inlined != (member_inline_size <= 4) {
3468                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3469                }
3470                let inner_offset;
3471                let mut inner_depth = depth.clone();
3472                if inlined {
3473                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3474                    inner_offset = next_offset;
3475                } else {
3476                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3477                    inner_depth.increment()?;
3478                }
3479                let val_ref = self.leak_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3480                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3481                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3482                {
3483                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3484                }
3485                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3486                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3487                }
3488            }
3489
3490            next_offset += envelope_size;
3491            _next_ordinal_to_read += 1;
3492            if next_offset >= end_offset {
3493                return Ok(());
3494            }
3495
3496            // Decode unknown envelopes for gaps in ordinals.
3497            while _next_ordinal_to_read < 16 {
3498                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3499                _next_ordinal_to_read += 1;
3500                next_offset += envelope_size;
3501            }
3502
3503            let next_out_of_line = decoder.next_out_of_line();
3504            let handles_before = decoder.remaining_handles();
3505            if let Some((inlined, num_bytes, num_handles)) =
3506                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3507            {
3508                let member_inline_size =
3509                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3510                if inlined != (member_inline_size <= 4) {
3511                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3512                }
3513                let inner_offset;
3514                let mut inner_depth = depth.clone();
3515                if inlined {
3516                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3517                    inner_offset = next_offset;
3518                } else {
3519                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3520                    inner_depth.increment()?;
3521                }
3522                let val_ref = self.oom_exitcode.get_or_insert_with(|| fidl::new_empty!(i32, D));
3523                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3524                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3525                {
3526                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3527                }
3528                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3529                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3530                }
3531            }
3532
3533            next_offset += envelope_size;
3534            _next_ordinal_to_read += 1;
3535            if next_offset >= end_offset {
3536                return Ok(());
3537            }
3538
3539            // Decode unknown envelopes for gaps in ordinals.
3540            while _next_ordinal_to_read < 17 {
3541                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3542                _next_ordinal_to_read += 1;
3543                next_offset += envelope_size;
3544            }
3545
3546            let next_out_of_line = decoder.next_out_of_line();
3547            let handles_before = decoder.remaining_handles();
3548            if let Some((inlined, num_bytes, num_handles)) =
3549                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3550            {
3551                let member_inline_size =
3552                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3553                if inlined != (member_inline_size <= 4) {
3554                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3555                }
3556                let inner_offset;
3557                let mut inner_depth = depth.clone();
3558                if inlined {
3559                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3560                    inner_offset = next_offset;
3561                } else {
3562                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3563                    inner_depth.increment()?;
3564                }
3565                let val_ref = self.pulse_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
3566                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3567                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3568                {
3569                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3570                }
3571                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3572                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3573                }
3574            }
3575
3576            next_offset += envelope_size;
3577            _next_ordinal_to_read += 1;
3578            if next_offset >= end_offset {
3579                return Ok(());
3580            }
3581
3582            // Decode unknown envelopes for gaps in ordinals.
3583            while _next_ordinal_to_read < 18 {
3584                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3585                _next_ordinal_to_read += 1;
3586                next_offset += envelope_size;
3587            }
3588
3589            let next_out_of_line = decoder.next_out_of_line();
3590            let handles_before = decoder.remaining_handles();
3591            if let Some((inlined, num_bytes, num_handles)) =
3592                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3593            {
3594                let member_inline_size =
3595                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3596                if inlined != (member_inline_size <= 4) {
3597                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3598                }
3599                let inner_offset;
3600                let mut inner_depth = depth.clone();
3601                if inlined {
3602                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3603                    inner_offset = next_offset;
3604                } else {
3605                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3606                    inner_depth.increment()?;
3607                }
3608                let val_ref = self.debug.get_or_insert_with(|| fidl::new_empty!(bool, D));
3609                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3610                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3611                {
3612                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3613                }
3614                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3615                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3616                }
3617            }
3618
3619            next_offset += envelope_size;
3620            _next_ordinal_to_read += 1;
3621            if next_offset >= end_offset {
3622                return Ok(());
3623            }
3624
3625            // Decode unknown envelopes for gaps in ordinals.
3626            while _next_ordinal_to_read < 19 {
3627                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3628                _next_ordinal_to_read += 1;
3629                next_offset += envelope_size;
3630            }
3631
3632            let next_out_of_line = decoder.next_out_of_line();
3633            let handles_before = decoder.remaining_handles();
3634            if let Some((inlined, num_bytes, num_handles)) =
3635                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3636            {
3637                let member_inline_size =
3638                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3639                if inlined != (member_inline_size <= 4) {
3640                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3641                }
3642                let inner_offset;
3643                let mut inner_depth = depth.clone();
3644                if inlined {
3645                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3646                    inner_offset = next_offset;
3647                } else {
3648                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3649                    inner_depth.increment()?;
3650                }
3651                let val_ref =
3652                    self.print_final_stats.get_or_insert_with(|| fidl::new_empty!(bool, D));
3653                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3654                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3655                {
3656                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3657                }
3658                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3659                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3660                }
3661            }
3662
3663            next_offset += envelope_size;
3664            _next_ordinal_to_read += 1;
3665            if next_offset >= end_offset {
3666                return Ok(());
3667            }
3668
3669            // Decode unknown envelopes for gaps in ordinals.
3670            while _next_ordinal_to_read < 20 {
3671                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3672                _next_ordinal_to_read += 1;
3673                next_offset += envelope_size;
3674            }
3675
3676            let next_out_of_line = decoder.next_out_of_line();
3677            let handles_before = decoder.remaining_handles();
3678            if let Some((inlined, num_bytes, num_handles)) =
3679                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3680            {
3681                let member_inline_size =
3682                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3683                if inlined != (member_inline_size <= 4) {
3684                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3685                }
3686                let inner_offset;
3687                let mut inner_depth = depth.clone();
3688                if inlined {
3689                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3690                    inner_offset = next_offset;
3691                } else {
3692                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3693                    inner_depth.increment()?;
3694                }
3695                let val_ref =
3696                    self.use_value_profile.get_or_insert_with(|| fidl::new_empty!(bool, D));
3697                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3698                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3699                {
3700                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3701                }
3702                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3703                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3704                }
3705            }
3706
3707            next_offset += envelope_size;
3708            _next_ordinal_to_read += 1;
3709            if next_offset >= end_offset {
3710                return Ok(());
3711            }
3712
3713            // Decode unknown envelopes for gaps in ordinals.
3714            while _next_ordinal_to_read < 21 {
3715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3716                _next_ordinal_to_read += 1;
3717                next_offset += envelope_size;
3718            }
3719
3720            let next_out_of_line = decoder.next_out_of_line();
3721            let handles_before = decoder.remaining_handles();
3722            if let Some((inlined, num_bytes, num_handles)) =
3723                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3724            {
3725                let member_inline_size =
3726                    <SanitizerOptions as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3727                if inlined != (member_inline_size <= 4) {
3728                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3729                }
3730                let inner_offset;
3731                let mut inner_depth = depth.clone();
3732                if inlined {
3733                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3734                    inner_offset = next_offset;
3735                } else {
3736                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3737                    inner_depth.increment()?;
3738                }
3739                let val_ref = self
3740                    .sanitizer_options
3741                    .get_or_insert_with(|| fidl::new_empty!(SanitizerOptions, D));
3742                fidl::decode!(SanitizerOptions, D, val_ref, decoder, inner_offset, inner_depth)?;
3743                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3744                {
3745                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3746                }
3747                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3748                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3749                }
3750            }
3751
3752            next_offset += envelope_size;
3753            _next_ordinal_to_read += 1;
3754            if next_offset >= end_offset {
3755                return Ok(());
3756            }
3757
3758            // Decode unknown envelopes for gaps in ordinals.
3759            while _next_ordinal_to_read < 22 {
3760                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3761                _next_ordinal_to_read += 1;
3762                next_offset += envelope_size;
3763            }
3764
3765            let next_out_of_line = decoder.next_out_of_line();
3766            let handles_before = decoder.remaining_handles();
3767            if let Some((inlined, num_bytes, num_handles)) =
3768                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3769            {
3770                let member_inline_size =
3771                    <OutputFlags as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3772                if inlined != (member_inline_size <= 4) {
3773                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3774                }
3775                let inner_offset;
3776                let mut inner_depth = depth.clone();
3777                if inlined {
3778                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3779                    inner_offset = next_offset;
3780                } else {
3781                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3782                    inner_depth.increment()?;
3783                }
3784                let val_ref =
3785                    self.output_flags.get_or_insert_with(|| fidl::new_empty!(OutputFlags, D));
3786                fidl::decode!(OutputFlags, D, val_ref, decoder, inner_offset, inner_depth)?;
3787                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3788                {
3789                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3790                }
3791                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3792                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3793                }
3794            }
3795
3796            next_offset += envelope_size;
3797
3798            // Decode the remaining unknown envelopes.
3799            while next_offset < end_offset {
3800                _next_ordinal_to_read += 1;
3801                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3802                next_offset += envelope_size;
3803            }
3804
3805            Ok(())
3806        }
3807    }
3808
3809    impl Status {
3810        #[inline(always)]
3811        fn max_ordinal_present(&self) -> u64 {
3812            if let Some(_) = self.process_stats {
3813                return 8;
3814            }
3815            if let Some(_) = self.corpus_total_size {
3816                return 7;
3817            }
3818            if let Some(_) = self.corpus_num_inputs {
3819                return 6;
3820            }
3821            if let Some(_) = self.covered_features {
3822                return 5;
3823            }
3824            if let Some(_) = self.covered_pcs {
3825                return 4;
3826            }
3827            if let Some(_) = self.elapsed {
3828                return 3;
3829            }
3830            if let Some(_) = self.runs {
3831                return 2;
3832            }
3833            if let Some(_) = self.running {
3834                return 1;
3835            }
3836            0
3837        }
3838    }
3839
3840    impl fidl::encoding::ValueTypeMarker for Status {
3841        type Borrowed<'a> = &'a Self;
3842        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3843            value
3844        }
3845    }
3846
3847    unsafe impl fidl::encoding::TypeMarker for Status {
3848        type Owned = Self;
3849
3850        #[inline(always)]
3851        fn inline_align(_context: fidl::encoding::Context) -> usize {
3852            8
3853        }
3854
3855        #[inline(always)]
3856        fn inline_size(_context: fidl::encoding::Context) -> usize {
3857            16
3858        }
3859    }
3860
3861    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Status, D> for &Status {
3862        unsafe fn encode(
3863            self,
3864            encoder: &mut fidl::encoding::Encoder<'_, D>,
3865            offset: usize,
3866            mut depth: fidl::encoding::Depth,
3867        ) -> fidl::Result<()> {
3868            encoder.debug_check_bounds::<Status>(offset);
3869            // Vector header
3870            let max_ordinal: u64 = self.max_ordinal_present();
3871            encoder.write_num(max_ordinal, offset);
3872            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3873            // Calling encoder.out_of_line_offset(0) is not allowed.
3874            if max_ordinal == 0 {
3875                return Ok(());
3876            }
3877            depth.increment()?;
3878            let envelope_size = 8;
3879            let bytes_len = max_ordinal as usize * envelope_size;
3880            #[allow(unused_variables)]
3881            let offset = encoder.out_of_line_offset(bytes_len);
3882            let mut _prev_end_offset: usize = 0;
3883            if 1 > max_ordinal {
3884                return Ok(());
3885            }
3886
3887            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3888            // are envelope_size bytes.
3889            let cur_offset: usize = (1 - 1) * envelope_size;
3890
3891            // Zero reserved fields.
3892            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3893
3894            // Safety:
3895            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3896            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3897            //   envelope_size bytes, there is always sufficient room.
3898            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3899                self.running.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3900                encoder,
3901                offset + cur_offset,
3902                depth,
3903            )?;
3904
3905            _prev_end_offset = cur_offset + envelope_size;
3906            if 2 > max_ordinal {
3907                return Ok(());
3908            }
3909
3910            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3911            // are envelope_size bytes.
3912            let cur_offset: usize = (2 - 1) * envelope_size;
3913
3914            // Zero reserved fields.
3915            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3916
3917            // Safety:
3918            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3919            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3920            //   envelope_size bytes, there is always sufficient room.
3921            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3922                self.runs.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3923                encoder,
3924                offset + cur_offset,
3925                depth,
3926            )?;
3927
3928            _prev_end_offset = cur_offset + envelope_size;
3929            if 3 > max_ordinal {
3930                return Ok(());
3931            }
3932
3933            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3934            // are envelope_size bytes.
3935            let cur_offset: usize = (3 - 1) * envelope_size;
3936
3937            // Zero reserved fields.
3938            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3939
3940            // Safety:
3941            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3942            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3943            //   envelope_size bytes, there is always sufficient room.
3944            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3945                self.elapsed.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3946                encoder,
3947                offset + cur_offset,
3948                depth,
3949            )?;
3950
3951            _prev_end_offset = cur_offset + envelope_size;
3952            if 4 > max_ordinal {
3953                return Ok(());
3954            }
3955
3956            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3957            // are envelope_size bytes.
3958            let cur_offset: usize = (4 - 1) * envelope_size;
3959
3960            // Zero reserved fields.
3961            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3962
3963            // Safety:
3964            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3965            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3966            //   envelope_size bytes, there is always sufficient room.
3967            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3968                self.covered_pcs.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3969                encoder,
3970                offset + cur_offset,
3971                depth,
3972            )?;
3973
3974            _prev_end_offset = cur_offset + envelope_size;
3975            if 5 > max_ordinal {
3976                return Ok(());
3977            }
3978
3979            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3980            // are envelope_size bytes.
3981            let cur_offset: usize = (5 - 1) * envelope_size;
3982
3983            // Zero reserved fields.
3984            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3985
3986            // Safety:
3987            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3988            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3989            //   envelope_size bytes, there is always sufficient room.
3990            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3991                self.covered_features
3992                    .as_ref()
3993                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3994                encoder,
3995                offset + cur_offset,
3996                depth,
3997            )?;
3998
3999            _prev_end_offset = cur_offset + envelope_size;
4000            if 6 > max_ordinal {
4001                return Ok(());
4002            }
4003
4004            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4005            // are envelope_size bytes.
4006            let cur_offset: usize = (6 - 1) * envelope_size;
4007
4008            // Zero reserved fields.
4009            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4010
4011            // Safety:
4012            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4013            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4014            //   envelope_size bytes, there is always sufficient room.
4015            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4016                self.corpus_num_inputs
4017                    .as_ref()
4018                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4019                encoder,
4020                offset + cur_offset,
4021                depth,
4022            )?;
4023
4024            _prev_end_offset = cur_offset + envelope_size;
4025            if 7 > max_ordinal {
4026                return Ok(());
4027            }
4028
4029            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4030            // are envelope_size bytes.
4031            let cur_offset: usize = (7 - 1) * envelope_size;
4032
4033            // Zero reserved fields.
4034            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4035
4036            // Safety:
4037            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4038            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4039            //   envelope_size bytes, there is always sufficient room.
4040            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4041                self.corpus_total_size
4042                    .as_ref()
4043                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4044                encoder,
4045                offset + cur_offset,
4046                depth,
4047            )?;
4048
4049            _prev_end_offset = cur_offset + envelope_size;
4050            if 8 > max_ordinal {
4051                return Ok(());
4052            }
4053
4054            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4055            // are envelope_size bytes.
4056            let cur_offset: usize = (8 - 1) * envelope_size;
4057
4058            // Zero reserved fields.
4059            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4060
4061            // Safety:
4062            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4063            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4064            //   envelope_size bytes, there is always sufficient room.
4065            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ProcessStats, 256>, D>(
4066            self.process_stats.as_ref().map(<fidl::encoding::Vector<ProcessStats, 256> as fidl::encoding::ValueTypeMarker>::borrow),
4067            encoder, offset + cur_offset, depth
4068        )?;
4069
4070            _prev_end_offset = cur_offset + envelope_size;
4071
4072            Ok(())
4073        }
4074    }
4075
4076    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Status {
4077        #[inline(always)]
4078        fn new_empty() -> Self {
4079            Self::default()
4080        }
4081
4082        unsafe fn decode(
4083            &mut self,
4084            decoder: &mut fidl::encoding::Decoder<'_, D>,
4085            offset: usize,
4086            mut depth: fidl::encoding::Depth,
4087        ) -> fidl::Result<()> {
4088            decoder.debug_check_bounds::<Self>(offset);
4089            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4090                None => return Err(fidl::Error::NotNullable),
4091                Some(len) => len,
4092            };
4093            // Calling decoder.out_of_line_offset(0) is not allowed.
4094            if len == 0 {
4095                return Ok(());
4096            };
4097            depth.increment()?;
4098            let envelope_size = 8;
4099            let bytes_len = len * envelope_size;
4100            let offset = decoder.out_of_line_offset(bytes_len)?;
4101            // Decode the envelope for each type.
4102            let mut _next_ordinal_to_read = 0;
4103            let mut next_offset = offset;
4104            let end_offset = offset + bytes_len;
4105            _next_ordinal_to_read += 1;
4106            if next_offset >= end_offset {
4107                return Ok(());
4108            }
4109
4110            // Decode unknown envelopes for gaps in ordinals.
4111            while _next_ordinal_to_read < 1 {
4112                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4113                _next_ordinal_to_read += 1;
4114                next_offset += envelope_size;
4115            }
4116
4117            let next_out_of_line = decoder.next_out_of_line();
4118            let handles_before = decoder.remaining_handles();
4119            if let Some((inlined, num_bytes, num_handles)) =
4120                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4121            {
4122                let member_inline_size =
4123                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4124                if inlined != (member_inline_size <= 4) {
4125                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4126                }
4127                let inner_offset;
4128                let mut inner_depth = depth.clone();
4129                if inlined {
4130                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4131                    inner_offset = next_offset;
4132                } else {
4133                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4134                    inner_depth.increment()?;
4135                }
4136                let val_ref = self.running.get_or_insert_with(|| fidl::new_empty!(bool, D));
4137                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4138                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4139                {
4140                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4141                }
4142                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4143                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4144                }
4145            }
4146
4147            next_offset += envelope_size;
4148            _next_ordinal_to_read += 1;
4149            if next_offset >= end_offset {
4150                return Ok(());
4151            }
4152
4153            // Decode unknown envelopes for gaps in ordinals.
4154            while _next_ordinal_to_read < 2 {
4155                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4156                _next_ordinal_to_read += 1;
4157                next_offset += envelope_size;
4158            }
4159
4160            let next_out_of_line = decoder.next_out_of_line();
4161            let handles_before = decoder.remaining_handles();
4162            if let Some((inlined, num_bytes, num_handles)) =
4163                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4164            {
4165                let member_inline_size =
4166                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4167                if inlined != (member_inline_size <= 4) {
4168                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4169                }
4170                let inner_offset;
4171                let mut inner_depth = depth.clone();
4172                if inlined {
4173                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4174                    inner_offset = next_offset;
4175                } else {
4176                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4177                    inner_depth.increment()?;
4178                }
4179                let val_ref = self.runs.get_or_insert_with(|| fidl::new_empty!(u32, D));
4180                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4181                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4182                {
4183                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4184                }
4185                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4186                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4187                }
4188            }
4189
4190            next_offset += envelope_size;
4191            _next_ordinal_to_read += 1;
4192            if next_offset >= end_offset {
4193                return Ok(());
4194            }
4195
4196            // Decode unknown envelopes for gaps in ordinals.
4197            while _next_ordinal_to_read < 3 {
4198                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4199                _next_ordinal_to_read += 1;
4200                next_offset += envelope_size;
4201            }
4202
4203            let next_out_of_line = decoder.next_out_of_line();
4204            let handles_before = decoder.remaining_handles();
4205            if let Some((inlined, num_bytes, num_handles)) =
4206                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4207            {
4208                let member_inline_size =
4209                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4210                if inlined != (member_inline_size <= 4) {
4211                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4212                }
4213                let inner_offset;
4214                let mut inner_depth = depth.clone();
4215                if inlined {
4216                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4217                    inner_offset = next_offset;
4218                } else {
4219                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4220                    inner_depth.increment()?;
4221                }
4222                let val_ref = self.elapsed.get_or_insert_with(|| fidl::new_empty!(i64, D));
4223                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
4224                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4225                {
4226                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4227                }
4228                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4229                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4230                }
4231            }
4232
4233            next_offset += envelope_size;
4234            _next_ordinal_to_read += 1;
4235            if next_offset >= end_offset {
4236                return Ok(());
4237            }
4238
4239            // Decode unknown envelopes for gaps in ordinals.
4240            while _next_ordinal_to_read < 4 {
4241                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4242                _next_ordinal_to_read += 1;
4243                next_offset += envelope_size;
4244            }
4245
4246            let next_out_of_line = decoder.next_out_of_line();
4247            let handles_before = decoder.remaining_handles();
4248            if let Some((inlined, num_bytes, num_handles)) =
4249                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4250            {
4251                let member_inline_size =
4252                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4253                if inlined != (member_inline_size <= 4) {
4254                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4255                }
4256                let inner_offset;
4257                let mut inner_depth = depth.clone();
4258                if inlined {
4259                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4260                    inner_offset = next_offset;
4261                } else {
4262                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4263                    inner_depth.increment()?;
4264                }
4265                let val_ref = self.covered_pcs.get_or_insert_with(|| fidl::new_empty!(u64, D));
4266                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4267                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4268                {
4269                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4270                }
4271                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4272                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4273                }
4274            }
4275
4276            next_offset += envelope_size;
4277            _next_ordinal_to_read += 1;
4278            if next_offset >= end_offset {
4279                return Ok(());
4280            }
4281
4282            // Decode unknown envelopes for gaps in ordinals.
4283            while _next_ordinal_to_read < 5 {
4284                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4285                _next_ordinal_to_read += 1;
4286                next_offset += envelope_size;
4287            }
4288
4289            let next_out_of_line = decoder.next_out_of_line();
4290            let handles_before = decoder.remaining_handles();
4291            if let Some((inlined, num_bytes, num_handles)) =
4292                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4293            {
4294                let member_inline_size =
4295                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4296                if inlined != (member_inline_size <= 4) {
4297                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4298                }
4299                let inner_offset;
4300                let mut inner_depth = depth.clone();
4301                if inlined {
4302                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4303                    inner_offset = next_offset;
4304                } else {
4305                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4306                    inner_depth.increment()?;
4307                }
4308                let val_ref = self.covered_features.get_or_insert_with(|| fidl::new_empty!(u64, D));
4309                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4310                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4311                {
4312                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4313                }
4314                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4315                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4316                }
4317            }
4318
4319            next_offset += envelope_size;
4320            _next_ordinal_to_read += 1;
4321            if next_offset >= end_offset {
4322                return Ok(());
4323            }
4324
4325            // Decode unknown envelopes for gaps in ordinals.
4326            while _next_ordinal_to_read < 6 {
4327                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4328                _next_ordinal_to_read += 1;
4329                next_offset += envelope_size;
4330            }
4331
4332            let next_out_of_line = decoder.next_out_of_line();
4333            let handles_before = decoder.remaining_handles();
4334            if let Some((inlined, num_bytes, num_handles)) =
4335                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4336            {
4337                let member_inline_size =
4338                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4339                if inlined != (member_inline_size <= 4) {
4340                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4341                }
4342                let inner_offset;
4343                let mut inner_depth = depth.clone();
4344                if inlined {
4345                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4346                    inner_offset = next_offset;
4347                } else {
4348                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4349                    inner_depth.increment()?;
4350                }
4351                let val_ref =
4352                    self.corpus_num_inputs.get_or_insert_with(|| fidl::new_empty!(u64, D));
4353                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4354                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4355                {
4356                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4357                }
4358                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4359                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4360                }
4361            }
4362
4363            next_offset += envelope_size;
4364            _next_ordinal_to_read += 1;
4365            if next_offset >= end_offset {
4366                return Ok(());
4367            }
4368
4369            // Decode unknown envelopes for gaps in ordinals.
4370            while _next_ordinal_to_read < 7 {
4371                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4372                _next_ordinal_to_read += 1;
4373                next_offset += envelope_size;
4374            }
4375
4376            let next_out_of_line = decoder.next_out_of_line();
4377            let handles_before = decoder.remaining_handles();
4378            if let Some((inlined, num_bytes, num_handles)) =
4379                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4380            {
4381                let member_inline_size =
4382                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4383                if inlined != (member_inline_size <= 4) {
4384                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4385                }
4386                let inner_offset;
4387                let mut inner_depth = depth.clone();
4388                if inlined {
4389                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4390                    inner_offset = next_offset;
4391                } else {
4392                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4393                    inner_depth.increment()?;
4394                }
4395                let val_ref =
4396                    self.corpus_total_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
4397                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4398                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4399                {
4400                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4401                }
4402                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4403                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4404                }
4405            }
4406
4407            next_offset += envelope_size;
4408            _next_ordinal_to_read += 1;
4409            if next_offset >= end_offset {
4410                return Ok(());
4411            }
4412
4413            // Decode unknown envelopes for gaps in ordinals.
4414            while _next_ordinal_to_read < 8 {
4415                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4416                _next_ordinal_to_read += 1;
4417                next_offset += envelope_size;
4418            }
4419
4420            let next_out_of_line = decoder.next_out_of_line();
4421            let handles_before = decoder.remaining_handles();
4422            if let Some((inlined, num_bytes, num_handles)) =
4423                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4424            {
4425                let member_inline_size = <fidl::encoding::Vector<ProcessStats, 256> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4426                if inlined != (member_inline_size <= 4) {
4427                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4428                }
4429                let inner_offset;
4430                let mut inner_depth = depth.clone();
4431                if inlined {
4432                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4433                    inner_offset = next_offset;
4434                } else {
4435                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4436                    inner_depth.increment()?;
4437                }
4438                let val_ref = self.process_stats.get_or_insert_with(
4439                    || fidl::new_empty!(fidl::encoding::Vector<ProcessStats, 256>, D),
4440                );
4441                fidl::decode!(fidl::encoding::Vector<ProcessStats, 256>, D, val_ref, decoder, inner_offset, inner_depth)?;
4442                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4443                {
4444                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4445                }
4446                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4447                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4448                }
4449            }
4450
4451            next_offset += envelope_size;
4452
4453            // Decode the remaining unknown envelopes.
4454            while next_offset < end_offset {
4455                _next_ordinal_to_read += 1;
4456                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4457                next_offset += envelope_size;
4458            }
4459
4460            Ok(())
4461        }
4462    }
4463}