Skip to main content

fidl_fuchsia_hardware_google_odpm_common/
fidl_fuchsia_hardware_google_odpm_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/// An arbitrary, human-readable string that uniquely identifies a power rail.
12pub type RailName = String;
13
14pub const MAX_RAIL_NAME_SIZE: u32 = 256;
15
16/// Minimum allowed hardware polling interval (10 ms).
17pub const MIN_POLL_INTERVAL: i64 = 10000000;
18
19#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
20pub enum MeasurementType {
21    /// Average measurement over a time interval (default).
22    Average,
23    /// Instantaneous snapshot.
24    Instantaneous,
25    /// Cumulative measurement over a time interval.
26    Cumulative,
27    #[doc(hidden)]
28    __SourceBreaking { unknown_ordinal: u32 },
29}
30
31/// Pattern that matches an unknown `MeasurementType` member.
32#[macro_export]
33macro_rules! MeasurementTypeUnknown {
34    () => {
35        _
36    };
37}
38
39impl MeasurementType {
40    #[inline]
41    pub fn from_primitive(prim: u32) -> Option<Self> {
42        match prim {
43            1 => Some(Self::Average),
44            2 => Some(Self::Instantaneous),
45            3 => Some(Self::Cumulative),
46            _ => None,
47        }
48    }
49
50    #[inline]
51    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
52        match prim {
53            1 => Self::Average,
54            2 => Self::Instantaneous,
55            3 => Self::Cumulative,
56            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
57        }
58    }
59
60    #[inline]
61    pub fn unknown() -> Self {
62        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
63    }
64
65    #[inline]
66    pub const fn into_primitive(self) -> u32 {
67        match self {
68            Self::Average => 1,
69            Self::Instantaneous => 2,
70            Self::Cumulative => 3,
71            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
72        }
73    }
74
75    #[inline]
76    pub fn is_unknown(&self) -> bool {
77        match self {
78            Self::__SourceBreaking { unknown_ordinal: _ } => true,
79            _ => false,
80        }
81    }
82}
83
84#[derive(Clone, Debug, Default, PartialEq)]
85pub struct CurrentReading {
86    /// Measured current in microamperes.
87    pub current_ua: Option<i32>,
88    /// Measurement time interval (omitted if unknown).
89    pub interval: Option<i64>,
90    /// Time when the reading was taken.
91    pub timestamp: Option<i64>,
92    #[doc(hidden)]
93    pub __source_breaking: fidl::marker::SourceBreaking,
94}
95
96impl fidl::Persistable for CurrentReading {}
97
98#[derive(Clone, Debug, Default, PartialEq)]
99pub struct EnergyReading {
100    /// Measured energy in microjoules.
101    pub energy_uj: Option<i64>,
102    /// Measurement time interval (omitted if unknown).
103    pub interval: Option<i64>,
104    /// Time when the reading was taken.
105    pub timestamp: Option<i64>,
106    #[doc(hidden)]
107    pub __source_breaking: fidl::marker::SourceBreaking,
108}
109
110impl fidl::Persistable for EnergyReading {}
111
112#[derive(Clone, Debug, Default, PartialEq)]
113pub struct Options {
114    /// Specifies the type of measurement desired.
115    /// Defaults to `AVERAGE` if omitted.
116    pub measurement_type: Option<MeasurementType>,
117    #[doc(hidden)]
118    pub __source_breaking: fidl::marker::SourceBreaking,
119}
120
121impl fidl::Persistable for Options {}
122
123/// Configuration options for the ODPM driver hardware polling loop.
124#[derive(Clone, Debug, Default, PartialEq)]
125pub struct PollingConfig {
126    /// Driver's baseline polling interval. Must be at least `MIN_POLL_INTERVAL`.
127    pub poll_interval: Option<i64>,
128    /// Number of hardware polls per Inspect/trace time-series entry.
129    pub polls_per_series_entry: Option<u32>,
130    #[doc(hidden)]
131    pub __source_breaking: fidl::marker::SourceBreaking,
132}
133
134impl fidl::Persistable for PollingConfig {}
135
136#[derive(Clone, Debug, Default, PartialEq)]
137pub struct PowerReading {
138    /// Measured power in microwatts.
139    pub power_uw: Option<i32>,
140    /// Measurement time interval (omitted if unknown).
141    pub interval: Option<i64>,
142    /// Time when the reading was taken.
143    pub timestamp: Option<i64>,
144    #[doc(hidden)]
145    pub __source_breaking: fidl::marker::SourceBreaking,
146}
147
148impl fidl::Persistable for PowerReading {}
149
150#[derive(Clone, Debug, Default, PartialEq)]
151pub struct RailMetadata {
152    /// Canonical identifier for the rail (e.g. "cpu_big", "gpu").
153    pub name: Option<String>,
154    /// Hardware channel index.
155    pub channel_id: Option<u32>,
156    /// Schematic name of the rail (e.g. "S2M_VDD_CPU2").
157    pub schematic_name: Option<String>,
158    #[doc(hidden)]
159    pub __source_breaking: fidl::marker::SourceBreaking,
160}
161
162impl fidl::Persistable for RailMetadata {}
163
164pub mod device_ordinals {
165    pub const GET_RAIL_METADATA: u64 = 0x10f1af06f7642901;
166    pub const GET_POWER_WATTS: u64 = 0x3f8ada9ce9065924;
167    pub const GET_CURRENT_AMPERES: u64 = 0x22fb9ad39b15d8a5;
168    pub const GET_ENERGY_JOULES: u64 = 0x4bd34b82e636efc9;
169}
170
171pub mod driver_config_ordinals {
172    pub const SET_POLLING_CONFIG: u64 = 0x36ce1193d5909de7;
173    pub const GET_POLLING_CONFIG: u64 = 0x539228d93dd77892;
174    pub const RESET_POLLING_CONFIG: u64 = 0x303419d0841fb28f;
175}
176
177mod internal {
178    use super::*;
179    unsafe impl fidl::encoding::TypeMarker for MeasurementType {
180        type Owned = Self;
181
182        #[inline(always)]
183        fn inline_align(_context: fidl::encoding::Context) -> usize {
184            std::mem::align_of::<u32>()
185        }
186
187        #[inline(always)]
188        fn inline_size(_context: fidl::encoding::Context) -> usize {
189            std::mem::size_of::<u32>()
190        }
191
192        #[inline(always)]
193        fn encode_is_copy() -> bool {
194            false
195        }
196
197        #[inline(always)]
198        fn decode_is_copy() -> bool {
199            false
200        }
201    }
202
203    impl fidl::encoding::ValueTypeMarker for MeasurementType {
204        type Borrowed<'a> = Self;
205        #[inline(always)]
206        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
207            *value
208        }
209    }
210
211    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
212        for MeasurementType
213    {
214        #[inline]
215        unsafe fn encode(
216            self,
217            encoder: &mut fidl::encoding::Encoder<'_, D>,
218            offset: usize,
219            _depth: fidl::encoding::Depth,
220        ) -> fidl::Result<()> {
221            encoder.debug_check_bounds::<Self>(offset);
222            encoder.write_num(self.into_primitive(), offset);
223            Ok(())
224        }
225    }
226
227    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MeasurementType {
228        #[inline(always)]
229        fn new_empty() -> Self {
230            Self::unknown()
231        }
232
233        #[inline]
234        unsafe fn decode(
235            &mut self,
236            decoder: &mut fidl::encoding::Decoder<'_, D>,
237            offset: usize,
238            _depth: fidl::encoding::Depth,
239        ) -> fidl::Result<()> {
240            decoder.debug_check_bounds::<Self>(offset);
241            let prim = decoder.read_num::<u32>(offset);
242
243            *self = Self::from_primitive_allow_unknown(prim);
244            Ok(())
245        }
246    }
247
248    impl CurrentReading {
249        #[inline(always)]
250        fn max_ordinal_present(&self) -> u64 {
251            if let Some(_) = self.timestamp {
252                return 3;
253            }
254            if let Some(_) = self.interval {
255                return 2;
256            }
257            if let Some(_) = self.current_ua {
258                return 1;
259            }
260            0
261        }
262    }
263
264    impl fidl::encoding::ValueTypeMarker for CurrentReading {
265        type Borrowed<'a> = &'a Self;
266        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
267            value
268        }
269    }
270
271    unsafe impl fidl::encoding::TypeMarker for CurrentReading {
272        type Owned = Self;
273
274        #[inline(always)]
275        fn inline_align(_context: fidl::encoding::Context) -> usize {
276            8
277        }
278
279        #[inline(always)]
280        fn inline_size(_context: fidl::encoding::Context) -> usize {
281            16
282        }
283    }
284
285    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CurrentReading, D>
286        for &CurrentReading
287    {
288        unsafe fn encode(
289            self,
290            encoder: &mut fidl::encoding::Encoder<'_, D>,
291            offset: usize,
292            mut depth: fidl::encoding::Depth,
293        ) -> fidl::Result<()> {
294            encoder.debug_check_bounds::<CurrentReading>(offset);
295            // Vector header
296            let max_ordinal: u64 = self.max_ordinal_present();
297            encoder.write_num(max_ordinal, offset);
298            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
299            // Calling encoder.out_of_line_offset(0) is not allowed.
300            if max_ordinal == 0 {
301                return Ok(());
302            }
303            depth.increment()?;
304            let envelope_size = 8;
305            let bytes_len = max_ordinal as usize * envelope_size;
306            #[allow(unused_variables)]
307            let offset = encoder.out_of_line_offset(bytes_len);
308            let mut _prev_end_offset: usize = 0;
309            if 1 > max_ordinal {
310                return Ok(());
311            }
312
313            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
314            // are envelope_size bytes.
315            let cur_offset: usize = (1 - 1) * envelope_size;
316
317            // Zero reserved fields.
318            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
319
320            // Safety:
321            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
322            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
323            //   envelope_size bytes, there is always sufficient room.
324            fidl::encoding::encode_in_envelope_optional::<i32, D>(
325                self.current_ua.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
326                encoder,
327                offset + cur_offset,
328                depth,
329            )?;
330
331            _prev_end_offset = cur_offset + envelope_size;
332            if 2 > max_ordinal {
333                return Ok(());
334            }
335
336            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
337            // are envelope_size bytes.
338            let cur_offset: usize = (2 - 1) * envelope_size;
339
340            // Zero reserved fields.
341            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
342
343            // Safety:
344            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
345            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
346            //   envelope_size bytes, there is always sufficient room.
347            fidl::encoding::encode_in_envelope_optional::<i64, D>(
348                self.interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
349                encoder,
350                offset + cur_offset,
351                depth,
352            )?;
353
354            _prev_end_offset = cur_offset + envelope_size;
355            if 3 > max_ordinal {
356                return Ok(());
357            }
358
359            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
360            // are envelope_size bytes.
361            let cur_offset: usize = (3 - 1) * envelope_size;
362
363            // Zero reserved fields.
364            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
365
366            // Safety:
367            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
368            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
369            //   envelope_size bytes, there is always sufficient room.
370            fidl::encoding::encode_in_envelope_optional::<i64, D>(
371                self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
372                encoder,
373                offset + cur_offset,
374                depth,
375            )?;
376
377            _prev_end_offset = cur_offset + envelope_size;
378
379            Ok(())
380        }
381    }
382
383    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CurrentReading {
384        #[inline(always)]
385        fn new_empty() -> Self {
386            Self::default()
387        }
388
389        unsafe fn decode(
390            &mut self,
391            decoder: &mut fidl::encoding::Decoder<'_, D>,
392            offset: usize,
393            mut depth: fidl::encoding::Depth,
394        ) -> fidl::Result<()> {
395            decoder.debug_check_bounds::<Self>(offset);
396            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
397                None => return Err(fidl::Error::NotNullable),
398                Some(len) => len,
399            };
400            // Calling decoder.out_of_line_offset(0) is not allowed.
401            if len == 0 {
402                return Ok(());
403            };
404            depth.increment()?;
405            let envelope_size = 8;
406            let bytes_len = len * envelope_size;
407            let offset = decoder.out_of_line_offset(bytes_len)?;
408            // Decode the envelope for each type.
409            let mut _next_ordinal_to_read = 0;
410            let mut next_offset = offset;
411            let end_offset = offset + bytes_len;
412            _next_ordinal_to_read += 1;
413            if next_offset >= end_offset {
414                return Ok(());
415            }
416
417            // Decode unknown envelopes for gaps in ordinals.
418            while _next_ordinal_to_read < 1 {
419                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
420                _next_ordinal_to_read += 1;
421                next_offset += envelope_size;
422            }
423
424            let next_out_of_line = decoder.next_out_of_line();
425            let handles_before = decoder.remaining_handles();
426            if let Some((inlined, num_bytes, num_handles)) =
427                fidl::encoding::decode_envelope_header(decoder, next_offset)?
428            {
429                let member_inline_size =
430                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
431                if inlined != (member_inline_size <= 4) {
432                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
433                }
434                let inner_offset;
435                let mut inner_depth = depth.clone();
436                if inlined {
437                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
438                    inner_offset = next_offset;
439                } else {
440                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
441                    inner_depth.increment()?;
442                }
443                let val_ref = self.current_ua.get_or_insert_with(|| fidl::new_empty!(i32, D));
444                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
445                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
446                {
447                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
448                }
449                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
450                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
451                }
452            }
453
454            next_offset += envelope_size;
455            _next_ordinal_to_read += 1;
456            if next_offset >= end_offset {
457                return Ok(());
458            }
459
460            // Decode unknown envelopes for gaps in ordinals.
461            while _next_ordinal_to_read < 2 {
462                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
463                _next_ordinal_to_read += 1;
464                next_offset += envelope_size;
465            }
466
467            let next_out_of_line = decoder.next_out_of_line();
468            let handles_before = decoder.remaining_handles();
469            if let Some((inlined, num_bytes, num_handles)) =
470                fidl::encoding::decode_envelope_header(decoder, next_offset)?
471            {
472                let member_inline_size =
473                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
474                if inlined != (member_inline_size <= 4) {
475                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
476                }
477                let inner_offset;
478                let mut inner_depth = depth.clone();
479                if inlined {
480                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
481                    inner_offset = next_offset;
482                } else {
483                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
484                    inner_depth.increment()?;
485                }
486                let val_ref = self.interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
487                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
488                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
489                {
490                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
491                }
492                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
493                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
494                }
495            }
496
497            next_offset += envelope_size;
498            _next_ordinal_to_read += 1;
499            if next_offset >= end_offset {
500                return Ok(());
501            }
502
503            // Decode unknown envelopes for gaps in ordinals.
504            while _next_ordinal_to_read < 3 {
505                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
506                _next_ordinal_to_read += 1;
507                next_offset += envelope_size;
508            }
509
510            let next_out_of_line = decoder.next_out_of_line();
511            let handles_before = decoder.remaining_handles();
512            if let Some((inlined, num_bytes, num_handles)) =
513                fidl::encoding::decode_envelope_header(decoder, next_offset)?
514            {
515                let member_inline_size =
516                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
517                if inlined != (member_inline_size <= 4) {
518                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
519                }
520                let inner_offset;
521                let mut inner_depth = depth.clone();
522                if inlined {
523                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
524                    inner_offset = next_offset;
525                } else {
526                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
527                    inner_depth.increment()?;
528                }
529                let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
530                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
531                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
532                {
533                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
534                }
535                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
536                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
537                }
538            }
539
540            next_offset += envelope_size;
541
542            // Decode the remaining unknown envelopes.
543            while next_offset < end_offset {
544                _next_ordinal_to_read += 1;
545                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
546                next_offset += envelope_size;
547            }
548
549            Ok(())
550        }
551    }
552
553    impl EnergyReading {
554        #[inline(always)]
555        fn max_ordinal_present(&self) -> u64 {
556            if let Some(_) = self.timestamp {
557                return 3;
558            }
559            if let Some(_) = self.interval {
560                return 2;
561            }
562            if let Some(_) = self.energy_uj {
563                return 1;
564            }
565            0
566        }
567    }
568
569    impl fidl::encoding::ValueTypeMarker for EnergyReading {
570        type Borrowed<'a> = &'a Self;
571        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
572            value
573        }
574    }
575
576    unsafe impl fidl::encoding::TypeMarker for EnergyReading {
577        type Owned = Self;
578
579        #[inline(always)]
580        fn inline_align(_context: fidl::encoding::Context) -> usize {
581            8
582        }
583
584        #[inline(always)]
585        fn inline_size(_context: fidl::encoding::Context) -> usize {
586            16
587        }
588    }
589
590    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EnergyReading, D>
591        for &EnergyReading
592    {
593        unsafe fn encode(
594            self,
595            encoder: &mut fidl::encoding::Encoder<'_, D>,
596            offset: usize,
597            mut depth: fidl::encoding::Depth,
598        ) -> fidl::Result<()> {
599            encoder.debug_check_bounds::<EnergyReading>(offset);
600            // Vector header
601            let max_ordinal: u64 = self.max_ordinal_present();
602            encoder.write_num(max_ordinal, offset);
603            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
604            // Calling encoder.out_of_line_offset(0) is not allowed.
605            if max_ordinal == 0 {
606                return Ok(());
607            }
608            depth.increment()?;
609            let envelope_size = 8;
610            let bytes_len = max_ordinal as usize * envelope_size;
611            #[allow(unused_variables)]
612            let offset = encoder.out_of_line_offset(bytes_len);
613            let mut _prev_end_offset: usize = 0;
614            if 1 > max_ordinal {
615                return Ok(());
616            }
617
618            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
619            // are envelope_size bytes.
620            let cur_offset: usize = (1 - 1) * envelope_size;
621
622            // Zero reserved fields.
623            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
624
625            // Safety:
626            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
627            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
628            //   envelope_size bytes, there is always sufficient room.
629            fidl::encoding::encode_in_envelope_optional::<i64, D>(
630                self.energy_uj.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
631                encoder,
632                offset + cur_offset,
633                depth,
634            )?;
635
636            _prev_end_offset = cur_offset + envelope_size;
637            if 2 > max_ordinal {
638                return Ok(());
639            }
640
641            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
642            // are envelope_size bytes.
643            let cur_offset: usize = (2 - 1) * envelope_size;
644
645            // Zero reserved fields.
646            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
647
648            // Safety:
649            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
650            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
651            //   envelope_size bytes, there is always sufficient room.
652            fidl::encoding::encode_in_envelope_optional::<i64, D>(
653                self.interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
654                encoder,
655                offset + cur_offset,
656                depth,
657            )?;
658
659            _prev_end_offset = cur_offset + envelope_size;
660            if 3 > max_ordinal {
661                return Ok(());
662            }
663
664            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
665            // are envelope_size bytes.
666            let cur_offset: usize = (3 - 1) * envelope_size;
667
668            // Zero reserved fields.
669            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
670
671            // Safety:
672            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
673            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
674            //   envelope_size bytes, there is always sufficient room.
675            fidl::encoding::encode_in_envelope_optional::<i64, D>(
676                self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
677                encoder,
678                offset + cur_offset,
679                depth,
680            )?;
681
682            _prev_end_offset = cur_offset + envelope_size;
683
684            Ok(())
685        }
686    }
687
688    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EnergyReading {
689        #[inline(always)]
690        fn new_empty() -> Self {
691            Self::default()
692        }
693
694        unsafe fn decode(
695            &mut self,
696            decoder: &mut fidl::encoding::Decoder<'_, D>,
697            offset: usize,
698            mut depth: fidl::encoding::Depth,
699        ) -> fidl::Result<()> {
700            decoder.debug_check_bounds::<Self>(offset);
701            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
702                None => return Err(fidl::Error::NotNullable),
703                Some(len) => len,
704            };
705            // Calling decoder.out_of_line_offset(0) is not allowed.
706            if len == 0 {
707                return Ok(());
708            };
709            depth.increment()?;
710            let envelope_size = 8;
711            let bytes_len = len * envelope_size;
712            let offset = decoder.out_of_line_offset(bytes_len)?;
713            // Decode the envelope for each type.
714            let mut _next_ordinal_to_read = 0;
715            let mut next_offset = offset;
716            let end_offset = offset + bytes_len;
717            _next_ordinal_to_read += 1;
718            if next_offset >= end_offset {
719                return Ok(());
720            }
721
722            // Decode unknown envelopes for gaps in ordinals.
723            while _next_ordinal_to_read < 1 {
724                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
725                _next_ordinal_to_read += 1;
726                next_offset += envelope_size;
727            }
728
729            let next_out_of_line = decoder.next_out_of_line();
730            let handles_before = decoder.remaining_handles();
731            if let Some((inlined, num_bytes, num_handles)) =
732                fidl::encoding::decode_envelope_header(decoder, next_offset)?
733            {
734                let member_inline_size =
735                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
736                if inlined != (member_inline_size <= 4) {
737                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
738                }
739                let inner_offset;
740                let mut inner_depth = depth.clone();
741                if inlined {
742                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
743                    inner_offset = next_offset;
744                } else {
745                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
746                    inner_depth.increment()?;
747                }
748                let val_ref = self.energy_uj.get_or_insert_with(|| fidl::new_empty!(i64, D));
749                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
750                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
751                {
752                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
753                }
754                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
755                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
756                }
757            }
758
759            next_offset += envelope_size;
760            _next_ordinal_to_read += 1;
761            if next_offset >= end_offset {
762                return Ok(());
763            }
764
765            // Decode unknown envelopes for gaps in ordinals.
766            while _next_ordinal_to_read < 2 {
767                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
768                _next_ordinal_to_read += 1;
769                next_offset += envelope_size;
770            }
771
772            let next_out_of_line = decoder.next_out_of_line();
773            let handles_before = decoder.remaining_handles();
774            if let Some((inlined, num_bytes, num_handles)) =
775                fidl::encoding::decode_envelope_header(decoder, next_offset)?
776            {
777                let member_inline_size =
778                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
779                if inlined != (member_inline_size <= 4) {
780                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
781                }
782                let inner_offset;
783                let mut inner_depth = depth.clone();
784                if inlined {
785                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
786                    inner_offset = next_offset;
787                } else {
788                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
789                    inner_depth.increment()?;
790                }
791                let val_ref = self.interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
792                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
793                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
794                {
795                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
796                }
797                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
798                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
799                }
800            }
801
802            next_offset += envelope_size;
803            _next_ordinal_to_read += 1;
804            if next_offset >= end_offset {
805                return Ok(());
806            }
807
808            // Decode unknown envelopes for gaps in ordinals.
809            while _next_ordinal_to_read < 3 {
810                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
811                _next_ordinal_to_read += 1;
812                next_offset += envelope_size;
813            }
814
815            let next_out_of_line = decoder.next_out_of_line();
816            let handles_before = decoder.remaining_handles();
817            if let Some((inlined, num_bytes, num_handles)) =
818                fidl::encoding::decode_envelope_header(decoder, next_offset)?
819            {
820                let member_inline_size =
821                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
822                if inlined != (member_inline_size <= 4) {
823                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
824                }
825                let inner_offset;
826                let mut inner_depth = depth.clone();
827                if inlined {
828                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
829                    inner_offset = next_offset;
830                } else {
831                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
832                    inner_depth.increment()?;
833                }
834                let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
835                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
836                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
837                {
838                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
839                }
840                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
841                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
842                }
843            }
844
845            next_offset += envelope_size;
846
847            // Decode the remaining unknown envelopes.
848            while next_offset < end_offset {
849                _next_ordinal_to_read += 1;
850                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
851                next_offset += envelope_size;
852            }
853
854            Ok(())
855        }
856    }
857
858    impl Options {
859        #[inline(always)]
860        fn max_ordinal_present(&self) -> u64 {
861            if let Some(_) = self.measurement_type {
862                return 1;
863            }
864            0
865        }
866    }
867
868    impl fidl::encoding::ValueTypeMarker for Options {
869        type Borrowed<'a> = &'a Self;
870        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
871            value
872        }
873    }
874
875    unsafe impl fidl::encoding::TypeMarker for Options {
876        type Owned = Self;
877
878        #[inline(always)]
879        fn inline_align(_context: fidl::encoding::Context) -> usize {
880            8
881        }
882
883        #[inline(always)]
884        fn inline_size(_context: fidl::encoding::Context) -> usize {
885            16
886        }
887    }
888
889    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Options, D> for &Options {
890        unsafe fn encode(
891            self,
892            encoder: &mut fidl::encoding::Encoder<'_, D>,
893            offset: usize,
894            mut depth: fidl::encoding::Depth,
895        ) -> fidl::Result<()> {
896            encoder.debug_check_bounds::<Options>(offset);
897            // Vector header
898            let max_ordinal: u64 = self.max_ordinal_present();
899            encoder.write_num(max_ordinal, offset);
900            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
901            // Calling encoder.out_of_line_offset(0) is not allowed.
902            if max_ordinal == 0 {
903                return Ok(());
904            }
905            depth.increment()?;
906            let envelope_size = 8;
907            let bytes_len = max_ordinal as usize * envelope_size;
908            #[allow(unused_variables)]
909            let offset = encoder.out_of_line_offset(bytes_len);
910            let mut _prev_end_offset: usize = 0;
911            if 1 > max_ordinal {
912                return Ok(());
913            }
914
915            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
916            // are envelope_size bytes.
917            let cur_offset: usize = (1 - 1) * envelope_size;
918
919            // Zero reserved fields.
920            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
921
922            // Safety:
923            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
924            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
925            //   envelope_size bytes, there is always sufficient room.
926            fidl::encoding::encode_in_envelope_optional::<MeasurementType, D>(
927                self.measurement_type
928                    .as_ref()
929                    .map(<MeasurementType as fidl::encoding::ValueTypeMarker>::borrow),
930                encoder,
931                offset + cur_offset,
932                depth,
933            )?;
934
935            _prev_end_offset = cur_offset + envelope_size;
936
937            Ok(())
938        }
939    }
940
941    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Options {
942        #[inline(always)]
943        fn new_empty() -> Self {
944            Self::default()
945        }
946
947        unsafe fn decode(
948            &mut self,
949            decoder: &mut fidl::encoding::Decoder<'_, D>,
950            offset: usize,
951            mut depth: fidl::encoding::Depth,
952        ) -> fidl::Result<()> {
953            decoder.debug_check_bounds::<Self>(offset);
954            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
955                None => return Err(fidl::Error::NotNullable),
956                Some(len) => len,
957            };
958            // Calling decoder.out_of_line_offset(0) is not allowed.
959            if len == 0 {
960                return Ok(());
961            };
962            depth.increment()?;
963            let envelope_size = 8;
964            let bytes_len = len * envelope_size;
965            let offset = decoder.out_of_line_offset(bytes_len)?;
966            // Decode the envelope for each type.
967            let mut _next_ordinal_to_read = 0;
968            let mut next_offset = offset;
969            let end_offset = offset + bytes_len;
970            _next_ordinal_to_read += 1;
971            if next_offset >= end_offset {
972                return Ok(());
973            }
974
975            // Decode unknown envelopes for gaps in ordinals.
976            while _next_ordinal_to_read < 1 {
977                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
978                _next_ordinal_to_read += 1;
979                next_offset += envelope_size;
980            }
981
982            let next_out_of_line = decoder.next_out_of_line();
983            let handles_before = decoder.remaining_handles();
984            if let Some((inlined, num_bytes, num_handles)) =
985                fidl::encoding::decode_envelope_header(decoder, next_offset)?
986            {
987                let member_inline_size =
988                    <MeasurementType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
989                if inlined != (member_inline_size <= 4) {
990                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
991                }
992                let inner_offset;
993                let mut inner_depth = depth.clone();
994                if inlined {
995                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
996                    inner_offset = next_offset;
997                } else {
998                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
999                    inner_depth.increment()?;
1000                }
1001                let val_ref = self
1002                    .measurement_type
1003                    .get_or_insert_with(|| fidl::new_empty!(MeasurementType, D));
1004                fidl::decode!(MeasurementType, D, val_ref, decoder, inner_offset, inner_depth)?;
1005                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1006                {
1007                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1008                }
1009                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1010                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1011                }
1012            }
1013
1014            next_offset += envelope_size;
1015
1016            // Decode the remaining unknown envelopes.
1017            while next_offset < end_offset {
1018                _next_ordinal_to_read += 1;
1019                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1020                next_offset += envelope_size;
1021            }
1022
1023            Ok(())
1024        }
1025    }
1026
1027    impl PollingConfig {
1028        #[inline(always)]
1029        fn max_ordinal_present(&self) -> u64 {
1030            if let Some(_) = self.polls_per_series_entry {
1031                return 2;
1032            }
1033            if let Some(_) = self.poll_interval {
1034                return 1;
1035            }
1036            0
1037        }
1038    }
1039
1040    impl fidl::encoding::ValueTypeMarker for PollingConfig {
1041        type Borrowed<'a> = &'a Self;
1042        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1043            value
1044        }
1045    }
1046
1047    unsafe impl fidl::encoding::TypeMarker for PollingConfig {
1048        type Owned = Self;
1049
1050        #[inline(always)]
1051        fn inline_align(_context: fidl::encoding::Context) -> usize {
1052            8
1053        }
1054
1055        #[inline(always)]
1056        fn inline_size(_context: fidl::encoding::Context) -> usize {
1057            16
1058        }
1059    }
1060
1061    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PollingConfig, D>
1062        for &PollingConfig
1063    {
1064        unsafe fn encode(
1065            self,
1066            encoder: &mut fidl::encoding::Encoder<'_, D>,
1067            offset: usize,
1068            mut depth: fidl::encoding::Depth,
1069        ) -> fidl::Result<()> {
1070            encoder.debug_check_bounds::<PollingConfig>(offset);
1071            // Vector header
1072            let max_ordinal: u64 = self.max_ordinal_present();
1073            encoder.write_num(max_ordinal, offset);
1074            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1075            // Calling encoder.out_of_line_offset(0) is not allowed.
1076            if max_ordinal == 0 {
1077                return Ok(());
1078            }
1079            depth.increment()?;
1080            let envelope_size = 8;
1081            let bytes_len = max_ordinal as usize * envelope_size;
1082            #[allow(unused_variables)]
1083            let offset = encoder.out_of_line_offset(bytes_len);
1084            let mut _prev_end_offset: usize = 0;
1085            if 1 > max_ordinal {
1086                return Ok(());
1087            }
1088
1089            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1090            // are envelope_size bytes.
1091            let cur_offset: usize = (1 - 1) * envelope_size;
1092
1093            // Zero reserved fields.
1094            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1095
1096            // Safety:
1097            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1098            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1099            //   envelope_size bytes, there is always sufficient room.
1100            fidl::encoding::encode_in_envelope_optional::<i64, D>(
1101                self.poll_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1102                encoder,
1103                offset + cur_offset,
1104                depth,
1105            )?;
1106
1107            _prev_end_offset = cur_offset + envelope_size;
1108            if 2 > max_ordinal {
1109                return Ok(());
1110            }
1111
1112            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1113            // are envelope_size bytes.
1114            let cur_offset: usize = (2 - 1) * envelope_size;
1115
1116            // Zero reserved fields.
1117            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1118
1119            // Safety:
1120            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1121            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1122            //   envelope_size bytes, there is always sufficient room.
1123            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1124                self.polls_per_series_entry
1125                    .as_ref()
1126                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1127                encoder,
1128                offset + cur_offset,
1129                depth,
1130            )?;
1131
1132            _prev_end_offset = cur_offset + envelope_size;
1133
1134            Ok(())
1135        }
1136    }
1137
1138    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PollingConfig {
1139        #[inline(always)]
1140        fn new_empty() -> Self {
1141            Self::default()
1142        }
1143
1144        unsafe fn decode(
1145            &mut self,
1146            decoder: &mut fidl::encoding::Decoder<'_, D>,
1147            offset: usize,
1148            mut depth: fidl::encoding::Depth,
1149        ) -> fidl::Result<()> {
1150            decoder.debug_check_bounds::<Self>(offset);
1151            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1152                None => return Err(fidl::Error::NotNullable),
1153                Some(len) => len,
1154            };
1155            // Calling decoder.out_of_line_offset(0) is not allowed.
1156            if len == 0 {
1157                return Ok(());
1158            };
1159            depth.increment()?;
1160            let envelope_size = 8;
1161            let bytes_len = len * envelope_size;
1162            let offset = decoder.out_of_line_offset(bytes_len)?;
1163            // Decode the envelope for each type.
1164            let mut _next_ordinal_to_read = 0;
1165            let mut next_offset = offset;
1166            let end_offset = offset + bytes_len;
1167            _next_ordinal_to_read += 1;
1168            if next_offset >= end_offset {
1169                return Ok(());
1170            }
1171
1172            // Decode unknown envelopes for gaps in ordinals.
1173            while _next_ordinal_to_read < 1 {
1174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1175                _next_ordinal_to_read += 1;
1176                next_offset += envelope_size;
1177            }
1178
1179            let next_out_of_line = decoder.next_out_of_line();
1180            let handles_before = decoder.remaining_handles();
1181            if let Some((inlined, num_bytes, num_handles)) =
1182                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1183            {
1184                let member_inline_size =
1185                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1186                if inlined != (member_inline_size <= 4) {
1187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1188                }
1189                let inner_offset;
1190                let mut inner_depth = depth.clone();
1191                if inlined {
1192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1193                    inner_offset = next_offset;
1194                } else {
1195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1196                    inner_depth.increment()?;
1197                }
1198                let val_ref = self.poll_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
1199                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1200                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1201                {
1202                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1203                }
1204                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1205                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1206                }
1207            }
1208
1209            next_offset += envelope_size;
1210            _next_ordinal_to_read += 1;
1211            if next_offset >= end_offset {
1212                return Ok(());
1213            }
1214
1215            // Decode unknown envelopes for gaps in ordinals.
1216            while _next_ordinal_to_read < 2 {
1217                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1218                _next_ordinal_to_read += 1;
1219                next_offset += envelope_size;
1220            }
1221
1222            let next_out_of_line = decoder.next_out_of_line();
1223            let handles_before = decoder.remaining_handles();
1224            if let Some((inlined, num_bytes, num_handles)) =
1225                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1226            {
1227                let member_inline_size =
1228                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1229                if inlined != (member_inline_size <= 4) {
1230                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1231                }
1232                let inner_offset;
1233                let mut inner_depth = depth.clone();
1234                if inlined {
1235                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1236                    inner_offset = next_offset;
1237                } else {
1238                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1239                    inner_depth.increment()?;
1240                }
1241                let val_ref =
1242                    self.polls_per_series_entry.get_or_insert_with(|| fidl::new_empty!(u32, D));
1243                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1244                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1245                {
1246                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1247                }
1248                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1249                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1250                }
1251            }
1252
1253            next_offset += envelope_size;
1254
1255            // Decode the remaining unknown envelopes.
1256            while next_offset < end_offset {
1257                _next_ordinal_to_read += 1;
1258                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1259                next_offset += envelope_size;
1260            }
1261
1262            Ok(())
1263        }
1264    }
1265
1266    impl PowerReading {
1267        #[inline(always)]
1268        fn max_ordinal_present(&self) -> u64 {
1269            if let Some(_) = self.timestamp {
1270                return 3;
1271            }
1272            if let Some(_) = self.interval {
1273                return 2;
1274            }
1275            if let Some(_) = self.power_uw {
1276                return 1;
1277            }
1278            0
1279        }
1280    }
1281
1282    impl fidl::encoding::ValueTypeMarker for PowerReading {
1283        type Borrowed<'a> = &'a Self;
1284        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1285            value
1286        }
1287    }
1288
1289    unsafe impl fidl::encoding::TypeMarker for PowerReading {
1290        type Owned = Self;
1291
1292        #[inline(always)]
1293        fn inline_align(_context: fidl::encoding::Context) -> usize {
1294            8
1295        }
1296
1297        #[inline(always)]
1298        fn inline_size(_context: fidl::encoding::Context) -> usize {
1299            16
1300        }
1301    }
1302
1303    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PowerReading, D>
1304        for &PowerReading
1305    {
1306        unsafe fn encode(
1307            self,
1308            encoder: &mut fidl::encoding::Encoder<'_, D>,
1309            offset: usize,
1310            mut depth: fidl::encoding::Depth,
1311        ) -> fidl::Result<()> {
1312            encoder.debug_check_bounds::<PowerReading>(offset);
1313            // Vector header
1314            let max_ordinal: u64 = self.max_ordinal_present();
1315            encoder.write_num(max_ordinal, offset);
1316            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1317            // Calling encoder.out_of_line_offset(0) is not allowed.
1318            if max_ordinal == 0 {
1319                return Ok(());
1320            }
1321            depth.increment()?;
1322            let envelope_size = 8;
1323            let bytes_len = max_ordinal as usize * envelope_size;
1324            #[allow(unused_variables)]
1325            let offset = encoder.out_of_line_offset(bytes_len);
1326            let mut _prev_end_offset: usize = 0;
1327            if 1 > max_ordinal {
1328                return Ok(());
1329            }
1330
1331            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1332            // are envelope_size bytes.
1333            let cur_offset: usize = (1 - 1) * envelope_size;
1334
1335            // Zero reserved fields.
1336            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1337
1338            // Safety:
1339            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1340            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1341            //   envelope_size bytes, there is always sufficient room.
1342            fidl::encoding::encode_in_envelope_optional::<i32, D>(
1343                self.power_uw.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1344                encoder,
1345                offset + cur_offset,
1346                depth,
1347            )?;
1348
1349            _prev_end_offset = cur_offset + envelope_size;
1350            if 2 > max_ordinal {
1351                return Ok(());
1352            }
1353
1354            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1355            // are envelope_size bytes.
1356            let cur_offset: usize = (2 - 1) * envelope_size;
1357
1358            // Zero reserved fields.
1359            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1360
1361            // Safety:
1362            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1363            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1364            //   envelope_size bytes, there is always sufficient room.
1365            fidl::encoding::encode_in_envelope_optional::<i64, D>(
1366                self.interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1367                encoder,
1368                offset + cur_offset,
1369                depth,
1370            )?;
1371
1372            _prev_end_offset = cur_offset + envelope_size;
1373            if 3 > max_ordinal {
1374                return Ok(());
1375            }
1376
1377            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1378            // are envelope_size bytes.
1379            let cur_offset: usize = (3 - 1) * envelope_size;
1380
1381            // Zero reserved fields.
1382            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1383
1384            // Safety:
1385            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1386            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1387            //   envelope_size bytes, there is always sufficient room.
1388            fidl::encoding::encode_in_envelope_optional::<i64, D>(
1389                self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1390                encoder,
1391                offset + cur_offset,
1392                depth,
1393            )?;
1394
1395            _prev_end_offset = cur_offset + envelope_size;
1396
1397            Ok(())
1398        }
1399    }
1400
1401    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PowerReading {
1402        #[inline(always)]
1403        fn new_empty() -> Self {
1404            Self::default()
1405        }
1406
1407        unsafe fn decode(
1408            &mut self,
1409            decoder: &mut fidl::encoding::Decoder<'_, D>,
1410            offset: usize,
1411            mut depth: fidl::encoding::Depth,
1412        ) -> fidl::Result<()> {
1413            decoder.debug_check_bounds::<Self>(offset);
1414            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1415                None => return Err(fidl::Error::NotNullable),
1416                Some(len) => len,
1417            };
1418            // Calling decoder.out_of_line_offset(0) is not allowed.
1419            if len == 0 {
1420                return Ok(());
1421            };
1422            depth.increment()?;
1423            let envelope_size = 8;
1424            let bytes_len = len * envelope_size;
1425            let offset = decoder.out_of_line_offset(bytes_len)?;
1426            // Decode the envelope for each type.
1427            let mut _next_ordinal_to_read = 0;
1428            let mut next_offset = offset;
1429            let end_offset = offset + bytes_len;
1430            _next_ordinal_to_read += 1;
1431            if next_offset >= end_offset {
1432                return Ok(());
1433            }
1434
1435            // Decode unknown envelopes for gaps in ordinals.
1436            while _next_ordinal_to_read < 1 {
1437                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1438                _next_ordinal_to_read += 1;
1439                next_offset += envelope_size;
1440            }
1441
1442            let next_out_of_line = decoder.next_out_of_line();
1443            let handles_before = decoder.remaining_handles();
1444            if let Some((inlined, num_bytes, num_handles)) =
1445                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1446            {
1447                let member_inline_size =
1448                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1449                if inlined != (member_inline_size <= 4) {
1450                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1451                }
1452                let inner_offset;
1453                let mut inner_depth = depth.clone();
1454                if inlined {
1455                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1456                    inner_offset = next_offset;
1457                } else {
1458                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1459                    inner_depth.increment()?;
1460                }
1461                let val_ref = self.power_uw.get_or_insert_with(|| fidl::new_empty!(i32, D));
1462                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
1463                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1464                {
1465                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1466                }
1467                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1468                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1469                }
1470            }
1471
1472            next_offset += envelope_size;
1473            _next_ordinal_to_read += 1;
1474            if next_offset >= end_offset {
1475                return Ok(());
1476            }
1477
1478            // Decode unknown envelopes for gaps in ordinals.
1479            while _next_ordinal_to_read < 2 {
1480                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1481                _next_ordinal_to_read += 1;
1482                next_offset += envelope_size;
1483            }
1484
1485            let next_out_of_line = decoder.next_out_of_line();
1486            let handles_before = decoder.remaining_handles();
1487            if let Some((inlined, num_bytes, num_handles)) =
1488                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1489            {
1490                let member_inline_size =
1491                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1492                if inlined != (member_inline_size <= 4) {
1493                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1494                }
1495                let inner_offset;
1496                let mut inner_depth = depth.clone();
1497                if inlined {
1498                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1499                    inner_offset = next_offset;
1500                } else {
1501                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1502                    inner_depth.increment()?;
1503                }
1504                let val_ref = self.interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
1505                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1506                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1507                {
1508                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1509                }
1510                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1511                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1512                }
1513            }
1514
1515            next_offset += envelope_size;
1516            _next_ordinal_to_read += 1;
1517            if next_offset >= end_offset {
1518                return Ok(());
1519            }
1520
1521            // Decode unknown envelopes for gaps in ordinals.
1522            while _next_ordinal_to_read < 3 {
1523                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1524                _next_ordinal_to_read += 1;
1525                next_offset += envelope_size;
1526            }
1527
1528            let next_out_of_line = decoder.next_out_of_line();
1529            let handles_before = decoder.remaining_handles();
1530            if let Some((inlined, num_bytes, num_handles)) =
1531                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1532            {
1533                let member_inline_size =
1534                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1535                if inlined != (member_inline_size <= 4) {
1536                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1537                }
1538                let inner_offset;
1539                let mut inner_depth = depth.clone();
1540                if inlined {
1541                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1542                    inner_offset = next_offset;
1543                } else {
1544                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1545                    inner_depth.increment()?;
1546                }
1547                let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
1548                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1549                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1550                {
1551                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1552                }
1553                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1554                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1555                }
1556            }
1557
1558            next_offset += envelope_size;
1559
1560            // Decode the remaining unknown envelopes.
1561            while next_offset < end_offset {
1562                _next_ordinal_to_read += 1;
1563                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1564                next_offset += envelope_size;
1565            }
1566
1567            Ok(())
1568        }
1569    }
1570
1571    impl RailMetadata {
1572        #[inline(always)]
1573        fn max_ordinal_present(&self) -> u64 {
1574            if let Some(_) = self.schematic_name {
1575                return 3;
1576            }
1577            if let Some(_) = self.channel_id {
1578                return 2;
1579            }
1580            if let Some(_) = self.name {
1581                return 1;
1582            }
1583            0
1584        }
1585    }
1586
1587    impl fidl::encoding::ValueTypeMarker for RailMetadata {
1588        type Borrowed<'a> = &'a Self;
1589        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1590            value
1591        }
1592    }
1593
1594    unsafe impl fidl::encoding::TypeMarker for RailMetadata {
1595        type Owned = Self;
1596
1597        #[inline(always)]
1598        fn inline_align(_context: fidl::encoding::Context) -> usize {
1599            8
1600        }
1601
1602        #[inline(always)]
1603        fn inline_size(_context: fidl::encoding::Context) -> usize {
1604            16
1605        }
1606    }
1607
1608    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RailMetadata, D>
1609        for &RailMetadata
1610    {
1611        unsafe fn encode(
1612            self,
1613            encoder: &mut fidl::encoding::Encoder<'_, D>,
1614            offset: usize,
1615            mut depth: fidl::encoding::Depth,
1616        ) -> fidl::Result<()> {
1617            encoder.debug_check_bounds::<RailMetadata>(offset);
1618            // Vector header
1619            let max_ordinal: u64 = self.max_ordinal_present();
1620            encoder.write_num(max_ordinal, offset);
1621            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1622            // Calling encoder.out_of_line_offset(0) is not allowed.
1623            if max_ordinal == 0 {
1624                return Ok(());
1625            }
1626            depth.increment()?;
1627            let envelope_size = 8;
1628            let bytes_len = max_ordinal as usize * envelope_size;
1629            #[allow(unused_variables)]
1630            let offset = encoder.out_of_line_offset(bytes_len);
1631            let mut _prev_end_offset: usize = 0;
1632            if 1 > max_ordinal {
1633                return Ok(());
1634            }
1635
1636            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1637            // are envelope_size bytes.
1638            let cur_offset: usize = (1 - 1) * envelope_size;
1639
1640            // Zero reserved fields.
1641            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1642
1643            // Safety:
1644            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1645            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1646            //   envelope_size bytes, there is always sufficient room.
1647            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
1648                self.name.as_ref().map(
1649                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
1650                ),
1651                encoder,
1652                offset + cur_offset,
1653                depth,
1654            )?;
1655
1656            _prev_end_offset = cur_offset + envelope_size;
1657            if 2 > max_ordinal {
1658                return Ok(());
1659            }
1660
1661            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1662            // are envelope_size bytes.
1663            let cur_offset: usize = (2 - 1) * envelope_size;
1664
1665            // Zero reserved fields.
1666            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1667
1668            // Safety:
1669            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1670            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1671            //   envelope_size bytes, there is always sufficient room.
1672            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1673                self.channel_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1674                encoder,
1675                offset + cur_offset,
1676                depth,
1677            )?;
1678
1679            _prev_end_offset = cur_offset + envelope_size;
1680            if 3 > max_ordinal {
1681                return Ok(());
1682            }
1683
1684            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1685            // are envelope_size bytes.
1686            let cur_offset: usize = (3 - 1) * envelope_size;
1687
1688            // Zero reserved fields.
1689            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1690
1691            // Safety:
1692            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1693            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1694            //   envelope_size bytes, there is always sufficient room.
1695            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
1696                self.schematic_name.as_ref().map(
1697                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
1698                ),
1699                encoder,
1700                offset + cur_offset,
1701                depth,
1702            )?;
1703
1704            _prev_end_offset = cur_offset + envelope_size;
1705
1706            Ok(())
1707        }
1708    }
1709
1710    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RailMetadata {
1711        #[inline(always)]
1712        fn new_empty() -> Self {
1713            Self::default()
1714        }
1715
1716        unsafe fn decode(
1717            &mut self,
1718            decoder: &mut fidl::encoding::Decoder<'_, D>,
1719            offset: usize,
1720            mut depth: fidl::encoding::Depth,
1721        ) -> fidl::Result<()> {
1722            decoder.debug_check_bounds::<Self>(offset);
1723            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1724                None => return Err(fidl::Error::NotNullable),
1725                Some(len) => len,
1726            };
1727            // Calling decoder.out_of_line_offset(0) is not allowed.
1728            if len == 0 {
1729                return Ok(());
1730            };
1731            depth.increment()?;
1732            let envelope_size = 8;
1733            let bytes_len = len * envelope_size;
1734            let offset = decoder.out_of_line_offset(bytes_len)?;
1735            // Decode the envelope for each type.
1736            let mut _next_ordinal_to_read = 0;
1737            let mut next_offset = offset;
1738            let end_offset = offset + bytes_len;
1739            _next_ordinal_to_read += 1;
1740            if next_offset >= end_offset {
1741                return Ok(());
1742            }
1743
1744            // Decode unknown envelopes for gaps in ordinals.
1745            while _next_ordinal_to_read < 1 {
1746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1747                _next_ordinal_to_read += 1;
1748                next_offset += envelope_size;
1749            }
1750
1751            let next_out_of_line = decoder.next_out_of_line();
1752            let handles_before = decoder.remaining_handles();
1753            if let Some((inlined, num_bytes, num_handles)) =
1754                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1755            {
1756                let member_inline_size =
1757                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
1758                        decoder.context,
1759                    );
1760                if inlined != (member_inline_size <= 4) {
1761                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1762                }
1763                let inner_offset;
1764                let mut inner_depth = depth.clone();
1765                if inlined {
1766                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1767                    inner_offset = next_offset;
1768                } else {
1769                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1770                    inner_depth.increment()?;
1771                }
1772                let val_ref = self
1773                    .name
1774                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
1775                fidl::decode!(
1776                    fidl::encoding::BoundedString<256>,
1777                    D,
1778                    val_ref,
1779                    decoder,
1780                    inner_offset,
1781                    inner_depth
1782                )?;
1783                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1784                {
1785                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1786                }
1787                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1788                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1789                }
1790            }
1791
1792            next_offset += envelope_size;
1793            _next_ordinal_to_read += 1;
1794            if next_offset >= end_offset {
1795                return Ok(());
1796            }
1797
1798            // Decode unknown envelopes for gaps in ordinals.
1799            while _next_ordinal_to_read < 2 {
1800                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1801                _next_ordinal_to_read += 1;
1802                next_offset += envelope_size;
1803            }
1804
1805            let next_out_of_line = decoder.next_out_of_line();
1806            let handles_before = decoder.remaining_handles();
1807            if let Some((inlined, num_bytes, num_handles)) =
1808                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1809            {
1810                let member_inline_size =
1811                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1812                if inlined != (member_inline_size <= 4) {
1813                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1814                }
1815                let inner_offset;
1816                let mut inner_depth = depth.clone();
1817                if inlined {
1818                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1819                    inner_offset = next_offset;
1820                } else {
1821                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1822                    inner_depth.increment()?;
1823                }
1824                let val_ref = self.channel_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1825                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1826                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1827                {
1828                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1829                }
1830                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1831                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1832                }
1833            }
1834
1835            next_offset += envelope_size;
1836            _next_ordinal_to_read += 1;
1837            if next_offset >= end_offset {
1838                return Ok(());
1839            }
1840
1841            // Decode unknown envelopes for gaps in ordinals.
1842            while _next_ordinal_to_read < 3 {
1843                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1844                _next_ordinal_to_read += 1;
1845                next_offset += envelope_size;
1846            }
1847
1848            let next_out_of_line = decoder.next_out_of_line();
1849            let handles_before = decoder.remaining_handles();
1850            if let Some((inlined, num_bytes, num_handles)) =
1851                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1852            {
1853                let member_inline_size =
1854                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
1855                        decoder.context,
1856                    );
1857                if inlined != (member_inline_size <= 4) {
1858                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1859                }
1860                let inner_offset;
1861                let mut inner_depth = depth.clone();
1862                if inlined {
1863                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1864                    inner_offset = next_offset;
1865                } else {
1866                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1867                    inner_depth.increment()?;
1868                }
1869                let val_ref = self
1870                    .schematic_name
1871                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
1872                fidl::decode!(
1873                    fidl::encoding::BoundedString<256>,
1874                    D,
1875                    val_ref,
1876                    decoder,
1877                    inner_offset,
1878                    inner_depth
1879                )?;
1880                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1881                {
1882                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1883                }
1884                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1885                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1886                }
1887            }
1888
1889            next_offset += envelope_size;
1890
1891            // Decode the remaining unknown envelopes.
1892            while next_offset < end_offset {
1893                _next_ordinal_to_read += 1;
1894                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1895                next_offset += envelope_size;
1896            }
1897
1898            Ok(())
1899        }
1900    }
1901}