1#![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(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
13#[repr(u32)]
14pub enum BatteryStatus {
15 Unknown = 0,
17 Ok = 1,
19 NotAvailable = 2,
21 NotPresent = 3,
23}
24
25impl BatteryStatus {
26 #[inline]
27 pub fn from_primitive(prim: u32) -> Option<Self> {
28 match prim {
29 0 => Some(Self::Unknown),
30 1 => Some(Self::Ok),
31 2 => Some(Self::NotAvailable),
32 3 => Some(Self::NotPresent),
33 _ => None,
34 }
35 }
36
37 #[inline]
38 pub const fn into_primitive(self) -> u32 {
39 self as u32
40 }
41}
42
43#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
45#[repr(u32)]
46pub enum ChargeSource {
47 Unknown = 0,
48 None = 1,
49 AcAdapter = 2,
50 Usb = 3,
51 Wireless = 4,
52}
53
54impl ChargeSource {
55 #[inline]
56 pub fn from_primitive(prim: u32) -> Option<Self> {
57 match prim {
58 0 => Some(Self::Unknown),
59 1 => Some(Self::None),
60 2 => Some(Self::AcAdapter),
61 3 => Some(Self::Usb),
62 4 => Some(Self::Wireless),
63 _ => None,
64 }
65 }
66
67 #[inline]
68 pub const fn into_primitive(self) -> u32 {
69 self as u32
70 }
71}
72
73#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
75#[repr(u32)]
76pub enum ChargeStatus {
77 Unknown = 0,
78 NotCharging = 1,
79 Charging = 2,
80 Discharging = 3,
81 Full = 4,
82}
83
84impl ChargeStatus {
85 #[inline]
86 pub fn from_primitive(prim: u32) -> Option<Self> {
87 match prim {
88 0 => Some(Self::Unknown),
89 1 => Some(Self::NotCharging),
90 2 => Some(Self::Charging),
91 3 => Some(Self::Discharging),
92 4 => Some(Self::Full),
93 _ => None,
94 }
95 }
96
97 #[inline]
98 pub const fn into_primitive(self) -> u32 {
99 self as u32
100 }
101}
102
103#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
105#[repr(u32)]
106pub enum HealthStatus {
107 Unknown = 0,
108 Good = 1,
109 Cold = 2,
110 Hot = 3,
111 Dead = 4,
112 OverVoltage = 5,
113 UnspecifiedFailure = 6,
114 Cool = 7,
115 Warm = 8,
116 Overheat = 9,
117}
118
119impl HealthStatus {
120 #[inline]
121 pub fn from_primitive(prim: u32) -> Option<Self> {
122 match prim {
123 0 => Some(Self::Unknown),
124 1 => Some(Self::Good),
125 2 => Some(Self::Cold),
126 3 => Some(Self::Hot),
127 4 => Some(Self::Dead),
128 5 => Some(Self::OverVoltage),
129 6 => Some(Self::UnspecifiedFailure),
130 7 => Some(Self::Cool),
131 8 => Some(Self::Warm),
132 9 => Some(Self::Overheat),
133 _ => None,
134 }
135 }
136
137 #[inline]
138 pub const fn into_primitive(self) -> u32 {
139 self as u32
140 }
141}
142
143#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
145#[repr(u32)]
146pub enum LevelStatus {
147 Unknown = 0,
148 Ok = 1,
149 Warning = 2,
150 Low = 3,
151 Critical = 4,
152}
153
154impl LevelStatus {
155 #[inline]
156 pub fn from_primitive(prim: u32) -> Option<Self> {
157 match prim {
158 0 => Some(Self::Unknown),
159 1 => Some(Self::Ok),
160 2 => Some(Self::Warning),
161 3 => Some(Self::Low),
162 4 => Some(Self::Critical),
163 _ => None,
164 }
165 }
166
167 #[inline]
168 pub const fn into_primitive(self) -> u32 {
169 self as u32
170 }
171}
172
173#[derive(Clone, Debug, PartialEq)]
174pub struct BatteryInfoProviderGetBatteryInfoResponse {
175 pub info: BatteryInfo,
176}
177
178impl fidl::Persistable for BatteryInfoProviderGetBatteryInfoResponse {}
179
180#[derive(Clone, Debug, Default, PartialEq)]
182pub struct BatteryInfo {
183 pub status: Option<BatteryStatus>,
185 pub charge_status: Option<ChargeStatus>,
187 pub charge_source: Option<ChargeSource>,
191 pub level_percent: Option<f32>,
194 pub level_status: Option<LevelStatus>,
196 pub health: Option<HealthStatus>,
198 pub time_remaining: Option<TimeRemaining>,
200 pub timestamp: Option<i64>,
202 pub present_voltage_mv: Option<u32>,
204 pub remaining_capacity_uah: Option<u32>,
206 pub battery_spec: Option<BatterySpec>,
208 pub full_capacity_uah: Option<i32>,
210 pub temperature_mc: Option<i32>,
212 pub present_current_ma: Option<i32>,
214 pub average_current_ma: Option<i32>,
216 #[doc(hidden)]
217 pub __source_breaking: fidl::marker::SourceBreaking,
218}
219
220impl fidl::Persistable for BatteryInfo {}
221
222#[derive(Clone, Debug, Default, PartialEq)]
224pub struct BatterySpec {
225 pub max_charging_current_ua: Option<i32>,
227 pub max_charging_voltage_uv: Option<i32>,
229 pub design_capacity_uah: Option<i32>,
231 #[doc(hidden)]
232 pub __source_breaking: fidl::marker::SourceBreaking,
233}
234
235impl fidl::Persistable for BatterySpec {}
236
237#[derive(Clone, Debug)]
239pub enum TimeRemaining {
240 Indeterminate(i64),
242 BatteryLife(i64),
244 FullCharge(i64),
246 #[doc(hidden)]
247 __SourceBreaking { unknown_ordinal: u64 },
248}
249
250#[macro_export]
252macro_rules! TimeRemainingUnknown {
253 () => {
254 _
255 };
256}
257
258impl PartialEq for TimeRemaining {
260 fn eq(&self, other: &Self) -> bool {
261 match (self, other) {
262 (Self::Indeterminate(x), Self::Indeterminate(y)) => *x == *y,
263 (Self::BatteryLife(x), Self::BatteryLife(y)) => *x == *y,
264 (Self::FullCharge(x), Self::FullCharge(y)) => *x == *y,
265 _ => false,
266 }
267 }
268}
269
270impl TimeRemaining {
271 #[inline]
272 pub fn ordinal(&self) -> u64 {
273 match *self {
274 Self::Indeterminate(_) => 1,
275 Self::BatteryLife(_) => 2,
276 Self::FullCharge(_) => 3,
277 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
278 }
279 }
280
281 #[inline]
282 pub fn unknown_variant_for_testing() -> Self {
283 Self::__SourceBreaking { unknown_ordinal: 0 }
284 }
285
286 #[inline]
287 pub fn is_unknown(&self) -> bool {
288 match self {
289 Self::__SourceBreaking { .. } => true,
290 _ => false,
291 }
292 }
293}
294
295impl fidl::Persistable for TimeRemaining {}
296
297pub mod battery_info_provider_ordinals {
298 pub const GET_BATTERY_INFO: u64 = 0x51ea101e4fe7a192;
299 pub const WATCH: u64 = 0x4d44a314cd3f5191;
300}
301
302pub mod battery_info_watcher_ordinals {
303 pub const ON_CHANGE_BATTERY_INFO: u64 = 0x2d1eb8ed2b619a7d;
304}
305
306pub mod battery_manager_ordinals {
307 pub const GET_BATTERY_INFO: u64 = 0x51ea101e4fe7a192;
308 pub const WATCH: u64 = 0x4d44a314cd3f5191;
309}
310
311mod internal {
312 use super::*;
313 unsafe impl fidl::encoding::TypeMarker for BatteryStatus {
314 type Owned = Self;
315
316 #[inline(always)]
317 fn inline_align(_context: fidl::encoding::Context) -> usize {
318 std::mem::align_of::<u32>()
319 }
320
321 #[inline(always)]
322 fn inline_size(_context: fidl::encoding::Context) -> usize {
323 std::mem::size_of::<u32>()
324 }
325
326 #[inline(always)]
327 fn encode_is_copy() -> bool {
328 true
329 }
330
331 #[inline(always)]
332 fn decode_is_copy() -> bool {
333 false
334 }
335 }
336
337 impl fidl::encoding::ValueTypeMarker for BatteryStatus {
338 type Borrowed<'a> = Self;
339 #[inline(always)]
340 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
341 *value
342 }
343 }
344
345 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BatteryStatus {
346 #[inline]
347 unsafe fn encode(
348 self,
349 encoder: &mut fidl::encoding::Encoder<'_, D>,
350 offset: usize,
351 _depth: fidl::encoding::Depth,
352 ) -> fidl::Result<()> {
353 encoder.debug_check_bounds::<Self>(offset);
354 encoder.write_num(self.into_primitive(), offset);
355 Ok(())
356 }
357 }
358
359 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BatteryStatus {
360 #[inline(always)]
361 fn new_empty() -> Self {
362 Self::Unknown
363 }
364
365 #[inline]
366 unsafe fn decode(
367 &mut self,
368 decoder: &mut fidl::encoding::Decoder<'_, D>,
369 offset: usize,
370 _depth: fidl::encoding::Depth,
371 ) -> fidl::Result<()> {
372 decoder.debug_check_bounds::<Self>(offset);
373 let prim = decoder.read_num::<u32>(offset);
374
375 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
376 Ok(())
377 }
378 }
379 unsafe impl fidl::encoding::TypeMarker for ChargeSource {
380 type Owned = Self;
381
382 #[inline(always)]
383 fn inline_align(_context: fidl::encoding::Context) -> usize {
384 std::mem::align_of::<u32>()
385 }
386
387 #[inline(always)]
388 fn inline_size(_context: fidl::encoding::Context) -> usize {
389 std::mem::size_of::<u32>()
390 }
391
392 #[inline(always)]
393 fn encode_is_copy() -> bool {
394 true
395 }
396
397 #[inline(always)]
398 fn decode_is_copy() -> bool {
399 false
400 }
401 }
402
403 impl fidl::encoding::ValueTypeMarker for ChargeSource {
404 type Borrowed<'a> = Self;
405 #[inline(always)]
406 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
407 *value
408 }
409 }
410
411 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ChargeSource {
412 #[inline]
413 unsafe fn encode(
414 self,
415 encoder: &mut fidl::encoding::Encoder<'_, D>,
416 offset: usize,
417 _depth: fidl::encoding::Depth,
418 ) -> fidl::Result<()> {
419 encoder.debug_check_bounds::<Self>(offset);
420 encoder.write_num(self.into_primitive(), offset);
421 Ok(())
422 }
423 }
424
425 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChargeSource {
426 #[inline(always)]
427 fn new_empty() -> Self {
428 Self::Unknown
429 }
430
431 #[inline]
432 unsafe fn decode(
433 &mut self,
434 decoder: &mut fidl::encoding::Decoder<'_, D>,
435 offset: usize,
436 _depth: fidl::encoding::Depth,
437 ) -> fidl::Result<()> {
438 decoder.debug_check_bounds::<Self>(offset);
439 let prim = decoder.read_num::<u32>(offset);
440
441 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
442 Ok(())
443 }
444 }
445 unsafe impl fidl::encoding::TypeMarker for ChargeStatus {
446 type Owned = Self;
447
448 #[inline(always)]
449 fn inline_align(_context: fidl::encoding::Context) -> usize {
450 std::mem::align_of::<u32>()
451 }
452
453 #[inline(always)]
454 fn inline_size(_context: fidl::encoding::Context) -> usize {
455 std::mem::size_of::<u32>()
456 }
457
458 #[inline(always)]
459 fn encode_is_copy() -> bool {
460 true
461 }
462
463 #[inline(always)]
464 fn decode_is_copy() -> bool {
465 false
466 }
467 }
468
469 impl fidl::encoding::ValueTypeMarker for ChargeStatus {
470 type Borrowed<'a> = Self;
471 #[inline(always)]
472 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
473 *value
474 }
475 }
476
477 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ChargeStatus {
478 #[inline]
479 unsafe fn encode(
480 self,
481 encoder: &mut fidl::encoding::Encoder<'_, D>,
482 offset: usize,
483 _depth: fidl::encoding::Depth,
484 ) -> fidl::Result<()> {
485 encoder.debug_check_bounds::<Self>(offset);
486 encoder.write_num(self.into_primitive(), offset);
487 Ok(())
488 }
489 }
490
491 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChargeStatus {
492 #[inline(always)]
493 fn new_empty() -> Self {
494 Self::Unknown
495 }
496
497 #[inline]
498 unsafe fn decode(
499 &mut self,
500 decoder: &mut fidl::encoding::Decoder<'_, D>,
501 offset: usize,
502 _depth: fidl::encoding::Depth,
503 ) -> fidl::Result<()> {
504 decoder.debug_check_bounds::<Self>(offset);
505 let prim = decoder.read_num::<u32>(offset);
506
507 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
508 Ok(())
509 }
510 }
511 unsafe impl fidl::encoding::TypeMarker for HealthStatus {
512 type Owned = Self;
513
514 #[inline(always)]
515 fn inline_align(_context: fidl::encoding::Context) -> usize {
516 std::mem::align_of::<u32>()
517 }
518
519 #[inline(always)]
520 fn inline_size(_context: fidl::encoding::Context) -> usize {
521 std::mem::size_of::<u32>()
522 }
523
524 #[inline(always)]
525 fn encode_is_copy() -> bool {
526 true
527 }
528
529 #[inline(always)]
530 fn decode_is_copy() -> bool {
531 false
532 }
533 }
534
535 impl fidl::encoding::ValueTypeMarker for HealthStatus {
536 type Borrowed<'a> = Self;
537 #[inline(always)]
538 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
539 *value
540 }
541 }
542
543 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for HealthStatus {
544 #[inline]
545 unsafe fn encode(
546 self,
547 encoder: &mut fidl::encoding::Encoder<'_, D>,
548 offset: usize,
549 _depth: fidl::encoding::Depth,
550 ) -> fidl::Result<()> {
551 encoder.debug_check_bounds::<Self>(offset);
552 encoder.write_num(self.into_primitive(), offset);
553 Ok(())
554 }
555 }
556
557 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthStatus {
558 #[inline(always)]
559 fn new_empty() -> Self {
560 Self::Unknown
561 }
562
563 #[inline]
564 unsafe fn decode(
565 &mut self,
566 decoder: &mut fidl::encoding::Decoder<'_, D>,
567 offset: usize,
568 _depth: fidl::encoding::Depth,
569 ) -> fidl::Result<()> {
570 decoder.debug_check_bounds::<Self>(offset);
571 let prim = decoder.read_num::<u32>(offset);
572
573 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
574 Ok(())
575 }
576 }
577 unsafe impl fidl::encoding::TypeMarker for LevelStatus {
578 type Owned = Self;
579
580 #[inline(always)]
581 fn inline_align(_context: fidl::encoding::Context) -> usize {
582 std::mem::align_of::<u32>()
583 }
584
585 #[inline(always)]
586 fn inline_size(_context: fidl::encoding::Context) -> usize {
587 std::mem::size_of::<u32>()
588 }
589
590 #[inline(always)]
591 fn encode_is_copy() -> bool {
592 true
593 }
594
595 #[inline(always)]
596 fn decode_is_copy() -> bool {
597 false
598 }
599 }
600
601 impl fidl::encoding::ValueTypeMarker for LevelStatus {
602 type Borrowed<'a> = Self;
603 #[inline(always)]
604 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
605 *value
606 }
607 }
608
609 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for LevelStatus {
610 #[inline]
611 unsafe fn encode(
612 self,
613 encoder: &mut fidl::encoding::Encoder<'_, D>,
614 offset: usize,
615 _depth: fidl::encoding::Depth,
616 ) -> fidl::Result<()> {
617 encoder.debug_check_bounds::<Self>(offset);
618 encoder.write_num(self.into_primitive(), offset);
619 Ok(())
620 }
621 }
622
623 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LevelStatus {
624 #[inline(always)]
625 fn new_empty() -> Self {
626 Self::Unknown
627 }
628
629 #[inline]
630 unsafe fn decode(
631 &mut self,
632 decoder: &mut fidl::encoding::Decoder<'_, D>,
633 offset: usize,
634 _depth: fidl::encoding::Depth,
635 ) -> fidl::Result<()> {
636 decoder.debug_check_bounds::<Self>(offset);
637 let prim = decoder.read_num::<u32>(offset);
638
639 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
640 Ok(())
641 }
642 }
643
644 impl fidl::encoding::ValueTypeMarker for BatteryInfoProviderGetBatteryInfoResponse {
645 type Borrowed<'a> = &'a Self;
646 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
647 value
648 }
649 }
650
651 unsafe impl fidl::encoding::TypeMarker for BatteryInfoProviderGetBatteryInfoResponse {
652 type Owned = Self;
653
654 #[inline(always)]
655 fn inline_align(_context: fidl::encoding::Context) -> usize {
656 8
657 }
658
659 #[inline(always)]
660 fn inline_size(_context: fidl::encoding::Context) -> usize {
661 16
662 }
663 }
664
665 unsafe impl<D: fidl::encoding::ResourceDialect>
666 fidl::encoding::Encode<BatteryInfoProviderGetBatteryInfoResponse, D>
667 for &BatteryInfoProviderGetBatteryInfoResponse
668 {
669 #[inline]
670 unsafe fn encode(
671 self,
672 encoder: &mut fidl::encoding::Encoder<'_, D>,
673 offset: usize,
674 _depth: fidl::encoding::Depth,
675 ) -> fidl::Result<()> {
676 encoder.debug_check_bounds::<BatteryInfoProviderGetBatteryInfoResponse>(offset);
677 fidl::encoding::Encode::<BatteryInfoProviderGetBatteryInfoResponse, D>::encode(
679 (<BatteryInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.info),),
680 encoder,
681 offset,
682 _depth,
683 )
684 }
685 }
686 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<BatteryInfo, D>>
687 fidl::encoding::Encode<BatteryInfoProviderGetBatteryInfoResponse, D> for (T0,)
688 {
689 #[inline]
690 unsafe fn encode(
691 self,
692 encoder: &mut fidl::encoding::Encoder<'_, D>,
693 offset: usize,
694 depth: fidl::encoding::Depth,
695 ) -> fidl::Result<()> {
696 encoder.debug_check_bounds::<BatteryInfoProviderGetBatteryInfoResponse>(offset);
697 self.0.encode(encoder, offset + 0, depth)?;
701 Ok(())
702 }
703 }
704
705 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
706 for BatteryInfoProviderGetBatteryInfoResponse
707 {
708 #[inline(always)]
709 fn new_empty() -> Self {
710 Self { info: fidl::new_empty!(BatteryInfo, D) }
711 }
712
713 #[inline]
714 unsafe fn decode(
715 &mut self,
716 decoder: &mut fidl::encoding::Decoder<'_, D>,
717 offset: usize,
718 _depth: fidl::encoding::Depth,
719 ) -> fidl::Result<()> {
720 decoder.debug_check_bounds::<Self>(offset);
721 fidl::decode!(BatteryInfo, D, &mut self.info, decoder, offset + 0, _depth)?;
723 Ok(())
724 }
725 }
726
727 impl BatteryInfo {
728 #[inline(always)]
729 fn max_ordinal_present(&self) -> u64 {
730 if let Some(_) = self.average_current_ma {
731 return 15;
732 }
733 if let Some(_) = self.present_current_ma {
734 return 14;
735 }
736 if let Some(_) = self.temperature_mc {
737 return 13;
738 }
739 if let Some(_) = self.full_capacity_uah {
740 return 12;
741 }
742 if let Some(_) = self.battery_spec {
743 return 11;
744 }
745 if let Some(_) = self.remaining_capacity_uah {
746 return 10;
747 }
748 if let Some(_) = self.present_voltage_mv {
749 return 9;
750 }
751 if let Some(_) = self.timestamp {
752 return 8;
753 }
754 if let Some(_) = self.time_remaining {
755 return 7;
756 }
757 if let Some(_) = self.health {
758 return 6;
759 }
760 if let Some(_) = self.level_status {
761 return 5;
762 }
763 if let Some(_) = self.level_percent {
764 return 4;
765 }
766 if let Some(_) = self.charge_source {
767 return 3;
768 }
769 if let Some(_) = self.charge_status {
770 return 2;
771 }
772 if let Some(_) = self.status {
773 return 1;
774 }
775 0
776 }
777 }
778
779 impl fidl::encoding::ValueTypeMarker for BatteryInfo {
780 type Borrowed<'a> = &'a Self;
781 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
782 value
783 }
784 }
785
786 unsafe impl fidl::encoding::TypeMarker for BatteryInfo {
787 type Owned = Self;
788
789 #[inline(always)]
790 fn inline_align(_context: fidl::encoding::Context) -> usize {
791 8
792 }
793
794 #[inline(always)]
795 fn inline_size(_context: fidl::encoding::Context) -> usize {
796 16
797 }
798 }
799
800 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BatteryInfo, D>
801 for &BatteryInfo
802 {
803 unsafe fn encode(
804 self,
805 encoder: &mut fidl::encoding::Encoder<'_, D>,
806 offset: usize,
807 mut depth: fidl::encoding::Depth,
808 ) -> fidl::Result<()> {
809 encoder.debug_check_bounds::<BatteryInfo>(offset);
810 let max_ordinal: u64 = self.max_ordinal_present();
812 encoder.write_num(max_ordinal, offset);
813 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
814 if max_ordinal == 0 {
816 return Ok(());
817 }
818 depth.increment()?;
819 let envelope_size = 8;
820 let bytes_len = max_ordinal as usize * envelope_size;
821 #[allow(unused_variables)]
822 let offset = encoder.out_of_line_offset(bytes_len);
823 let mut _prev_end_offset: usize = 0;
824 if 1 > max_ordinal {
825 return Ok(());
826 }
827
828 let cur_offset: usize = (1 - 1) * envelope_size;
831
832 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
834
835 fidl::encoding::encode_in_envelope_optional::<BatteryStatus, D>(
840 self.status
841 .as_ref()
842 .map(<BatteryStatus as fidl::encoding::ValueTypeMarker>::borrow),
843 encoder,
844 offset + cur_offset,
845 depth,
846 )?;
847
848 _prev_end_offset = cur_offset + envelope_size;
849 if 2 > max_ordinal {
850 return Ok(());
851 }
852
853 let cur_offset: usize = (2 - 1) * envelope_size;
856
857 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
859
860 fidl::encoding::encode_in_envelope_optional::<ChargeStatus, D>(
865 self.charge_status
866 .as_ref()
867 .map(<ChargeStatus as fidl::encoding::ValueTypeMarker>::borrow),
868 encoder,
869 offset + cur_offset,
870 depth,
871 )?;
872
873 _prev_end_offset = cur_offset + envelope_size;
874 if 3 > max_ordinal {
875 return Ok(());
876 }
877
878 let cur_offset: usize = (3 - 1) * envelope_size;
881
882 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
884
885 fidl::encoding::encode_in_envelope_optional::<ChargeSource, D>(
890 self.charge_source
891 .as_ref()
892 .map(<ChargeSource as fidl::encoding::ValueTypeMarker>::borrow),
893 encoder,
894 offset + cur_offset,
895 depth,
896 )?;
897
898 _prev_end_offset = cur_offset + envelope_size;
899 if 4 > max_ordinal {
900 return Ok(());
901 }
902
903 let cur_offset: usize = (4 - 1) * envelope_size;
906
907 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
909
910 fidl::encoding::encode_in_envelope_optional::<f32, D>(
915 self.level_percent.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
916 encoder,
917 offset + cur_offset,
918 depth,
919 )?;
920
921 _prev_end_offset = cur_offset + envelope_size;
922 if 5 > max_ordinal {
923 return Ok(());
924 }
925
926 let cur_offset: usize = (5 - 1) * envelope_size;
929
930 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
932
933 fidl::encoding::encode_in_envelope_optional::<LevelStatus, D>(
938 self.level_status
939 .as_ref()
940 .map(<LevelStatus as fidl::encoding::ValueTypeMarker>::borrow),
941 encoder,
942 offset + cur_offset,
943 depth,
944 )?;
945
946 _prev_end_offset = cur_offset + envelope_size;
947 if 6 > max_ordinal {
948 return Ok(());
949 }
950
951 let cur_offset: usize = (6 - 1) * envelope_size;
954
955 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
957
958 fidl::encoding::encode_in_envelope_optional::<HealthStatus, D>(
963 self.health.as_ref().map(<HealthStatus as fidl::encoding::ValueTypeMarker>::borrow),
964 encoder,
965 offset + cur_offset,
966 depth,
967 )?;
968
969 _prev_end_offset = cur_offset + envelope_size;
970 if 7 > max_ordinal {
971 return Ok(());
972 }
973
974 let cur_offset: usize = (7 - 1) * envelope_size;
977
978 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
980
981 fidl::encoding::encode_in_envelope_optional::<TimeRemaining, D>(
986 self.time_remaining
987 .as_ref()
988 .map(<TimeRemaining as fidl::encoding::ValueTypeMarker>::borrow),
989 encoder,
990 offset + cur_offset,
991 depth,
992 )?;
993
994 _prev_end_offset = cur_offset + envelope_size;
995 if 8 > max_ordinal {
996 return Ok(());
997 }
998
999 let cur_offset: usize = (8 - 1) * envelope_size;
1002
1003 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1005
1006 fidl::encoding::encode_in_envelope_optional::<i64, D>(
1011 self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1012 encoder,
1013 offset + cur_offset,
1014 depth,
1015 )?;
1016
1017 _prev_end_offset = cur_offset + envelope_size;
1018 if 9 > max_ordinal {
1019 return Ok(());
1020 }
1021
1022 let cur_offset: usize = (9 - 1) * envelope_size;
1025
1026 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1028
1029 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1034 self.present_voltage_mv
1035 .as_ref()
1036 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1037 encoder,
1038 offset + cur_offset,
1039 depth,
1040 )?;
1041
1042 _prev_end_offset = cur_offset + envelope_size;
1043 if 10 > max_ordinal {
1044 return Ok(());
1045 }
1046
1047 let cur_offset: usize = (10 - 1) * envelope_size;
1050
1051 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1053
1054 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1059 self.remaining_capacity_uah
1060 .as_ref()
1061 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1062 encoder,
1063 offset + cur_offset,
1064 depth,
1065 )?;
1066
1067 _prev_end_offset = cur_offset + envelope_size;
1068 if 11 > max_ordinal {
1069 return Ok(());
1070 }
1071
1072 let cur_offset: usize = (11 - 1) * envelope_size;
1075
1076 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1078
1079 fidl::encoding::encode_in_envelope_optional::<BatterySpec, D>(
1084 self.battery_spec
1085 .as_ref()
1086 .map(<BatterySpec as fidl::encoding::ValueTypeMarker>::borrow),
1087 encoder,
1088 offset + cur_offset,
1089 depth,
1090 )?;
1091
1092 _prev_end_offset = cur_offset + envelope_size;
1093 if 12 > max_ordinal {
1094 return Ok(());
1095 }
1096
1097 let cur_offset: usize = (12 - 1) * envelope_size;
1100
1101 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1103
1104 fidl::encoding::encode_in_envelope_optional::<i32, D>(
1109 self.full_capacity_uah
1110 .as_ref()
1111 .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1112 encoder,
1113 offset + cur_offset,
1114 depth,
1115 )?;
1116
1117 _prev_end_offset = cur_offset + envelope_size;
1118 if 13 > max_ordinal {
1119 return Ok(());
1120 }
1121
1122 let cur_offset: usize = (13 - 1) * envelope_size;
1125
1126 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1128
1129 fidl::encoding::encode_in_envelope_optional::<i32, D>(
1134 self.temperature_mc.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1135 encoder,
1136 offset + cur_offset,
1137 depth,
1138 )?;
1139
1140 _prev_end_offset = cur_offset + envelope_size;
1141 if 14 > max_ordinal {
1142 return Ok(());
1143 }
1144
1145 let cur_offset: usize = (14 - 1) * envelope_size;
1148
1149 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1151
1152 fidl::encoding::encode_in_envelope_optional::<i32, D>(
1157 self.present_current_ma
1158 .as_ref()
1159 .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1160 encoder,
1161 offset + cur_offset,
1162 depth,
1163 )?;
1164
1165 _prev_end_offset = cur_offset + envelope_size;
1166 if 15 > max_ordinal {
1167 return Ok(());
1168 }
1169
1170 let cur_offset: usize = (15 - 1) * envelope_size;
1173
1174 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1176
1177 fidl::encoding::encode_in_envelope_optional::<i32, D>(
1182 self.average_current_ma
1183 .as_ref()
1184 .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1185 encoder,
1186 offset + cur_offset,
1187 depth,
1188 )?;
1189
1190 _prev_end_offset = cur_offset + envelope_size;
1191
1192 Ok(())
1193 }
1194 }
1195
1196 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BatteryInfo {
1197 #[inline(always)]
1198 fn new_empty() -> Self {
1199 Self::default()
1200 }
1201
1202 unsafe fn decode(
1203 &mut self,
1204 decoder: &mut fidl::encoding::Decoder<'_, D>,
1205 offset: usize,
1206 mut depth: fidl::encoding::Depth,
1207 ) -> fidl::Result<()> {
1208 decoder.debug_check_bounds::<Self>(offset);
1209 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1210 None => return Err(fidl::Error::NotNullable),
1211 Some(len) => len,
1212 };
1213 if len == 0 {
1215 return Ok(());
1216 };
1217 depth.increment()?;
1218 let envelope_size = 8;
1219 let bytes_len = len * envelope_size;
1220 let offset = decoder.out_of_line_offset(bytes_len)?;
1221 let mut _next_ordinal_to_read = 0;
1223 let mut next_offset = offset;
1224 let end_offset = offset + bytes_len;
1225 _next_ordinal_to_read += 1;
1226 if next_offset >= end_offset {
1227 return Ok(());
1228 }
1229
1230 while _next_ordinal_to_read < 1 {
1232 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1233 _next_ordinal_to_read += 1;
1234 next_offset += envelope_size;
1235 }
1236
1237 let next_out_of_line = decoder.next_out_of_line();
1238 let handles_before = decoder.remaining_handles();
1239 if let Some((inlined, num_bytes, num_handles)) =
1240 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1241 {
1242 let member_inline_size =
1243 <BatteryStatus as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1244 if inlined != (member_inline_size <= 4) {
1245 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1246 }
1247 let inner_offset;
1248 let mut inner_depth = depth.clone();
1249 if inlined {
1250 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1251 inner_offset = next_offset;
1252 } else {
1253 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1254 inner_depth.increment()?;
1255 }
1256 let val_ref = self.status.get_or_insert_with(|| fidl::new_empty!(BatteryStatus, D));
1257 fidl::decode!(BatteryStatus, D, val_ref, decoder, inner_offset, inner_depth)?;
1258 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1259 {
1260 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1261 }
1262 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1263 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1264 }
1265 }
1266
1267 next_offset += envelope_size;
1268 _next_ordinal_to_read += 1;
1269 if next_offset >= end_offset {
1270 return Ok(());
1271 }
1272
1273 while _next_ordinal_to_read < 2 {
1275 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1276 _next_ordinal_to_read += 1;
1277 next_offset += envelope_size;
1278 }
1279
1280 let next_out_of_line = decoder.next_out_of_line();
1281 let handles_before = decoder.remaining_handles();
1282 if let Some((inlined, num_bytes, num_handles)) =
1283 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1284 {
1285 let member_inline_size =
1286 <ChargeStatus as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1287 if inlined != (member_inline_size <= 4) {
1288 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1289 }
1290 let inner_offset;
1291 let mut inner_depth = depth.clone();
1292 if inlined {
1293 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1294 inner_offset = next_offset;
1295 } else {
1296 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1297 inner_depth.increment()?;
1298 }
1299 let val_ref =
1300 self.charge_status.get_or_insert_with(|| fidl::new_empty!(ChargeStatus, D));
1301 fidl::decode!(ChargeStatus, D, val_ref, decoder, inner_offset, inner_depth)?;
1302 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1303 {
1304 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1305 }
1306 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1307 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1308 }
1309 }
1310
1311 next_offset += envelope_size;
1312 _next_ordinal_to_read += 1;
1313 if next_offset >= end_offset {
1314 return Ok(());
1315 }
1316
1317 while _next_ordinal_to_read < 3 {
1319 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1320 _next_ordinal_to_read += 1;
1321 next_offset += envelope_size;
1322 }
1323
1324 let next_out_of_line = decoder.next_out_of_line();
1325 let handles_before = decoder.remaining_handles();
1326 if let Some((inlined, num_bytes, num_handles)) =
1327 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1328 {
1329 let member_inline_size =
1330 <ChargeSource as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1331 if inlined != (member_inline_size <= 4) {
1332 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1333 }
1334 let inner_offset;
1335 let mut inner_depth = depth.clone();
1336 if inlined {
1337 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1338 inner_offset = next_offset;
1339 } else {
1340 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1341 inner_depth.increment()?;
1342 }
1343 let val_ref =
1344 self.charge_source.get_or_insert_with(|| fidl::new_empty!(ChargeSource, D));
1345 fidl::decode!(ChargeSource, D, val_ref, decoder, inner_offset, inner_depth)?;
1346 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1347 {
1348 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1349 }
1350 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1351 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1352 }
1353 }
1354
1355 next_offset += envelope_size;
1356 _next_ordinal_to_read += 1;
1357 if next_offset >= end_offset {
1358 return Ok(());
1359 }
1360
1361 while _next_ordinal_to_read < 4 {
1363 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1364 _next_ordinal_to_read += 1;
1365 next_offset += envelope_size;
1366 }
1367
1368 let next_out_of_line = decoder.next_out_of_line();
1369 let handles_before = decoder.remaining_handles();
1370 if let Some((inlined, num_bytes, num_handles)) =
1371 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1372 {
1373 let member_inline_size =
1374 <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1375 if inlined != (member_inline_size <= 4) {
1376 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1377 }
1378 let inner_offset;
1379 let mut inner_depth = depth.clone();
1380 if inlined {
1381 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1382 inner_offset = next_offset;
1383 } else {
1384 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1385 inner_depth.increment()?;
1386 }
1387 let val_ref = self.level_percent.get_or_insert_with(|| fidl::new_empty!(f32, D));
1388 fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
1389 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1390 {
1391 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1392 }
1393 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1394 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1395 }
1396 }
1397
1398 next_offset += envelope_size;
1399 _next_ordinal_to_read += 1;
1400 if next_offset >= end_offset {
1401 return Ok(());
1402 }
1403
1404 while _next_ordinal_to_read < 5 {
1406 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1407 _next_ordinal_to_read += 1;
1408 next_offset += envelope_size;
1409 }
1410
1411 let next_out_of_line = decoder.next_out_of_line();
1412 let handles_before = decoder.remaining_handles();
1413 if let Some((inlined, num_bytes, num_handles)) =
1414 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1415 {
1416 let member_inline_size =
1417 <LevelStatus as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1418 if inlined != (member_inline_size <= 4) {
1419 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1420 }
1421 let inner_offset;
1422 let mut inner_depth = depth.clone();
1423 if inlined {
1424 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1425 inner_offset = next_offset;
1426 } else {
1427 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1428 inner_depth.increment()?;
1429 }
1430 let val_ref =
1431 self.level_status.get_or_insert_with(|| fidl::new_empty!(LevelStatus, D));
1432 fidl::decode!(LevelStatus, D, val_ref, decoder, inner_offset, inner_depth)?;
1433 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1434 {
1435 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1436 }
1437 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1438 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1439 }
1440 }
1441
1442 next_offset += envelope_size;
1443 _next_ordinal_to_read += 1;
1444 if next_offset >= end_offset {
1445 return Ok(());
1446 }
1447
1448 while _next_ordinal_to_read < 6 {
1450 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1451 _next_ordinal_to_read += 1;
1452 next_offset += envelope_size;
1453 }
1454
1455 let next_out_of_line = decoder.next_out_of_line();
1456 let handles_before = decoder.remaining_handles();
1457 if let Some((inlined, num_bytes, num_handles)) =
1458 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1459 {
1460 let member_inline_size =
1461 <HealthStatus as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1462 if inlined != (member_inline_size <= 4) {
1463 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1464 }
1465 let inner_offset;
1466 let mut inner_depth = depth.clone();
1467 if inlined {
1468 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1469 inner_offset = next_offset;
1470 } else {
1471 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1472 inner_depth.increment()?;
1473 }
1474 let val_ref = self.health.get_or_insert_with(|| fidl::new_empty!(HealthStatus, D));
1475 fidl::decode!(HealthStatus, D, val_ref, decoder, inner_offset, inner_depth)?;
1476 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1477 {
1478 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1479 }
1480 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1481 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1482 }
1483 }
1484
1485 next_offset += envelope_size;
1486 _next_ordinal_to_read += 1;
1487 if next_offset >= end_offset {
1488 return Ok(());
1489 }
1490
1491 while _next_ordinal_to_read < 7 {
1493 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1494 _next_ordinal_to_read += 1;
1495 next_offset += envelope_size;
1496 }
1497
1498 let next_out_of_line = decoder.next_out_of_line();
1499 let handles_before = decoder.remaining_handles();
1500 if let Some((inlined, num_bytes, num_handles)) =
1501 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1502 {
1503 let member_inline_size =
1504 <TimeRemaining as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1505 if inlined != (member_inline_size <= 4) {
1506 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1507 }
1508 let inner_offset;
1509 let mut inner_depth = depth.clone();
1510 if inlined {
1511 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1512 inner_offset = next_offset;
1513 } else {
1514 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1515 inner_depth.increment()?;
1516 }
1517 let val_ref =
1518 self.time_remaining.get_or_insert_with(|| fidl::new_empty!(TimeRemaining, D));
1519 fidl::decode!(TimeRemaining, D, val_ref, decoder, inner_offset, inner_depth)?;
1520 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1521 {
1522 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1523 }
1524 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1525 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1526 }
1527 }
1528
1529 next_offset += envelope_size;
1530 _next_ordinal_to_read += 1;
1531 if next_offset >= end_offset {
1532 return Ok(());
1533 }
1534
1535 while _next_ordinal_to_read < 8 {
1537 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1538 _next_ordinal_to_read += 1;
1539 next_offset += envelope_size;
1540 }
1541
1542 let next_out_of_line = decoder.next_out_of_line();
1543 let handles_before = decoder.remaining_handles();
1544 if let Some((inlined, num_bytes, num_handles)) =
1545 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1546 {
1547 let member_inline_size =
1548 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1549 if inlined != (member_inline_size <= 4) {
1550 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1551 }
1552 let inner_offset;
1553 let mut inner_depth = depth.clone();
1554 if inlined {
1555 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1556 inner_offset = next_offset;
1557 } else {
1558 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1559 inner_depth.increment()?;
1560 }
1561 let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
1562 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1563 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1564 {
1565 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1566 }
1567 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1568 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1569 }
1570 }
1571
1572 next_offset += envelope_size;
1573 _next_ordinal_to_read += 1;
1574 if next_offset >= end_offset {
1575 return Ok(());
1576 }
1577
1578 while _next_ordinal_to_read < 9 {
1580 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1581 _next_ordinal_to_read += 1;
1582 next_offset += envelope_size;
1583 }
1584
1585 let next_out_of_line = decoder.next_out_of_line();
1586 let handles_before = decoder.remaining_handles();
1587 if let Some((inlined, num_bytes, num_handles)) =
1588 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1589 {
1590 let member_inline_size =
1591 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1592 if inlined != (member_inline_size <= 4) {
1593 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1594 }
1595 let inner_offset;
1596 let mut inner_depth = depth.clone();
1597 if inlined {
1598 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1599 inner_offset = next_offset;
1600 } else {
1601 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1602 inner_depth.increment()?;
1603 }
1604 let val_ref =
1605 self.present_voltage_mv.get_or_insert_with(|| fidl::new_empty!(u32, D));
1606 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1607 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1608 {
1609 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1610 }
1611 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1612 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1613 }
1614 }
1615
1616 next_offset += envelope_size;
1617 _next_ordinal_to_read += 1;
1618 if next_offset >= end_offset {
1619 return Ok(());
1620 }
1621
1622 while _next_ordinal_to_read < 10 {
1624 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1625 _next_ordinal_to_read += 1;
1626 next_offset += envelope_size;
1627 }
1628
1629 let next_out_of_line = decoder.next_out_of_line();
1630 let handles_before = decoder.remaining_handles();
1631 if let Some((inlined, num_bytes, num_handles)) =
1632 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1633 {
1634 let member_inline_size =
1635 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1636 if inlined != (member_inline_size <= 4) {
1637 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1638 }
1639 let inner_offset;
1640 let mut inner_depth = depth.clone();
1641 if inlined {
1642 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1643 inner_offset = next_offset;
1644 } else {
1645 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1646 inner_depth.increment()?;
1647 }
1648 let val_ref =
1649 self.remaining_capacity_uah.get_or_insert_with(|| fidl::new_empty!(u32, D));
1650 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1651 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1652 {
1653 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1654 }
1655 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1656 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1657 }
1658 }
1659
1660 next_offset += envelope_size;
1661 _next_ordinal_to_read += 1;
1662 if next_offset >= end_offset {
1663 return Ok(());
1664 }
1665
1666 while _next_ordinal_to_read < 11 {
1668 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1669 _next_ordinal_to_read += 1;
1670 next_offset += envelope_size;
1671 }
1672
1673 let next_out_of_line = decoder.next_out_of_line();
1674 let handles_before = decoder.remaining_handles();
1675 if let Some((inlined, num_bytes, num_handles)) =
1676 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1677 {
1678 let member_inline_size =
1679 <BatterySpec as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1680 if inlined != (member_inline_size <= 4) {
1681 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1682 }
1683 let inner_offset;
1684 let mut inner_depth = depth.clone();
1685 if inlined {
1686 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1687 inner_offset = next_offset;
1688 } else {
1689 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1690 inner_depth.increment()?;
1691 }
1692 let val_ref =
1693 self.battery_spec.get_or_insert_with(|| fidl::new_empty!(BatterySpec, D));
1694 fidl::decode!(BatterySpec, D, val_ref, decoder, inner_offset, inner_depth)?;
1695 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1696 {
1697 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1698 }
1699 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1700 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1701 }
1702 }
1703
1704 next_offset += envelope_size;
1705 _next_ordinal_to_read += 1;
1706 if next_offset >= end_offset {
1707 return Ok(());
1708 }
1709
1710 while _next_ordinal_to_read < 12 {
1712 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1713 _next_ordinal_to_read += 1;
1714 next_offset += envelope_size;
1715 }
1716
1717 let next_out_of_line = decoder.next_out_of_line();
1718 let handles_before = decoder.remaining_handles();
1719 if let Some((inlined, num_bytes, num_handles)) =
1720 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1721 {
1722 let member_inline_size =
1723 <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1724 if inlined != (member_inline_size <= 4) {
1725 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1726 }
1727 let inner_offset;
1728 let mut inner_depth = depth.clone();
1729 if inlined {
1730 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1731 inner_offset = next_offset;
1732 } else {
1733 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1734 inner_depth.increment()?;
1735 }
1736 let val_ref =
1737 self.full_capacity_uah.get_or_insert_with(|| fidl::new_empty!(i32, D));
1738 fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
1739 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1740 {
1741 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1742 }
1743 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1744 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1745 }
1746 }
1747
1748 next_offset += envelope_size;
1749 _next_ordinal_to_read += 1;
1750 if next_offset >= end_offset {
1751 return Ok(());
1752 }
1753
1754 while _next_ordinal_to_read < 13 {
1756 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1757 _next_ordinal_to_read += 1;
1758 next_offset += envelope_size;
1759 }
1760
1761 let next_out_of_line = decoder.next_out_of_line();
1762 let handles_before = decoder.remaining_handles();
1763 if let Some((inlined, num_bytes, num_handles)) =
1764 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1765 {
1766 let member_inline_size =
1767 <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1768 if inlined != (member_inline_size <= 4) {
1769 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1770 }
1771 let inner_offset;
1772 let mut inner_depth = depth.clone();
1773 if inlined {
1774 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1775 inner_offset = next_offset;
1776 } else {
1777 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1778 inner_depth.increment()?;
1779 }
1780 let val_ref = self.temperature_mc.get_or_insert_with(|| fidl::new_empty!(i32, D));
1781 fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
1782 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1783 {
1784 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1785 }
1786 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1787 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1788 }
1789 }
1790
1791 next_offset += envelope_size;
1792 _next_ordinal_to_read += 1;
1793 if next_offset >= end_offset {
1794 return Ok(());
1795 }
1796
1797 while _next_ordinal_to_read < 14 {
1799 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1800 _next_ordinal_to_read += 1;
1801 next_offset += envelope_size;
1802 }
1803
1804 let next_out_of_line = decoder.next_out_of_line();
1805 let handles_before = decoder.remaining_handles();
1806 if let Some((inlined, num_bytes, num_handles)) =
1807 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1808 {
1809 let member_inline_size =
1810 <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1811 if inlined != (member_inline_size <= 4) {
1812 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1813 }
1814 let inner_offset;
1815 let mut inner_depth = depth.clone();
1816 if inlined {
1817 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1818 inner_offset = next_offset;
1819 } else {
1820 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1821 inner_depth.increment()?;
1822 }
1823 let val_ref =
1824 self.present_current_ma.get_or_insert_with(|| fidl::new_empty!(i32, D));
1825 fidl::decode!(i32, 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 while _next_ordinal_to_read < 15 {
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 <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1855 if inlined != (member_inline_size <= 4) {
1856 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1857 }
1858 let inner_offset;
1859 let mut inner_depth = depth.clone();
1860 if inlined {
1861 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1862 inner_offset = next_offset;
1863 } else {
1864 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1865 inner_depth.increment()?;
1866 }
1867 let val_ref =
1868 self.average_current_ma.get_or_insert_with(|| fidl::new_empty!(i32, D));
1869 fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
1870 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1871 {
1872 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1873 }
1874 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1875 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1876 }
1877 }
1878
1879 next_offset += envelope_size;
1880
1881 while next_offset < end_offset {
1883 _next_ordinal_to_read += 1;
1884 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1885 next_offset += envelope_size;
1886 }
1887
1888 Ok(())
1889 }
1890 }
1891
1892 impl BatterySpec {
1893 #[inline(always)]
1894 fn max_ordinal_present(&self) -> u64 {
1895 if let Some(_) = self.design_capacity_uah {
1896 return 3;
1897 }
1898 if let Some(_) = self.max_charging_voltage_uv {
1899 return 2;
1900 }
1901 if let Some(_) = self.max_charging_current_ua {
1902 return 1;
1903 }
1904 0
1905 }
1906 }
1907
1908 impl fidl::encoding::ValueTypeMarker for BatterySpec {
1909 type Borrowed<'a> = &'a Self;
1910 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1911 value
1912 }
1913 }
1914
1915 unsafe impl fidl::encoding::TypeMarker for BatterySpec {
1916 type Owned = Self;
1917
1918 #[inline(always)]
1919 fn inline_align(_context: fidl::encoding::Context) -> usize {
1920 8
1921 }
1922
1923 #[inline(always)]
1924 fn inline_size(_context: fidl::encoding::Context) -> usize {
1925 16
1926 }
1927 }
1928
1929 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BatterySpec, D>
1930 for &BatterySpec
1931 {
1932 unsafe fn encode(
1933 self,
1934 encoder: &mut fidl::encoding::Encoder<'_, D>,
1935 offset: usize,
1936 mut depth: fidl::encoding::Depth,
1937 ) -> fidl::Result<()> {
1938 encoder.debug_check_bounds::<BatterySpec>(offset);
1939 let max_ordinal: u64 = self.max_ordinal_present();
1941 encoder.write_num(max_ordinal, offset);
1942 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1943 if max_ordinal == 0 {
1945 return Ok(());
1946 }
1947 depth.increment()?;
1948 let envelope_size = 8;
1949 let bytes_len = max_ordinal as usize * envelope_size;
1950 #[allow(unused_variables)]
1951 let offset = encoder.out_of_line_offset(bytes_len);
1952 let mut _prev_end_offset: usize = 0;
1953 if 1 > max_ordinal {
1954 return Ok(());
1955 }
1956
1957 let cur_offset: usize = (1 - 1) * envelope_size;
1960
1961 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1963
1964 fidl::encoding::encode_in_envelope_optional::<i32, D>(
1969 self.max_charging_current_ua
1970 .as_ref()
1971 .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1972 encoder,
1973 offset + cur_offset,
1974 depth,
1975 )?;
1976
1977 _prev_end_offset = cur_offset + envelope_size;
1978 if 2 > max_ordinal {
1979 return Ok(());
1980 }
1981
1982 let cur_offset: usize = (2 - 1) * envelope_size;
1985
1986 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1988
1989 fidl::encoding::encode_in_envelope_optional::<i32, D>(
1994 self.max_charging_voltage_uv
1995 .as_ref()
1996 .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1997 encoder,
1998 offset + cur_offset,
1999 depth,
2000 )?;
2001
2002 _prev_end_offset = cur_offset + envelope_size;
2003 if 3 > max_ordinal {
2004 return Ok(());
2005 }
2006
2007 let cur_offset: usize = (3 - 1) * envelope_size;
2010
2011 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2013
2014 fidl::encoding::encode_in_envelope_optional::<i32, D>(
2019 self.design_capacity_uah
2020 .as_ref()
2021 .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2022 encoder,
2023 offset + cur_offset,
2024 depth,
2025 )?;
2026
2027 _prev_end_offset = cur_offset + envelope_size;
2028
2029 Ok(())
2030 }
2031 }
2032
2033 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BatterySpec {
2034 #[inline(always)]
2035 fn new_empty() -> Self {
2036 Self::default()
2037 }
2038
2039 unsafe fn decode(
2040 &mut self,
2041 decoder: &mut fidl::encoding::Decoder<'_, D>,
2042 offset: usize,
2043 mut depth: fidl::encoding::Depth,
2044 ) -> fidl::Result<()> {
2045 decoder.debug_check_bounds::<Self>(offset);
2046 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2047 None => return Err(fidl::Error::NotNullable),
2048 Some(len) => len,
2049 };
2050 if len == 0 {
2052 return Ok(());
2053 };
2054 depth.increment()?;
2055 let envelope_size = 8;
2056 let bytes_len = len * envelope_size;
2057 let offset = decoder.out_of_line_offset(bytes_len)?;
2058 let mut _next_ordinal_to_read = 0;
2060 let mut next_offset = offset;
2061 let end_offset = offset + bytes_len;
2062 _next_ordinal_to_read += 1;
2063 if next_offset >= end_offset {
2064 return Ok(());
2065 }
2066
2067 while _next_ordinal_to_read < 1 {
2069 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2070 _next_ordinal_to_read += 1;
2071 next_offset += envelope_size;
2072 }
2073
2074 let next_out_of_line = decoder.next_out_of_line();
2075 let handles_before = decoder.remaining_handles();
2076 if let Some((inlined, num_bytes, num_handles)) =
2077 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2078 {
2079 let member_inline_size =
2080 <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2081 if inlined != (member_inline_size <= 4) {
2082 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2083 }
2084 let inner_offset;
2085 let mut inner_depth = depth.clone();
2086 if inlined {
2087 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2088 inner_offset = next_offset;
2089 } else {
2090 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2091 inner_depth.increment()?;
2092 }
2093 let val_ref =
2094 self.max_charging_current_ua.get_or_insert_with(|| fidl::new_empty!(i32, D));
2095 fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
2096 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2097 {
2098 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2099 }
2100 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2101 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2102 }
2103 }
2104
2105 next_offset += envelope_size;
2106 _next_ordinal_to_read += 1;
2107 if next_offset >= end_offset {
2108 return Ok(());
2109 }
2110
2111 while _next_ordinal_to_read < 2 {
2113 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2114 _next_ordinal_to_read += 1;
2115 next_offset += envelope_size;
2116 }
2117
2118 let next_out_of_line = decoder.next_out_of_line();
2119 let handles_before = decoder.remaining_handles();
2120 if let Some((inlined, num_bytes, num_handles)) =
2121 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2122 {
2123 let member_inline_size =
2124 <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2125 if inlined != (member_inline_size <= 4) {
2126 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2127 }
2128 let inner_offset;
2129 let mut inner_depth = depth.clone();
2130 if inlined {
2131 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2132 inner_offset = next_offset;
2133 } else {
2134 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2135 inner_depth.increment()?;
2136 }
2137 let val_ref =
2138 self.max_charging_voltage_uv.get_or_insert_with(|| fidl::new_empty!(i32, D));
2139 fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
2140 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2141 {
2142 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2143 }
2144 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2145 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2146 }
2147 }
2148
2149 next_offset += envelope_size;
2150 _next_ordinal_to_read += 1;
2151 if next_offset >= end_offset {
2152 return Ok(());
2153 }
2154
2155 while _next_ordinal_to_read < 3 {
2157 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2158 _next_ordinal_to_read += 1;
2159 next_offset += envelope_size;
2160 }
2161
2162 let next_out_of_line = decoder.next_out_of_line();
2163 let handles_before = decoder.remaining_handles();
2164 if let Some((inlined, num_bytes, num_handles)) =
2165 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2166 {
2167 let member_inline_size =
2168 <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2169 if inlined != (member_inline_size <= 4) {
2170 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2171 }
2172 let inner_offset;
2173 let mut inner_depth = depth.clone();
2174 if inlined {
2175 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2176 inner_offset = next_offset;
2177 } else {
2178 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2179 inner_depth.increment()?;
2180 }
2181 let val_ref =
2182 self.design_capacity_uah.get_or_insert_with(|| fidl::new_empty!(i32, D));
2183 fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
2184 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2185 {
2186 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2187 }
2188 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2189 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2190 }
2191 }
2192
2193 next_offset += envelope_size;
2194
2195 while next_offset < end_offset {
2197 _next_ordinal_to_read += 1;
2198 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2199 next_offset += envelope_size;
2200 }
2201
2202 Ok(())
2203 }
2204 }
2205
2206 impl fidl::encoding::ValueTypeMarker for TimeRemaining {
2207 type Borrowed<'a> = &'a Self;
2208 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2209 value
2210 }
2211 }
2212
2213 unsafe impl fidl::encoding::TypeMarker for TimeRemaining {
2214 type Owned = Self;
2215
2216 #[inline(always)]
2217 fn inline_align(_context: fidl::encoding::Context) -> usize {
2218 8
2219 }
2220
2221 #[inline(always)]
2222 fn inline_size(_context: fidl::encoding::Context) -> usize {
2223 16
2224 }
2225 }
2226
2227 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TimeRemaining, D>
2228 for &TimeRemaining
2229 {
2230 #[inline]
2231 unsafe fn encode(
2232 self,
2233 encoder: &mut fidl::encoding::Encoder<'_, D>,
2234 offset: usize,
2235 _depth: fidl::encoding::Depth,
2236 ) -> fidl::Result<()> {
2237 encoder.debug_check_bounds::<TimeRemaining>(offset);
2238 encoder.write_num::<u64>(self.ordinal(), offset);
2239 match self {
2240 TimeRemaining::Indeterminate(ref val) => {
2241 fidl::encoding::encode_in_envelope::<i64, D>(
2242 <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
2243 encoder,
2244 offset + 8,
2245 _depth,
2246 )
2247 }
2248 TimeRemaining::BatteryLife(ref val) => {
2249 fidl::encoding::encode_in_envelope::<i64, D>(
2250 <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
2251 encoder,
2252 offset + 8,
2253 _depth,
2254 )
2255 }
2256 TimeRemaining::FullCharge(ref val) => fidl::encoding::encode_in_envelope::<i64, D>(
2257 <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
2258 encoder,
2259 offset + 8,
2260 _depth,
2261 ),
2262 TimeRemaining::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
2263 }
2264 }
2265 }
2266
2267 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TimeRemaining {
2268 #[inline(always)]
2269 fn new_empty() -> Self {
2270 Self::__SourceBreaking { unknown_ordinal: 0 }
2271 }
2272
2273 #[inline]
2274 unsafe fn decode(
2275 &mut self,
2276 decoder: &mut fidl::encoding::Decoder<'_, D>,
2277 offset: usize,
2278 mut depth: fidl::encoding::Depth,
2279 ) -> fidl::Result<()> {
2280 decoder.debug_check_bounds::<Self>(offset);
2281 #[allow(unused_variables)]
2282 let next_out_of_line = decoder.next_out_of_line();
2283 let handles_before = decoder.remaining_handles();
2284 let (ordinal, inlined, num_bytes, num_handles) =
2285 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2286
2287 let member_inline_size = match ordinal {
2288 1 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2289 2 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2290 3 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2291 0 => return Err(fidl::Error::UnknownUnionTag),
2292 _ => num_bytes as usize,
2293 };
2294
2295 if inlined != (member_inline_size <= 4) {
2296 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2297 }
2298 let _inner_offset;
2299 if inlined {
2300 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2301 _inner_offset = offset + 8;
2302 } else {
2303 depth.increment()?;
2304 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2305 }
2306 match ordinal {
2307 1 => {
2308 #[allow(irrefutable_let_patterns)]
2309 if let TimeRemaining::Indeterminate(_) = self {
2310 } else {
2312 *self = TimeRemaining::Indeterminate(fidl::new_empty!(i64, D));
2314 }
2315 #[allow(irrefutable_let_patterns)]
2316 if let TimeRemaining::Indeterminate(ref mut val) = self {
2317 fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
2318 } else {
2319 unreachable!()
2320 }
2321 }
2322 2 => {
2323 #[allow(irrefutable_let_patterns)]
2324 if let TimeRemaining::BatteryLife(_) = self {
2325 } else {
2327 *self = TimeRemaining::BatteryLife(fidl::new_empty!(i64, D));
2329 }
2330 #[allow(irrefutable_let_patterns)]
2331 if let TimeRemaining::BatteryLife(ref mut val) = self {
2332 fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
2333 } else {
2334 unreachable!()
2335 }
2336 }
2337 3 => {
2338 #[allow(irrefutable_let_patterns)]
2339 if let TimeRemaining::FullCharge(_) = self {
2340 } else {
2342 *self = TimeRemaining::FullCharge(fidl::new_empty!(i64, D));
2344 }
2345 #[allow(irrefutable_let_patterns)]
2346 if let TimeRemaining::FullCharge(ref mut val) = self {
2347 fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
2348 } else {
2349 unreachable!()
2350 }
2351 }
2352 #[allow(deprecated)]
2353 ordinal => {
2354 for _ in 0..num_handles {
2355 decoder.drop_next_handle()?;
2356 }
2357 *self = TimeRemaining::__SourceBreaking { unknown_ordinal: ordinal };
2358 }
2359 }
2360 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2361 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2362 }
2363 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2364 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2365 }
2366 Ok(())
2367 }
2368 }
2369}