Skip to main content

fidl_fuchsia_hardware_power_usb_common/
fidl_fuchsia_hardware_power_usb_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#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
12#[repr(C)]
13pub struct UsbSourceSetInputCurrentLimitRequest {
14    pub limit_ua: u32,
15}
16
17impl fidl::Persistable for UsbSourceSetInputCurrentLimitRequest {}
18
19#[derive(Clone, Debug, PartialEq)]
20pub struct UsbSourceGetSpecResponse {
21    pub spec: Spec,
22}
23
24impl fidl::Persistable for UsbSourceGetSpecResponse {}
25
26#[derive(Clone, Debug, PartialEq)]
27pub struct UsbSourceGetStatusResponse {
28    pub status: Status,
29}
30
31impl fidl::Persistable for UsbSourceGetStatusResponse {}
32
33/// Static hardware characteristics of the USB source.
34#[derive(Clone, Debug, Default, PartialEq)]
35pub struct Spec {
36    /// Base spec from the underlying power source.
37    pub source_spec: Option<fidl_fuchsia_hardware_power_source_common::Spec>,
38    #[doc(hidden)]
39    pub __source_breaking: fidl::marker::SourceBreaking,
40}
41
42impl fidl::Persistable for Spec {}
43
44/// Dynamic status of the USB source.
45#[derive(Clone, Debug, Default, PartialEq)]
46pub struct Status {
47    /// Base status from the underlying power source.
48    pub source_status: Option<fidl_fuchsia_hardware_power_source_common::Status>,
49    /// The current settled input current limit, in microamps.
50    pub input_current_limit_ua: Option<u32>,
51    #[doc(hidden)]
52    pub __source_breaking: fidl::marker::SourceBreaking,
53}
54
55impl fidl::Persistable for Status {}
56
57pub mod debug_ordinals {
58    pub const SET_CONNECTED: u64 = 0x17a772be294b4e27;
59}
60
61pub mod usb_source_ordinals {
62    pub const GET_SPEC: u64 = 0xa6da1fd32ae9e5e;
63    pub const GET_STATUS: u64 = 0x48d44a3f9b92471a;
64    pub const SET_INPUT_CURRENT_LIMIT: u64 = 0x7633140057298018;
65    pub const WATCH: u64 = 0x740e01eea4327def;
66}
67
68mod internal {
69    use super::*;
70
71    impl fidl::encoding::ValueTypeMarker for UsbSourceSetInputCurrentLimitRequest {
72        type Borrowed<'a> = &'a Self;
73        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
74            value
75        }
76    }
77
78    unsafe impl fidl::encoding::TypeMarker for UsbSourceSetInputCurrentLimitRequest {
79        type Owned = Self;
80
81        #[inline(always)]
82        fn inline_align(_context: fidl::encoding::Context) -> usize {
83            4
84        }
85
86        #[inline(always)]
87        fn inline_size(_context: fidl::encoding::Context) -> usize {
88            4
89        }
90        #[inline(always)]
91        fn encode_is_copy() -> bool {
92            true
93        }
94
95        #[inline(always)]
96        fn decode_is_copy() -> bool {
97            true
98        }
99    }
100
101    unsafe impl<D: fidl::encoding::ResourceDialect>
102        fidl::encoding::Encode<UsbSourceSetInputCurrentLimitRequest, D>
103        for &UsbSourceSetInputCurrentLimitRequest
104    {
105        #[inline]
106        unsafe fn encode(
107            self,
108            encoder: &mut fidl::encoding::Encoder<'_, D>,
109            offset: usize,
110            _depth: fidl::encoding::Depth,
111        ) -> fidl::Result<()> {
112            encoder.debug_check_bounds::<UsbSourceSetInputCurrentLimitRequest>(offset);
113            unsafe {
114                // Copy the object into the buffer.
115                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
116                (buf_ptr as *mut UsbSourceSetInputCurrentLimitRequest)
117                    .write_unaligned((self as *const UsbSourceSetInputCurrentLimitRequest).read());
118                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
119                // done second because the memcpy will write garbage to these bytes.
120            }
121            Ok(())
122        }
123    }
124    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
125        fidl::encoding::Encode<UsbSourceSetInputCurrentLimitRequest, D> for (T0,)
126    {
127        #[inline]
128        unsafe fn encode(
129            self,
130            encoder: &mut fidl::encoding::Encoder<'_, D>,
131            offset: usize,
132            depth: fidl::encoding::Depth,
133        ) -> fidl::Result<()> {
134            encoder.debug_check_bounds::<UsbSourceSetInputCurrentLimitRequest>(offset);
135            // Zero out padding regions. There's no need to apply masks
136            // because the unmasked parts will be overwritten by fields.
137            // Write the fields.
138            self.0.encode(encoder, offset + 0, depth)?;
139            Ok(())
140        }
141    }
142
143    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
144        for UsbSourceSetInputCurrentLimitRequest
145    {
146        #[inline(always)]
147        fn new_empty() -> Self {
148            Self { limit_ua: fidl::new_empty!(u32, D) }
149        }
150
151        #[inline]
152        unsafe fn decode(
153            &mut self,
154            decoder: &mut fidl::encoding::Decoder<'_, D>,
155            offset: usize,
156            _depth: fidl::encoding::Depth,
157        ) -> fidl::Result<()> {
158            decoder.debug_check_bounds::<Self>(offset);
159            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
160            // Verify that padding bytes are zero.
161            // Copy from the buffer into the object.
162            unsafe {
163                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
164            }
165            Ok(())
166        }
167    }
168
169    impl fidl::encoding::ValueTypeMarker for UsbSourceGetSpecResponse {
170        type Borrowed<'a> = &'a Self;
171        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
172            value
173        }
174    }
175
176    unsafe impl fidl::encoding::TypeMarker for UsbSourceGetSpecResponse {
177        type Owned = Self;
178
179        #[inline(always)]
180        fn inline_align(_context: fidl::encoding::Context) -> usize {
181            8
182        }
183
184        #[inline(always)]
185        fn inline_size(_context: fidl::encoding::Context) -> usize {
186            16
187        }
188    }
189
190    unsafe impl<D: fidl::encoding::ResourceDialect>
191        fidl::encoding::Encode<UsbSourceGetSpecResponse, D> for &UsbSourceGetSpecResponse
192    {
193        #[inline]
194        unsafe fn encode(
195            self,
196            encoder: &mut fidl::encoding::Encoder<'_, D>,
197            offset: usize,
198            _depth: fidl::encoding::Depth,
199        ) -> fidl::Result<()> {
200            encoder.debug_check_bounds::<UsbSourceGetSpecResponse>(offset);
201            // Delegate to tuple encoding.
202            fidl::encoding::Encode::<UsbSourceGetSpecResponse, D>::encode(
203                (<Spec as fidl::encoding::ValueTypeMarker>::borrow(&self.spec),),
204                encoder,
205                offset,
206                _depth,
207            )
208        }
209    }
210    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Spec, D>>
211        fidl::encoding::Encode<UsbSourceGetSpecResponse, D> for (T0,)
212    {
213        #[inline]
214        unsafe fn encode(
215            self,
216            encoder: &mut fidl::encoding::Encoder<'_, D>,
217            offset: usize,
218            depth: fidl::encoding::Depth,
219        ) -> fidl::Result<()> {
220            encoder.debug_check_bounds::<UsbSourceGetSpecResponse>(offset);
221            // Zero out padding regions. There's no need to apply masks
222            // because the unmasked parts will be overwritten by fields.
223            // Write the fields.
224            self.0.encode(encoder, offset + 0, depth)?;
225            Ok(())
226        }
227    }
228
229    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
230        for UsbSourceGetSpecResponse
231    {
232        #[inline(always)]
233        fn new_empty() -> Self {
234            Self { spec: fidl::new_empty!(Spec, D) }
235        }
236
237        #[inline]
238        unsafe fn decode(
239            &mut self,
240            decoder: &mut fidl::encoding::Decoder<'_, D>,
241            offset: usize,
242            _depth: fidl::encoding::Depth,
243        ) -> fidl::Result<()> {
244            decoder.debug_check_bounds::<Self>(offset);
245            // Verify that padding bytes are zero.
246            fidl::decode!(Spec, D, &mut self.spec, decoder, offset + 0, _depth)?;
247            Ok(())
248        }
249    }
250
251    impl fidl::encoding::ValueTypeMarker for UsbSourceGetStatusResponse {
252        type Borrowed<'a> = &'a Self;
253        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
254            value
255        }
256    }
257
258    unsafe impl fidl::encoding::TypeMarker for UsbSourceGetStatusResponse {
259        type Owned = Self;
260
261        #[inline(always)]
262        fn inline_align(_context: fidl::encoding::Context) -> usize {
263            8
264        }
265
266        #[inline(always)]
267        fn inline_size(_context: fidl::encoding::Context) -> usize {
268            16
269        }
270    }
271
272    unsafe impl<D: fidl::encoding::ResourceDialect>
273        fidl::encoding::Encode<UsbSourceGetStatusResponse, D> for &UsbSourceGetStatusResponse
274    {
275        #[inline]
276        unsafe fn encode(
277            self,
278            encoder: &mut fidl::encoding::Encoder<'_, D>,
279            offset: usize,
280            _depth: fidl::encoding::Depth,
281        ) -> fidl::Result<()> {
282            encoder.debug_check_bounds::<UsbSourceGetStatusResponse>(offset);
283            // Delegate to tuple encoding.
284            fidl::encoding::Encode::<UsbSourceGetStatusResponse, D>::encode(
285                (<Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
286                encoder,
287                offset,
288                _depth,
289            )
290        }
291    }
292    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Status, D>>
293        fidl::encoding::Encode<UsbSourceGetStatusResponse, D> for (T0,)
294    {
295        #[inline]
296        unsafe fn encode(
297            self,
298            encoder: &mut fidl::encoding::Encoder<'_, D>,
299            offset: usize,
300            depth: fidl::encoding::Depth,
301        ) -> fidl::Result<()> {
302            encoder.debug_check_bounds::<UsbSourceGetStatusResponse>(offset);
303            // Zero out padding regions. There's no need to apply masks
304            // because the unmasked parts will be overwritten by fields.
305            // Write the fields.
306            self.0.encode(encoder, offset + 0, depth)?;
307            Ok(())
308        }
309    }
310
311    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
312        for UsbSourceGetStatusResponse
313    {
314        #[inline(always)]
315        fn new_empty() -> Self {
316            Self { status: fidl::new_empty!(Status, D) }
317        }
318
319        #[inline]
320        unsafe fn decode(
321            &mut self,
322            decoder: &mut fidl::encoding::Decoder<'_, D>,
323            offset: usize,
324            _depth: fidl::encoding::Depth,
325        ) -> fidl::Result<()> {
326            decoder.debug_check_bounds::<Self>(offset);
327            // Verify that padding bytes are zero.
328            fidl::decode!(Status, D, &mut self.status, decoder, offset + 0, _depth)?;
329            Ok(())
330        }
331    }
332
333    impl Spec {
334        #[inline(always)]
335        fn max_ordinal_present(&self) -> u64 {
336            if let Some(_) = self.source_spec {
337                return 1;
338            }
339            0
340        }
341    }
342
343    impl fidl::encoding::ValueTypeMarker for Spec {
344        type Borrowed<'a> = &'a Self;
345        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
346            value
347        }
348    }
349
350    unsafe impl fidl::encoding::TypeMarker for Spec {
351        type Owned = Self;
352
353        #[inline(always)]
354        fn inline_align(_context: fidl::encoding::Context) -> usize {
355            8
356        }
357
358        #[inline(always)]
359        fn inline_size(_context: fidl::encoding::Context) -> usize {
360            16
361        }
362    }
363
364    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Spec, D> for &Spec {
365        unsafe fn encode(
366            self,
367            encoder: &mut fidl::encoding::Encoder<'_, D>,
368            offset: usize,
369            mut depth: fidl::encoding::Depth,
370        ) -> fidl::Result<()> {
371            encoder.debug_check_bounds::<Spec>(offset);
372            // Vector header
373            let max_ordinal: u64 = self.max_ordinal_present();
374            encoder.write_num(max_ordinal, offset);
375            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
376            // Calling encoder.out_of_line_offset(0) is not allowed.
377            if max_ordinal == 0 {
378                return Ok(());
379            }
380            depth.increment()?;
381            let envelope_size = 8;
382            let bytes_len = max_ordinal as usize * envelope_size;
383            #[allow(unused_variables)]
384            let offset = encoder.out_of_line_offset(bytes_len);
385            let mut _prev_end_offset: usize = 0;
386            if 1 > max_ordinal {
387                return Ok(());
388            }
389
390            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
391            // are envelope_size bytes.
392            let cur_offset: usize = (1 - 1) * envelope_size;
393
394            // Zero reserved fields.
395            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
396
397            // Safety:
398            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
399            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
400            //   envelope_size bytes, there is always sufficient room.
401            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_hardware_power_source_common::Spec, D>(
402            self.source_spec.as_ref().map(<fidl_fuchsia_hardware_power_source_common::Spec as fidl::encoding::ValueTypeMarker>::borrow),
403            encoder, offset + cur_offset, depth
404        )?;
405
406            _prev_end_offset = cur_offset + envelope_size;
407
408            Ok(())
409        }
410    }
411
412    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Spec {
413        #[inline(always)]
414        fn new_empty() -> Self {
415            Self::default()
416        }
417
418        unsafe fn decode(
419            &mut self,
420            decoder: &mut fidl::encoding::Decoder<'_, D>,
421            offset: usize,
422            mut depth: fidl::encoding::Depth,
423        ) -> fidl::Result<()> {
424            decoder.debug_check_bounds::<Self>(offset);
425            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
426                None => return Err(fidl::Error::NotNullable),
427                Some(len) => len,
428            };
429            // Calling decoder.out_of_line_offset(0) is not allowed.
430            if len == 0 {
431                return Ok(());
432            };
433            depth.increment()?;
434            let envelope_size = 8;
435            let bytes_len = len * envelope_size;
436            let offset = decoder.out_of_line_offset(bytes_len)?;
437            // Decode the envelope for each type.
438            let mut _next_ordinal_to_read = 0;
439            let mut next_offset = offset;
440            let end_offset = offset + bytes_len;
441            _next_ordinal_to_read += 1;
442            if next_offset >= end_offset {
443                return Ok(());
444            }
445
446            // Decode unknown envelopes for gaps in ordinals.
447            while _next_ordinal_to_read < 1 {
448                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
449                _next_ordinal_to_read += 1;
450                next_offset += envelope_size;
451            }
452
453            let next_out_of_line = decoder.next_out_of_line();
454            let handles_before = decoder.remaining_handles();
455            if let Some((inlined, num_bytes, num_handles)) =
456                fidl::encoding::decode_envelope_header(decoder, next_offset)?
457            {
458                let member_inline_size = <fidl_fuchsia_hardware_power_source_common::Spec as fidl::encoding::TypeMarker>::inline_size(decoder.context);
459                if inlined != (member_inline_size <= 4) {
460                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
461                }
462                let inner_offset;
463                let mut inner_depth = depth.clone();
464                if inlined {
465                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
466                    inner_offset = next_offset;
467                } else {
468                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
469                    inner_depth.increment()?;
470                }
471                let val_ref = self.source_spec.get_or_insert_with(|| {
472                    fidl::new_empty!(fidl_fuchsia_hardware_power_source_common::Spec, D)
473                });
474                fidl::decode!(
475                    fidl_fuchsia_hardware_power_source_common::Spec,
476                    D,
477                    val_ref,
478                    decoder,
479                    inner_offset,
480                    inner_depth
481                )?;
482                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
483                {
484                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
485                }
486                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
487                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
488                }
489            }
490
491            next_offset += envelope_size;
492
493            // Decode the remaining unknown envelopes.
494            while next_offset < end_offset {
495                _next_ordinal_to_read += 1;
496                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
497                next_offset += envelope_size;
498            }
499
500            Ok(())
501        }
502    }
503
504    impl Status {
505        #[inline(always)]
506        fn max_ordinal_present(&self) -> u64 {
507            if let Some(_) = self.input_current_limit_ua {
508                return 2;
509            }
510            if let Some(_) = self.source_status {
511                return 1;
512            }
513            0
514        }
515    }
516
517    impl fidl::encoding::ValueTypeMarker for Status {
518        type Borrowed<'a> = &'a Self;
519        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
520            value
521        }
522    }
523
524    unsafe impl fidl::encoding::TypeMarker for Status {
525        type Owned = Self;
526
527        #[inline(always)]
528        fn inline_align(_context: fidl::encoding::Context) -> usize {
529            8
530        }
531
532        #[inline(always)]
533        fn inline_size(_context: fidl::encoding::Context) -> usize {
534            16
535        }
536    }
537
538    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Status, D> for &Status {
539        unsafe fn encode(
540            self,
541            encoder: &mut fidl::encoding::Encoder<'_, D>,
542            offset: usize,
543            mut depth: fidl::encoding::Depth,
544        ) -> fidl::Result<()> {
545            encoder.debug_check_bounds::<Status>(offset);
546            // Vector header
547            let max_ordinal: u64 = self.max_ordinal_present();
548            encoder.write_num(max_ordinal, offset);
549            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
550            // Calling encoder.out_of_line_offset(0) is not allowed.
551            if max_ordinal == 0 {
552                return Ok(());
553            }
554            depth.increment()?;
555            let envelope_size = 8;
556            let bytes_len = max_ordinal as usize * envelope_size;
557            #[allow(unused_variables)]
558            let offset = encoder.out_of_line_offset(bytes_len);
559            let mut _prev_end_offset: usize = 0;
560            if 1 > max_ordinal {
561                return Ok(());
562            }
563
564            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
565            // are envelope_size bytes.
566            let cur_offset: usize = (1 - 1) * envelope_size;
567
568            // Zero reserved fields.
569            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
570
571            // Safety:
572            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
573            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
574            //   envelope_size bytes, there is always sufficient room.
575            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_hardware_power_source_common::Status, D>(
576            self.source_status.as_ref().map(<fidl_fuchsia_hardware_power_source_common::Status as fidl::encoding::ValueTypeMarker>::borrow),
577            encoder, offset + cur_offset, depth
578        )?;
579
580            _prev_end_offset = cur_offset + envelope_size;
581            if 2 > max_ordinal {
582                return Ok(());
583            }
584
585            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
586            // are envelope_size bytes.
587            let cur_offset: usize = (2 - 1) * envelope_size;
588
589            // Zero reserved fields.
590            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
591
592            // Safety:
593            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
594            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
595            //   envelope_size bytes, there is always sufficient room.
596            fidl::encoding::encode_in_envelope_optional::<u32, D>(
597                self.input_current_limit_ua
598                    .as_ref()
599                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
600                encoder,
601                offset + cur_offset,
602                depth,
603            )?;
604
605            _prev_end_offset = cur_offset + envelope_size;
606
607            Ok(())
608        }
609    }
610
611    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Status {
612        #[inline(always)]
613        fn new_empty() -> Self {
614            Self::default()
615        }
616
617        unsafe fn decode(
618            &mut self,
619            decoder: &mut fidl::encoding::Decoder<'_, D>,
620            offset: usize,
621            mut depth: fidl::encoding::Depth,
622        ) -> fidl::Result<()> {
623            decoder.debug_check_bounds::<Self>(offset);
624            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
625                None => return Err(fidl::Error::NotNullable),
626                Some(len) => len,
627            };
628            // Calling decoder.out_of_line_offset(0) is not allowed.
629            if len == 0 {
630                return Ok(());
631            };
632            depth.increment()?;
633            let envelope_size = 8;
634            let bytes_len = len * envelope_size;
635            let offset = decoder.out_of_line_offset(bytes_len)?;
636            // Decode the envelope for each type.
637            let mut _next_ordinal_to_read = 0;
638            let mut next_offset = offset;
639            let end_offset = offset + bytes_len;
640            _next_ordinal_to_read += 1;
641            if next_offset >= end_offset {
642                return Ok(());
643            }
644
645            // Decode unknown envelopes for gaps in ordinals.
646            while _next_ordinal_to_read < 1 {
647                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
648                _next_ordinal_to_read += 1;
649                next_offset += envelope_size;
650            }
651
652            let next_out_of_line = decoder.next_out_of_line();
653            let handles_before = decoder.remaining_handles();
654            if let Some((inlined, num_bytes, num_handles)) =
655                fidl::encoding::decode_envelope_header(decoder, next_offset)?
656            {
657                let member_inline_size = <fidl_fuchsia_hardware_power_source_common::Status as fidl::encoding::TypeMarker>::inline_size(decoder.context);
658                if inlined != (member_inline_size <= 4) {
659                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
660                }
661                let inner_offset;
662                let mut inner_depth = depth.clone();
663                if inlined {
664                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
665                    inner_offset = next_offset;
666                } else {
667                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
668                    inner_depth.increment()?;
669                }
670                let val_ref = self.source_status.get_or_insert_with(|| {
671                    fidl::new_empty!(fidl_fuchsia_hardware_power_source_common::Status, D)
672                });
673                fidl::decode!(
674                    fidl_fuchsia_hardware_power_source_common::Status,
675                    D,
676                    val_ref,
677                    decoder,
678                    inner_offset,
679                    inner_depth
680                )?;
681                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
682                {
683                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
684                }
685                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
686                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
687                }
688            }
689
690            next_offset += envelope_size;
691            _next_ordinal_to_read += 1;
692            if next_offset >= end_offset {
693                return Ok(());
694            }
695
696            // Decode unknown envelopes for gaps in ordinals.
697            while _next_ordinal_to_read < 2 {
698                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
699                _next_ordinal_to_read += 1;
700                next_offset += envelope_size;
701            }
702
703            let next_out_of_line = decoder.next_out_of_line();
704            let handles_before = decoder.remaining_handles();
705            if let Some((inlined, num_bytes, num_handles)) =
706                fidl::encoding::decode_envelope_header(decoder, next_offset)?
707            {
708                let member_inline_size =
709                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
710                if inlined != (member_inline_size <= 4) {
711                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
712                }
713                let inner_offset;
714                let mut inner_depth = depth.clone();
715                if inlined {
716                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
717                    inner_offset = next_offset;
718                } else {
719                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
720                    inner_depth.increment()?;
721                }
722                let val_ref =
723                    self.input_current_limit_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
724                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
725                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
726                {
727                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
728                }
729                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
730                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
731                }
732            }
733
734            next_offset += envelope_size;
735
736            // Decode the remaining unknown envelopes.
737            while next_offset < end_offset {
738                _next_ordinal_to_read += 1;
739                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
740                next_offset += envelope_size;
741            }
742
743            Ok(())
744        }
745    }
746}