fidl_fuchsia_sensors_types__common/
fidl_fuchsia_sensors_types__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/// Uniquely identifies a sensor in the sensor APIs.
12///
13/// Defined to be compatible with:
14/// https://android.googlesource.com/platform/hardware/interfaces/+/main/sensors/1.0/types.hal#817
15pub type SensorId = i32;
16
17/// A revision number for the part/driver combination. The value must be updated
18/// when the driver is updated in a way that changes the output of the sensor.
19/// This is important for fused sensors when the fusion algorithm is updated.
20///
21/// Defined to be compatible with:
22/// https://android.googlesource.com/platform/hardware/interfaces/+/main/sensors/1.0/types.hal#834
23pub type SensorVersion = i32;
24
25/// Exponential scaling value for SI units.
26#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
27pub enum Scale {
28    Nano,
29    Micro,
30    Milli,
31    Centi,
32    Deci,
33    None,
34    Deca,
35    Hecto,
36    Kilo,
37    Mega,
38    Giga,
39    #[doc(hidden)]
40    __SourceBreaking {
41        unknown_ordinal: i16,
42    },
43}
44
45/// Pattern that matches an unknown `Scale` member.
46#[macro_export]
47macro_rules! ScaleUnknown {
48    () => {
49        _
50    };
51}
52
53impl Scale {
54    #[inline]
55    pub fn from_primitive(prim: i16) -> Option<Self> {
56        match prim {
57            -9 => Some(Self::Nano),
58            -6 => Some(Self::Micro),
59            -3 => Some(Self::Milli),
60            -2 => Some(Self::Centi),
61            -1 => Some(Self::Deci),
62            0 => Some(Self::None),
63            1 => Some(Self::Deca),
64            2 => Some(Self::Hecto),
65            3 => Some(Self::Kilo),
66            6 => Some(Self::Mega),
67            9 => Some(Self::Giga),
68            _ => None,
69        }
70    }
71
72    #[inline]
73    pub fn from_primitive_allow_unknown(prim: i16) -> Self {
74        match prim {
75            -9 => Self::Nano,
76            -6 => Self::Micro,
77            -3 => Self::Milli,
78            -2 => Self::Centi,
79            -1 => Self::Deci,
80            0 => Self::None,
81            1 => Self::Deca,
82            2 => Self::Hecto,
83            3 => Self::Kilo,
84            6 => Self::Mega,
85            9 => Self::Giga,
86            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
87        }
88    }
89
90    #[inline]
91    pub fn unknown() -> Self {
92        Self::__SourceBreaking { unknown_ordinal: 0x7fff }
93    }
94
95    #[inline]
96    pub const fn into_primitive(self) -> i16 {
97        match self {
98            Self::Nano => -9,
99            Self::Micro => -6,
100            Self::Milli => -3,
101            Self::Centi => -2,
102            Self::Deci => -1,
103            Self::None => 0,
104            Self::Deca => 1,
105            Self::Hecto => 2,
106            Self::Kilo => 3,
107            Self::Mega => 6,
108            Self::Giga => 9,
109            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
110        }
111    }
112
113    #[inline]
114    pub fn is_unknown(&self) -> bool {
115        match self {
116            Self::__SourceBreaking { unknown_ordinal: _ } => true,
117            _ => false,
118        }
119    }
120}
121
122/// Describes a sensor's reporting mode.
123#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
124pub enum SensorReportingMode {
125    /// Continous reporting will continuously deliver samples, subject to the
126    /// requested sampling rate and maximum reporting latency.
127    Continuous,
128    /// On-change reporting will deliver a sample any time the sensor value
129    /// changes, subject to the requested sampling rate and max reporting
130    /// latency.
131    OnChange,
132    OneShot,
133    #[doc(hidden)]
134    __SourceBreaking {
135        unknown_ordinal: u32,
136    },
137}
138
139/// Pattern that matches an unknown `SensorReportingMode` member.
140#[macro_export]
141macro_rules! SensorReportingModeUnknown {
142    () => {
143        _
144    };
145}
146
147impl SensorReportingMode {
148    #[inline]
149    pub fn from_primitive(prim: u32) -> Option<Self> {
150        match prim {
151            0 => Some(Self::Continuous),
152            1 => Some(Self::OnChange),
153            2 => Some(Self::OneShot),
154            _ => None,
155        }
156    }
157
158    #[inline]
159    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
160        match prim {
161            0 => Self::Continuous,
162            1 => Self::OnChange,
163            2 => Self::OneShot,
164            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
165        }
166    }
167
168    #[inline]
169    pub fn unknown() -> Self {
170        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
171    }
172
173    #[inline]
174    pub const fn into_primitive(self) -> u32 {
175        match self {
176            Self::Continuous => 0,
177            Self::OnChange => 1,
178            Self::OneShot => 2,
179            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
180        }
181    }
182
183    #[inline]
184    pub fn is_unknown(&self) -> bool {
185        match self {
186            Self::__SourceBreaking { unknown_ordinal: _ } => true,
187            _ => false,
188        }
189    }
190}
191
192/// Labels for different types of sensors.
193///
194/// These values are derived from:
195/// https://android.googlesource.com/platform/hardware/interfaces/+/main/sensors/1.0/types.hal#118
196#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
197pub enum SensorType {
198    /// Raw inertial measurement.
199    AccelerometerUncalibrated,
200    GyroscopeUncalibrated,
201    MagneticFieldUncalibrated,
202    /// Calibrated inertial measurement.
203    Accelerometer,
204    Gyroscope,
205    MagneticField,
206    /// Derived/fused from inertial measurement.
207    Orientation,
208    Gravity,
209    LinearAcceleration,
210    RotationVector,
211    GameRotationVector,
212    SignificantMotion,
213    StepDetector,
214    StepCounter,
215    GeomagneticRotationVector,
216    TiltDetector,
217    WakeGesture,
218    GlanceGesture,
219    PickUpGesture,
220    WristTiltGesture,
221    DeviceOrientation,
222    Pose6Dof,
223    StationaryDetect,
224    MotionDetect,
225    LowLatencyOffbodyDetect,
226    /// Environmental.
227    Light,
228    Pressure,
229    Proximity,
230    RelativeHumidity,
231    AmbientTemperature,
232    /// Biometric.
233    HeartRate,
234    HeartBeat,
235    /// Power and electrical.
236    Power,
237    /// Base for device manufacturers' private sensor types.
238    DevicePrivateBase,
239    #[doc(hidden)]
240    __SourceBreaking {
241        unknown_ordinal: u32,
242    },
243}
244
245/// Pattern that matches an unknown `SensorType` member.
246#[macro_export]
247macro_rules! SensorTypeUnknown {
248    () => {
249        _
250    };
251}
252
253impl SensorType {
254    #[inline]
255    pub fn from_primitive(prim: u32) -> Option<Self> {
256        match prim {
257            35 => Some(Self::AccelerometerUncalibrated),
258            16 => Some(Self::GyroscopeUncalibrated),
259            14 => Some(Self::MagneticFieldUncalibrated),
260            1 => Some(Self::Accelerometer),
261            4 => Some(Self::Gyroscope),
262            2 => Some(Self::MagneticField),
263            3 => Some(Self::Orientation),
264            9 => Some(Self::Gravity),
265            10 => Some(Self::LinearAcceleration),
266            11 => Some(Self::RotationVector),
267            15 => Some(Self::GameRotationVector),
268            17 => Some(Self::SignificantMotion),
269            18 => Some(Self::StepDetector),
270            19 => Some(Self::StepCounter),
271            20 => Some(Self::GeomagneticRotationVector),
272            22 => Some(Self::TiltDetector),
273            23 => Some(Self::WakeGesture),
274            24 => Some(Self::GlanceGesture),
275            25 => Some(Self::PickUpGesture),
276            26 => Some(Self::WristTiltGesture),
277            27 => Some(Self::DeviceOrientation),
278            28 => Some(Self::Pose6Dof),
279            29 => Some(Self::StationaryDetect),
280            30 => Some(Self::MotionDetect),
281            34 => Some(Self::LowLatencyOffbodyDetect),
282            5 => Some(Self::Light),
283            6 => Some(Self::Pressure),
284            8 => Some(Self::Proximity),
285            12 => Some(Self::RelativeHumidity),
286            13 => Some(Self::AmbientTemperature),
287            21 => Some(Self::HeartRate),
288            31 => Some(Self::HeartBeat),
289            1001 => Some(Self::Power),
290            65536 => Some(Self::DevicePrivateBase),
291            _ => None,
292        }
293    }
294
295    #[inline]
296    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
297        match prim {
298            35 => Self::AccelerometerUncalibrated,
299            16 => Self::GyroscopeUncalibrated,
300            14 => Self::MagneticFieldUncalibrated,
301            1 => Self::Accelerometer,
302            4 => Self::Gyroscope,
303            2 => Self::MagneticField,
304            3 => Self::Orientation,
305            9 => Self::Gravity,
306            10 => Self::LinearAcceleration,
307            11 => Self::RotationVector,
308            15 => Self::GameRotationVector,
309            17 => Self::SignificantMotion,
310            18 => Self::StepDetector,
311            19 => Self::StepCounter,
312            20 => Self::GeomagneticRotationVector,
313            22 => Self::TiltDetector,
314            23 => Self::WakeGesture,
315            24 => Self::GlanceGesture,
316            25 => Self::PickUpGesture,
317            26 => Self::WristTiltGesture,
318            27 => Self::DeviceOrientation,
319            28 => Self::Pose6Dof,
320            29 => Self::StationaryDetect,
321            30 => Self::MotionDetect,
322            34 => Self::LowLatencyOffbodyDetect,
323            5 => Self::Light,
324            6 => Self::Pressure,
325            8 => Self::Proximity,
326            12 => Self::RelativeHumidity,
327            13 => Self::AmbientTemperature,
328            21 => Self::HeartRate,
329            31 => Self::HeartBeat,
330            1001 => Self::Power,
331            65536 => Self::DevicePrivateBase,
332            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
333        }
334    }
335
336    #[inline]
337    pub fn unknown() -> Self {
338        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
339    }
340
341    #[inline]
342    pub const fn into_primitive(self) -> u32 {
343        match self {
344            Self::AccelerometerUncalibrated => 35,
345            Self::GyroscopeUncalibrated => 16,
346            Self::MagneticFieldUncalibrated => 14,
347            Self::Accelerometer => 1,
348            Self::Gyroscope => 4,
349            Self::MagneticField => 2,
350            Self::Orientation => 3,
351            Self::Gravity => 9,
352            Self::LinearAcceleration => 10,
353            Self::RotationVector => 11,
354            Self::GameRotationVector => 15,
355            Self::SignificantMotion => 17,
356            Self::StepDetector => 18,
357            Self::StepCounter => 19,
358            Self::GeomagneticRotationVector => 20,
359            Self::TiltDetector => 22,
360            Self::WakeGesture => 23,
361            Self::GlanceGesture => 24,
362            Self::PickUpGesture => 25,
363            Self::WristTiltGesture => 26,
364            Self::DeviceOrientation => 27,
365            Self::Pose6Dof => 28,
366            Self::StationaryDetect => 29,
367            Self::MotionDetect => 30,
368            Self::LowLatencyOffbodyDetect => 34,
369            Self::Light => 5,
370            Self::Pressure => 6,
371            Self::Proximity => 8,
372            Self::RelativeHumidity => 12,
373            Self::AmbientTemperature => 13,
374            Self::HeartRate => 21,
375            Self::HeartBeat => 31,
376            Self::Power => 1001,
377            Self::DevicePrivateBase => 65536,
378            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
379        }
380    }
381
382    #[inline]
383    pub fn is_unknown(&self) -> bool {
384        match self {
385            Self::__SourceBreaking { unknown_ordinal: _ } => true,
386            _ => false,
387        }
388    }
389}
390
391/// Describes a sensor's wake-up behavior. A wake-up sensor will wake up the
392/// application processor when there is new data available. A non wake-up sensor
393/// will not.
394#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
395pub enum SensorWakeUpType {
396    NonWakeUp,
397    WakeUp,
398    #[doc(hidden)]
399    __SourceBreaking {
400        unknown_ordinal: u32,
401    },
402}
403
404/// Pattern that matches an unknown `SensorWakeUpType` member.
405#[macro_export]
406macro_rules! SensorWakeUpTypeUnknown {
407    () => {
408        _
409    };
410}
411
412impl SensorWakeUpType {
413    #[inline]
414    pub fn from_primitive(prim: u32) -> Option<Self> {
415        match prim {
416            0 => Some(Self::NonWakeUp),
417            1 => Some(Self::WakeUp),
418            _ => None,
419        }
420    }
421
422    #[inline]
423    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
424        match prim {
425            0 => Self::NonWakeUp,
426            1 => Self::WakeUp,
427            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
428        }
429    }
430
431    #[inline]
432    pub fn unknown() -> Self {
433        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
434    }
435
436    #[inline]
437    pub const fn into_primitive(self) -> u32 {
438        match self {
439            Self::NonWakeUp => 0,
440            Self::WakeUp => 1,
441            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
442        }
443    }
444
445    #[inline]
446    pub fn is_unknown(&self) -> bool {
447        match self {
448            Self::__SourceBreaking { unknown_ordinal: _ } => true,
449            _ => false,
450        }
451    }
452}
453
454/// Unit type for measurements and configuration settings.
455#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
456pub enum Unit {
457    /// Unitless
458    None,
459    /// Movement/position
460    MPerSecSqrd,
461    Degrees,
462    RadPerSecond,
463    QuaternionAndMeters,
464    /// Environment
465    Tesla,
466    Pascal,
467    Meter,
468    RelativeHumidity,
469    Celsius,
470    Lux,
471    /// Biometric
472    Steps,
473    BeatsPerMin,
474    /// Power sensors
475    Watts,
476    Volts,
477    Amps,
478    Joules,
479    Coulombs,
480    #[doc(hidden)]
481    __SourceBreaking {
482        unknown_ordinal: u32,
483    },
484}
485
486/// Pattern that matches an unknown `Unit` member.
487#[macro_export]
488macro_rules! UnitUnknown {
489    () => {
490        _
491    };
492}
493
494impl Unit {
495    #[inline]
496    pub fn from_primitive(prim: u32) -> Option<Self> {
497        match prim {
498            0 => Some(Self::None),
499            1 => Some(Self::MPerSecSqrd),
500            2 => Some(Self::Degrees),
501            3 => Some(Self::RadPerSecond),
502            4 => Some(Self::QuaternionAndMeters),
503            5 => Some(Self::Tesla),
504            6 => Some(Self::Pascal),
505            7 => Some(Self::Meter),
506            8 => Some(Self::RelativeHumidity),
507            9 => Some(Self::Celsius),
508            10 => Some(Self::Lux),
509            11 => Some(Self::Steps),
510            12 => Some(Self::BeatsPerMin),
511            21 => Some(Self::Watts),
512            22 => Some(Self::Volts),
513            23 => Some(Self::Amps),
514            24 => Some(Self::Joules),
515            25 => Some(Self::Coulombs),
516            _ => None,
517        }
518    }
519
520    #[inline]
521    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
522        match prim {
523            0 => Self::None,
524            1 => Self::MPerSecSqrd,
525            2 => Self::Degrees,
526            3 => Self::RadPerSecond,
527            4 => Self::QuaternionAndMeters,
528            5 => Self::Tesla,
529            6 => Self::Pascal,
530            7 => Self::Meter,
531            8 => Self::RelativeHumidity,
532            9 => Self::Celsius,
533            10 => Self::Lux,
534            11 => Self::Steps,
535            12 => Self::BeatsPerMin,
536            21 => Self::Watts,
537            22 => Self::Volts,
538            23 => Self::Amps,
539            24 => Self::Joules,
540            25 => Self::Coulombs,
541            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
542        }
543    }
544
545    #[inline]
546    pub fn unknown() -> Self {
547        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
548    }
549
550    #[inline]
551    pub const fn into_primitive(self) -> u32 {
552        match self {
553            Self::None => 0,
554            Self::MPerSecSqrd => 1,
555            Self::Degrees => 2,
556            Self::RadPerSecond => 3,
557            Self::QuaternionAndMeters => 4,
558            Self::Tesla => 5,
559            Self::Pascal => 6,
560            Self::Meter => 7,
561            Self::RelativeHumidity => 8,
562            Self::Celsius => 9,
563            Self::Lux => 10,
564            Self::Steps => 11,
565            Self::BeatsPerMin => 12,
566            Self::Watts => 21,
567            Self::Volts => 22,
568            Self::Amps => 23,
569            Self::Joules => 24,
570            Self::Coulombs => 25,
571            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
572        }
573    }
574
575    #[inline]
576    pub fn is_unknown(&self) -> bool {
577        match self {
578            Self::__SourceBreaking { unknown_ordinal: _ } => true,
579            _ => false,
580        }
581    }
582}
583
584/// A 6 degree of freedom (“6DOF”) pose describes a position and orientation in
585/// a 3D space.
586#[derive(Clone, Debug, PartialEq)]
587pub struct Pose {
588    /// A quaternion representing the orientation.
589    pub rotation: fidl_fuchsia_math__common::Vec4F,
590    /// A vector represeting the position.
591    pub translation: fidl_fuchsia_math__common::Vec3F,
592    /// A quaternion describing the rotation from the last known orientation.
593    pub rotation_delta: fidl_fuchsia_math__common::Vec4F,
594    /// A vector describing the translation from the last known position.
595    pub translation_delta: fidl_fuchsia_math__common::Vec3F,
596}
597
598impl fidl::Persistable for Pose {}
599
600/// A sample from a single sensor.
601#[derive(Clone, Debug, PartialEq)]
602pub struct SensorEvent {
603    /// The sample timestamp relative to device boot.
604    pub timestamp: i64,
605    /// The SensorId of the originating sensor.
606    pub sensor_id: i32,
607    /// The type of the originating sensor.
608    pub sensor_type: SensorType,
609    /// A sequence number that will be incremented for every sensor event
610    /// emitted.
611    pub sequence_number: u64,
612    /// The sample data (see documentation for EventPayload).
613    pub payload: EventPayload,
614}
615
616impl fidl::Persistable for SensorEvent {}
617
618/// Uncalibrated samples from 3 axis sensors (eg. accelerometer, gyroscope,
619/// magnetometer) come with bias data for each axis.
620#[derive(Clone, Debug, PartialEq)]
621pub struct UncalibratedVec3FSample {
622    pub sample: fidl_fuchsia_math__common::Vec3F,
623    pub biases: fidl_fuchsia_math__common::Vec3F,
624}
625
626impl fidl::Persistable for UncalibratedVec3FSample {}
627
628/// All the information to describe a specific sensor and its output.
629#[derive(Clone, Debug, Default, PartialEq)]
630pub struct SensorInfo {
631    /// Identifies this sensor.
632    ///
633    /// Required.
634    pub sensor_id: Option<i32>,
635    /// Name of this sensor.
636    /// All sensors of the same "type" must have a different "name".
637    ///
638    /// Required.
639    pub name: Option<String>,
640    /// Vendor of the hardware part.
641    ///
642    /// Required.
643    pub vendor: Option<String>,
644    /// Version number. See documentation for SensorVersion.
645    ///
646    /// Required.
647    pub version: Option<i32>,
648    /// This sensor's type.
649    ///
650    /// Required.
651    pub sensor_type: Option<SensorType>,
652    /// The wake-up behavior of this sensor.
653    ///
654    /// Required.
655    pub wake_up: Option<SensorWakeUpType>,
656    /// The reporting mode of this sensor.
657    ///
658    /// Required.
659    pub reporting_mode: Option<SensorReportingMode>,
660    /// The unit type of returned measurements.
661    pub measurement_unit: Option<Unit>,
662    /// The magnitude of returned measurements as an exponent.
663    /// Measurement = |value| * 10^|measurement_scale| units.
664    pub measurement_scale: Option<Scale>,
665    #[doc(hidden)]
666    pub __source_breaking: fidl::marker::SourceBreaking,
667}
668
669impl fidl::Persistable for SensorInfo {}
670
671/// Rate configuration given to Driver::ConfigureSensorRate and
672/// Manager::ConfigureSensorRate.
673#[derive(Clone, Debug, Default, PartialEq)]
674pub struct SensorRateConfig {
675    /// The desired time period between samples arriving from the hardware.
676    ///
677    /// Required.
678    pub sampling_period_ns: Option<i64>,
679    /// How long a sensor value may be buffered before it is emitted. A value of
680    /// zero will result in no buffering.
681    ///
682    /// Required.
683    pub max_reporting_latency_ns: Option<i64>,
684    #[doc(hidden)]
685    pub __source_breaking: fidl::marker::SourceBreaking,
686}
687
688impl fidl::Persistable for SensorRateConfig {}
689
690/// All of the potential data types a SensorEvent may carry depending on the
691/// sensor type.
692#[derive(Clone, Debug)]
693pub enum EventPayload {
694    /// The following sensors emit basic 3D float vectors:
695    /// ACCELEROMETER, MAGNETIC_FIELD, ORIENTATION, GYROSCOPE, GRAVITY,
696    /// LINEAR_ACCELERATION.
697    Vec3(fidl_fuchsia_math__common::Vec3F),
698    /// The following sensors emit floating point quaternions:
699    /// ROTATION_VECTOR, GEOMAGNETIC_ROTATION_VECTOR, GAME_ROTATION_VECTOR.
700    Quaternion(fidl_fuchsia_math__common::Vec4F),
701    /// The following sensors emit pairs of float vectors (see documentation for
702    /// UncalibratedImuSample):
703    /// MAGNETIC_FIELD_UNCALIBRATED, GYROSCOPE_UNCALIBRATED,
704    /// ACCELEROMETER_UNCALIBRATED.
705    UncalibratedVec3(UncalibratedVec3FSample),
706    /// The following sensors emit a single float:
707    /// DEVICE_ORIENTATION, LIGHT, PRESSURE, TEMPERATURE, PROXIMITY,
708    /// RELATIVE_HUMIDITY, AMBIENT_TEMPERATURE, SIGNIFICANT_MOTION,
709    /// STEP_DETECTOR, TILT_DETECTOR, WAKE_GESTURE, GLANCE_GESTURE,
710    /// PICK_UP_GESTURE, WRIST_TILT_GESTURE, STATIONARY_DETECT, MOTION_DETECT,
711    /// HEART_BEAT, LOW_LATENCY_OFFBODY_DETECT, HEART_RATE.
712    Float(f32),
713    /// The following senors emit an unsigned 64-bit integer:
714    /// STEP_COUNTER
715    Integer(u64),
716    /// The following sensor types emit a pose (see documentation for Pose):
717    /// POSE_6DOF.
718    Pose(Pose),
719    #[doc(hidden)]
720    __SourceBreaking { unknown_ordinal: u64 },
721}
722
723/// Pattern that matches an unknown `EventPayload` member.
724#[macro_export]
725macro_rules! EventPayloadUnknown {
726    () => {
727        _
728    };
729}
730
731// Custom PartialEq so that unknown variants are not equal to themselves.
732impl PartialEq for EventPayload {
733    fn eq(&self, other: &Self) -> bool {
734        match (self, other) {
735            (Self::Vec3(x), Self::Vec3(y)) => *x == *y,
736            (Self::Quaternion(x), Self::Quaternion(y)) => *x == *y,
737            (Self::UncalibratedVec3(x), Self::UncalibratedVec3(y)) => *x == *y,
738            (Self::Float(x), Self::Float(y)) => *x == *y,
739            (Self::Integer(x), Self::Integer(y)) => *x == *y,
740            (Self::Pose(x), Self::Pose(y)) => *x == *y,
741            _ => false,
742        }
743    }
744}
745
746impl EventPayload {
747    #[inline]
748    pub fn ordinal(&self) -> u64 {
749        match *self {
750            Self::Vec3(_) => 1,
751            Self::Quaternion(_) => 2,
752            Self::UncalibratedVec3(_) => 3,
753            Self::Float(_) => 4,
754            Self::Integer(_) => 5,
755            Self::Pose(_) => 6,
756            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
757        }
758    }
759
760    #[inline]
761    pub fn unknown_variant_for_testing() -> Self {
762        Self::__SourceBreaking { unknown_ordinal: 0 }
763    }
764
765    #[inline]
766    pub fn is_unknown(&self) -> bool {
767        match self {
768            Self::__SourceBreaking { .. } => true,
769            _ => false,
770        }
771    }
772}
773
774impl fidl::Persistable for EventPayload {}
775
776mod internal {
777    use super::*;
778    unsafe impl fidl::encoding::TypeMarker for Scale {
779        type Owned = Self;
780
781        #[inline(always)]
782        fn inline_align(_context: fidl::encoding::Context) -> usize {
783            std::mem::align_of::<i16>()
784        }
785
786        #[inline(always)]
787        fn inline_size(_context: fidl::encoding::Context) -> usize {
788            std::mem::size_of::<i16>()
789        }
790
791        #[inline(always)]
792        fn encode_is_copy() -> bool {
793            false
794        }
795
796        #[inline(always)]
797        fn decode_is_copy() -> bool {
798            false
799        }
800    }
801
802    impl fidl::encoding::ValueTypeMarker for Scale {
803        type Borrowed<'a> = Self;
804        #[inline(always)]
805        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
806            *value
807        }
808    }
809
810    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Scale {
811        #[inline]
812        unsafe fn encode(
813            self,
814            encoder: &mut fidl::encoding::Encoder<'_, D>,
815            offset: usize,
816            _depth: fidl::encoding::Depth,
817        ) -> fidl::Result<()> {
818            encoder.debug_check_bounds::<Self>(offset);
819            encoder.write_num(self.into_primitive(), offset);
820            Ok(())
821        }
822    }
823
824    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Scale {
825        #[inline(always)]
826        fn new_empty() -> Self {
827            Self::unknown()
828        }
829
830        #[inline]
831        unsafe fn decode(
832            &mut self,
833            decoder: &mut fidl::encoding::Decoder<'_, D>,
834            offset: usize,
835            _depth: fidl::encoding::Depth,
836        ) -> fidl::Result<()> {
837            decoder.debug_check_bounds::<Self>(offset);
838            let prim = decoder.read_num::<i16>(offset);
839
840            *self = Self::from_primitive_allow_unknown(prim);
841            Ok(())
842        }
843    }
844    unsafe impl fidl::encoding::TypeMarker for SensorReportingMode {
845        type Owned = Self;
846
847        #[inline(always)]
848        fn inline_align(_context: fidl::encoding::Context) -> usize {
849            std::mem::align_of::<u32>()
850        }
851
852        #[inline(always)]
853        fn inline_size(_context: fidl::encoding::Context) -> usize {
854            std::mem::size_of::<u32>()
855        }
856
857        #[inline(always)]
858        fn encode_is_copy() -> bool {
859            false
860        }
861
862        #[inline(always)]
863        fn decode_is_copy() -> bool {
864            false
865        }
866    }
867
868    impl fidl::encoding::ValueTypeMarker for SensorReportingMode {
869        type Borrowed<'a> = Self;
870        #[inline(always)]
871        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
872            *value
873        }
874    }
875
876    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
877        for SensorReportingMode
878    {
879        #[inline]
880        unsafe fn encode(
881            self,
882            encoder: &mut fidl::encoding::Encoder<'_, D>,
883            offset: usize,
884            _depth: fidl::encoding::Depth,
885        ) -> fidl::Result<()> {
886            encoder.debug_check_bounds::<Self>(offset);
887            encoder.write_num(self.into_primitive(), offset);
888            Ok(())
889        }
890    }
891
892    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SensorReportingMode {
893        #[inline(always)]
894        fn new_empty() -> Self {
895            Self::unknown()
896        }
897
898        #[inline]
899        unsafe fn decode(
900            &mut self,
901            decoder: &mut fidl::encoding::Decoder<'_, D>,
902            offset: usize,
903            _depth: fidl::encoding::Depth,
904        ) -> fidl::Result<()> {
905            decoder.debug_check_bounds::<Self>(offset);
906            let prim = decoder.read_num::<u32>(offset);
907
908            *self = Self::from_primitive_allow_unknown(prim);
909            Ok(())
910        }
911    }
912    unsafe impl fidl::encoding::TypeMarker for SensorType {
913        type Owned = Self;
914
915        #[inline(always)]
916        fn inline_align(_context: fidl::encoding::Context) -> usize {
917            std::mem::align_of::<u32>()
918        }
919
920        #[inline(always)]
921        fn inline_size(_context: fidl::encoding::Context) -> usize {
922            std::mem::size_of::<u32>()
923        }
924
925        #[inline(always)]
926        fn encode_is_copy() -> bool {
927            false
928        }
929
930        #[inline(always)]
931        fn decode_is_copy() -> bool {
932            false
933        }
934    }
935
936    impl fidl::encoding::ValueTypeMarker for SensorType {
937        type Borrowed<'a> = Self;
938        #[inline(always)]
939        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
940            *value
941        }
942    }
943
944    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SensorType {
945        #[inline]
946        unsafe fn encode(
947            self,
948            encoder: &mut fidl::encoding::Encoder<'_, D>,
949            offset: usize,
950            _depth: fidl::encoding::Depth,
951        ) -> fidl::Result<()> {
952            encoder.debug_check_bounds::<Self>(offset);
953            encoder.write_num(self.into_primitive(), offset);
954            Ok(())
955        }
956    }
957
958    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SensorType {
959        #[inline(always)]
960        fn new_empty() -> Self {
961            Self::unknown()
962        }
963
964        #[inline]
965        unsafe fn decode(
966            &mut self,
967            decoder: &mut fidl::encoding::Decoder<'_, D>,
968            offset: usize,
969            _depth: fidl::encoding::Depth,
970        ) -> fidl::Result<()> {
971            decoder.debug_check_bounds::<Self>(offset);
972            let prim = decoder.read_num::<u32>(offset);
973
974            *self = Self::from_primitive_allow_unknown(prim);
975            Ok(())
976        }
977    }
978    unsafe impl fidl::encoding::TypeMarker for SensorWakeUpType {
979        type Owned = Self;
980
981        #[inline(always)]
982        fn inline_align(_context: fidl::encoding::Context) -> usize {
983            std::mem::align_of::<u32>()
984        }
985
986        #[inline(always)]
987        fn inline_size(_context: fidl::encoding::Context) -> usize {
988            std::mem::size_of::<u32>()
989        }
990
991        #[inline(always)]
992        fn encode_is_copy() -> bool {
993            false
994        }
995
996        #[inline(always)]
997        fn decode_is_copy() -> bool {
998            false
999        }
1000    }
1001
1002    impl fidl::encoding::ValueTypeMarker for SensorWakeUpType {
1003        type Borrowed<'a> = Self;
1004        #[inline(always)]
1005        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1006            *value
1007        }
1008    }
1009
1010    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1011        for SensorWakeUpType
1012    {
1013        #[inline]
1014        unsafe fn encode(
1015            self,
1016            encoder: &mut fidl::encoding::Encoder<'_, D>,
1017            offset: usize,
1018            _depth: fidl::encoding::Depth,
1019        ) -> fidl::Result<()> {
1020            encoder.debug_check_bounds::<Self>(offset);
1021            encoder.write_num(self.into_primitive(), offset);
1022            Ok(())
1023        }
1024    }
1025
1026    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SensorWakeUpType {
1027        #[inline(always)]
1028        fn new_empty() -> Self {
1029            Self::unknown()
1030        }
1031
1032        #[inline]
1033        unsafe fn decode(
1034            &mut self,
1035            decoder: &mut fidl::encoding::Decoder<'_, D>,
1036            offset: usize,
1037            _depth: fidl::encoding::Depth,
1038        ) -> fidl::Result<()> {
1039            decoder.debug_check_bounds::<Self>(offset);
1040            let prim = decoder.read_num::<u32>(offset);
1041
1042            *self = Self::from_primitive_allow_unknown(prim);
1043            Ok(())
1044        }
1045    }
1046    unsafe impl fidl::encoding::TypeMarker for Unit {
1047        type Owned = Self;
1048
1049        #[inline(always)]
1050        fn inline_align(_context: fidl::encoding::Context) -> usize {
1051            std::mem::align_of::<u32>()
1052        }
1053
1054        #[inline(always)]
1055        fn inline_size(_context: fidl::encoding::Context) -> usize {
1056            std::mem::size_of::<u32>()
1057        }
1058
1059        #[inline(always)]
1060        fn encode_is_copy() -> bool {
1061            false
1062        }
1063
1064        #[inline(always)]
1065        fn decode_is_copy() -> bool {
1066            false
1067        }
1068    }
1069
1070    impl fidl::encoding::ValueTypeMarker for Unit {
1071        type Borrowed<'a> = Self;
1072        #[inline(always)]
1073        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1074            *value
1075        }
1076    }
1077
1078    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Unit {
1079        #[inline]
1080        unsafe fn encode(
1081            self,
1082            encoder: &mut fidl::encoding::Encoder<'_, D>,
1083            offset: usize,
1084            _depth: fidl::encoding::Depth,
1085        ) -> fidl::Result<()> {
1086            encoder.debug_check_bounds::<Self>(offset);
1087            encoder.write_num(self.into_primitive(), offset);
1088            Ok(())
1089        }
1090    }
1091
1092    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Unit {
1093        #[inline(always)]
1094        fn new_empty() -> Self {
1095            Self::unknown()
1096        }
1097
1098        #[inline]
1099        unsafe fn decode(
1100            &mut self,
1101            decoder: &mut fidl::encoding::Decoder<'_, D>,
1102            offset: usize,
1103            _depth: fidl::encoding::Depth,
1104        ) -> fidl::Result<()> {
1105            decoder.debug_check_bounds::<Self>(offset);
1106            let prim = decoder.read_num::<u32>(offset);
1107
1108            *self = Self::from_primitive_allow_unknown(prim);
1109            Ok(())
1110        }
1111    }
1112
1113    impl fidl::encoding::ValueTypeMarker for Pose {
1114        type Borrowed<'a> = &'a Self;
1115        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1116            value
1117        }
1118    }
1119
1120    unsafe impl fidl::encoding::TypeMarker for Pose {
1121        type Owned = Self;
1122
1123        #[inline(always)]
1124        fn inline_align(_context: fidl::encoding::Context) -> usize {
1125            4
1126        }
1127
1128        #[inline(always)]
1129        fn inline_size(_context: fidl::encoding::Context) -> usize {
1130            56
1131        }
1132    }
1133
1134    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Pose, D> for &Pose {
1135        #[inline]
1136        unsafe fn encode(
1137            self,
1138            encoder: &mut fidl::encoding::Encoder<'_, D>,
1139            offset: usize,
1140            _depth: fidl::encoding::Depth,
1141        ) -> fidl::Result<()> {
1142            encoder.debug_check_bounds::<Pose>(offset);
1143            // Delegate to tuple encoding.
1144            fidl::encoding::Encode::<Pose, D>::encode(
1145                (
1146                    <fidl_fuchsia_math__common::Vec4F as fidl::encoding::ValueTypeMarker>::borrow(
1147                        &self.rotation,
1148                    ),
1149                    <fidl_fuchsia_math__common::Vec3F as fidl::encoding::ValueTypeMarker>::borrow(
1150                        &self.translation,
1151                    ),
1152                    <fidl_fuchsia_math__common::Vec4F as fidl::encoding::ValueTypeMarker>::borrow(
1153                        &self.rotation_delta,
1154                    ),
1155                    <fidl_fuchsia_math__common::Vec3F as fidl::encoding::ValueTypeMarker>::borrow(
1156                        &self.translation_delta,
1157                    ),
1158                ),
1159                encoder,
1160                offset,
1161                _depth,
1162            )
1163        }
1164    }
1165    unsafe impl<
1166        D: fidl::encoding::ResourceDialect,
1167        T0: fidl::encoding::Encode<fidl_fuchsia_math__common::Vec4F, D>,
1168        T1: fidl::encoding::Encode<fidl_fuchsia_math__common::Vec3F, D>,
1169        T2: fidl::encoding::Encode<fidl_fuchsia_math__common::Vec4F, D>,
1170        T3: fidl::encoding::Encode<fidl_fuchsia_math__common::Vec3F, D>,
1171    > fidl::encoding::Encode<Pose, D> for (T0, T1, T2, T3)
1172    {
1173        #[inline]
1174        unsafe fn encode(
1175            self,
1176            encoder: &mut fidl::encoding::Encoder<'_, D>,
1177            offset: usize,
1178            depth: fidl::encoding::Depth,
1179        ) -> fidl::Result<()> {
1180            encoder.debug_check_bounds::<Pose>(offset);
1181            // Zero out padding regions. There's no need to apply masks
1182            // because the unmasked parts will be overwritten by fields.
1183            // Write the fields.
1184            self.0.encode(encoder, offset + 0, depth)?;
1185            self.1.encode(encoder, offset + 16, depth)?;
1186            self.2.encode(encoder, offset + 28, depth)?;
1187            self.3.encode(encoder, offset + 44, depth)?;
1188            Ok(())
1189        }
1190    }
1191
1192    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Pose {
1193        #[inline(always)]
1194        fn new_empty() -> Self {
1195            Self {
1196                rotation: fidl::new_empty!(fidl_fuchsia_math__common::Vec4F, D),
1197                translation: fidl::new_empty!(fidl_fuchsia_math__common::Vec3F, D),
1198                rotation_delta: fidl::new_empty!(fidl_fuchsia_math__common::Vec4F, D),
1199                translation_delta: fidl::new_empty!(fidl_fuchsia_math__common::Vec3F, D),
1200            }
1201        }
1202
1203        #[inline]
1204        unsafe fn decode(
1205            &mut self,
1206            decoder: &mut fidl::encoding::Decoder<'_, D>,
1207            offset: usize,
1208            _depth: fidl::encoding::Depth,
1209        ) -> fidl::Result<()> {
1210            decoder.debug_check_bounds::<Self>(offset);
1211            // Verify that padding bytes are zero.
1212            fidl::decode!(
1213                fidl_fuchsia_math__common::Vec4F,
1214                D,
1215                &mut self.rotation,
1216                decoder,
1217                offset + 0,
1218                _depth
1219            )?;
1220            fidl::decode!(
1221                fidl_fuchsia_math__common::Vec3F,
1222                D,
1223                &mut self.translation,
1224                decoder,
1225                offset + 16,
1226                _depth
1227            )?;
1228            fidl::decode!(
1229                fidl_fuchsia_math__common::Vec4F,
1230                D,
1231                &mut self.rotation_delta,
1232                decoder,
1233                offset + 28,
1234                _depth
1235            )?;
1236            fidl::decode!(
1237                fidl_fuchsia_math__common::Vec3F,
1238                D,
1239                &mut self.translation_delta,
1240                decoder,
1241                offset + 44,
1242                _depth
1243            )?;
1244            Ok(())
1245        }
1246    }
1247
1248    impl fidl::encoding::ValueTypeMarker for SensorEvent {
1249        type Borrowed<'a> = &'a Self;
1250        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1251            value
1252        }
1253    }
1254
1255    unsafe impl fidl::encoding::TypeMarker for SensorEvent {
1256        type Owned = Self;
1257
1258        #[inline(always)]
1259        fn inline_align(_context: fidl::encoding::Context) -> usize {
1260            8
1261        }
1262
1263        #[inline(always)]
1264        fn inline_size(_context: fidl::encoding::Context) -> usize {
1265            40
1266        }
1267    }
1268
1269    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SensorEvent, D>
1270        for &SensorEvent
1271    {
1272        #[inline]
1273        unsafe fn encode(
1274            self,
1275            encoder: &mut fidl::encoding::Encoder<'_, D>,
1276            offset: usize,
1277            _depth: fidl::encoding::Depth,
1278        ) -> fidl::Result<()> {
1279            encoder.debug_check_bounds::<SensorEvent>(offset);
1280            // Delegate to tuple encoding.
1281            fidl::encoding::Encode::<SensorEvent, D>::encode(
1282                (
1283                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(&self.timestamp),
1284                    <i32 as fidl::encoding::ValueTypeMarker>::borrow(&self.sensor_id),
1285                    <SensorType as fidl::encoding::ValueTypeMarker>::borrow(&self.sensor_type),
1286                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.sequence_number),
1287                    <EventPayload as fidl::encoding::ValueTypeMarker>::borrow(&self.payload),
1288                ),
1289                encoder,
1290                offset,
1291                _depth,
1292            )
1293        }
1294    }
1295    unsafe impl<
1296        D: fidl::encoding::ResourceDialect,
1297        T0: fidl::encoding::Encode<i64, D>,
1298        T1: fidl::encoding::Encode<i32, D>,
1299        T2: fidl::encoding::Encode<SensorType, D>,
1300        T3: fidl::encoding::Encode<u64, D>,
1301        T4: fidl::encoding::Encode<EventPayload, D>,
1302    > fidl::encoding::Encode<SensorEvent, D> for (T0, T1, T2, T3, T4)
1303    {
1304        #[inline]
1305        unsafe fn encode(
1306            self,
1307            encoder: &mut fidl::encoding::Encoder<'_, D>,
1308            offset: usize,
1309            depth: fidl::encoding::Depth,
1310        ) -> fidl::Result<()> {
1311            encoder.debug_check_bounds::<SensorEvent>(offset);
1312            // Zero out padding regions. There's no need to apply masks
1313            // because the unmasked parts will be overwritten by fields.
1314            // Write the fields.
1315            self.0.encode(encoder, offset + 0, depth)?;
1316            self.1.encode(encoder, offset + 8, depth)?;
1317            self.2.encode(encoder, offset + 12, depth)?;
1318            self.3.encode(encoder, offset + 16, depth)?;
1319            self.4.encode(encoder, offset + 24, depth)?;
1320            Ok(())
1321        }
1322    }
1323
1324    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SensorEvent {
1325        #[inline(always)]
1326        fn new_empty() -> Self {
1327            Self {
1328                timestamp: fidl::new_empty!(i64, D),
1329                sensor_id: fidl::new_empty!(i32, D),
1330                sensor_type: fidl::new_empty!(SensorType, D),
1331                sequence_number: fidl::new_empty!(u64, D),
1332                payload: fidl::new_empty!(EventPayload, D),
1333            }
1334        }
1335
1336        #[inline]
1337        unsafe fn decode(
1338            &mut self,
1339            decoder: &mut fidl::encoding::Decoder<'_, D>,
1340            offset: usize,
1341            _depth: fidl::encoding::Depth,
1342        ) -> fidl::Result<()> {
1343            decoder.debug_check_bounds::<Self>(offset);
1344            // Verify that padding bytes are zero.
1345            fidl::decode!(i64, D, &mut self.timestamp, decoder, offset + 0, _depth)?;
1346            fidl::decode!(i32, D, &mut self.sensor_id, decoder, offset + 8, _depth)?;
1347            fidl::decode!(SensorType, D, &mut self.sensor_type, decoder, offset + 12, _depth)?;
1348            fidl::decode!(u64, D, &mut self.sequence_number, decoder, offset + 16, _depth)?;
1349            fidl::decode!(EventPayload, D, &mut self.payload, decoder, offset + 24, _depth)?;
1350            Ok(())
1351        }
1352    }
1353
1354    impl fidl::encoding::ValueTypeMarker for UncalibratedVec3FSample {
1355        type Borrowed<'a> = &'a Self;
1356        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1357            value
1358        }
1359    }
1360
1361    unsafe impl fidl::encoding::TypeMarker for UncalibratedVec3FSample {
1362        type Owned = Self;
1363
1364        #[inline(always)]
1365        fn inline_align(_context: fidl::encoding::Context) -> usize {
1366            4
1367        }
1368
1369        #[inline(always)]
1370        fn inline_size(_context: fidl::encoding::Context) -> usize {
1371            24
1372        }
1373    }
1374
1375    unsafe impl<D: fidl::encoding::ResourceDialect>
1376        fidl::encoding::Encode<UncalibratedVec3FSample, D> for &UncalibratedVec3FSample
1377    {
1378        #[inline]
1379        unsafe fn encode(
1380            self,
1381            encoder: &mut fidl::encoding::Encoder<'_, D>,
1382            offset: usize,
1383            _depth: fidl::encoding::Depth,
1384        ) -> fidl::Result<()> {
1385            encoder.debug_check_bounds::<UncalibratedVec3FSample>(offset);
1386            // Delegate to tuple encoding.
1387            fidl::encoding::Encode::<UncalibratedVec3FSample, D>::encode(
1388                (
1389                    <fidl_fuchsia_math__common::Vec3F as fidl::encoding::ValueTypeMarker>::borrow(
1390                        &self.sample,
1391                    ),
1392                    <fidl_fuchsia_math__common::Vec3F as fidl::encoding::ValueTypeMarker>::borrow(
1393                        &self.biases,
1394                    ),
1395                ),
1396                encoder,
1397                offset,
1398                _depth,
1399            )
1400        }
1401    }
1402    unsafe impl<
1403        D: fidl::encoding::ResourceDialect,
1404        T0: fidl::encoding::Encode<fidl_fuchsia_math__common::Vec3F, D>,
1405        T1: fidl::encoding::Encode<fidl_fuchsia_math__common::Vec3F, D>,
1406    > fidl::encoding::Encode<UncalibratedVec3FSample, D> for (T0, T1)
1407    {
1408        #[inline]
1409        unsafe fn encode(
1410            self,
1411            encoder: &mut fidl::encoding::Encoder<'_, D>,
1412            offset: usize,
1413            depth: fidl::encoding::Depth,
1414        ) -> fidl::Result<()> {
1415            encoder.debug_check_bounds::<UncalibratedVec3FSample>(offset);
1416            // Zero out padding regions. There's no need to apply masks
1417            // because the unmasked parts will be overwritten by fields.
1418            // Write the fields.
1419            self.0.encode(encoder, offset + 0, depth)?;
1420            self.1.encode(encoder, offset + 12, depth)?;
1421            Ok(())
1422        }
1423    }
1424
1425    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1426        for UncalibratedVec3FSample
1427    {
1428        #[inline(always)]
1429        fn new_empty() -> Self {
1430            Self {
1431                sample: fidl::new_empty!(fidl_fuchsia_math__common::Vec3F, D),
1432                biases: fidl::new_empty!(fidl_fuchsia_math__common::Vec3F, D),
1433            }
1434        }
1435
1436        #[inline]
1437        unsafe fn decode(
1438            &mut self,
1439            decoder: &mut fidl::encoding::Decoder<'_, D>,
1440            offset: usize,
1441            _depth: fidl::encoding::Depth,
1442        ) -> fidl::Result<()> {
1443            decoder.debug_check_bounds::<Self>(offset);
1444            // Verify that padding bytes are zero.
1445            fidl::decode!(
1446                fidl_fuchsia_math__common::Vec3F,
1447                D,
1448                &mut self.sample,
1449                decoder,
1450                offset + 0,
1451                _depth
1452            )?;
1453            fidl::decode!(
1454                fidl_fuchsia_math__common::Vec3F,
1455                D,
1456                &mut self.biases,
1457                decoder,
1458                offset + 12,
1459                _depth
1460            )?;
1461            Ok(())
1462        }
1463    }
1464
1465    impl SensorInfo {
1466        #[inline(always)]
1467        fn max_ordinal_present(&self) -> u64 {
1468            if let Some(_) = self.measurement_scale {
1469                return 9;
1470            }
1471            if let Some(_) = self.measurement_unit {
1472                return 8;
1473            }
1474            if let Some(_) = self.reporting_mode {
1475                return 7;
1476            }
1477            if let Some(_) = self.wake_up {
1478                return 6;
1479            }
1480            if let Some(_) = self.sensor_type {
1481                return 5;
1482            }
1483            if let Some(_) = self.version {
1484                return 4;
1485            }
1486            if let Some(_) = self.vendor {
1487                return 3;
1488            }
1489            if let Some(_) = self.name {
1490                return 2;
1491            }
1492            if let Some(_) = self.sensor_id {
1493                return 1;
1494            }
1495            0
1496        }
1497    }
1498
1499    impl fidl::encoding::ValueTypeMarker for SensorInfo {
1500        type Borrowed<'a> = &'a Self;
1501        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1502            value
1503        }
1504    }
1505
1506    unsafe impl fidl::encoding::TypeMarker for SensorInfo {
1507        type Owned = Self;
1508
1509        #[inline(always)]
1510        fn inline_align(_context: fidl::encoding::Context) -> usize {
1511            8
1512        }
1513
1514        #[inline(always)]
1515        fn inline_size(_context: fidl::encoding::Context) -> usize {
1516            16
1517        }
1518    }
1519
1520    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SensorInfo, D>
1521        for &SensorInfo
1522    {
1523        unsafe fn encode(
1524            self,
1525            encoder: &mut fidl::encoding::Encoder<'_, D>,
1526            offset: usize,
1527            mut depth: fidl::encoding::Depth,
1528        ) -> fidl::Result<()> {
1529            encoder.debug_check_bounds::<SensorInfo>(offset);
1530            // Vector header
1531            let max_ordinal: u64 = self.max_ordinal_present();
1532            encoder.write_num(max_ordinal, offset);
1533            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1534            // Calling encoder.out_of_line_offset(0) is not allowed.
1535            if max_ordinal == 0 {
1536                return Ok(());
1537            }
1538            depth.increment()?;
1539            let envelope_size = 8;
1540            let bytes_len = max_ordinal as usize * envelope_size;
1541            #[allow(unused_variables)]
1542            let offset = encoder.out_of_line_offset(bytes_len);
1543            let mut _prev_end_offset: usize = 0;
1544            if 1 > max_ordinal {
1545                return Ok(());
1546            }
1547
1548            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1549            // are envelope_size bytes.
1550            let cur_offset: usize = (1 - 1) * envelope_size;
1551
1552            // Zero reserved fields.
1553            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1554
1555            // Safety:
1556            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1557            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1558            //   envelope_size bytes, there is always sufficient room.
1559            fidl::encoding::encode_in_envelope_optional::<i32, D>(
1560                self.sensor_id.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1561                encoder,
1562                offset + cur_offset,
1563                depth,
1564            )?;
1565
1566            _prev_end_offset = cur_offset + envelope_size;
1567            if 2 > max_ordinal {
1568                return Ok(());
1569            }
1570
1571            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1572            // are envelope_size bytes.
1573            let cur_offset: usize = (2 - 1) * envelope_size;
1574
1575            // Zero reserved fields.
1576            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1577
1578            // Safety:
1579            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1580            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1581            //   envelope_size bytes, there is always sufficient room.
1582            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1583                self.name.as_ref().map(
1584                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1585                ),
1586                encoder,
1587                offset + cur_offset,
1588                depth,
1589            )?;
1590
1591            _prev_end_offset = cur_offset + envelope_size;
1592            if 3 > max_ordinal {
1593                return Ok(());
1594            }
1595
1596            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1597            // are envelope_size bytes.
1598            let cur_offset: usize = (3 - 1) * envelope_size;
1599
1600            // Zero reserved fields.
1601            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1602
1603            // Safety:
1604            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1605            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1606            //   envelope_size bytes, there is always sufficient room.
1607            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1608                self.vendor.as_ref().map(
1609                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1610                ),
1611                encoder,
1612                offset + cur_offset,
1613                depth,
1614            )?;
1615
1616            _prev_end_offset = cur_offset + envelope_size;
1617            if 4 > max_ordinal {
1618                return Ok(());
1619            }
1620
1621            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1622            // are envelope_size bytes.
1623            let cur_offset: usize = (4 - 1) * envelope_size;
1624
1625            // Zero reserved fields.
1626            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1627
1628            // Safety:
1629            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1630            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1631            //   envelope_size bytes, there is always sufficient room.
1632            fidl::encoding::encode_in_envelope_optional::<i32, D>(
1633                self.version.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1634                encoder,
1635                offset + cur_offset,
1636                depth,
1637            )?;
1638
1639            _prev_end_offset = cur_offset + envelope_size;
1640            if 5 > max_ordinal {
1641                return Ok(());
1642            }
1643
1644            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1645            // are envelope_size bytes.
1646            let cur_offset: usize = (5 - 1) * envelope_size;
1647
1648            // Zero reserved fields.
1649            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1650
1651            // Safety:
1652            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1653            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1654            //   envelope_size bytes, there is always sufficient room.
1655            fidl::encoding::encode_in_envelope_optional::<SensorType, D>(
1656                self.sensor_type
1657                    .as_ref()
1658                    .map(<SensorType as fidl::encoding::ValueTypeMarker>::borrow),
1659                encoder,
1660                offset + cur_offset,
1661                depth,
1662            )?;
1663
1664            _prev_end_offset = cur_offset + envelope_size;
1665            if 6 > max_ordinal {
1666                return Ok(());
1667            }
1668
1669            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1670            // are envelope_size bytes.
1671            let cur_offset: usize = (6 - 1) * envelope_size;
1672
1673            // Zero reserved fields.
1674            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1675
1676            // Safety:
1677            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1678            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1679            //   envelope_size bytes, there is always sufficient room.
1680            fidl::encoding::encode_in_envelope_optional::<SensorWakeUpType, D>(
1681                self.wake_up
1682                    .as_ref()
1683                    .map(<SensorWakeUpType as fidl::encoding::ValueTypeMarker>::borrow),
1684                encoder,
1685                offset + cur_offset,
1686                depth,
1687            )?;
1688
1689            _prev_end_offset = cur_offset + envelope_size;
1690            if 7 > max_ordinal {
1691                return Ok(());
1692            }
1693
1694            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1695            // are envelope_size bytes.
1696            let cur_offset: usize = (7 - 1) * envelope_size;
1697
1698            // Zero reserved fields.
1699            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1700
1701            // Safety:
1702            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1703            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1704            //   envelope_size bytes, there is always sufficient room.
1705            fidl::encoding::encode_in_envelope_optional::<SensorReportingMode, D>(
1706                self.reporting_mode
1707                    .as_ref()
1708                    .map(<SensorReportingMode as fidl::encoding::ValueTypeMarker>::borrow),
1709                encoder,
1710                offset + cur_offset,
1711                depth,
1712            )?;
1713
1714            _prev_end_offset = cur_offset + envelope_size;
1715            if 8 > max_ordinal {
1716                return Ok(());
1717            }
1718
1719            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1720            // are envelope_size bytes.
1721            let cur_offset: usize = (8 - 1) * envelope_size;
1722
1723            // Zero reserved fields.
1724            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1725
1726            // Safety:
1727            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1728            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1729            //   envelope_size bytes, there is always sufficient room.
1730            fidl::encoding::encode_in_envelope_optional::<Unit, D>(
1731                self.measurement_unit
1732                    .as_ref()
1733                    .map(<Unit as fidl::encoding::ValueTypeMarker>::borrow),
1734                encoder,
1735                offset + cur_offset,
1736                depth,
1737            )?;
1738
1739            _prev_end_offset = cur_offset + envelope_size;
1740            if 9 > max_ordinal {
1741                return Ok(());
1742            }
1743
1744            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1745            // are envelope_size bytes.
1746            let cur_offset: usize = (9 - 1) * envelope_size;
1747
1748            // Zero reserved fields.
1749            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1750
1751            // Safety:
1752            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1753            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1754            //   envelope_size bytes, there is always sufficient room.
1755            fidl::encoding::encode_in_envelope_optional::<Scale, D>(
1756                self.measurement_scale
1757                    .as_ref()
1758                    .map(<Scale as fidl::encoding::ValueTypeMarker>::borrow),
1759                encoder,
1760                offset + cur_offset,
1761                depth,
1762            )?;
1763
1764            _prev_end_offset = cur_offset + envelope_size;
1765
1766            Ok(())
1767        }
1768    }
1769
1770    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SensorInfo {
1771        #[inline(always)]
1772        fn new_empty() -> Self {
1773            Self::default()
1774        }
1775
1776        unsafe fn decode(
1777            &mut self,
1778            decoder: &mut fidl::encoding::Decoder<'_, D>,
1779            offset: usize,
1780            mut depth: fidl::encoding::Depth,
1781        ) -> fidl::Result<()> {
1782            decoder.debug_check_bounds::<Self>(offset);
1783            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1784                None => return Err(fidl::Error::NotNullable),
1785                Some(len) => len,
1786            };
1787            // Calling decoder.out_of_line_offset(0) is not allowed.
1788            if len == 0 {
1789                return Ok(());
1790            };
1791            depth.increment()?;
1792            let envelope_size = 8;
1793            let bytes_len = len * envelope_size;
1794            let offset = decoder.out_of_line_offset(bytes_len)?;
1795            // Decode the envelope for each type.
1796            let mut _next_ordinal_to_read = 0;
1797            let mut next_offset = offset;
1798            let end_offset = offset + bytes_len;
1799            _next_ordinal_to_read += 1;
1800            if next_offset >= end_offset {
1801                return Ok(());
1802            }
1803
1804            // Decode unknown envelopes for gaps in ordinals.
1805            while _next_ordinal_to_read < 1 {
1806                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1807                _next_ordinal_to_read += 1;
1808                next_offset += envelope_size;
1809            }
1810
1811            let next_out_of_line = decoder.next_out_of_line();
1812            let handles_before = decoder.remaining_handles();
1813            if let Some((inlined, num_bytes, num_handles)) =
1814                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1815            {
1816                let member_inline_size =
1817                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1818                if inlined != (member_inline_size <= 4) {
1819                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1820                }
1821                let inner_offset;
1822                let mut inner_depth = depth.clone();
1823                if inlined {
1824                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1825                    inner_offset = next_offset;
1826                } else {
1827                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1828                    inner_depth.increment()?;
1829                }
1830                let val_ref = self.sensor_id.get_or_insert_with(|| fidl::new_empty!(i32, D));
1831                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
1832                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1833                {
1834                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1835                }
1836                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1837                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1838                }
1839            }
1840
1841            next_offset += envelope_size;
1842            _next_ordinal_to_read += 1;
1843            if next_offset >= end_offset {
1844                return Ok(());
1845            }
1846
1847            // Decode unknown envelopes for gaps in ordinals.
1848            while _next_ordinal_to_read < 2 {
1849                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1850                _next_ordinal_to_read += 1;
1851                next_offset += envelope_size;
1852            }
1853
1854            let next_out_of_line = decoder.next_out_of_line();
1855            let handles_before = decoder.remaining_handles();
1856            if let Some((inlined, num_bytes, num_handles)) =
1857                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1858            {
1859                let member_inline_size =
1860                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1861                        decoder.context,
1862                    );
1863                if inlined != (member_inline_size <= 4) {
1864                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1865                }
1866                let inner_offset;
1867                let mut inner_depth = depth.clone();
1868                if inlined {
1869                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1870                    inner_offset = next_offset;
1871                } else {
1872                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1873                    inner_depth.increment()?;
1874                }
1875                let val_ref = self
1876                    .name
1877                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1878                fidl::decode!(
1879                    fidl::encoding::UnboundedString,
1880                    D,
1881                    val_ref,
1882                    decoder,
1883                    inner_offset,
1884                    inner_depth
1885                )?;
1886                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1887                {
1888                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1889                }
1890                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1891                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1892                }
1893            }
1894
1895            next_offset += envelope_size;
1896            _next_ordinal_to_read += 1;
1897            if next_offset >= end_offset {
1898                return Ok(());
1899            }
1900
1901            // Decode unknown envelopes for gaps in ordinals.
1902            while _next_ordinal_to_read < 3 {
1903                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1904                _next_ordinal_to_read += 1;
1905                next_offset += envelope_size;
1906            }
1907
1908            let next_out_of_line = decoder.next_out_of_line();
1909            let handles_before = decoder.remaining_handles();
1910            if let Some((inlined, num_bytes, num_handles)) =
1911                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1912            {
1913                let member_inline_size =
1914                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1915                        decoder.context,
1916                    );
1917                if inlined != (member_inline_size <= 4) {
1918                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1919                }
1920                let inner_offset;
1921                let mut inner_depth = depth.clone();
1922                if inlined {
1923                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1924                    inner_offset = next_offset;
1925                } else {
1926                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1927                    inner_depth.increment()?;
1928                }
1929                let val_ref = self
1930                    .vendor
1931                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1932                fidl::decode!(
1933                    fidl::encoding::UnboundedString,
1934                    D,
1935                    val_ref,
1936                    decoder,
1937                    inner_offset,
1938                    inner_depth
1939                )?;
1940                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1941                {
1942                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1943                }
1944                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1945                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1946                }
1947            }
1948
1949            next_offset += envelope_size;
1950            _next_ordinal_to_read += 1;
1951            if next_offset >= end_offset {
1952                return Ok(());
1953            }
1954
1955            // Decode unknown envelopes for gaps in ordinals.
1956            while _next_ordinal_to_read < 4 {
1957                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1958                _next_ordinal_to_read += 1;
1959                next_offset += envelope_size;
1960            }
1961
1962            let next_out_of_line = decoder.next_out_of_line();
1963            let handles_before = decoder.remaining_handles();
1964            if let Some((inlined, num_bytes, num_handles)) =
1965                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1966            {
1967                let member_inline_size =
1968                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1969                if inlined != (member_inline_size <= 4) {
1970                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1971                }
1972                let inner_offset;
1973                let mut inner_depth = depth.clone();
1974                if inlined {
1975                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1976                    inner_offset = next_offset;
1977                } else {
1978                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1979                    inner_depth.increment()?;
1980                }
1981                let val_ref = self.version.get_or_insert_with(|| fidl::new_empty!(i32, D));
1982                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
1983                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1984                {
1985                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1986                }
1987                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1988                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1989                }
1990            }
1991
1992            next_offset += envelope_size;
1993            _next_ordinal_to_read += 1;
1994            if next_offset >= end_offset {
1995                return Ok(());
1996            }
1997
1998            // Decode unknown envelopes for gaps in ordinals.
1999            while _next_ordinal_to_read < 5 {
2000                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2001                _next_ordinal_to_read += 1;
2002                next_offset += envelope_size;
2003            }
2004
2005            let next_out_of_line = decoder.next_out_of_line();
2006            let handles_before = decoder.remaining_handles();
2007            if let Some((inlined, num_bytes, num_handles)) =
2008                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2009            {
2010                let member_inline_size =
2011                    <SensorType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2012                if inlined != (member_inline_size <= 4) {
2013                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2014                }
2015                let inner_offset;
2016                let mut inner_depth = depth.clone();
2017                if inlined {
2018                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2019                    inner_offset = next_offset;
2020                } else {
2021                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2022                    inner_depth.increment()?;
2023                }
2024                let val_ref =
2025                    self.sensor_type.get_or_insert_with(|| fidl::new_empty!(SensorType, D));
2026                fidl::decode!(SensorType, D, val_ref, decoder, inner_offset, inner_depth)?;
2027                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2028                {
2029                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2030                }
2031                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2032                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2033                }
2034            }
2035
2036            next_offset += envelope_size;
2037            _next_ordinal_to_read += 1;
2038            if next_offset >= end_offset {
2039                return Ok(());
2040            }
2041
2042            // Decode unknown envelopes for gaps in ordinals.
2043            while _next_ordinal_to_read < 6 {
2044                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2045                _next_ordinal_to_read += 1;
2046                next_offset += envelope_size;
2047            }
2048
2049            let next_out_of_line = decoder.next_out_of_line();
2050            let handles_before = decoder.remaining_handles();
2051            if let Some((inlined, num_bytes, num_handles)) =
2052                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2053            {
2054                let member_inline_size =
2055                    <SensorWakeUpType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2056                if inlined != (member_inline_size <= 4) {
2057                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2058                }
2059                let inner_offset;
2060                let mut inner_depth = depth.clone();
2061                if inlined {
2062                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2063                    inner_offset = next_offset;
2064                } else {
2065                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2066                    inner_depth.increment()?;
2067                }
2068                let val_ref =
2069                    self.wake_up.get_or_insert_with(|| fidl::new_empty!(SensorWakeUpType, D));
2070                fidl::decode!(SensorWakeUpType, D, val_ref, decoder, inner_offset, inner_depth)?;
2071                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2072                {
2073                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2074                }
2075                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2076                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2077                }
2078            }
2079
2080            next_offset += envelope_size;
2081            _next_ordinal_to_read += 1;
2082            if next_offset >= end_offset {
2083                return Ok(());
2084            }
2085
2086            // Decode unknown envelopes for gaps in ordinals.
2087            while _next_ordinal_to_read < 7 {
2088                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2089                _next_ordinal_to_read += 1;
2090                next_offset += envelope_size;
2091            }
2092
2093            let next_out_of_line = decoder.next_out_of_line();
2094            let handles_before = decoder.remaining_handles();
2095            if let Some((inlined, num_bytes, num_handles)) =
2096                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2097            {
2098                let member_inline_size =
2099                    <SensorReportingMode as fidl::encoding::TypeMarker>::inline_size(
2100                        decoder.context,
2101                    );
2102                if inlined != (member_inline_size <= 4) {
2103                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2104                }
2105                let inner_offset;
2106                let mut inner_depth = depth.clone();
2107                if inlined {
2108                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2109                    inner_offset = next_offset;
2110                } else {
2111                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2112                    inner_depth.increment()?;
2113                }
2114                let val_ref = self
2115                    .reporting_mode
2116                    .get_or_insert_with(|| fidl::new_empty!(SensorReportingMode, D));
2117                fidl::decode!(SensorReportingMode, D, val_ref, decoder, inner_offset, inner_depth)?;
2118                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2119                {
2120                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2121                }
2122                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2123                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2124                }
2125            }
2126
2127            next_offset += envelope_size;
2128            _next_ordinal_to_read += 1;
2129            if next_offset >= end_offset {
2130                return Ok(());
2131            }
2132
2133            // Decode unknown envelopes for gaps in ordinals.
2134            while _next_ordinal_to_read < 8 {
2135                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2136                _next_ordinal_to_read += 1;
2137                next_offset += envelope_size;
2138            }
2139
2140            let next_out_of_line = decoder.next_out_of_line();
2141            let handles_before = decoder.remaining_handles();
2142            if let Some((inlined, num_bytes, num_handles)) =
2143                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2144            {
2145                let member_inline_size =
2146                    <Unit as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2147                if inlined != (member_inline_size <= 4) {
2148                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2149                }
2150                let inner_offset;
2151                let mut inner_depth = depth.clone();
2152                if inlined {
2153                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2154                    inner_offset = next_offset;
2155                } else {
2156                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2157                    inner_depth.increment()?;
2158                }
2159                let val_ref =
2160                    self.measurement_unit.get_or_insert_with(|| fidl::new_empty!(Unit, D));
2161                fidl::decode!(Unit, D, val_ref, decoder, inner_offset, inner_depth)?;
2162                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2163                {
2164                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2165                }
2166                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2167                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2168                }
2169            }
2170
2171            next_offset += envelope_size;
2172            _next_ordinal_to_read += 1;
2173            if next_offset >= end_offset {
2174                return Ok(());
2175            }
2176
2177            // Decode unknown envelopes for gaps in ordinals.
2178            while _next_ordinal_to_read < 9 {
2179                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2180                _next_ordinal_to_read += 1;
2181                next_offset += envelope_size;
2182            }
2183
2184            let next_out_of_line = decoder.next_out_of_line();
2185            let handles_before = decoder.remaining_handles();
2186            if let Some((inlined, num_bytes, num_handles)) =
2187                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2188            {
2189                let member_inline_size =
2190                    <Scale as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2191                if inlined != (member_inline_size <= 4) {
2192                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2193                }
2194                let inner_offset;
2195                let mut inner_depth = depth.clone();
2196                if inlined {
2197                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2198                    inner_offset = next_offset;
2199                } else {
2200                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2201                    inner_depth.increment()?;
2202                }
2203                let val_ref =
2204                    self.measurement_scale.get_or_insert_with(|| fidl::new_empty!(Scale, D));
2205                fidl::decode!(Scale, D, val_ref, decoder, inner_offset, inner_depth)?;
2206                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2207                {
2208                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2209                }
2210                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2211                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2212                }
2213            }
2214
2215            next_offset += envelope_size;
2216
2217            // Decode the remaining unknown envelopes.
2218            while next_offset < end_offset {
2219                _next_ordinal_to_read += 1;
2220                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2221                next_offset += envelope_size;
2222            }
2223
2224            Ok(())
2225        }
2226    }
2227
2228    impl SensorRateConfig {
2229        #[inline(always)]
2230        fn max_ordinal_present(&self) -> u64 {
2231            if let Some(_) = self.max_reporting_latency_ns {
2232                return 2;
2233            }
2234            if let Some(_) = self.sampling_period_ns {
2235                return 1;
2236            }
2237            0
2238        }
2239    }
2240
2241    impl fidl::encoding::ValueTypeMarker for SensorRateConfig {
2242        type Borrowed<'a> = &'a Self;
2243        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2244            value
2245        }
2246    }
2247
2248    unsafe impl fidl::encoding::TypeMarker for SensorRateConfig {
2249        type Owned = Self;
2250
2251        #[inline(always)]
2252        fn inline_align(_context: fidl::encoding::Context) -> usize {
2253            8
2254        }
2255
2256        #[inline(always)]
2257        fn inline_size(_context: fidl::encoding::Context) -> usize {
2258            16
2259        }
2260    }
2261
2262    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SensorRateConfig, D>
2263        for &SensorRateConfig
2264    {
2265        unsafe fn encode(
2266            self,
2267            encoder: &mut fidl::encoding::Encoder<'_, D>,
2268            offset: usize,
2269            mut depth: fidl::encoding::Depth,
2270        ) -> fidl::Result<()> {
2271            encoder.debug_check_bounds::<SensorRateConfig>(offset);
2272            // Vector header
2273            let max_ordinal: u64 = self.max_ordinal_present();
2274            encoder.write_num(max_ordinal, offset);
2275            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2276            // Calling encoder.out_of_line_offset(0) is not allowed.
2277            if max_ordinal == 0 {
2278                return Ok(());
2279            }
2280            depth.increment()?;
2281            let envelope_size = 8;
2282            let bytes_len = max_ordinal as usize * envelope_size;
2283            #[allow(unused_variables)]
2284            let offset = encoder.out_of_line_offset(bytes_len);
2285            let mut _prev_end_offset: usize = 0;
2286            if 1 > max_ordinal {
2287                return Ok(());
2288            }
2289
2290            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2291            // are envelope_size bytes.
2292            let cur_offset: usize = (1 - 1) * envelope_size;
2293
2294            // Zero reserved fields.
2295            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2296
2297            // Safety:
2298            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2299            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2300            //   envelope_size bytes, there is always sufficient room.
2301            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2302                self.sampling_period_ns
2303                    .as_ref()
2304                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2305                encoder,
2306                offset + cur_offset,
2307                depth,
2308            )?;
2309
2310            _prev_end_offset = cur_offset + envelope_size;
2311            if 2 > max_ordinal {
2312                return Ok(());
2313            }
2314
2315            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2316            // are envelope_size bytes.
2317            let cur_offset: usize = (2 - 1) * envelope_size;
2318
2319            // Zero reserved fields.
2320            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2321
2322            // Safety:
2323            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2324            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2325            //   envelope_size bytes, there is always sufficient room.
2326            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2327                self.max_reporting_latency_ns
2328                    .as_ref()
2329                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2330                encoder,
2331                offset + cur_offset,
2332                depth,
2333            )?;
2334
2335            _prev_end_offset = cur_offset + envelope_size;
2336
2337            Ok(())
2338        }
2339    }
2340
2341    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SensorRateConfig {
2342        #[inline(always)]
2343        fn new_empty() -> Self {
2344            Self::default()
2345        }
2346
2347        unsafe fn decode(
2348            &mut self,
2349            decoder: &mut fidl::encoding::Decoder<'_, D>,
2350            offset: usize,
2351            mut depth: fidl::encoding::Depth,
2352        ) -> fidl::Result<()> {
2353            decoder.debug_check_bounds::<Self>(offset);
2354            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2355                None => return Err(fidl::Error::NotNullable),
2356                Some(len) => len,
2357            };
2358            // Calling decoder.out_of_line_offset(0) is not allowed.
2359            if len == 0 {
2360                return Ok(());
2361            };
2362            depth.increment()?;
2363            let envelope_size = 8;
2364            let bytes_len = len * envelope_size;
2365            let offset = decoder.out_of_line_offset(bytes_len)?;
2366            // Decode the envelope for each type.
2367            let mut _next_ordinal_to_read = 0;
2368            let mut next_offset = offset;
2369            let end_offset = offset + bytes_len;
2370            _next_ordinal_to_read += 1;
2371            if next_offset >= end_offset {
2372                return Ok(());
2373            }
2374
2375            // Decode unknown envelopes for gaps in ordinals.
2376            while _next_ordinal_to_read < 1 {
2377                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2378                _next_ordinal_to_read += 1;
2379                next_offset += envelope_size;
2380            }
2381
2382            let next_out_of_line = decoder.next_out_of_line();
2383            let handles_before = decoder.remaining_handles();
2384            if let Some((inlined, num_bytes, num_handles)) =
2385                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2386            {
2387                let member_inline_size =
2388                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2389                if inlined != (member_inline_size <= 4) {
2390                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2391                }
2392                let inner_offset;
2393                let mut inner_depth = depth.clone();
2394                if inlined {
2395                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2396                    inner_offset = next_offset;
2397                } else {
2398                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2399                    inner_depth.increment()?;
2400                }
2401                let val_ref =
2402                    self.sampling_period_ns.get_or_insert_with(|| fidl::new_empty!(i64, D));
2403                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2404                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2405                {
2406                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2407                }
2408                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2409                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2410                }
2411            }
2412
2413            next_offset += envelope_size;
2414            _next_ordinal_to_read += 1;
2415            if next_offset >= end_offset {
2416                return Ok(());
2417            }
2418
2419            // Decode unknown envelopes for gaps in ordinals.
2420            while _next_ordinal_to_read < 2 {
2421                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2422                _next_ordinal_to_read += 1;
2423                next_offset += envelope_size;
2424            }
2425
2426            let next_out_of_line = decoder.next_out_of_line();
2427            let handles_before = decoder.remaining_handles();
2428            if let Some((inlined, num_bytes, num_handles)) =
2429                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2430            {
2431                let member_inline_size =
2432                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2433                if inlined != (member_inline_size <= 4) {
2434                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2435                }
2436                let inner_offset;
2437                let mut inner_depth = depth.clone();
2438                if inlined {
2439                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2440                    inner_offset = next_offset;
2441                } else {
2442                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2443                    inner_depth.increment()?;
2444                }
2445                let val_ref =
2446                    self.max_reporting_latency_ns.get_or_insert_with(|| fidl::new_empty!(i64, D));
2447                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2448                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2449                {
2450                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2451                }
2452                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2453                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2454                }
2455            }
2456
2457            next_offset += envelope_size;
2458
2459            // Decode the remaining unknown envelopes.
2460            while next_offset < end_offset {
2461                _next_ordinal_to_read += 1;
2462                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2463                next_offset += envelope_size;
2464            }
2465
2466            Ok(())
2467        }
2468    }
2469
2470    impl fidl::encoding::ValueTypeMarker for EventPayload {
2471        type Borrowed<'a> = &'a Self;
2472        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2473            value
2474        }
2475    }
2476
2477    unsafe impl fidl::encoding::TypeMarker for EventPayload {
2478        type Owned = Self;
2479
2480        #[inline(always)]
2481        fn inline_align(_context: fidl::encoding::Context) -> usize {
2482            8
2483        }
2484
2485        #[inline(always)]
2486        fn inline_size(_context: fidl::encoding::Context) -> usize {
2487            16
2488        }
2489    }
2490
2491    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EventPayload, D>
2492        for &EventPayload
2493    {
2494        #[inline]
2495        unsafe fn encode(
2496            self,
2497            encoder: &mut fidl::encoding::Encoder<'_, D>,
2498            offset: usize,
2499            _depth: fidl::encoding::Depth,
2500        ) -> fidl::Result<()> {
2501            encoder.debug_check_bounds::<EventPayload>(offset);
2502            encoder.write_num::<u64>(self.ordinal(), offset);
2503            match self {
2504                EventPayload::Vec3(ref val) => fidl::encoding::encode_in_envelope::<
2505                    fidl_fuchsia_math__common::Vec3F,
2506                    D,
2507                >(
2508                    <fidl_fuchsia_math__common::Vec3F as fidl::encoding::ValueTypeMarker>::borrow(
2509                        val,
2510                    ),
2511                    encoder,
2512                    offset + 8,
2513                    _depth,
2514                ),
2515                EventPayload::Quaternion(ref val) => fidl::encoding::encode_in_envelope::<
2516                    fidl_fuchsia_math__common::Vec4F,
2517                    D,
2518                >(
2519                    <fidl_fuchsia_math__common::Vec4F as fidl::encoding::ValueTypeMarker>::borrow(
2520                        val,
2521                    ),
2522                    encoder,
2523                    offset + 8,
2524                    _depth,
2525                ),
2526                EventPayload::UncalibratedVec3(ref val) => {
2527                    fidl::encoding::encode_in_envelope::<UncalibratedVec3FSample, D>(
2528                        <UncalibratedVec3FSample as fidl::encoding::ValueTypeMarker>::borrow(val),
2529                        encoder,
2530                        offset + 8,
2531                        _depth,
2532                    )
2533                }
2534                EventPayload::Float(ref val) => fidl::encoding::encode_in_envelope::<f32, D>(
2535                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(val),
2536                    encoder,
2537                    offset + 8,
2538                    _depth,
2539                ),
2540                EventPayload::Integer(ref val) => fidl::encoding::encode_in_envelope::<u64, D>(
2541                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
2542                    encoder,
2543                    offset + 8,
2544                    _depth,
2545                ),
2546                EventPayload::Pose(ref val) => fidl::encoding::encode_in_envelope::<Pose, D>(
2547                    <Pose as fidl::encoding::ValueTypeMarker>::borrow(val),
2548                    encoder,
2549                    offset + 8,
2550                    _depth,
2551                ),
2552                EventPayload::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
2553            }
2554        }
2555    }
2556
2557    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EventPayload {
2558        #[inline(always)]
2559        fn new_empty() -> Self {
2560            Self::__SourceBreaking { unknown_ordinal: 0 }
2561        }
2562
2563        #[inline]
2564        unsafe fn decode(
2565            &mut self,
2566            decoder: &mut fidl::encoding::Decoder<'_, D>,
2567            offset: usize,
2568            mut depth: fidl::encoding::Depth,
2569        ) -> fidl::Result<()> {
2570            decoder.debug_check_bounds::<Self>(offset);
2571            #[allow(unused_variables)]
2572            let next_out_of_line = decoder.next_out_of_line();
2573            let handles_before = decoder.remaining_handles();
2574            let (ordinal, inlined, num_bytes, num_handles) =
2575                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2576
2577            let member_inline_size = match ordinal {
2578                1 => <fidl_fuchsia_math__common::Vec3F as fidl::encoding::TypeMarker>::inline_size(
2579                    decoder.context,
2580                ),
2581                2 => <fidl_fuchsia_math__common::Vec4F as fidl::encoding::TypeMarker>::inline_size(
2582                    decoder.context,
2583                ),
2584                3 => <UncalibratedVec3FSample as fidl::encoding::TypeMarker>::inline_size(
2585                    decoder.context,
2586                ),
2587                4 => <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2588                5 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2589                6 => <Pose as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2590                0 => return Err(fidl::Error::UnknownUnionTag),
2591                _ => num_bytes as usize,
2592            };
2593
2594            if inlined != (member_inline_size <= 4) {
2595                return Err(fidl::Error::InvalidInlineBitInEnvelope);
2596            }
2597            let _inner_offset;
2598            if inlined {
2599                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2600                _inner_offset = offset + 8;
2601            } else {
2602                depth.increment()?;
2603                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2604            }
2605            match ordinal {
2606                1 => {
2607                    #[allow(irrefutable_let_patterns)]
2608                    if let EventPayload::Vec3(_) = self {
2609                        // Do nothing, read the value into the object
2610                    } else {
2611                        // Initialize `self` to the right variant
2612                        *self = EventPayload::Vec3(fidl::new_empty!(
2613                            fidl_fuchsia_math__common::Vec3F,
2614                            D
2615                        ));
2616                    }
2617                    #[allow(irrefutable_let_patterns)]
2618                    if let EventPayload::Vec3(ref mut val) = self {
2619                        fidl::decode!(
2620                            fidl_fuchsia_math__common::Vec3F,
2621                            D,
2622                            val,
2623                            decoder,
2624                            _inner_offset,
2625                            depth
2626                        )?;
2627                    } else {
2628                        unreachable!()
2629                    }
2630                }
2631                2 => {
2632                    #[allow(irrefutable_let_patterns)]
2633                    if let EventPayload::Quaternion(_) = self {
2634                        // Do nothing, read the value into the object
2635                    } else {
2636                        // Initialize `self` to the right variant
2637                        *self = EventPayload::Quaternion(fidl::new_empty!(
2638                            fidl_fuchsia_math__common::Vec4F,
2639                            D
2640                        ));
2641                    }
2642                    #[allow(irrefutable_let_patterns)]
2643                    if let EventPayload::Quaternion(ref mut val) = self {
2644                        fidl::decode!(
2645                            fidl_fuchsia_math__common::Vec4F,
2646                            D,
2647                            val,
2648                            decoder,
2649                            _inner_offset,
2650                            depth
2651                        )?;
2652                    } else {
2653                        unreachable!()
2654                    }
2655                }
2656                3 => {
2657                    #[allow(irrefutable_let_patterns)]
2658                    if let EventPayload::UncalibratedVec3(_) = self {
2659                        // Do nothing, read the value into the object
2660                    } else {
2661                        // Initialize `self` to the right variant
2662                        *self = EventPayload::UncalibratedVec3(fidl::new_empty!(
2663                            UncalibratedVec3FSample,
2664                            D
2665                        ));
2666                    }
2667                    #[allow(irrefutable_let_patterns)]
2668                    if let EventPayload::UncalibratedVec3(ref mut val) = self {
2669                        fidl::decode!(
2670                            UncalibratedVec3FSample,
2671                            D,
2672                            val,
2673                            decoder,
2674                            _inner_offset,
2675                            depth
2676                        )?;
2677                    } else {
2678                        unreachable!()
2679                    }
2680                }
2681                4 => {
2682                    #[allow(irrefutable_let_patterns)]
2683                    if let EventPayload::Float(_) = self {
2684                        // Do nothing, read the value into the object
2685                    } else {
2686                        // Initialize `self` to the right variant
2687                        *self = EventPayload::Float(fidl::new_empty!(f32, D));
2688                    }
2689                    #[allow(irrefutable_let_patterns)]
2690                    if let EventPayload::Float(ref mut val) = self {
2691                        fidl::decode!(f32, D, val, decoder, _inner_offset, depth)?;
2692                    } else {
2693                        unreachable!()
2694                    }
2695                }
2696                5 => {
2697                    #[allow(irrefutable_let_patterns)]
2698                    if let EventPayload::Integer(_) = self {
2699                        // Do nothing, read the value into the object
2700                    } else {
2701                        // Initialize `self` to the right variant
2702                        *self = EventPayload::Integer(fidl::new_empty!(u64, D));
2703                    }
2704                    #[allow(irrefutable_let_patterns)]
2705                    if let EventPayload::Integer(ref mut val) = self {
2706                        fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
2707                    } else {
2708                        unreachable!()
2709                    }
2710                }
2711                6 => {
2712                    #[allow(irrefutable_let_patterns)]
2713                    if let EventPayload::Pose(_) = self {
2714                        // Do nothing, read the value into the object
2715                    } else {
2716                        // Initialize `self` to the right variant
2717                        *self = EventPayload::Pose(fidl::new_empty!(Pose, D));
2718                    }
2719                    #[allow(irrefutable_let_patterns)]
2720                    if let EventPayload::Pose(ref mut val) = self {
2721                        fidl::decode!(Pose, D, val, decoder, _inner_offset, depth)?;
2722                    } else {
2723                        unreachable!()
2724                    }
2725                }
2726                #[allow(deprecated)]
2727                ordinal => {
2728                    for _ in 0..num_handles {
2729                        decoder.drop_next_handle()?;
2730                    }
2731                    *self = EventPayload::__SourceBreaking { unknown_ordinal: ordinal };
2732                }
2733            }
2734            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2735                return Err(fidl::Error::InvalidNumBytesInEnvelope);
2736            }
2737            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2738                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2739            }
2740            Ok(())
2741        }
2742    }
2743}