Skip to main content

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