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)]
17pub enum ChargePhase {
18 None,
21 Trickle,
25 Fast,
29 Taper,
33 TopOff,
37 Done,
43 #[doc(hidden)]
44 __SourceBreaking { unknown_ordinal: u32 },
45}
46
47#[macro_export]
49macro_rules! ChargePhaseUnknown {
50 () => {
51 _
52 };
53}
54
55impl ChargePhase {
56 #[inline]
57 pub fn from_primitive(prim: u32) -> Option<Self> {
58 match prim {
59 1 => Some(Self::None),
60 2 => Some(Self::Trickle),
61 3 => Some(Self::Fast),
62 4 => Some(Self::Taper),
63 5 => Some(Self::TopOff),
64 6 => Some(Self::Done),
65 _ => None,
66 }
67 }
68
69 #[inline]
70 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
71 match prim {
72 1 => Self::None,
73 2 => Self::Trickle,
74 3 => Self::Fast,
75 4 => Self::Taper,
76 5 => Self::TopOff,
77 6 => Self::Done,
78 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
79 }
80 }
81
82 #[inline]
83 pub fn unknown() -> Self {
84 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
85 }
86
87 #[inline]
88 pub const fn into_primitive(self) -> u32 {
89 match self {
90 Self::None => 1,
91 Self::Trickle => 2,
92 Self::Fast => 3,
93 Self::Taper => 4,
94 Self::TopOff => 5,
95 Self::Done => 6,
96 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
97 }
98 }
99
100 #[inline]
101 pub fn is_unknown(&self) -> bool {
102 match self {
103 Self::__SourceBreaking { unknown_ordinal: _ } => true,
104 _ => false,
105 }
106 }
107}
108
109#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
111pub enum Error {
112 Internal,
114 NotSupported,
116 InvalidArgs,
119 Io,
121 AlreadyWatching,
123 #[doc(hidden)]
124 __SourceBreaking { unknown_ordinal: u32 },
125}
126
127#[macro_export]
129macro_rules! ErrorUnknown {
130 () => {
131 _
132 };
133}
134
135impl Error {
136 #[inline]
137 pub fn from_primitive(prim: u32) -> Option<Self> {
138 match prim {
139 1 => Some(Self::Internal),
140 2 => Some(Self::NotSupported),
141 3 => Some(Self::InvalidArgs),
142 4 => Some(Self::Io),
143 5 => Some(Self::AlreadyWatching),
144 _ => None,
145 }
146 }
147
148 #[inline]
149 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
150 match prim {
151 1 => Self::Internal,
152 2 => Self::NotSupported,
153 3 => Self::InvalidArgs,
154 4 => Self::Io,
155 5 => Self::AlreadyWatching,
156 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
157 }
158 }
159
160 #[inline]
161 pub fn unknown() -> Self {
162 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
163 }
164
165 #[inline]
166 pub const fn into_primitive(self) -> u32 {
167 match self {
168 Self::Internal => 1,
169 Self::NotSupported => 2,
170 Self::InvalidArgs => 3,
171 Self::Io => 4,
172 Self::AlreadyWatching => 5,
173 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
174 }
175 }
176
177 #[inline]
178 pub fn is_unknown(&self) -> bool {
179 match self {
180 Self::__SourceBreaking { unknown_ordinal: _ } => true,
181 _ => false,
182 }
183 }
184}
185
186#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
188pub enum Health {
189 Good,
191 InputOverVoltage,
193 InputUnderVoltage,
196 ThermalWarning,
199 ThermalShutdown,
202 SafetyTimerExpired,
204 BatteryOverVoltage,
206 WatchdogTimerExpired,
208 UnspecifiedFailure,
210 #[doc(hidden)]
211 __SourceBreaking { unknown_ordinal: u32 },
212}
213
214#[macro_export]
216macro_rules! HealthUnknown {
217 () => {
218 _
219 };
220}
221
222impl Health {
223 #[inline]
224 pub fn from_primitive(prim: u32) -> Option<Self> {
225 match prim {
226 1 => Some(Self::Good),
227 2 => Some(Self::InputOverVoltage),
228 3 => Some(Self::InputUnderVoltage),
229 4 => Some(Self::ThermalWarning),
230 5 => Some(Self::ThermalShutdown),
231 6 => Some(Self::SafetyTimerExpired),
232 7 => Some(Self::BatteryOverVoltage),
233 8 => Some(Self::WatchdogTimerExpired),
234 9 => Some(Self::UnspecifiedFailure),
235 _ => None,
236 }
237 }
238
239 #[inline]
240 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
241 match prim {
242 1 => Self::Good,
243 2 => Self::InputOverVoltage,
244 3 => Self::InputUnderVoltage,
245 4 => Self::ThermalWarning,
246 5 => Self::ThermalShutdown,
247 6 => Self::SafetyTimerExpired,
248 7 => Self::BatteryOverVoltage,
249 8 => Self::WatchdogTimerExpired,
250 9 => Self::UnspecifiedFailure,
251 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
252 }
253 }
254
255 #[inline]
256 pub fn unknown() -> Self {
257 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
258 }
259
260 #[inline]
261 pub const fn into_primitive(self) -> u32 {
262 match self {
263 Self::Good => 1,
264 Self::InputOverVoltage => 2,
265 Self::InputUnderVoltage => 3,
266 Self::ThermalWarning => 4,
267 Self::ThermalShutdown => 5,
268 Self::SafetyTimerExpired => 6,
269 Self::BatteryOverVoltage => 7,
270 Self::WatchdogTimerExpired => 8,
271 Self::UnspecifiedFailure => 9,
272 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
273 }
274 }
275
276 #[inline]
277 pub fn is_unknown(&self) -> bool {
278 match self {
279 Self::__SourceBreaking { unknown_ordinal: _ } => true,
280 _ => false,
281 }
282 }
283}
284
285#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
293pub enum OperatingMode {
294 Charging,
297 Passthrough,
300 Discharging,
307 Otg,
309 #[doc(hidden)]
310 __SourceBreaking { unknown_ordinal: u32 },
311}
312
313#[macro_export]
315macro_rules! OperatingModeUnknown {
316 () => {
317 _
318 };
319}
320
321impl OperatingMode {
322 #[inline]
323 pub fn from_primitive(prim: u32) -> Option<Self> {
324 match prim {
325 1 => Some(Self::Charging),
326 2 => Some(Self::Passthrough),
327 3 => Some(Self::Discharging),
328 4 => Some(Self::Otg),
329 _ => None,
330 }
331 }
332
333 #[inline]
334 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
335 match prim {
336 1 => Self::Charging,
337 2 => Self::Passthrough,
338 3 => Self::Discharging,
339 4 => Self::Otg,
340 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
341 }
342 }
343
344 #[inline]
345 pub fn unknown() -> Self {
346 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
347 }
348
349 #[inline]
350 pub const fn into_primitive(self) -> u32 {
351 match self {
352 Self::Charging => 1,
353 Self::Passthrough => 2,
354 Self::Discharging => 3,
355 Self::Otg => 4,
356 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
357 }
358 }
359
360 #[inline]
361 pub fn is_unknown(&self) -> bool {
362 match self {
363 Self::__SourceBreaking { unknown_ordinal: _ } => true,
364 _ => false,
365 }
366 }
367}
368
369#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
371pub enum SourceType {
372 Ac,
374 Usb,
376 Wireless,
378 #[doc(hidden)]
379 __SourceBreaking { unknown_ordinal: u32 },
380}
381
382#[macro_export]
384macro_rules! SourceTypeUnknown {
385 () => {
386 _
387 };
388}
389
390impl SourceType {
391 #[inline]
392 pub fn from_primitive(prim: u32) -> Option<Self> {
393 match prim {
394 1 => Some(Self::Ac),
395 2 => Some(Self::Usb),
396 3 => Some(Self::Wireless),
397 _ => None,
398 }
399 }
400
401 #[inline]
402 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
403 match prim {
404 1 => Self::Ac,
405 2 => Self::Usb,
406 3 => Self::Wireless,
407 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
408 }
409 }
410
411 #[inline]
412 pub fn unknown() -> Self {
413 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
414 }
415
416 #[inline]
417 pub const fn into_primitive(self) -> u32 {
418 match self {
419 Self::Ac => 1,
420 Self::Usb => 2,
421 Self::Wireless => 3,
422 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
423 }
424 }
425
426 #[inline]
427 pub fn is_unknown(&self) -> bool {
428 match self {
429 Self::__SourceBreaking { unknown_ordinal: _ } => true,
430 _ => false,
431 }
432 }
433}
434
435#[derive(Clone, Debug, PartialEq)]
436pub struct ChargerConfigureWatchRequest {
437 pub options: WatchOptions,
438}
439
440impl fidl::Persistable for ChargerConfigureWatchRequest {}
441
442#[derive(Clone, Debug, PartialEq)]
443pub struct ChargerConfigureWatchResponse {
444 pub effective_options: WatchOptions,
445}
446
447impl fidl::Persistable for ChargerConfigureWatchResponse {}
448
449#[derive(Clone, Debug, PartialEq)]
450pub struct ChargerGetSpecResponse {
451 pub spec: Spec,
452}
453
454impl fidl::Persistable for ChargerGetSpecResponse {}
455
456#[derive(Clone, Debug, PartialEq)]
457pub struct ChargerGetStatusResponse {
458 pub status: Status,
459}
460
461impl fidl::Persistable for ChargerGetStatusResponse {}
462
463#[derive(Clone, Debug, PartialEq)]
464pub struct ControllerClearControlRequest {
465 pub options: ControlOptions,
466}
467
468impl fidl::Persistable for ControllerClearControlRequest {}
469
470#[derive(Clone, Debug, PartialEq)]
471pub struct ControllerSetControlRequest {
472 pub options: ControlOptions,
473}
474
475impl fidl::Persistable for ControllerSetControlRequest {}
476
477#[derive(Clone, Debug, Default, PartialEq)]
489pub struct ControlOptions {
490 pub operating_mode: Option<OperatingMode>,
492 pub input_current_limit_ua: Option<u32>,
494 pub charge_current_limit_ua: Option<u32>,
496 pub float_voltage_uv: Option<u32>,
500 pub charge_term_current_ua: Option<u32>,
503 pub input_voltage_limit_uv: Option<u32>,
506 pub top_off_duration: Option<i64>,
509 #[doc(hidden)]
510 pub __source_breaking: fidl::marker::SourceBreaking,
511}
512
513impl fidl::Persistable for ControlOptions {}
514
515#[derive(Clone, Debug, Default, PartialEq)]
517pub struct Spec {
518 pub max_charge_current_ua: Option<u32>,
521 pub max_charge_voltage_uv: Option<u32>,
525 pub max_input_current_ua: Option<u32>,
528 pub model: Option<String>,
531 pub supported_modes: Option<Vec<OperatingMode>>,
534 pub supported_options: Option<WatchOptions>,
551 pub precharge_current_ua: Option<u32>,
555 pub charge_term_current_ua: Option<u32>,
559 pub recharge_voltage_uv: Option<u32>,
563 pub min_input_voltage_uv: Option<u32>,
566 pub max_input_voltage_uv: Option<u32>,
569 #[doc(hidden)]
570 pub __source_breaking: fidl::marker::SourceBreaking,
571}
572
573impl fidl::Persistable for Spec {}
574
575#[derive(Clone, Debug, Default, PartialEq)]
577pub struct Status {
578 pub online: Option<bool>,
582 pub input_voltage_uv: Option<u32>,
585 pub input_current_ua: Option<i32>,
591 pub operating_mode: Option<OperatingMode>,
594 pub charge_phase: Option<ChargePhase>,
597 pub input_current_limit_ua: Option<u32>,
601 pub charge_current_limit_ua: Option<u32>,
605 pub float_voltage_uv: Option<u32>,
610 pub source_type: Option<SourceType>,
613 pub health: Option<Health>,
616 pub charge_term_current_ua: Option<u32>,
620 pub input_voltage_limit_uv: Option<u32>,
624 pub top_off_duration: Option<i64>,
628 #[doc(hidden)]
629 pub __source_breaking: fidl::marker::SourceBreaking,
630}
631
632impl fidl::Persistable for Status {}
633
634#[derive(Clone, Debug, Default, PartialEq)]
644pub struct WatchOptions {
645 pub interest: Option<Status>,
650 pub wake_on: Option<Status>,
655 pub max_interval: Option<i64>,
666 pub wake_on_max_interval: Option<bool>,
672 #[doc(hidden)]
673 pub __source_breaking: fidl::marker::SourceBreaking,
674}
675
676impl fidl::Persistable for WatchOptions {}
677
678pub mod charger_ordinals {
679 pub const GET_SPEC: u64 = 0x4f1a5fc6df415db3;
680 pub const GET_STATUS: u64 = 0x3c67651b7ec14d5e;
681 pub const CONFIGURE_WATCH: u64 = 0x739a314e3494d695;
682 pub const WATCH: u64 = 0x5a52d95d33d7c66e;
683}
684
685pub mod controller_ordinals {
686 pub const SET_CONTROL: u64 = 0x363a64b0c8d45594;
687 pub const CLEAR_CONTROL: u64 = 0x2b2a45d9fa0cd3c1;
688}
689
690pub mod debug_ordinals {
691 pub const SET_CONTROL: u64 = 0x363a64b0c8d45594;
692 pub const CLEAR_CONTROL: u64 = 0x2b2a45d9fa0cd3c1;
693}
694
695mod internal {
696 use super::*;
697 unsafe impl fidl::encoding::TypeMarker for ChargePhase {
698 type Owned = Self;
699
700 #[inline(always)]
701 fn inline_align(_context: fidl::encoding::Context) -> usize {
702 std::mem::align_of::<u32>()
703 }
704
705 #[inline(always)]
706 fn inline_size(_context: fidl::encoding::Context) -> usize {
707 std::mem::size_of::<u32>()
708 }
709
710 #[inline(always)]
711 fn encode_is_copy() -> bool {
712 false
713 }
714
715 #[inline(always)]
716 fn decode_is_copy() -> bool {
717 false
718 }
719 }
720
721 impl fidl::encoding::ValueTypeMarker for ChargePhase {
722 type Borrowed<'a> = Self;
723 #[inline(always)]
724 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
725 *value
726 }
727 }
728
729 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ChargePhase {
730 #[inline]
731 unsafe fn encode(
732 self,
733 encoder: &mut fidl::encoding::Encoder<'_, D>,
734 offset: usize,
735 _depth: fidl::encoding::Depth,
736 ) -> fidl::Result<()> {
737 encoder.debug_check_bounds::<Self>(offset);
738 encoder.write_num(self.into_primitive(), offset);
739 Ok(())
740 }
741 }
742
743 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChargePhase {
744 #[inline(always)]
745 fn new_empty() -> Self {
746 Self::unknown()
747 }
748
749 #[inline]
750 unsafe fn decode(
751 &mut self,
752 decoder: &mut fidl::encoding::Decoder<'_, D>,
753 offset: usize,
754 _depth: fidl::encoding::Depth,
755 ) -> fidl::Result<()> {
756 decoder.debug_check_bounds::<Self>(offset);
757 let prim = decoder.read_num::<u32>(offset);
758
759 *self = Self::from_primitive_allow_unknown(prim);
760 Ok(())
761 }
762 }
763 unsafe impl fidl::encoding::TypeMarker for Error {
764 type Owned = Self;
765
766 #[inline(always)]
767 fn inline_align(_context: fidl::encoding::Context) -> usize {
768 std::mem::align_of::<u32>()
769 }
770
771 #[inline(always)]
772 fn inline_size(_context: fidl::encoding::Context) -> usize {
773 std::mem::size_of::<u32>()
774 }
775
776 #[inline(always)]
777 fn encode_is_copy() -> bool {
778 false
779 }
780
781 #[inline(always)]
782 fn decode_is_copy() -> bool {
783 false
784 }
785 }
786
787 impl fidl::encoding::ValueTypeMarker for Error {
788 type Borrowed<'a> = Self;
789 #[inline(always)]
790 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
791 *value
792 }
793 }
794
795 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Error {
796 #[inline]
797 unsafe fn encode(
798 self,
799 encoder: &mut fidl::encoding::Encoder<'_, D>,
800 offset: usize,
801 _depth: fidl::encoding::Depth,
802 ) -> fidl::Result<()> {
803 encoder.debug_check_bounds::<Self>(offset);
804 encoder.write_num(self.into_primitive(), offset);
805 Ok(())
806 }
807 }
808
809 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Error {
810 #[inline(always)]
811 fn new_empty() -> Self {
812 Self::unknown()
813 }
814
815 #[inline]
816 unsafe fn decode(
817 &mut self,
818 decoder: &mut fidl::encoding::Decoder<'_, D>,
819 offset: usize,
820 _depth: fidl::encoding::Depth,
821 ) -> fidl::Result<()> {
822 decoder.debug_check_bounds::<Self>(offset);
823 let prim = decoder.read_num::<u32>(offset);
824
825 *self = Self::from_primitive_allow_unknown(prim);
826 Ok(())
827 }
828 }
829 unsafe impl fidl::encoding::TypeMarker for Health {
830 type Owned = Self;
831
832 #[inline(always)]
833 fn inline_align(_context: fidl::encoding::Context) -> usize {
834 std::mem::align_of::<u32>()
835 }
836
837 #[inline(always)]
838 fn inline_size(_context: fidl::encoding::Context) -> usize {
839 std::mem::size_of::<u32>()
840 }
841
842 #[inline(always)]
843 fn encode_is_copy() -> bool {
844 false
845 }
846
847 #[inline(always)]
848 fn decode_is_copy() -> bool {
849 false
850 }
851 }
852
853 impl fidl::encoding::ValueTypeMarker for Health {
854 type Borrowed<'a> = Self;
855 #[inline(always)]
856 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
857 *value
858 }
859 }
860
861 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Health {
862 #[inline]
863 unsafe fn encode(
864 self,
865 encoder: &mut fidl::encoding::Encoder<'_, D>,
866 offset: usize,
867 _depth: fidl::encoding::Depth,
868 ) -> fidl::Result<()> {
869 encoder.debug_check_bounds::<Self>(offset);
870 encoder.write_num(self.into_primitive(), offset);
871 Ok(())
872 }
873 }
874
875 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Health {
876 #[inline(always)]
877 fn new_empty() -> Self {
878 Self::unknown()
879 }
880
881 #[inline]
882 unsafe fn decode(
883 &mut self,
884 decoder: &mut fidl::encoding::Decoder<'_, D>,
885 offset: usize,
886 _depth: fidl::encoding::Depth,
887 ) -> fidl::Result<()> {
888 decoder.debug_check_bounds::<Self>(offset);
889 let prim = decoder.read_num::<u32>(offset);
890
891 *self = Self::from_primitive_allow_unknown(prim);
892 Ok(())
893 }
894 }
895 unsafe impl fidl::encoding::TypeMarker for OperatingMode {
896 type Owned = Self;
897
898 #[inline(always)]
899 fn inline_align(_context: fidl::encoding::Context) -> usize {
900 std::mem::align_of::<u32>()
901 }
902
903 #[inline(always)]
904 fn inline_size(_context: fidl::encoding::Context) -> usize {
905 std::mem::size_of::<u32>()
906 }
907
908 #[inline(always)]
909 fn encode_is_copy() -> bool {
910 false
911 }
912
913 #[inline(always)]
914 fn decode_is_copy() -> bool {
915 false
916 }
917 }
918
919 impl fidl::encoding::ValueTypeMarker for OperatingMode {
920 type Borrowed<'a> = Self;
921 #[inline(always)]
922 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
923 *value
924 }
925 }
926
927 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for OperatingMode {
928 #[inline]
929 unsafe fn encode(
930 self,
931 encoder: &mut fidl::encoding::Encoder<'_, D>,
932 offset: usize,
933 _depth: fidl::encoding::Depth,
934 ) -> fidl::Result<()> {
935 encoder.debug_check_bounds::<Self>(offset);
936 encoder.write_num(self.into_primitive(), offset);
937 Ok(())
938 }
939 }
940
941 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OperatingMode {
942 #[inline(always)]
943 fn new_empty() -> Self {
944 Self::unknown()
945 }
946
947 #[inline]
948 unsafe fn decode(
949 &mut self,
950 decoder: &mut fidl::encoding::Decoder<'_, D>,
951 offset: usize,
952 _depth: fidl::encoding::Depth,
953 ) -> fidl::Result<()> {
954 decoder.debug_check_bounds::<Self>(offset);
955 let prim = decoder.read_num::<u32>(offset);
956
957 *self = Self::from_primitive_allow_unknown(prim);
958 Ok(())
959 }
960 }
961 unsafe impl fidl::encoding::TypeMarker for SourceType {
962 type Owned = Self;
963
964 #[inline(always)]
965 fn inline_align(_context: fidl::encoding::Context) -> usize {
966 std::mem::align_of::<u32>()
967 }
968
969 #[inline(always)]
970 fn inline_size(_context: fidl::encoding::Context) -> usize {
971 std::mem::size_of::<u32>()
972 }
973
974 #[inline(always)]
975 fn encode_is_copy() -> bool {
976 false
977 }
978
979 #[inline(always)]
980 fn decode_is_copy() -> bool {
981 false
982 }
983 }
984
985 impl fidl::encoding::ValueTypeMarker for SourceType {
986 type Borrowed<'a> = Self;
987 #[inline(always)]
988 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
989 *value
990 }
991 }
992
993 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SourceType {
994 #[inline]
995 unsafe fn encode(
996 self,
997 encoder: &mut fidl::encoding::Encoder<'_, D>,
998 offset: usize,
999 _depth: fidl::encoding::Depth,
1000 ) -> fidl::Result<()> {
1001 encoder.debug_check_bounds::<Self>(offset);
1002 encoder.write_num(self.into_primitive(), offset);
1003 Ok(())
1004 }
1005 }
1006
1007 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SourceType {
1008 #[inline(always)]
1009 fn new_empty() -> Self {
1010 Self::unknown()
1011 }
1012
1013 #[inline]
1014 unsafe fn decode(
1015 &mut self,
1016 decoder: &mut fidl::encoding::Decoder<'_, D>,
1017 offset: usize,
1018 _depth: fidl::encoding::Depth,
1019 ) -> fidl::Result<()> {
1020 decoder.debug_check_bounds::<Self>(offset);
1021 let prim = decoder.read_num::<u32>(offset);
1022
1023 *self = Self::from_primitive_allow_unknown(prim);
1024 Ok(())
1025 }
1026 }
1027
1028 impl fidl::encoding::ValueTypeMarker for ChargerConfigureWatchRequest {
1029 type Borrowed<'a> = &'a Self;
1030 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1031 value
1032 }
1033 }
1034
1035 unsafe impl fidl::encoding::TypeMarker for ChargerConfigureWatchRequest {
1036 type Owned = Self;
1037
1038 #[inline(always)]
1039 fn inline_align(_context: fidl::encoding::Context) -> usize {
1040 8
1041 }
1042
1043 #[inline(always)]
1044 fn inline_size(_context: fidl::encoding::Context) -> usize {
1045 16
1046 }
1047 }
1048
1049 unsafe impl<D: fidl::encoding::ResourceDialect>
1050 fidl::encoding::Encode<ChargerConfigureWatchRequest, D> for &ChargerConfigureWatchRequest
1051 {
1052 #[inline]
1053 unsafe fn encode(
1054 self,
1055 encoder: &mut fidl::encoding::Encoder<'_, D>,
1056 offset: usize,
1057 _depth: fidl::encoding::Depth,
1058 ) -> fidl::Result<()> {
1059 encoder.debug_check_bounds::<ChargerConfigureWatchRequest>(offset);
1060 fidl::encoding::Encode::<ChargerConfigureWatchRequest, D>::encode(
1062 (<WatchOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1063 encoder,
1064 offset,
1065 _depth,
1066 )
1067 }
1068 }
1069 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<WatchOptions, D>>
1070 fidl::encoding::Encode<ChargerConfigureWatchRequest, D> for (T0,)
1071 {
1072 #[inline]
1073 unsafe fn encode(
1074 self,
1075 encoder: &mut fidl::encoding::Encoder<'_, D>,
1076 offset: usize,
1077 depth: fidl::encoding::Depth,
1078 ) -> fidl::Result<()> {
1079 encoder.debug_check_bounds::<ChargerConfigureWatchRequest>(offset);
1080 self.0.encode(encoder, offset + 0, depth)?;
1084 Ok(())
1085 }
1086 }
1087
1088 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1089 for ChargerConfigureWatchRequest
1090 {
1091 #[inline(always)]
1092 fn new_empty() -> Self {
1093 Self { options: fidl::new_empty!(WatchOptions, D) }
1094 }
1095
1096 #[inline]
1097 unsafe fn decode(
1098 &mut self,
1099 decoder: &mut fidl::encoding::Decoder<'_, D>,
1100 offset: usize,
1101 _depth: fidl::encoding::Depth,
1102 ) -> fidl::Result<()> {
1103 decoder.debug_check_bounds::<Self>(offset);
1104 fidl::decode!(WatchOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
1106 Ok(())
1107 }
1108 }
1109
1110 impl fidl::encoding::ValueTypeMarker for ChargerConfigureWatchResponse {
1111 type Borrowed<'a> = &'a Self;
1112 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1113 value
1114 }
1115 }
1116
1117 unsafe impl fidl::encoding::TypeMarker for ChargerConfigureWatchResponse {
1118 type Owned = Self;
1119
1120 #[inline(always)]
1121 fn inline_align(_context: fidl::encoding::Context) -> usize {
1122 8
1123 }
1124
1125 #[inline(always)]
1126 fn inline_size(_context: fidl::encoding::Context) -> usize {
1127 16
1128 }
1129 }
1130
1131 unsafe impl<D: fidl::encoding::ResourceDialect>
1132 fidl::encoding::Encode<ChargerConfigureWatchResponse, D>
1133 for &ChargerConfigureWatchResponse
1134 {
1135 #[inline]
1136 unsafe fn encode(
1137 self,
1138 encoder: &mut fidl::encoding::Encoder<'_, D>,
1139 offset: usize,
1140 _depth: fidl::encoding::Depth,
1141 ) -> fidl::Result<()> {
1142 encoder.debug_check_bounds::<ChargerConfigureWatchResponse>(offset);
1143 fidl::encoding::Encode::<ChargerConfigureWatchResponse, D>::encode(
1145 (<WatchOptions as fidl::encoding::ValueTypeMarker>::borrow(
1146 &self.effective_options,
1147 ),),
1148 encoder,
1149 offset,
1150 _depth,
1151 )
1152 }
1153 }
1154 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<WatchOptions, D>>
1155 fidl::encoding::Encode<ChargerConfigureWatchResponse, D> for (T0,)
1156 {
1157 #[inline]
1158 unsafe fn encode(
1159 self,
1160 encoder: &mut fidl::encoding::Encoder<'_, D>,
1161 offset: usize,
1162 depth: fidl::encoding::Depth,
1163 ) -> fidl::Result<()> {
1164 encoder.debug_check_bounds::<ChargerConfigureWatchResponse>(offset);
1165 self.0.encode(encoder, offset + 0, depth)?;
1169 Ok(())
1170 }
1171 }
1172
1173 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1174 for ChargerConfigureWatchResponse
1175 {
1176 #[inline(always)]
1177 fn new_empty() -> Self {
1178 Self { effective_options: fidl::new_empty!(WatchOptions, D) }
1179 }
1180
1181 #[inline]
1182 unsafe fn decode(
1183 &mut self,
1184 decoder: &mut fidl::encoding::Decoder<'_, D>,
1185 offset: usize,
1186 _depth: fidl::encoding::Depth,
1187 ) -> fidl::Result<()> {
1188 decoder.debug_check_bounds::<Self>(offset);
1189 fidl::decode!(
1191 WatchOptions,
1192 D,
1193 &mut self.effective_options,
1194 decoder,
1195 offset + 0,
1196 _depth
1197 )?;
1198 Ok(())
1199 }
1200 }
1201
1202 impl fidl::encoding::ValueTypeMarker for ChargerGetSpecResponse {
1203 type Borrowed<'a> = &'a Self;
1204 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1205 value
1206 }
1207 }
1208
1209 unsafe impl fidl::encoding::TypeMarker for ChargerGetSpecResponse {
1210 type Owned = Self;
1211
1212 #[inline(always)]
1213 fn inline_align(_context: fidl::encoding::Context) -> usize {
1214 8
1215 }
1216
1217 #[inline(always)]
1218 fn inline_size(_context: fidl::encoding::Context) -> usize {
1219 16
1220 }
1221 }
1222
1223 unsafe impl<D: fidl::encoding::ResourceDialect>
1224 fidl::encoding::Encode<ChargerGetSpecResponse, D> for &ChargerGetSpecResponse
1225 {
1226 #[inline]
1227 unsafe fn encode(
1228 self,
1229 encoder: &mut fidl::encoding::Encoder<'_, D>,
1230 offset: usize,
1231 _depth: fidl::encoding::Depth,
1232 ) -> fidl::Result<()> {
1233 encoder.debug_check_bounds::<ChargerGetSpecResponse>(offset);
1234 fidl::encoding::Encode::<ChargerGetSpecResponse, D>::encode(
1236 (<Spec as fidl::encoding::ValueTypeMarker>::borrow(&self.spec),),
1237 encoder,
1238 offset,
1239 _depth,
1240 )
1241 }
1242 }
1243 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Spec, D>>
1244 fidl::encoding::Encode<ChargerGetSpecResponse, D> for (T0,)
1245 {
1246 #[inline]
1247 unsafe fn encode(
1248 self,
1249 encoder: &mut fidl::encoding::Encoder<'_, D>,
1250 offset: usize,
1251 depth: fidl::encoding::Depth,
1252 ) -> fidl::Result<()> {
1253 encoder.debug_check_bounds::<ChargerGetSpecResponse>(offset);
1254 self.0.encode(encoder, offset + 0, depth)?;
1258 Ok(())
1259 }
1260 }
1261
1262 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1263 for ChargerGetSpecResponse
1264 {
1265 #[inline(always)]
1266 fn new_empty() -> Self {
1267 Self { spec: fidl::new_empty!(Spec, D) }
1268 }
1269
1270 #[inline]
1271 unsafe fn decode(
1272 &mut self,
1273 decoder: &mut fidl::encoding::Decoder<'_, D>,
1274 offset: usize,
1275 _depth: fidl::encoding::Depth,
1276 ) -> fidl::Result<()> {
1277 decoder.debug_check_bounds::<Self>(offset);
1278 fidl::decode!(Spec, D, &mut self.spec, decoder, offset + 0, _depth)?;
1280 Ok(())
1281 }
1282 }
1283
1284 impl fidl::encoding::ValueTypeMarker for ChargerGetStatusResponse {
1285 type Borrowed<'a> = &'a Self;
1286 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1287 value
1288 }
1289 }
1290
1291 unsafe impl fidl::encoding::TypeMarker for ChargerGetStatusResponse {
1292 type Owned = Self;
1293
1294 #[inline(always)]
1295 fn inline_align(_context: fidl::encoding::Context) -> usize {
1296 8
1297 }
1298
1299 #[inline(always)]
1300 fn inline_size(_context: fidl::encoding::Context) -> usize {
1301 16
1302 }
1303 }
1304
1305 unsafe impl<D: fidl::encoding::ResourceDialect>
1306 fidl::encoding::Encode<ChargerGetStatusResponse, D> for &ChargerGetStatusResponse
1307 {
1308 #[inline]
1309 unsafe fn encode(
1310 self,
1311 encoder: &mut fidl::encoding::Encoder<'_, D>,
1312 offset: usize,
1313 _depth: fidl::encoding::Depth,
1314 ) -> fidl::Result<()> {
1315 encoder.debug_check_bounds::<ChargerGetStatusResponse>(offset);
1316 fidl::encoding::Encode::<ChargerGetStatusResponse, D>::encode(
1318 (<Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
1319 encoder,
1320 offset,
1321 _depth,
1322 )
1323 }
1324 }
1325 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Status, D>>
1326 fidl::encoding::Encode<ChargerGetStatusResponse, D> for (T0,)
1327 {
1328 #[inline]
1329 unsafe fn encode(
1330 self,
1331 encoder: &mut fidl::encoding::Encoder<'_, D>,
1332 offset: usize,
1333 depth: fidl::encoding::Depth,
1334 ) -> fidl::Result<()> {
1335 encoder.debug_check_bounds::<ChargerGetStatusResponse>(offset);
1336 self.0.encode(encoder, offset + 0, depth)?;
1340 Ok(())
1341 }
1342 }
1343
1344 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1345 for ChargerGetStatusResponse
1346 {
1347 #[inline(always)]
1348 fn new_empty() -> Self {
1349 Self { status: fidl::new_empty!(Status, D) }
1350 }
1351
1352 #[inline]
1353 unsafe fn decode(
1354 &mut self,
1355 decoder: &mut fidl::encoding::Decoder<'_, D>,
1356 offset: usize,
1357 _depth: fidl::encoding::Depth,
1358 ) -> fidl::Result<()> {
1359 decoder.debug_check_bounds::<Self>(offset);
1360 fidl::decode!(Status, D, &mut self.status, decoder, offset + 0, _depth)?;
1362 Ok(())
1363 }
1364 }
1365
1366 impl fidl::encoding::ValueTypeMarker for ControllerClearControlRequest {
1367 type Borrowed<'a> = &'a Self;
1368 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1369 value
1370 }
1371 }
1372
1373 unsafe impl fidl::encoding::TypeMarker for ControllerClearControlRequest {
1374 type Owned = Self;
1375
1376 #[inline(always)]
1377 fn inline_align(_context: fidl::encoding::Context) -> usize {
1378 8
1379 }
1380
1381 #[inline(always)]
1382 fn inline_size(_context: fidl::encoding::Context) -> usize {
1383 16
1384 }
1385 }
1386
1387 unsafe impl<D: fidl::encoding::ResourceDialect>
1388 fidl::encoding::Encode<ControllerClearControlRequest, D>
1389 for &ControllerClearControlRequest
1390 {
1391 #[inline]
1392 unsafe fn encode(
1393 self,
1394 encoder: &mut fidl::encoding::Encoder<'_, D>,
1395 offset: usize,
1396 _depth: fidl::encoding::Depth,
1397 ) -> fidl::Result<()> {
1398 encoder.debug_check_bounds::<ControllerClearControlRequest>(offset);
1399 fidl::encoding::Encode::<ControllerClearControlRequest, D>::encode(
1401 (<ControlOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1402 encoder,
1403 offset,
1404 _depth,
1405 )
1406 }
1407 }
1408 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ControlOptions, D>>
1409 fidl::encoding::Encode<ControllerClearControlRequest, D> for (T0,)
1410 {
1411 #[inline]
1412 unsafe fn encode(
1413 self,
1414 encoder: &mut fidl::encoding::Encoder<'_, D>,
1415 offset: usize,
1416 depth: fidl::encoding::Depth,
1417 ) -> fidl::Result<()> {
1418 encoder.debug_check_bounds::<ControllerClearControlRequest>(offset);
1419 self.0.encode(encoder, offset + 0, depth)?;
1423 Ok(())
1424 }
1425 }
1426
1427 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1428 for ControllerClearControlRequest
1429 {
1430 #[inline(always)]
1431 fn new_empty() -> Self {
1432 Self { options: fidl::new_empty!(ControlOptions, D) }
1433 }
1434
1435 #[inline]
1436 unsafe fn decode(
1437 &mut self,
1438 decoder: &mut fidl::encoding::Decoder<'_, D>,
1439 offset: usize,
1440 _depth: fidl::encoding::Depth,
1441 ) -> fidl::Result<()> {
1442 decoder.debug_check_bounds::<Self>(offset);
1443 fidl::decode!(ControlOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
1445 Ok(())
1446 }
1447 }
1448
1449 impl fidl::encoding::ValueTypeMarker for ControllerSetControlRequest {
1450 type Borrowed<'a> = &'a Self;
1451 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1452 value
1453 }
1454 }
1455
1456 unsafe impl fidl::encoding::TypeMarker for ControllerSetControlRequest {
1457 type Owned = Self;
1458
1459 #[inline(always)]
1460 fn inline_align(_context: fidl::encoding::Context) -> usize {
1461 8
1462 }
1463
1464 #[inline(always)]
1465 fn inline_size(_context: fidl::encoding::Context) -> usize {
1466 16
1467 }
1468 }
1469
1470 unsafe impl<D: fidl::encoding::ResourceDialect>
1471 fidl::encoding::Encode<ControllerSetControlRequest, D> for &ControllerSetControlRequest
1472 {
1473 #[inline]
1474 unsafe fn encode(
1475 self,
1476 encoder: &mut fidl::encoding::Encoder<'_, D>,
1477 offset: usize,
1478 _depth: fidl::encoding::Depth,
1479 ) -> fidl::Result<()> {
1480 encoder.debug_check_bounds::<ControllerSetControlRequest>(offset);
1481 fidl::encoding::Encode::<ControllerSetControlRequest, D>::encode(
1483 (<ControlOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1484 encoder,
1485 offset,
1486 _depth,
1487 )
1488 }
1489 }
1490 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ControlOptions, D>>
1491 fidl::encoding::Encode<ControllerSetControlRequest, D> for (T0,)
1492 {
1493 #[inline]
1494 unsafe fn encode(
1495 self,
1496 encoder: &mut fidl::encoding::Encoder<'_, D>,
1497 offset: usize,
1498 depth: fidl::encoding::Depth,
1499 ) -> fidl::Result<()> {
1500 encoder.debug_check_bounds::<ControllerSetControlRequest>(offset);
1501 self.0.encode(encoder, offset + 0, depth)?;
1505 Ok(())
1506 }
1507 }
1508
1509 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1510 for ControllerSetControlRequest
1511 {
1512 #[inline(always)]
1513 fn new_empty() -> Self {
1514 Self { options: fidl::new_empty!(ControlOptions, D) }
1515 }
1516
1517 #[inline]
1518 unsafe fn decode(
1519 &mut self,
1520 decoder: &mut fidl::encoding::Decoder<'_, D>,
1521 offset: usize,
1522 _depth: fidl::encoding::Depth,
1523 ) -> fidl::Result<()> {
1524 decoder.debug_check_bounds::<Self>(offset);
1525 fidl::decode!(ControlOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
1527 Ok(())
1528 }
1529 }
1530
1531 impl ControlOptions {
1532 #[inline(always)]
1533 fn max_ordinal_present(&self) -> u64 {
1534 if let Some(_) = self.top_off_duration {
1535 return 7;
1536 }
1537 if let Some(_) = self.input_voltage_limit_uv {
1538 return 6;
1539 }
1540 if let Some(_) = self.charge_term_current_ua {
1541 return 5;
1542 }
1543 if let Some(_) = self.float_voltage_uv {
1544 return 4;
1545 }
1546 if let Some(_) = self.charge_current_limit_ua {
1547 return 3;
1548 }
1549 if let Some(_) = self.input_current_limit_ua {
1550 return 2;
1551 }
1552 if let Some(_) = self.operating_mode {
1553 return 1;
1554 }
1555 0
1556 }
1557 }
1558
1559 impl fidl::encoding::ValueTypeMarker for ControlOptions {
1560 type Borrowed<'a> = &'a Self;
1561 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1562 value
1563 }
1564 }
1565
1566 unsafe impl fidl::encoding::TypeMarker for ControlOptions {
1567 type Owned = Self;
1568
1569 #[inline(always)]
1570 fn inline_align(_context: fidl::encoding::Context) -> usize {
1571 8
1572 }
1573
1574 #[inline(always)]
1575 fn inline_size(_context: fidl::encoding::Context) -> usize {
1576 16
1577 }
1578 }
1579
1580 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ControlOptions, D>
1581 for &ControlOptions
1582 {
1583 unsafe fn encode(
1584 self,
1585 encoder: &mut fidl::encoding::Encoder<'_, D>,
1586 offset: usize,
1587 mut depth: fidl::encoding::Depth,
1588 ) -> fidl::Result<()> {
1589 encoder.debug_check_bounds::<ControlOptions>(offset);
1590 let max_ordinal: u64 = self.max_ordinal_present();
1592 encoder.write_num(max_ordinal, offset);
1593 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1594 if max_ordinal == 0 {
1596 return Ok(());
1597 }
1598 depth.increment()?;
1599 let envelope_size = 8;
1600 let bytes_len = max_ordinal as usize * envelope_size;
1601 #[allow(unused_variables)]
1602 let offset = encoder.out_of_line_offset(bytes_len);
1603 let mut _prev_end_offset: usize = 0;
1604 if 1 > max_ordinal {
1605 return Ok(());
1606 }
1607
1608 let cur_offset: usize = (1 - 1) * envelope_size;
1611
1612 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1614
1615 fidl::encoding::encode_in_envelope_optional::<OperatingMode, D>(
1620 self.operating_mode
1621 .as_ref()
1622 .map(<OperatingMode as fidl::encoding::ValueTypeMarker>::borrow),
1623 encoder,
1624 offset + cur_offset,
1625 depth,
1626 )?;
1627
1628 _prev_end_offset = cur_offset + envelope_size;
1629 if 2 > max_ordinal {
1630 return Ok(());
1631 }
1632
1633 let cur_offset: usize = (2 - 1) * envelope_size;
1636
1637 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1639
1640 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1645 self.input_current_limit_ua
1646 .as_ref()
1647 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1648 encoder,
1649 offset + cur_offset,
1650 depth,
1651 )?;
1652
1653 _prev_end_offset = cur_offset + envelope_size;
1654 if 3 > max_ordinal {
1655 return Ok(());
1656 }
1657
1658 let cur_offset: usize = (3 - 1) * envelope_size;
1661
1662 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1664
1665 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1670 self.charge_current_limit_ua
1671 .as_ref()
1672 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1673 encoder,
1674 offset + cur_offset,
1675 depth,
1676 )?;
1677
1678 _prev_end_offset = cur_offset + envelope_size;
1679 if 4 > max_ordinal {
1680 return Ok(());
1681 }
1682
1683 let cur_offset: usize = (4 - 1) * envelope_size;
1686
1687 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1689
1690 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1695 self.float_voltage_uv
1696 .as_ref()
1697 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1698 encoder,
1699 offset + cur_offset,
1700 depth,
1701 )?;
1702
1703 _prev_end_offset = cur_offset + envelope_size;
1704 if 5 > max_ordinal {
1705 return Ok(());
1706 }
1707
1708 let cur_offset: usize = (5 - 1) * envelope_size;
1711
1712 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1714
1715 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1720 self.charge_term_current_ua
1721 .as_ref()
1722 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1723 encoder,
1724 offset + cur_offset,
1725 depth,
1726 )?;
1727
1728 _prev_end_offset = cur_offset + envelope_size;
1729 if 6 > max_ordinal {
1730 return Ok(());
1731 }
1732
1733 let cur_offset: usize = (6 - 1) * envelope_size;
1736
1737 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1739
1740 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1745 self.input_voltage_limit_uv
1746 .as_ref()
1747 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1748 encoder,
1749 offset + cur_offset,
1750 depth,
1751 )?;
1752
1753 _prev_end_offset = cur_offset + envelope_size;
1754 if 7 > max_ordinal {
1755 return Ok(());
1756 }
1757
1758 let cur_offset: usize = (7 - 1) * envelope_size;
1761
1762 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1764
1765 fidl::encoding::encode_in_envelope_optional::<i64, D>(
1770 self.top_off_duration
1771 .as_ref()
1772 .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1773 encoder,
1774 offset + cur_offset,
1775 depth,
1776 )?;
1777
1778 _prev_end_offset = cur_offset + envelope_size;
1779
1780 Ok(())
1781 }
1782 }
1783
1784 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControlOptions {
1785 #[inline(always)]
1786 fn new_empty() -> Self {
1787 Self::default()
1788 }
1789
1790 unsafe fn decode(
1791 &mut self,
1792 decoder: &mut fidl::encoding::Decoder<'_, D>,
1793 offset: usize,
1794 mut depth: fidl::encoding::Depth,
1795 ) -> fidl::Result<()> {
1796 decoder.debug_check_bounds::<Self>(offset);
1797 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1798 None => return Err(fidl::Error::NotNullable),
1799 Some(len) => len,
1800 };
1801 if len == 0 {
1803 return Ok(());
1804 };
1805 depth.increment()?;
1806 let envelope_size = 8;
1807 let bytes_len = len * envelope_size;
1808 let offset = decoder.out_of_line_offset(bytes_len)?;
1809 let mut _next_ordinal_to_read = 0;
1811 let mut next_offset = offset;
1812 let end_offset = offset + bytes_len;
1813 _next_ordinal_to_read += 1;
1814 if next_offset >= end_offset {
1815 return Ok(());
1816 }
1817
1818 while _next_ordinal_to_read < 1 {
1820 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1821 _next_ordinal_to_read += 1;
1822 next_offset += envelope_size;
1823 }
1824
1825 let next_out_of_line = decoder.next_out_of_line();
1826 let handles_before = decoder.remaining_handles();
1827 if let Some((inlined, num_bytes, num_handles)) =
1828 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1829 {
1830 let member_inline_size =
1831 <OperatingMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1832 if inlined != (member_inline_size <= 4) {
1833 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1834 }
1835 let inner_offset;
1836 let mut inner_depth = depth.clone();
1837 if inlined {
1838 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1839 inner_offset = next_offset;
1840 } else {
1841 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1842 inner_depth.increment()?;
1843 }
1844 let val_ref =
1845 self.operating_mode.get_or_insert_with(|| fidl::new_empty!(OperatingMode, D));
1846 fidl::decode!(OperatingMode, D, val_ref, decoder, inner_offset, inner_depth)?;
1847 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1848 {
1849 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1850 }
1851 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1852 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1853 }
1854 }
1855
1856 next_offset += envelope_size;
1857 _next_ordinal_to_read += 1;
1858 if next_offset >= end_offset {
1859 return Ok(());
1860 }
1861
1862 while _next_ordinal_to_read < 2 {
1864 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1865 _next_ordinal_to_read += 1;
1866 next_offset += envelope_size;
1867 }
1868
1869 let next_out_of_line = decoder.next_out_of_line();
1870 let handles_before = decoder.remaining_handles();
1871 if let Some((inlined, num_bytes, num_handles)) =
1872 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1873 {
1874 let member_inline_size =
1875 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1876 if inlined != (member_inline_size <= 4) {
1877 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1878 }
1879 let inner_offset;
1880 let mut inner_depth = depth.clone();
1881 if inlined {
1882 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1883 inner_offset = next_offset;
1884 } else {
1885 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1886 inner_depth.increment()?;
1887 }
1888 let val_ref =
1889 self.input_current_limit_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
1890 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1891 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1892 {
1893 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1894 }
1895 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1896 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1897 }
1898 }
1899
1900 next_offset += envelope_size;
1901 _next_ordinal_to_read += 1;
1902 if next_offset >= end_offset {
1903 return Ok(());
1904 }
1905
1906 while _next_ordinal_to_read < 3 {
1908 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1909 _next_ordinal_to_read += 1;
1910 next_offset += envelope_size;
1911 }
1912
1913 let next_out_of_line = decoder.next_out_of_line();
1914 let handles_before = decoder.remaining_handles();
1915 if let Some((inlined, num_bytes, num_handles)) =
1916 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1917 {
1918 let member_inline_size =
1919 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1920 if inlined != (member_inline_size <= 4) {
1921 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1922 }
1923 let inner_offset;
1924 let mut inner_depth = depth.clone();
1925 if inlined {
1926 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1927 inner_offset = next_offset;
1928 } else {
1929 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1930 inner_depth.increment()?;
1931 }
1932 let val_ref =
1933 self.charge_current_limit_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
1934 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1935 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1936 {
1937 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1938 }
1939 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1940 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1941 }
1942 }
1943
1944 next_offset += envelope_size;
1945 _next_ordinal_to_read += 1;
1946 if next_offset >= end_offset {
1947 return Ok(());
1948 }
1949
1950 while _next_ordinal_to_read < 4 {
1952 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1953 _next_ordinal_to_read += 1;
1954 next_offset += envelope_size;
1955 }
1956
1957 let next_out_of_line = decoder.next_out_of_line();
1958 let handles_before = decoder.remaining_handles();
1959 if let Some((inlined, num_bytes, num_handles)) =
1960 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1961 {
1962 let member_inline_size =
1963 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1964 if inlined != (member_inline_size <= 4) {
1965 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1966 }
1967 let inner_offset;
1968 let mut inner_depth = depth.clone();
1969 if inlined {
1970 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1971 inner_offset = next_offset;
1972 } else {
1973 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1974 inner_depth.increment()?;
1975 }
1976 let val_ref = self.float_voltage_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
1977 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1978 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1979 {
1980 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1981 }
1982 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1983 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1984 }
1985 }
1986
1987 next_offset += envelope_size;
1988 _next_ordinal_to_read += 1;
1989 if next_offset >= end_offset {
1990 return Ok(());
1991 }
1992
1993 while _next_ordinal_to_read < 5 {
1995 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1996 _next_ordinal_to_read += 1;
1997 next_offset += envelope_size;
1998 }
1999
2000 let next_out_of_line = decoder.next_out_of_line();
2001 let handles_before = decoder.remaining_handles();
2002 if let Some((inlined, num_bytes, num_handles)) =
2003 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2004 {
2005 let member_inline_size =
2006 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2007 if inlined != (member_inline_size <= 4) {
2008 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2009 }
2010 let inner_offset;
2011 let mut inner_depth = depth.clone();
2012 if inlined {
2013 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2014 inner_offset = next_offset;
2015 } else {
2016 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2017 inner_depth.increment()?;
2018 }
2019 let val_ref =
2020 self.charge_term_current_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
2021 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2022 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2023 {
2024 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2025 }
2026 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2027 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2028 }
2029 }
2030
2031 next_offset += envelope_size;
2032 _next_ordinal_to_read += 1;
2033 if next_offset >= end_offset {
2034 return Ok(());
2035 }
2036
2037 while _next_ordinal_to_read < 6 {
2039 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2040 _next_ordinal_to_read += 1;
2041 next_offset += envelope_size;
2042 }
2043
2044 let next_out_of_line = decoder.next_out_of_line();
2045 let handles_before = decoder.remaining_handles();
2046 if let Some((inlined, num_bytes, num_handles)) =
2047 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2048 {
2049 let member_inline_size =
2050 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2051 if inlined != (member_inline_size <= 4) {
2052 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2053 }
2054 let inner_offset;
2055 let mut inner_depth = depth.clone();
2056 if inlined {
2057 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2058 inner_offset = next_offset;
2059 } else {
2060 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2061 inner_depth.increment()?;
2062 }
2063 let val_ref =
2064 self.input_voltage_limit_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
2065 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2066 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2067 {
2068 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2069 }
2070 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2071 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2072 }
2073 }
2074
2075 next_offset += envelope_size;
2076 _next_ordinal_to_read += 1;
2077 if next_offset >= end_offset {
2078 return Ok(());
2079 }
2080
2081 while _next_ordinal_to_read < 7 {
2083 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2084 _next_ordinal_to_read += 1;
2085 next_offset += envelope_size;
2086 }
2087
2088 let next_out_of_line = decoder.next_out_of_line();
2089 let handles_before = decoder.remaining_handles();
2090 if let Some((inlined, num_bytes, num_handles)) =
2091 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2092 {
2093 let member_inline_size =
2094 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2095 if inlined != (member_inline_size <= 4) {
2096 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2097 }
2098 let inner_offset;
2099 let mut inner_depth = depth.clone();
2100 if inlined {
2101 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2102 inner_offset = next_offset;
2103 } else {
2104 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2105 inner_depth.increment()?;
2106 }
2107 let val_ref = self.top_off_duration.get_or_insert_with(|| fidl::new_empty!(i64, D));
2108 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2109 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2110 {
2111 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2112 }
2113 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2114 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2115 }
2116 }
2117
2118 next_offset += envelope_size;
2119
2120 while next_offset < end_offset {
2122 _next_ordinal_to_read += 1;
2123 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2124 next_offset += envelope_size;
2125 }
2126
2127 Ok(())
2128 }
2129 }
2130
2131 impl Spec {
2132 #[inline(always)]
2133 fn max_ordinal_present(&self) -> u64 {
2134 if let Some(_) = self.max_input_voltage_uv {
2135 return 11;
2136 }
2137 if let Some(_) = self.min_input_voltage_uv {
2138 return 10;
2139 }
2140 if let Some(_) = self.recharge_voltage_uv {
2141 return 9;
2142 }
2143 if let Some(_) = self.charge_term_current_ua {
2144 return 8;
2145 }
2146 if let Some(_) = self.precharge_current_ua {
2147 return 7;
2148 }
2149 if let Some(_) = self.supported_options {
2150 return 6;
2151 }
2152 if let Some(_) = self.supported_modes {
2153 return 5;
2154 }
2155 if let Some(_) = self.model {
2156 return 4;
2157 }
2158 if let Some(_) = self.max_input_current_ua {
2159 return 3;
2160 }
2161 if let Some(_) = self.max_charge_voltage_uv {
2162 return 2;
2163 }
2164 if let Some(_) = self.max_charge_current_ua {
2165 return 1;
2166 }
2167 0
2168 }
2169 }
2170
2171 impl fidl::encoding::ValueTypeMarker for Spec {
2172 type Borrowed<'a> = &'a Self;
2173 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2174 value
2175 }
2176 }
2177
2178 unsafe impl fidl::encoding::TypeMarker for Spec {
2179 type Owned = Self;
2180
2181 #[inline(always)]
2182 fn inline_align(_context: fidl::encoding::Context) -> usize {
2183 8
2184 }
2185
2186 #[inline(always)]
2187 fn inline_size(_context: fidl::encoding::Context) -> usize {
2188 16
2189 }
2190 }
2191
2192 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Spec, D> for &Spec {
2193 unsafe fn encode(
2194 self,
2195 encoder: &mut fidl::encoding::Encoder<'_, D>,
2196 offset: usize,
2197 mut depth: fidl::encoding::Depth,
2198 ) -> fidl::Result<()> {
2199 encoder.debug_check_bounds::<Spec>(offset);
2200 let max_ordinal: u64 = self.max_ordinal_present();
2202 encoder.write_num(max_ordinal, offset);
2203 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2204 if max_ordinal == 0 {
2206 return Ok(());
2207 }
2208 depth.increment()?;
2209 let envelope_size = 8;
2210 let bytes_len = max_ordinal as usize * envelope_size;
2211 #[allow(unused_variables)]
2212 let offset = encoder.out_of_line_offset(bytes_len);
2213 let mut _prev_end_offset: usize = 0;
2214 if 1 > max_ordinal {
2215 return Ok(());
2216 }
2217
2218 let cur_offset: usize = (1 - 1) * envelope_size;
2221
2222 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2224
2225 fidl::encoding::encode_in_envelope_optional::<u32, D>(
2230 self.max_charge_current_ua
2231 .as_ref()
2232 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2233 encoder,
2234 offset + cur_offset,
2235 depth,
2236 )?;
2237
2238 _prev_end_offset = cur_offset + envelope_size;
2239 if 2 > max_ordinal {
2240 return Ok(());
2241 }
2242
2243 let cur_offset: usize = (2 - 1) * envelope_size;
2246
2247 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2249
2250 fidl::encoding::encode_in_envelope_optional::<u32, D>(
2255 self.max_charge_voltage_uv
2256 .as_ref()
2257 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2258 encoder,
2259 offset + cur_offset,
2260 depth,
2261 )?;
2262
2263 _prev_end_offset = cur_offset + envelope_size;
2264 if 3 > max_ordinal {
2265 return Ok(());
2266 }
2267
2268 let cur_offset: usize = (3 - 1) * envelope_size;
2271
2272 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2274
2275 fidl::encoding::encode_in_envelope_optional::<u32, D>(
2280 self.max_input_current_ua
2281 .as_ref()
2282 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2283 encoder,
2284 offset + cur_offset,
2285 depth,
2286 )?;
2287
2288 _prev_end_offset = cur_offset + envelope_size;
2289 if 4 > max_ordinal {
2290 return Ok(());
2291 }
2292
2293 let cur_offset: usize = (4 - 1) * envelope_size;
2296
2297 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2299
2300 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
2305 self.model.as_ref().map(
2306 <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
2307 ),
2308 encoder,
2309 offset + cur_offset,
2310 depth,
2311 )?;
2312
2313 _prev_end_offset = cur_offset + envelope_size;
2314 if 5 > max_ordinal {
2315 return Ok(());
2316 }
2317
2318 let cur_offset: usize = (5 - 1) * envelope_size;
2321
2322 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2324
2325 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<OperatingMode, 16>, D>(
2330 self.supported_modes.as_ref().map(<fidl::encoding::Vector<OperatingMode, 16> as fidl::encoding::ValueTypeMarker>::borrow),
2331 encoder, offset + cur_offset, depth
2332 )?;
2333
2334 _prev_end_offset = cur_offset + envelope_size;
2335 if 6 > max_ordinal {
2336 return Ok(());
2337 }
2338
2339 let cur_offset: usize = (6 - 1) * envelope_size;
2342
2343 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2345
2346 fidl::encoding::encode_in_envelope_optional::<WatchOptions, D>(
2351 self.supported_options
2352 .as_ref()
2353 .map(<WatchOptions as fidl::encoding::ValueTypeMarker>::borrow),
2354 encoder,
2355 offset + cur_offset,
2356 depth,
2357 )?;
2358
2359 _prev_end_offset = cur_offset + envelope_size;
2360 if 7 > max_ordinal {
2361 return Ok(());
2362 }
2363
2364 let cur_offset: usize = (7 - 1) * envelope_size;
2367
2368 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2370
2371 fidl::encoding::encode_in_envelope_optional::<u32, D>(
2376 self.precharge_current_ua
2377 .as_ref()
2378 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2379 encoder,
2380 offset + cur_offset,
2381 depth,
2382 )?;
2383
2384 _prev_end_offset = cur_offset + envelope_size;
2385 if 8 > max_ordinal {
2386 return Ok(());
2387 }
2388
2389 let cur_offset: usize = (8 - 1) * envelope_size;
2392
2393 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2395
2396 fidl::encoding::encode_in_envelope_optional::<u32, D>(
2401 self.charge_term_current_ua
2402 .as_ref()
2403 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2404 encoder,
2405 offset + cur_offset,
2406 depth,
2407 )?;
2408
2409 _prev_end_offset = cur_offset + envelope_size;
2410 if 9 > max_ordinal {
2411 return Ok(());
2412 }
2413
2414 let cur_offset: usize = (9 - 1) * envelope_size;
2417
2418 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2420
2421 fidl::encoding::encode_in_envelope_optional::<u32, D>(
2426 self.recharge_voltage_uv
2427 .as_ref()
2428 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2429 encoder,
2430 offset + cur_offset,
2431 depth,
2432 )?;
2433
2434 _prev_end_offset = cur_offset + envelope_size;
2435 if 10 > max_ordinal {
2436 return Ok(());
2437 }
2438
2439 let cur_offset: usize = (10 - 1) * envelope_size;
2442
2443 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2445
2446 fidl::encoding::encode_in_envelope_optional::<u32, D>(
2451 self.min_input_voltage_uv
2452 .as_ref()
2453 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2454 encoder,
2455 offset + cur_offset,
2456 depth,
2457 )?;
2458
2459 _prev_end_offset = cur_offset + envelope_size;
2460 if 11 > max_ordinal {
2461 return Ok(());
2462 }
2463
2464 let cur_offset: usize = (11 - 1) * envelope_size;
2467
2468 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2470
2471 fidl::encoding::encode_in_envelope_optional::<u32, D>(
2476 self.max_input_voltage_uv
2477 .as_ref()
2478 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2479 encoder,
2480 offset + cur_offset,
2481 depth,
2482 )?;
2483
2484 _prev_end_offset = cur_offset + envelope_size;
2485
2486 Ok(())
2487 }
2488 }
2489
2490 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Spec {
2491 #[inline(always)]
2492 fn new_empty() -> Self {
2493 Self::default()
2494 }
2495
2496 unsafe fn decode(
2497 &mut self,
2498 decoder: &mut fidl::encoding::Decoder<'_, D>,
2499 offset: usize,
2500 mut depth: fidl::encoding::Depth,
2501 ) -> fidl::Result<()> {
2502 decoder.debug_check_bounds::<Self>(offset);
2503 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2504 None => return Err(fidl::Error::NotNullable),
2505 Some(len) => len,
2506 };
2507 if len == 0 {
2509 return Ok(());
2510 };
2511 depth.increment()?;
2512 let envelope_size = 8;
2513 let bytes_len = len * envelope_size;
2514 let offset = decoder.out_of_line_offset(bytes_len)?;
2515 let mut _next_ordinal_to_read = 0;
2517 let mut next_offset = offset;
2518 let end_offset = offset + bytes_len;
2519 _next_ordinal_to_read += 1;
2520 if next_offset >= end_offset {
2521 return Ok(());
2522 }
2523
2524 while _next_ordinal_to_read < 1 {
2526 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2527 _next_ordinal_to_read += 1;
2528 next_offset += envelope_size;
2529 }
2530
2531 let next_out_of_line = decoder.next_out_of_line();
2532 let handles_before = decoder.remaining_handles();
2533 if let Some((inlined, num_bytes, num_handles)) =
2534 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2535 {
2536 let member_inline_size =
2537 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2538 if inlined != (member_inline_size <= 4) {
2539 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2540 }
2541 let inner_offset;
2542 let mut inner_depth = depth.clone();
2543 if inlined {
2544 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2545 inner_offset = next_offset;
2546 } else {
2547 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2548 inner_depth.increment()?;
2549 }
2550 let val_ref =
2551 self.max_charge_current_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
2552 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2553 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2554 {
2555 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2556 }
2557 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2558 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2559 }
2560 }
2561
2562 next_offset += envelope_size;
2563 _next_ordinal_to_read += 1;
2564 if next_offset >= end_offset {
2565 return Ok(());
2566 }
2567
2568 while _next_ordinal_to_read < 2 {
2570 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2571 _next_ordinal_to_read += 1;
2572 next_offset += envelope_size;
2573 }
2574
2575 let next_out_of_line = decoder.next_out_of_line();
2576 let handles_before = decoder.remaining_handles();
2577 if let Some((inlined, num_bytes, num_handles)) =
2578 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2579 {
2580 let member_inline_size =
2581 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2582 if inlined != (member_inline_size <= 4) {
2583 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2584 }
2585 let inner_offset;
2586 let mut inner_depth = depth.clone();
2587 if inlined {
2588 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2589 inner_offset = next_offset;
2590 } else {
2591 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2592 inner_depth.increment()?;
2593 }
2594 let val_ref =
2595 self.max_charge_voltage_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
2596 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2597 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2598 {
2599 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2600 }
2601 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2602 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2603 }
2604 }
2605
2606 next_offset += envelope_size;
2607 _next_ordinal_to_read += 1;
2608 if next_offset >= end_offset {
2609 return Ok(());
2610 }
2611
2612 while _next_ordinal_to_read < 3 {
2614 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2615 _next_ordinal_to_read += 1;
2616 next_offset += envelope_size;
2617 }
2618
2619 let next_out_of_line = decoder.next_out_of_line();
2620 let handles_before = decoder.remaining_handles();
2621 if let Some((inlined, num_bytes, num_handles)) =
2622 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2623 {
2624 let member_inline_size =
2625 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2626 if inlined != (member_inline_size <= 4) {
2627 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2628 }
2629 let inner_offset;
2630 let mut inner_depth = depth.clone();
2631 if inlined {
2632 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2633 inner_offset = next_offset;
2634 } else {
2635 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2636 inner_depth.increment()?;
2637 }
2638 let val_ref =
2639 self.max_input_current_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
2640 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2641 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2642 {
2643 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2644 }
2645 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2646 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2647 }
2648 }
2649
2650 next_offset += envelope_size;
2651 _next_ordinal_to_read += 1;
2652 if next_offset >= end_offset {
2653 return Ok(());
2654 }
2655
2656 while _next_ordinal_to_read < 4 {
2658 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2659 _next_ordinal_to_read += 1;
2660 next_offset += envelope_size;
2661 }
2662
2663 let next_out_of_line = decoder.next_out_of_line();
2664 let handles_before = decoder.remaining_handles();
2665 if let Some((inlined, num_bytes, num_handles)) =
2666 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2667 {
2668 let member_inline_size =
2669 <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
2670 decoder.context,
2671 );
2672 if inlined != (member_inline_size <= 4) {
2673 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2674 }
2675 let inner_offset;
2676 let mut inner_depth = depth.clone();
2677 if inlined {
2678 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2679 inner_offset = next_offset;
2680 } else {
2681 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2682 inner_depth.increment()?;
2683 }
2684 let val_ref = self
2685 .model
2686 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
2687 fidl::decode!(
2688 fidl::encoding::BoundedString<128>,
2689 D,
2690 val_ref,
2691 decoder,
2692 inner_offset,
2693 inner_depth
2694 )?;
2695 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2696 {
2697 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2698 }
2699 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2700 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2701 }
2702 }
2703
2704 next_offset += envelope_size;
2705 _next_ordinal_to_read += 1;
2706 if next_offset >= end_offset {
2707 return Ok(());
2708 }
2709
2710 while _next_ordinal_to_read < 5 {
2712 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2713 _next_ordinal_to_read += 1;
2714 next_offset += envelope_size;
2715 }
2716
2717 let next_out_of_line = decoder.next_out_of_line();
2718 let handles_before = decoder.remaining_handles();
2719 if let Some((inlined, num_bytes, num_handles)) =
2720 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2721 {
2722 let member_inline_size = <fidl::encoding::Vector<OperatingMode, 16> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2723 if inlined != (member_inline_size <= 4) {
2724 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2725 }
2726 let inner_offset;
2727 let mut inner_depth = depth.clone();
2728 if inlined {
2729 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2730 inner_offset = next_offset;
2731 } else {
2732 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2733 inner_depth.increment()?;
2734 }
2735 let val_ref = self.supported_modes.get_or_insert_with(
2736 || fidl::new_empty!(fidl::encoding::Vector<OperatingMode, 16>, D),
2737 );
2738 fidl::decode!(fidl::encoding::Vector<OperatingMode, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
2739 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2740 {
2741 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2742 }
2743 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2744 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2745 }
2746 }
2747
2748 next_offset += envelope_size;
2749 _next_ordinal_to_read += 1;
2750 if next_offset >= end_offset {
2751 return Ok(());
2752 }
2753
2754 while _next_ordinal_to_read < 6 {
2756 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2757 _next_ordinal_to_read += 1;
2758 next_offset += envelope_size;
2759 }
2760
2761 let next_out_of_line = decoder.next_out_of_line();
2762 let handles_before = decoder.remaining_handles();
2763 if let Some((inlined, num_bytes, num_handles)) =
2764 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2765 {
2766 let member_inline_size =
2767 <WatchOptions as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2768 if inlined != (member_inline_size <= 4) {
2769 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2770 }
2771 let inner_offset;
2772 let mut inner_depth = depth.clone();
2773 if inlined {
2774 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2775 inner_offset = next_offset;
2776 } else {
2777 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2778 inner_depth.increment()?;
2779 }
2780 let val_ref =
2781 self.supported_options.get_or_insert_with(|| fidl::new_empty!(WatchOptions, D));
2782 fidl::decode!(WatchOptions, D, val_ref, decoder, inner_offset, inner_depth)?;
2783 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2784 {
2785 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2786 }
2787 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2788 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2789 }
2790 }
2791
2792 next_offset += envelope_size;
2793 _next_ordinal_to_read += 1;
2794 if next_offset >= end_offset {
2795 return Ok(());
2796 }
2797
2798 while _next_ordinal_to_read < 7 {
2800 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2801 _next_ordinal_to_read += 1;
2802 next_offset += envelope_size;
2803 }
2804
2805 let next_out_of_line = decoder.next_out_of_line();
2806 let handles_before = decoder.remaining_handles();
2807 if let Some((inlined, num_bytes, num_handles)) =
2808 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2809 {
2810 let member_inline_size =
2811 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2812 if inlined != (member_inline_size <= 4) {
2813 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2814 }
2815 let inner_offset;
2816 let mut inner_depth = depth.clone();
2817 if inlined {
2818 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2819 inner_offset = next_offset;
2820 } else {
2821 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2822 inner_depth.increment()?;
2823 }
2824 let val_ref =
2825 self.precharge_current_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
2826 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2827 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2828 {
2829 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2830 }
2831 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2832 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2833 }
2834 }
2835
2836 next_offset += envelope_size;
2837 _next_ordinal_to_read += 1;
2838 if next_offset >= end_offset {
2839 return Ok(());
2840 }
2841
2842 while _next_ordinal_to_read < 8 {
2844 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2845 _next_ordinal_to_read += 1;
2846 next_offset += envelope_size;
2847 }
2848
2849 let next_out_of_line = decoder.next_out_of_line();
2850 let handles_before = decoder.remaining_handles();
2851 if let Some((inlined, num_bytes, num_handles)) =
2852 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2853 {
2854 let member_inline_size =
2855 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2856 if inlined != (member_inline_size <= 4) {
2857 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2858 }
2859 let inner_offset;
2860 let mut inner_depth = depth.clone();
2861 if inlined {
2862 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2863 inner_offset = next_offset;
2864 } else {
2865 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2866 inner_depth.increment()?;
2867 }
2868 let val_ref =
2869 self.charge_term_current_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
2870 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2871 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2872 {
2873 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2874 }
2875 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2876 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2877 }
2878 }
2879
2880 next_offset += envelope_size;
2881 _next_ordinal_to_read += 1;
2882 if next_offset >= end_offset {
2883 return Ok(());
2884 }
2885
2886 while _next_ordinal_to_read < 9 {
2888 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2889 _next_ordinal_to_read += 1;
2890 next_offset += envelope_size;
2891 }
2892
2893 let next_out_of_line = decoder.next_out_of_line();
2894 let handles_before = decoder.remaining_handles();
2895 if let Some((inlined, num_bytes, num_handles)) =
2896 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2897 {
2898 let member_inline_size =
2899 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2900 if inlined != (member_inline_size <= 4) {
2901 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2902 }
2903 let inner_offset;
2904 let mut inner_depth = depth.clone();
2905 if inlined {
2906 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2907 inner_offset = next_offset;
2908 } else {
2909 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2910 inner_depth.increment()?;
2911 }
2912 let val_ref =
2913 self.recharge_voltage_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
2914 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2915 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2916 {
2917 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2918 }
2919 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2920 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2921 }
2922 }
2923
2924 next_offset += envelope_size;
2925 _next_ordinal_to_read += 1;
2926 if next_offset >= end_offset {
2927 return Ok(());
2928 }
2929
2930 while _next_ordinal_to_read < 10 {
2932 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2933 _next_ordinal_to_read += 1;
2934 next_offset += envelope_size;
2935 }
2936
2937 let next_out_of_line = decoder.next_out_of_line();
2938 let handles_before = decoder.remaining_handles();
2939 if let Some((inlined, num_bytes, num_handles)) =
2940 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2941 {
2942 let member_inline_size =
2943 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2944 if inlined != (member_inline_size <= 4) {
2945 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2946 }
2947 let inner_offset;
2948 let mut inner_depth = depth.clone();
2949 if inlined {
2950 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2951 inner_offset = next_offset;
2952 } else {
2953 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2954 inner_depth.increment()?;
2955 }
2956 let val_ref =
2957 self.min_input_voltage_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
2958 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2959 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2960 {
2961 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2962 }
2963 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2964 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2965 }
2966 }
2967
2968 next_offset += envelope_size;
2969 _next_ordinal_to_read += 1;
2970 if next_offset >= end_offset {
2971 return Ok(());
2972 }
2973
2974 while _next_ordinal_to_read < 11 {
2976 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2977 _next_ordinal_to_read += 1;
2978 next_offset += envelope_size;
2979 }
2980
2981 let next_out_of_line = decoder.next_out_of_line();
2982 let handles_before = decoder.remaining_handles();
2983 if let Some((inlined, num_bytes, num_handles)) =
2984 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2985 {
2986 let member_inline_size =
2987 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2988 if inlined != (member_inline_size <= 4) {
2989 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2990 }
2991 let inner_offset;
2992 let mut inner_depth = depth.clone();
2993 if inlined {
2994 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2995 inner_offset = next_offset;
2996 } else {
2997 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2998 inner_depth.increment()?;
2999 }
3000 let val_ref =
3001 self.max_input_voltage_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
3002 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3003 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3004 {
3005 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3006 }
3007 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3008 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3009 }
3010 }
3011
3012 next_offset += envelope_size;
3013
3014 while next_offset < end_offset {
3016 _next_ordinal_to_read += 1;
3017 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3018 next_offset += envelope_size;
3019 }
3020
3021 Ok(())
3022 }
3023 }
3024
3025 impl Status {
3026 #[inline(always)]
3027 fn max_ordinal_present(&self) -> u64 {
3028 if let Some(_) = self.top_off_duration {
3029 return 13;
3030 }
3031 if let Some(_) = self.input_voltage_limit_uv {
3032 return 12;
3033 }
3034 if let Some(_) = self.charge_term_current_ua {
3035 return 11;
3036 }
3037 if let Some(_) = self.health {
3038 return 10;
3039 }
3040 if let Some(_) = self.source_type {
3041 return 9;
3042 }
3043 if let Some(_) = self.float_voltage_uv {
3044 return 8;
3045 }
3046 if let Some(_) = self.charge_current_limit_ua {
3047 return 7;
3048 }
3049 if let Some(_) = self.input_current_limit_ua {
3050 return 6;
3051 }
3052 if let Some(_) = self.charge_phase {
3053 return 5;
3054 }
3055 if let Some(_) = self.operating_mode {
3056 return 4;
3057 }
3058 if let Some(_) = self.input_current_ua {
3059 return 3;
3060 }
3061 if let Some(_) = self.input_voltage_uv {
3062 return 2;
3063 }
3064 if let Some(_) = self.online {
3065 return 1;
3066 }
3067 0
3068 }
3069 }
3070
3071 impl fidl::encoding::ValueTypeMarker for Status {
3072 type Borrowed<'a> = &'a Self;
3073 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3074 value
3075 }
3076 }
3077
3078 unsafe impl fidl::encoding::TypeMarker for Status {
3079 type Owned = Self;
3080
3081 #[inline(always)]
3082 fn inline_align(_context: fidl::encoding::Context) -> usize {
3083 8
3084 }
3085
3086 #[inline(always)]
3087 fn inline_size(_context: fidl::encoding::Context) -> usize {
3088 16
3089 }
3090 }
3091
3092 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Status, D> for &Status {
3093 unsafe fn encode(
3094 self,
3095 encoder: &mut fidl::encoding::Encoder<'_, D>,
3096 offset: usize,
3097 mut depth: fidl::encoding::Depth,
3098 ) -> fidl::Result<()> {
3099 encoder.debug_check_bounds::<Status>(offset);
3100 let max_ordinal: u64 = self.max_ordinal_present();
3102 encoder.write_num(max_ordinal, offset);
3103 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3104 if max_ordinal == 0 {
3106 return Ok(());
3107 }
3108 depth.increment()?;
3109 let envelope_size = 8;
3110 let bytes_len = max_ordinal as usize * envelope_size;
3111 #[allow(unused_variables)]
3112 let offset = encoder.out_of_line_offset(bytes_len);
3113 let mut _prev_end_offset: usize = 0;
3114 if 1 > max_ordinal {
3115 return Ok(());
3116 }
3117
3118 let cur_offset: usize = (1 - 1) * envelope_size;
3121
3122 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3124
3125 fidl::encoding::encode_in_envelope_optional::<bool, D>(
3130 self.online.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3131 encoder,
3132 offset + cur_offset,
3133 depth,
3134 )?;
3135
3136 _prev_end_offset = cur_offset + envelope_size;
3137 if 2 > max_ordinal {
3138 return Ok(());
3139 }
3140
3141 let cur_offset: usize = (2 - 1) * envelope_size;
3144
3145 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3147
3148 fidl::encoding::encode_in_envelope_optional::<u32, D>(
3153 self.input_voltage_uv
3154 .as_ref()
3155 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3156 encoder,
3157 offset + cur_offset,
3158 depth,
3159 )?;
3160
3161 _prev_end_offset = cur_offset + envelope_size;
3162 if 3 > max_ordinal {
3163 return Ok(());
3164 }
3165
3166 let cur_offset: usize = (3 - 1) * envelope_size;
3169
3170 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3172
3173 fidl::encoding::encode_in_envelope_optional::<i32, D>(
3178 self.input_current_ua
3179 .as_ref()
3180 .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
3181 encoder,
3182 offset + cur_offset,
3183 depth,
3184 )?;
3185
3186 _prev_end_offset = cur_offset + envelope_size;
3187 if 4 > max_ordinal {
3188 return Ok(());
3189 }
3190
3191 let cur_offset: usize = (4 - 1) * envelope_size;
3194
3195 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3197
3198 fidl::encoding::encode_in_envelope_optional::<OperatingMode, D>(
3203 self.operating_mode
3204 .as_ref()
3205 .map(<OperatingMode as fidl::encoding::ValueTypeMarker>::borrow),
3206 encoder,
3207 offset + cur_offset,
3208 depth,
3209 )?;
3210
3211 _prev_end_offset = cur_offset + envelope_size;
3212 if 5 > max_ordinal {
3213 return Ok(());
3214 }
3215
3216 let cur_offset: usize = (5 - 1) * envelope_size;
3219
3220 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3222
3223 fidl::encoding::encode_in_envelope_optional::<ChargePhase, D>(
3228 self.charge_phase
3229 .as_ref()
3230 .map(<ChargePhase as fidl::encoding::ValueTypeMarker>::borrow),
3231 encoder,
3232 offset + cur_offset,
3233 depth,
3234 )?;
3235
3236 _prev_end_offset = cur_offset + envelope_size;
3237 if 6 > max_ordinal {
3238 return Ok(());
3239 }
3240
3241 let cur_offset: usize = (6 - 1) * envelope_size;
3244
3245 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3247
3248 fidl::encoding::encode_in_envelope_optional::<u32, D>(
3253 self.input_current_limit_ua
3254 .as_ref()
3255 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3256 encoder,
3257 offset + cur_offset,
3258 depth,
3259 )?;
3260
3261 _prev_end_offset = cur_offset + envelope_size;
3262 if 7 > max_ordinal {
3263 return Ok(());
3264 }
3265
3266 let cur_offset: usize = (7 - 1) * envelope_size;
3269
3270 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3272
3273 fidl::encoding::encode_in_envelope_optional::<u32, D>(
3278 self.charge_current_limit_ua
3279 .as_ref()
3280 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3281 encoder,
3282 offset + cur_offset,
3283 depth,
3284 )?;
3285
3286 _prev_end_offset = cur_offset + envelope_size;
3287 if 8 > max_ordinal {
3288 return Ok(());
3289 }
3290
3291 let cur_offset: usize = (8 - 1) * envelope_size;
3294
3295 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3297
3298 fidl::encoding::encode_in_envelope_optional::<u32, D>(
3303 self.float_voltage_uv
3304 .as_ref()
3305 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3306 encoder,
3307 offset + cur_offset,
3308 depth,
3309 )?;
3310
3311 _prev_end_offset = cur_offset + envelope_size;
3312 if 9 > max_ordinal {
3313 return Ok(());
3314 }
3315
3316 let cur_offset: usize = (9 - 1) * envelope_size;
3319
3320 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3322
3323 fidl::encoding::encode_in_envelope_optional::<SourceType, D>(
3328 self.source_type
3329 .as_ref()
3330 .map(<SourceType as fidl::encoding::ValueTypeMarker>::borrow),
3331 encoder,
3332 offset + cur_offset,
3333 depth,
3334 )?;
3335
3336 _prev_end_offset = cur_offset + envelope_size;
3337 if 10 > max_ordinal {
3338 return Ok(());
3339 }
3340
3341 let cur_offset: usize = (10 - 1) * envelope_size;
3344
3345 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3347
3348 fidl::encoding::encode_in_envelope_optional::<Health, D>(
3353 self.health.as_ref().map(<Health as fidl::encoding::ValueTypeMarker>::borrow),
3354 encoder,
3355 offset + cur_offset,
3356 depth,
3357 )?;
3358
3359 _prev_end_offset = cur_offset + envelope_size;
3360 if 11 > max_ordinal {
3361 return Ok(());
3362 }
3363
3364 let cur_offset: usize = (11 - 1) * envelope_size;
3367
3368 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3370
3371 fidl::encoding::encode_in_envelope_optional::<u32, D>(
3376 self.charge_term_current_ua
3377 .as_ref()
3378 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3379 encoder,
3380 offset + cur_offset,
3381 depth,
3382 )?;
3383
3384 _prev_end_offset = cur_offset + envelope_size;
3385 if 12 > max_ordinal {
3386 return Ok(());
3387 }
3388
3389 let cur_offset: usize = (12 - 1) * envelope_size;
3392
3393 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3395
3396 fidl::encoding::encode_in_envelope_optional::<u32, D>(
3401 self.input_voltage_limit_uv
3402 .as_ref()
3403 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3404 encoder,
3405 offset + cur_offset,
3406 depth,
3407 )?;
3408
3409 _prev_end_offset = cur_offset + envelope_size;
3410 if 13 > max_ordinal {
3411 return Ok(());
3412 }
3413
3414 let cur_offset: usize = (13 - 1) * envelope_size;
3417
3418 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3420
3421 fidl::encoding::encode_in_envelope_optional::<i64, D>(
3426 self.top_off_duration
3427 .as_ref()
3428 .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3429 encoder,
3430 offset + cur_offset,
3431 depth,
3432 )?;
3433
3434 _prev_end_offset = cur_offset + envelope_size;
3435
3436 Ok(())
3437 }
3438 }
3439
3440 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Status {
3441 #[inline(always)]
3442 fn new_empty() -> Self {
3443 Self::default()
3444 }
3445
3446 unsafe fn decode(
3447 &mut self,
3448 decoder: &mut fidl::encoding::Decoder<'_, D>,
3449 offset: usize,
3450 mut depth: fidl::encoding::Depth,
3451 ) -> fidl::Result<()> {
3452 decoder.debug_check_bounds::<Self>(offset);
3453 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3454 None => return Err(fidl::Error::NotNullable),
3455 Some(len) => len,
3456 };
3457 if len == 0 {
3459 return Ok(());
3460 };
3461 depth.increment()?;
3462 let envelope_size = 8;
3463 let bytes_len = len * envelope_size;
3464 let offset = decoder.out_of_line_offset(bytes_len)?;
3465 let mut _next_ordinal_to_read = 0;
3467 let mut next_offset = offset;
3468 let end_offset = offset + bytes_len;
3469 _next_ordinal_to_read += 1;
3470 if next_offset >= end_offset {
3471 return Ok(());
3472 }
3473
3474 while _next_ordinal_to_read < 1 {
3476 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3477 _next_ordinal_to_read += 1;
3478 next_offset += envelope_size;
3479 }
3480
3481 let next_out_of_line = decoder.next_out_of_line();
3482 let handles_before = decoder.remaining_handles();
3483 if let Some((inlined, num_bytes, num_handles)) =
3484 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3485 {
3486 let member_inline_size =
3487 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3488 if inlined != (member_inline_size <= 4) {
3489 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3490 }
3491 let inner_offset;
3492 let mut inner_depth = depth.clone();
3493 if inlined {
3494 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3495 inner_offset = next_offset;
3496 } else {
3497 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3498 inner_depth.increment()?;
3499 }
3500 let val_ref = self.online.get_or_insert_with(|| fidl::new_empty!(bool, D));
3501 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3502 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3503 {
3504 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3505 }
3506 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3507 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3508 }
3509 }
3510
3511 next_offset += envelope_size;
3512 _next_ordinal_to_read += 1;
3513 if next_offset >= end_offset {
3514 return Ok(());
3515 }
3516
3517 while _next_ordinal_to_read < 2 {
3519 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3520 _next_ordinal_to_read += 1;
3521 next_offset += envelope_size;
3522 }
3523
3524 let next_out_of_line = decoder.next_out_of_line();
3525 let handles_before = decoder.remaining_handles();
3526 if let Some((inlined, num_bytes, num_handles)) =
3527 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3528 {
3529 let member_inline_size =
3530 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3531 if inlined != (member_inline_size <= 4) {
3532 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3533 }
3534 let inner_offset;
3535 let mut inner_depth = depth.clone();
3536 if inlined {
3537 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3538 inner_offset = next_offset;
3539 } else {
3540 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3541 inner_depth.increment()?;
3542 }
3543 let val_ref = self.input_voltage_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
3544 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3545 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3546 {
3547 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3548 }
3549 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3550 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3551 }
3552 }
3553
3554 next_offset += envelope_size;
3555 _next_ordinal_to_read += 1;
3556 if next_offset >= end_offset {
3557 return Ok(());
3558 }
3559
3560 while _next_ordinal_to_read < 3 {
3562 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3563 _next_ordinal_to_read += 1;
3564 next_offset += envelope_size;
3565 }
3566
3567 let next_out_of_line = decoder.next_out_of_line();
3568 let handles_before = decoder.remaining_handles();
3569 if let Some((inlined, num_bytes, num_handles)) =
3570 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3571 {
3572 let member_inline_size =
3573 <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3574 if inlined != (member_inline_size <= 4) {
3575 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3576 }
3577 let inner_offset;
3578 let mut inner_depth = depth.clone();
3579 if inlined {
3580 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3581 inner_offset = next_offset;
3582 } else {
3583 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3584 inner_depth.increment()?;
3585 }
3586 let val_ref = self.input_current_ua.get_or_insert_with(|| fidl::new_empty!(i32, D));
3587 fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3588 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3589 {
3590 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3591 }
3592 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3593 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3594 }
3595 }
3596
3597 next_offset += envelope_size;
3598 _next_ordinal_to_read += 1;
3599 if next_offset >= end_offset {
3600 return Ok(());
3601 }
3602
3603 while _next_ordinal_to_read < 4 {
3605 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3606 _next_ordinal_to_read += 1;
3607 next_offset += envelope_size;
3608 }
3609
3610 let next_out_of_line = decoder.next_out_of_line();
3611 let handles_before = decoder.remaining_handles();
3612 if let Some((inlined, num_bytes, num_handles)) =
3613 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3614 {
3615 let member_inline_size =
3616 <OperatingMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3617 if inlined != (member_inline_size <= 4) {
3618 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3619 }
3620 let inner_offset;
3621 let mut inner_depth = depth.clone();
3622 if inlined {
3623 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3624 inner_offset = next_offset;
3625 } else {
3626 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3627 inner_depth.increment()?;
3628 }
3629 let val_ref =
3630 self.operating_mode.get_or_insert_with(|| fidl::new_empty!(OperatingMode, D));
3631 fidl::decode!(OperatingMode, D, val_ref, decoder, inner_offset, inner_depth)?;
3632 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3633 {
3634 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3635 }
3636 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3637 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3638 }
3639 }
3640
3641 next_offset += envelope_size;
3642 _next_ordinal_to_read += 1;
3643 if next_offset >= end_offset {
3644 return Ok(());
3645 }
3646
3647 while _next_ordinal_to_read < 5 {
3649 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3650 _next_ordinal_to_read += 1;
3651 next_offset += envelope_size;
3652 }
3653
3654 let next_out_of_line = decoder.next_out_of_line();
3655 let handles_before = decoder.remaining_handles();
3656 if let Some((inlined, num_bytes, num_handles)) =
3657 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3658 {
3659 let member_inline_size =
3660 <ChargePhase as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3661 if inlined != (member_inline_size <= 4) {
3662 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3663 }
3664 let inner_offset;
3665 let mut inner_depth = depth.clone();
3666 if inlined {
3667 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3668 inner_offset = next_offset;
3669 } else {
3670 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3671 inner_depth.increment()?;
3672 }
3673 let val_ref =
3674 self.charge_phase.get_or_insert_with(|| fidl::new_empty!(ChargePhase, D));
3675 fidl::decode!(ChargePhase, D, val_ref, decoder, inner_offset, inner_depth)?;
3676 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3677 {
3678 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3679 }
3680 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3681 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3682 }
3683 }
3684
3685 next_offset += envelope_size;
3686 _next_ordinal_to_read += 1;
3687 if next_offset >= end_offset {
3688 return Ok(());
3689 }
3690
3691 while _next_ordinal_to_read < 6 {
3693 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3694 _next_ordinal_to_read += 1;
3695 next_offset += envelope_size;
3696 }
3697
3698 let next_out_of_line = decoder.next_out_of_line();
3699 let handles_before = decoder.remaining_handles();
3700 if let Some((inlined, num_bytes, num_handles)) =
3701 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3702 {
3703 let member_inline_size =
3704 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3705 if inlined != (member_inline_size <= 4) {
3706 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3707 }
3708 let inner_offset;
3709 let mut inner_depth = depth.clone();
3710 if inlined {
3711 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3712 inner_offset = next_offset;
3713 } else {
3714 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3715 inner_depth.increment()?;
3716 }
3717 let val_ref =
3718 self.input_current_limit_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
3719 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3720 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3721 {
3722 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3723 }
3724 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3725 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3726 }
3727 }
3728
3729 next_offset += envelope_size;
3730 _next_ordinal_to_read += 1;
3731 if next_offset >= end_offset {
3732 return Ok(());
3733 }
3734
3735 while _next_ordinal_to_read < 7 {
3737 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3738 _next_ordinal_to_read += 1;
3739 next_offset += envelope_size;
3740 }
3741
3742 let next_out_of_line = decoder.next_out_of_line();
3743 let handles_before = decoder.remaining_handles();
3744 if let Some((inlined, num_bytes, num_handles)) =
3745 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3746 {
3747 let member_inline_size =
3748 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3749 if inlined != (member_inline_size <= 4) {
3750 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3751 }
3752 let inner_offset;
3753 let mut inner_depth = depth.clone();
3754 if inlined {
3755 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3756 inner_offset = next_offset;
3757 } else {
3758 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3759 inner_depth.increment()?;
3760 }
3761 let val_ref =
3762 self.charge_current_limit_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
3763 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3764 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3765 {
3766 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3767 }
3768 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3769 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3770 }
3771 }
3772
3773 next_offset += envelope_size;
3774 _next_ordinal_to_read += 1;
3775 if next_offset >= end_offset {
3776 return Ok(());
3777 }
3778
3779 while _next_ordinal_to_read < 8 {
3781 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3782 _next_ordinal_to_read += 1;
3783 next_offset += envelope_size;
3784 }
3785
3786 let next_out_of_line = decoder.next_out_of_line();
3787 let handles_before = decoder.remaining_handles();
3788 if let Some((inlined, num_bytes, num_handles)) =
3789 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3790 {
3791 let member_inline_size =
3792 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3793 if inlined != (member_inline_size <= 4) {
3794 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3795 }
3796 let inner_offset;
3797 let mut inner_depth = depth.clone();
3798 if inlined {
3799 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3800 inner_offset = next_offset;
3801 } else {
3802 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3803 inner_depth.increment()?;
3804 }
3805 let val_ref = self.float_voltage_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
3806 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3807 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3808 {
3809 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3810 }
3811 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3812 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3813 }
3814 }
3815
3816 next_offset += envelope_size;
3817 _next_ordinal_to_read += 1;
3818 if next_offset >= end_offset {
3819 return Ok(());
3820 }
3821
3822 while _next_ordinal_to_read < 9 {
3824 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3825 _next_ordinal_to_read += 1;
3826 next_offset += envelope_size;
3827 }
3828
3829 let next_out_of_line = decoder.next_out_of_line();
3830 let handles_before = decoder.remaining_handles();
3831 if let Some((inlined, num_bytes, num_handles)) =
3832 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3833 {
3834 let member_inline_size =
3835 <SourceType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3836 if inlined != (member_inline_size <= 4) {
3837 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3838 }
3839 let inner_offset;
3840 let mut inner_depth = depth.clone();
3841 if inlined {
3842 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3843 inner_offset = next_offset;
3844 } else {
3845 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3846 inner_depth.increment()?;
3847 }
3848 let val_ref =
3849 self.source_type.get_or_insert_with(|| fidl::new_empty!(SourceType, D));
3850 fidl::decode!(SourceType, D, val_ref, decoder, inner_offset, inner_depth)?;
3851 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3852 {
3853 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3854 }
3855 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3856 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3857 }
3858 }
3859
3860 next_offset += envelope_size;
3861 _next_ordinal_to_read += 1;
3862 if next_offset >= end_offset {
3863 return Ok(());
3864 }
3865
3866 while _next_ordinal_to_read < 10 {
3868 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3869 _next_ordinal_to_read += 1;
3870 next_offset += envelope_size;
3871 }
3872
3873 let next_out_of_line = decoder.next_out_of_line();
3874 let handles_before = decoder.remaining_handles();
3875 if let Some((inlined, num_bytes, num_handles)) =
3876 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3877 {
3878 let member_inline_size =
3879 <Health as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3880 if inlined != (member_inline_size <= 4) {
3881 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3882 }
3883 let inner_offset;
3884 let mut inner_depth = depth.clone();
3885 if inlined {
3886 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3887 inner_offset = next_offset;
3888 } else {
3889 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3890 inner_depth.increment()?;
3891 }
3892 let val_ref = self.health.get_or_insert_with(|| fidl::new_empty!(Health, D));
3893 fidl::decode!(Health, D, val_ref, decoder, inner_offset, inner_depth)?;
3894 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3895 {
3896 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3897 }
3898 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3899 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3900 }
3901 }
3902
3903 next_offset += envelope_size;
3904 _next_ordinal_to_read += 1;
3905 if next_offset >= end_offset {
3906 return Ok(());
3907 }
3908
3909 while _next_ordinal_to_read < 11 {
3911 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3912 _next_ordinal_to_read += 1;
3913 next_offset += envelope_size;
3914 }
3915
3916 let next_out_of_line = decoder.next_out_of_line();
3917 let handles_before = decoder.remaining_handles();
3918 if let Some((inlined, num_bytes, num_handles)) =
3919 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3920 {
3921 let member_inline_size =
3922 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3923 if inlined != (member_inline_size <= 4) {
3924 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3925 }
3926 let inner_offset;
3927 let mut inner_depth = depth.clone();
3928 if inlined {
3929 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3930 inner_offset = next_offset;
3931 } else {
3932 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3933 inner_depth.increment()?;
3934 }
3935 let val_ref =
3936 self.charge_term_current_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
3937 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3938 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3939 {
3940 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3941 }
3942 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3943 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3944 }
3945 }
3946
3947 next_offset += envelope_size;
3948 _next_ordinal_to_read += 1;
3949 if next_offset >= end_offset {
3950 return Ok(());
3951 }
3952
3953 while _next_ordinal_to_read < 12 {
3955 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3956 _next_ordinal_to_read += 1;
3957 next_offset += envelope_size;
3958 }
3959
3960 let next_out_of_line = decoder.next_out_of_line();
3961 let handles_before = decoder.remaining_handles();
3962 if let Some((inlined, num_bytes, num_handles)) =
3963 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3964 {
3965 let member_inline_size =
3966 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3967 if inlined != (member_inline_size <= 4) {
3968 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3969 }
3970 let inner_offset;
3971 let mut inner_depth = depth.clone();
3972 if inlined {
3973 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3974 inner_offset = next_offset;
3975 } else {
3976 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3977 inner_depth.increment()?;
3978 }
3979 let val_ref =
3980 self.input_voltage_limit_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
3981 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3982 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3983 {
3984 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3985 }
3986 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3987 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3988 }
3989 }
3990
3991 next_offset += envelope_size;
3992 _next_ordinal_to_read += 1;
3993 if next_offset >= end_offset {
3994 return Ok(());
3995 }
3996
3997 while _next_ordinal_to_read < 13 {
3999 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4000 _next_ordinal_to_read += 1;
4001 next_offset += envelope_size;
4002 }
4003
4004 let next_out_of_line = decoder.next_out_of_line();
4005 let handles_before = decoder.remaining_handles();
4006 if let Some((inlined, num_bytes, num_handles)) =
4007 fidl::encoding::decode_envelope_header(decoder, next_offset)?
4008 {
4009 let member_inline_size =
4010 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4011 if inlined != (member_inline_size <= 4) {
4012 return Err(fidl::Error::InvalidInlineBitInEnvelope);
4013 }
4014 let inner_offset;
4015 let mut inner_depth = depth.clone();
4016 if inlined {
4017 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4018 inner_offset = next_offset;
4019 } else {
4020 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4021 inner_depth.increment()?;
4022 }
4023 let val_ref = self.top_off_duration.get_or_insert_with(|| fidl::new_empty!(i64, D));
4024 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
4025 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4026 {
4027 return Err(fidl::Error::InvalidNumBytesInEnvelope);
4028 }
4029 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4030 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4031 }
4032 }
4033
4034 next_offset += envelope_size;
4035
4036 while next_offset < end_offset {
4038 _next_ordinal_to_read += 1;
4039 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4040 next_offset += envelope_size;
4041 }
4042
4043 Ok(())
4044 }
4045 }
4046
4047 impl WatchOptions {
4048 #[inline(always)]
4049 fn max_ordinal_present(&self) -> u64 {
4050 if let Some(_) = self.wake_on_max_interval {
4051 return 4;
4052 }
4053 if let Some(_) = self.max_interval {
4054 return 3;
4055 }
4056 if let Some(_) = self.wake_on {
4057 return 2;
4058 }
4059 if let Some(_) = self.interest {
4060 return 1;
4061 }
4062 0
4063 }
4064 }
4065
4066 impl fidl::encoding::ValueTypeMarker for WatchOptions {
4067 type Borrowed<'a> = &'a Self;
4068 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4069 value
4070 }
4071 }
4072
4073 unsafe impl fidl::encoding::TypeMarker for WatchOptions {
4074 type Owned = Self;
4075
4076 #[inline(always)]
4077 fn inline_align(_context: fidl::encoding::Context) -> usize {
4078 8
4079 }
4080
4081 #[inline(always)]
4082 fn inline_size(_context: fidl::encoding::Context) -> usize {
4083 16
4084 }
4085 }
4086
4087 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WatchOptions, D>
4088 for &WatchOptions
4089 {
4090 unsafe fn encode(
4091 self,
4092 encoder: &mut fidl::encoding::Encoder<'_, D>,
4093 offset: usize,
4094 mut depth: fidl::encoding::Depth,
4095 ) -> fidl::Result<()> {
4096 encoder.debug_check_bounds::<WatchOptions>(offset);
4097 let max_ordinal: u64 = self.max_ordinal_present();
4099 encoder.write_num(max_ordinal, offset);
4100 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4101 if max_ordinal == 0 {
4103 return Ok(());
4104 }
4105 depth.increment()?;
4106 let envelope_size = 8;
4107 let bytes_len = max_ordinal as usize * envelope_size;
4108 #[allow(unused_variables)]
4109 let offset = encoder.out_of_line_offset(bytes_len);
4110 let mut _prev_end_offset: usize = 0;
4111 if 1 > max_ordinal {
4112 return Ok(());
4113 }
4114
4115 let cur_offset: usize = (1 - 1) * envelope_size;
4118
4119 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4121
4122 fidl::encoding::encode_in_envelope_optional::<Status, D>(
4127 self.interest.as_ref().map(<Status as fidl::encoding::ValueTypeMarker>::borrow),
4128 encoder,
4129 offset + cur_offset,
4130 depth,
4131 )?;
4132
4133 _prev_end_offset = cur_offset + envelope_size;
4134 if 2 > max_ordinal {
4135 return Ok(());
4136 }
4137
4138 let cur_offset: usize = (2 - 1) * envelope_size;
4141
4142 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4144
4145 fidl::encoding::encode_in_envelope_optional::<Status, D>(
4150 self.wake_on.as_ref().map(<Status as fidl::encoding::ValueTypeMarker>::borrow),
4151 encoder,
4152 offset + cur_offset,
4153 depth,
4154 )?;
4155
4156 _prev_end_offset = cur_offset + envelope_size;
4157 if 3 > max_ordinal {
4158 return Ok(());
4159 }
4160
4161 let cur_offset: usize = (3 - 1) * envelope_size;
4164
4165 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4167
4168 fidl::encoding::encode_in_envelope_optional::<i64, D>(
4173 self.max_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
4174 encoder,
4175 offset + cur_offset,
4176 depth,
4177 )?;
4178
4179 _prev_end_offset = cur_offset + envelope_size;
4180 if 4 > max_ordinal {
4181 return Ok(());
4182 }
4183
4184 let cur_offset: usize = (4 - 1) * envelope_size;
4187
4188 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4190
4191 fidl::encoding::encode_in_envelope_optional::<bool, D>(
4196 self.wake_on_max_interval
4197 .as_ref()
4198 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4199 encoder,
4200 offset + cur_offset,
4201 depth,
4202 )?;
4203
4204 _prev_end_offset = cur_offset + envelope_size;
4205
4206 Ok(())
4207 }
4208 }
4209
4210 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WatchOptions {
4211 #[inline(always)]
4212 fn new_empty() -> Self {
4213 Self::default()
4214 }
4215
4216 unsafe fn decode(
4217 &mut self,
4218 decoder: &mut fidl::encoding::Decoder<'_, D>,
4219 offset: usize,
4220 mut depth: fidl::encoding::Depth,
4221 ) -> fidl::Result<()> {
4222 decoder.debug_check_bounds::<Self>(offset);
4223 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4224 None => return Err(fidl::Error::NotNullable),
4225 Some(len) => len,
4226 };
4227 if len == 0 {
4229 return Ok(());
4230 };
4231 depth.increment()?;
4232 let envelope_size = 8;
4233 let bytes_len = len * envelope_size;
4234 let offset = decoder.out_of_line_offset(bytes_len)?;
4235 let mut _next_ordinal_to_read = 0;
4237 let mut next_offset = offset;
4238 let end_offset = offset + bytes_len;
4239 _next_ordinal_to_read += 1;
4240 if next_offset >= end_offset {
4241 return Ok(());
4242 }
4243
4244 while _next_ordinal_to_read < 1 {
4246 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4247 _next_ordinal_to_read += 1;
4248 next_offset += envelope_size;
4249 }
4250
4251 let next_out_of_line = decoder.next_out_of_line();
4252 let handles_before = decoder.remaining_handles();
4253 if let Some((inlined, num_bytes, num_handles)) =
4254 fidl::encoding::decode_envelope_header(decoder, next_offset)?
4255 {
4256 let member_inline_size =
4257 <Status as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4258 if inlined != (member_inline_size <= 4) {
4259 return Err(fidl::Error::InvalidInlineBitInEnvelope);
4260 }
4261 let inner_offset;
4262 let mut inner_depth = depth.clone();
4263 if inlined {
4264 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4265 inner_offset = next_offset;
4266 } else {
4267 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4268 inner_depth.increment()?;
4269 }
4270 let val_ref = self.interest.get_or_insert_with(|| fidl::new_empty!(Status, D));
4271 fidl::decode!(Status, D, val_ref, decoder, inner_offset, inner_depth)?;
4272 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4273 {
4274 return Err(fidl::Error::InvalidNumBytesInEnvelope);
4275 }
4276 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4277 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4278 }
4279 }
4280
4281 next_offset += envelope_size;
4282 _next_ordinal_to_read += 1;
4283 if next_offset >= end_offset {
4284 return Ok(());
4285 }
4286
4287 while _next_ordinal_to_read < 2 {
4289 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4290 _next_ordinal_to_read += 1;
4291 next_offset += envelope_size;
4292 }
4293
4294 let next_out_of_line = decoder.next_out_of_line();
4295 let handles_before = decoder.remaining_handles();
4296 if let Some((inlined, num_bytes, num_handles)) =
4297 fidl::encoding::decode_envelope_header(decoder, next_offset)?
4298 {
4299 let member_inline_size =
4300 <Status as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4301 if inlined != (member_inline_size <= 4) {
4302 return Err(fidl::Error::InvalidInlineBitInEnvelope);
4303 }
4304 let inner_offset;
4305 let mut inner_depth = depth.clone();
4306 if inlined {
4307 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4308 inner_offset = next_offset;
4309 } else {
4310 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4311 inner_depth.increment()?;
4312 }
4313 let val_ref = self.wake_on.get_or_insert_with(|| fidl::new_empty!(Status, D));
4314 fidl::decode!(Status, D, val_ref, decoder, inner_offset, inner_depth)?;
4315 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4316 {
4317 return Err(fidl::Error::InvalidNumBytesInEnvelope);
4318 }
4319 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4320 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4321 }
4322 }
4323
4324 next_offset += envelope_size;
4325 _next_ordinal_to_read += 1;
4326 if next_offset >= end_offset {
4327 return Ok(());
4328 }
4329
4330 while _next_ordinal_to_read < 3 {
4332 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4333 _next_ordinal_to_read += 1;
4334 next_offset += envelope_size;
4335 }
4336
4337 let next_out_of_line = decoder.next_out_of_line();
4338 let handles_before = decoder.remaining_handles();
4339 if let Some((inlined, num_bytes, num_handles)) =
4340 fidl::encoding::decode_envelope_header(decoder, next_offset)?
4341 {
4342 let member_inline_size =
4343 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4344 if inlined != (member_inline_size <= 4) {
4345 return Err(fidl::Error::InvalidInlineBitInEnvelope);
4346 }
4347 let inner_offset;
4348 let mut inner_depth = depth.clone();
4349 if inlined {
4350 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4351 inner_offset = next_offset;
4352 } else {
4353 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4354 inner_depth.increment()?;
4355 }
4356 let val_ref = self.max_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
4357 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
4358 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4359 {
4360 return Err(fidl::Error::InvalidNumBytesInEnvelope);
4361 }
4362 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4363 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4364 }
4365 }
4366
4367 next_offset += envelope_size;
4368 _next_ordinal_to_read += 1;
4369 if next_offset >= end_offset {
4370 return Ok(());
4371 }
4372
4373 while _next_ordinal_to_read < 4 {
4375 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4376 _next_ordinal_to_read += 1;
4377 next_offset += envelope_size;
4378 }
4379
4380 let next_out_of_line = decoder.next_out_of_line();
4381 let handles_before = decoder.remaining_handles();
4382 if let Some((inlined, num_bytes, num_handles)) =
4383 fidl::encoding::decode_envelope_header(decoder, next_offset)?
4384 {
4385 let member_inline_size =
4386 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4387 if inlined != (member_inline_size <= 4) {
4388 return Err(fidl::Error::InvalidInlineBitInEnvelope);
4389 }
4390 let inner_offset;
4391 let mut inner_depth = depth.clone();
4392 if inlined {
4393 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4394 inner_offset = next_offset;
4395 } else {
4396 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4397 inner_depth.increment()?;
4398 }
4399 let val_ref =
4400 self.wake_on_max_interval.get_or_insert_with(|| fidl::new_empty!(bool, D));
4401 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4402 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4403 {
4404 return Err(fidl::Error::InvalidNumBytesInEnvelope);
4405 }
4406 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4407 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4408 }
4409 }
4410
4411 next_offset += envelope_size;
4412
4413 while next_offset < end_offset {
4415 _next_ordinal_to_read += 1;
4416 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4417 next_offset += envelope_size;
4418 }
4419
4420 Ok(())
4421 }
4422 }
4423}