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)]
12pub enum RegulatorMode {
13 LowPower,
14 HighPerformance,
15 #[doc(hidden)]
16 __SourceBreaking {
17 unknown_ordinal: u32,
18 },
19}
20
21#[macro_export]
23macro_rules! RegulatorModeUnknown {
24 () => {
25 _
26 };
27}
28
29impl RegulatorMode {
30 #[inline]
31 pub fn from_primitive(prim: u32) -> Option<Self> {
32 match prim {
33 256 => Some(Self::LowPower),
34 512 => Some(Self::HighPerformance),
35 _ => None,
36 }
37 }
38
39 #[inline]
40 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
41 match prim {
42 256 => Self::LowPower,
43 512 => Self::HighPerformance,
44 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
45 }
46 }
47
48 #[inline]
49 pub fn unknown() -> Self {
50 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
51 }
52
53 #[inline]
54 pub const fn into_primitive(self) -> u32 {
55 match self {
56 Self::LowPower => 256,
57 Self::HighPerformance => 512,
58 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
59 }
60 }
61
62 #[inline]
63 pub fn is_unknown(&self) -> bool {
64 match self {
65 Self::__SourceBreaking { unknown_ordinal: _ } => true,
66 _ => false,
67 }
68 }
69}
70
71#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
72#[repr(C)]
73pub struct VregSetVoltageStepRequest {
74 pub step: u32,
75}
76
77impl fidl::Persistable for VregSetVoltageStepRequest {}
78
79#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
80#[repr(C)]
81pub struct VregGetRegulatorParamsResponse {
82 pub min_uv: u32,
83 pub step_size_uv: u32,
84 pub num_steps: u32,
85}
86
87impl fidl::Persistable for VregGetRegulatorParamsResponse {}
88
89#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
90#[repr(C)]
91pub struct VregGetVoltageStepResponse {
92 pub result: u32,
93}
94
95impl fidl::Persistable for VregGetVoltageStepResponse {}
96
97#[derive(Clone, Debug, Default, PartialEq)]
98pub struct VregMetadata {
99 pub name: Option<String>,
102 pub min_voltage_uv: Option<u32>,
104 pub voltage_step_uv: Option<u32>,
106 pub num_steps: Option<u32>,
110 #[doc(hidden)]
111 pub __source_breaking: fidl::marker::SourceBreaking,
112}
113
114impl fidl::Persistable for VregMetadata {}
115impl fidl::Serializable for VregMetadata {
116 const SERIALIZABLE_NAME: &'static str = "fuchsia.hardware.vreg.VregMetadata";
117}
118
119#[derive(Clone, Debug, Default, PartialEq)]
120pub struct VregSetStateRequest {
121 pub step: Option<u32>,
122 pub enable: Option<bool>,
123 pub current_ua: Option<u32>,
124 pub mode: Option<RegulatorMode>,
125 #[doc(hidden)]
126 pub __source_breaking: fidl::marker::SourceBreaking,
127}
128
129impl fidl::Persistable for VregSetStateRequest {}
130
131pub mod vreg_ordinals {
132 pub const SET_VOLTAGE_STEP: u64 = 0x89c04aa4d3929b9;
133 pub const GET_VOLTAGE_STEP: u64 = 0x136c9faa076b55e1;
134 pub const SET_STATE: u64 = 0x7fadd2556566a22e;
135 pub const ENABLE: u64 = 0xd2024213c6cde86;
136 pub const DISABLE: u64 = 0x61ba9b20b16637ad;
137 pub const GET_REGULATOR_PARAMS: u64 = 0x2336d00f8f794f8a;
138}
139
140mod internal {
141 use super::*;
142 unsafe impl fidl::encoding::TypeMarker for RegulatorMode {
143 type Owned = Self;
144
145 #[inline(always)]
146 fn inline_align(_context: fidl::encoding::Context) -> usize {
147 std::mem::align_of::<u32>()
148 }
149
150 #[inline(always)]
151 fn inline_size(_context: fidl::encoding::Context) -> usize {
152 std::mem::size_of::<u32>()
153 }
154
155 #[inline(always)]
156 fn encode_is_copy() -> bool {
157 false
158 }
159
160 #[inline(always)]
161 fn decode_is_copy() -> bool {
162 false
163 }
164 }
165
166 impl fidl::encoding::ValueTypeMarker for RegulatorMode {
167 type Borrowed<'a> = Self;
168 #[inline(always)]
169 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
170 *value
171 }
172 }
173
174 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for RegulatorMode {
175 #[inline]
176 unsafe fn encode(
177 self,
178 encoder: &mut fidl::encoding::Encoder<'_, D>,
179 offset: usize,
180 _depth: fidl::encoding::Depth,
181 ) -> fidl::Result<()> {
182 encoder.debug_check_bounds::<Self>(offset);
183 encoder.write_num(self.into_primitive(), offset);
184 Ok(())
185 }
186 }
187
188 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RegulatorMode {
189 #[inline(always)]
190 fn new_empty() -> Self {
191 Self::unknown()
192 }
193
194 #[inline]
195 unsafe fn decode(
196 &mut self,
197 decoder: &mut fidl::encoding::Decoder<'_, D>,
198 offset: usize,
199 _depth: fidl::encoding::Depth,
200 ) -> fidl::Result<()> {
201 decoder.debug_check_bounds::<Self>(offset);
202 let prim = decoder.read_num::<u32>(offset);
203
204 *self = Self::from_primitive_allow_unknown(prim);
205 Ok(())
206 }
207 }
208
209 impl fidl::encoding::ValueTypeMarker for VregSetVoltageStepRequest {
210 type Borrowed<'a> = &'a Self;
211 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
212 value
213 }
214 }
215
216 unsafe impl fidl::encoding::TypeMarker for VregSetVoltageStepRequest {
217 type Owned = Self;
218
219 #[inline(always)]
220 fn inline_align(_context: fidl::encoding::Context) -> usize {
221 4
222 }
223
224 #[inline(always)]
225 fn inline_size(_context: fidl::encoding::Context) -> usize {
226 4
227 }
228 #[inline(always)]
229 fn encode_is_copy() -> bool {
230 true
231 }
232
233 #[inline(always)]
234 fn decode_is_copy() -> bool {
235 true
236 }
237 }
238
239 unsafe impl<D: fidl::encoding::ResourceDialect>
240 fidl::encoding::Encode<VregSetVoltageStepRequest, D> for &VregSetVoltageStepRequest
241 {
242 #[inline]
243 unsafe fn encode(
244 self,
245 encoder: &mut fidl::encoding::Encoder<'_, D>,
246 offset: usize,
247 _depth: fidl::encoding::Depth,
248 ) -> fidl::Result<()> {
249 encoder.debug_check_bounds::<VregSetVoltageStepRequest>(offset);
250 unsafe {
251 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
253 (buf_ptr as *mut VregSetVoltageStepRequest)
254 .write_unaligned((self as *const VregSetVoltageStepRequest).read());
255 }
258 Ok(())
259 }
260 }
261 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
262 fidl::encoding::Encode<VregSetVoltageStepRequest, D> for (T0,)
263 {
264 #[inline]
265 unsafe fn encode(
266 self,
267 encoder: &mut fidl::encoding::Encoder<'_, D>,
268 offset: usize,
269 depth: fidl::encoding::Depth,
270 ) -> fidl::Result<()> {
271 encoder.debug_check_bounds::<VregSetVoltageStepRequest>(offset);
272 self.0.encode(encoder, offset + 0, depth)?;
276 Ok(())
277 }
278 }
279
280 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
281 for VregSetVoltageStepRequest
282 {
283 #[inline(always)]
284 fn new_empty() -> Self {
285 Self { step: fidl::new_empty!(u32, D) }
286 }
287
288 #[inline]
289 unsafe fn decode(
290 &mut self,
291 decoder: &mut fidl::encoding::Decoder<'_, D>,
292 offset: usize,
293 _depth: fidl::encoding::Depth,
294 ) -> fidl::Result<()> {
295 decoder.debug_check_bounds::<Self>(offset);
296 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
297 unsafe {
300 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
301 }
302 Ok(())
303 }
304 }
305
306 impl fidl::encoding::ValueTypeMarker for VregGetRegulatorParamsResponse {
307 type Borrowed<'a> = &'a Self;
308 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
309 value
310 }
311 }
312
313 unsafe impl fidl::encoding::TypeMarker for VregGetRegulatorParamsResponse {
314 type Owned = Self;
315
316 #[inline(always)]
317 fn inline_align(_context: fidl::encoding::Context) -> usize {
318 4
319 }
320
321 #[inline(always)]
322 fn inline_size(_context: fidl::encoding::Context) -> usize {
323 12
324 }
325 #[inline(always)]
326 fn encode_is_copy() -> bool {
327 true
328 }
329
330 #[inline(always)]
331 fn decode_is_copy() -> bool {
332 true
333 }
334 }
335
336 unsafe impl<D: fidl::encoding::ResourceDialect>
337 fidl::encoding::Encode<VregGetRegulatorParamsResponse, D>
338 for &VregGetRegulatorParamsResponse
339 {
340 #[inline]
341 unsafe fn encode(
342 self,
343 encoder: &mut fidl::encoding::Encoder<'_, D>,
344 offset: usize,
345 _depth: fidl::encoding::Depth,
346 ) -> fidl::Result<()> {
347 encoder.debug_check_bounds::<VregGetRegulatorParamsResponse>(offset);
348 unsafe {
349 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
351 (buf_ptr as *mut VregGetRegulatorParamsResponse)
352 .write_unaligned((self as *const VregGetRegulatorParamsResponse).read());
353 }
356 Ok(())
357 }
358 }
359 unsafe impl<
360 D: fidl::encoding::ResourceDialect,
361 T0: fidl::encoding::Encode<u32, D>,
362 T1: fidl::encoding::Encode<u32, D>,
363 T2: fidl::encoding::Encode<u32, D>,
364 > fidl::encoding::Encode<VregGetRegulatorParamsResponse, D> for (T0, T1, T2)
365 {
366 #[inline]
367 unsafe fn encode(
368 self,
369 encoder: &mut fidl::encoding::Encoder<'_, D>,
370 offset: usize,
371 depth: fidl::encoding::Depth,
372 ) -> fidl::Result<()> {
373 encoder.debug_check_bounds::<VregGetRegulatorParamsResponse>(offset);
374 self.0.encode(encoder, offset + 0, depth)?;
378 self.1.encode(encoder, offset + 4, depth)?;
379 self.2.encode(encoder, offset + 8, depth)?;
380 Ok(())
381 }
382 }
383
384 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
385 for VregGetRegulatorParamsResponse
386 {
387 #[inline(always)]
388 fn new_empty() -> Self {
389 Self {
390 min_uv: fidl::new_empty!(u32, D),
391 step_size_uv: fidl::new_empty!(u32, D),
392 num_steps: fidl::new_empty!(u32, D),
393 }
394 }
395
396 #[inline]
397 unsafe fn decode(
398 &mut self,
399 decoder: &mut fidl::encoding::Decoder<'_, D>,
400 offset: usize,
401 _depth: fidl::encoding::Depth,
402 ) -> fidl::Result<()> {
403 decoder.debug_check_bounds::<Self>(offset);
404 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
405 unsafe {
408 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
409 }
410 Ok(())
411 }
412 }
413
414 impl fidl::encoding::ValueTypeMarker for VregGetVoltageStepResponse {
415 type Borrowed<'a> = &'a Self;
416 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
417 value
418 }
419 }
420
421 unsafe impl fidl::encoding::TypeMarker for VregGetVoltageStepResponse {
422 type Owned = Self;
423
424 #[inline(always)]
425 fn inline_align(_context: fidl::encoding::Context) -> usize {
426 4
427 }
428
429 #[inline(always)]
430 fn inline_size(_context: fidl::encoding::Context) -> usize {
431 4
432 }
433 #[inline(always)]
434 fn encode_is_copy() -> bool {
435 true
436 }
437
438 #[inline(always)]
439 fn decode_is_copy() -> bool {
440 true
441 }
442 }
443
444 unsafe impl<D: fidl::encoding::ResourceDialect>
445 fidl::encoding::Encode<VregGetVoltageStepResponse, D> for &VregGetVoltageStepResponse
446 {
447 #[inline]
448 unsafe fn encode(
449 self,
450 encoder: &mut fidl::encoding::Encoder<'_, D>,
451 offset: usize,
452 _depth: fidl::encoding::Depth,
453 ) -> fidl::Result<()> {
454 encoder.debug_check_bounds::<VregGetVoltageStepResponse>(offset);
455 unsafe {
456 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
458 (buf_ptr as *mut VregGetVoltageStepResponse)
459 .write_unaligned((self as *const VregGetVoltageStepResponse).read());
460 }
463 Ok(())
464 }
465 }
466 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
467 fidl::encoding::Encode<VregGetVoltageStepResponse, D> for (T0,)
468 {
469 #[inline]
470 unsafe fn encode(
471 self,
472 encoder: &mut fidl::encoding::Encoder<'_, D>,
473 offset: usize,
474 depth: fidl::encoding::Depth,
475 ) -> fidl::Result<()> {
476 encoder.debug_check_bounds::<VregGetVoltageStepResponse>(offset);
477 self.0.encode(encoder, offset + 0, depth)?;
481 Ok(())
482 }
483 }
484
485 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
486 for VregGetVoltageStepResponse
487 {
488 #[inline(always)]
489 fn new_empty() -> Self {
490 Self { result: fidl::new_empty!(u32, D) }
491 }
492
493 #[inline]
494 unsafe fn decode(
495 &mut self,
496 decoder: &mut fidl::encoding::Decoder<'_, D>,
497 offset: usize,
498 _depth: fidl::encoding::Depth,
499 ) -> fidl::Result<()> {
500 decoder.debug_check_bounds::<Self>(offset);
501 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
502 unsafe {
505 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
506 }
507 Ok(())
508 }
509 }
510
511 impl VregMetadata {
512 #[inline(always)]
513 fn max_ordinal_present(&self) -> u64 {
514 if let Some(_) = self.num_steps {
515 return 4;
516 }
517 if let Some(_) = self.voltage_step_uv {
518 return 3;
519 }
520 if let Some(_) = self.min_voltage_uv {
521 return 2;
522 }
523 if let Some(_) = self.name {
524 return 1;
525 }
526 0
527 }
528 }
529
530 impl fidl::encoding::ValueTypeMarker for VregMetadata {
531 type Borrowed<'a> = &'a Self;
532 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
533 value
534 }
535 }
536
537 unsafe impl fidl::encoding::TypeMarker for VregMetadata {
538 type Owned = Self;
539
540 #[inline(always)]
541 fn inline_align(_context: fidl::encoding::Context) -> usize {
542 8
543 }
544
545 #[inline(always)]
546 fn inline_size(_context: fidl::encoding::Context) -> usize {
547 16
548 }
549 }
550
551 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VregMetadata, D>
552 for &VregMetadata
553 {
554 unsafe fn encode(
555 self,
556 encoder: &mut fidl::encoding::Encoder<'_, D>,
557 offset: usize,
558 mut depth: fidl::encoding::Depth,
559 ) -> fidl::Result<()> {
560 encoder.debug_check_bounds::<VregMetadata>(offset);
561 let max_ordinal: u64 = self.max_ordinal_present();
563 encoder.write_num(max_ordinal, offset);
564 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
565 if max_ordinal == 0 {
567 return Ok(());
568 }
569 depth.increment()?;
570 let envelope_size = 8;
571 let bytes_len = max_ordinal as usize * envelope_size;
572 #[allow(unused_variables)]
573 let offset = encoder.out_of_line_offset(bytes_len);
574 let mut _prev_end_offset: usize = 0;
575 if 1 > max_ordinal {
576 return Ok(());
577 }
578
579 let cur_offset: usize = (1 - 1) * envelope_size;
582
583 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
585
586 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
591 self.name.as_ref().map(
592 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
593 ),
594 encoder,
595 offset + cur_offset,
596 depth,
597 )?;
598
599 _prev_end_offset = cur_offset + envelope_size;
600 if 2 > max_ordinal {
601 return Ok(());
602 }
603
604 let cur_offset: usize = (2 - 1) * envelope_size;
607
608 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
610
611 fidl::encoding::encode_in_envelope_optional::<u32, D>(
616 self.min_voltage_uv.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
617 encoder,
618 offset + cur_offset,
619 depth,
620 )?;
621
622 _prev_end_offset = cur_offset + envelope_size;
623 if 3 > max_ordinal {
624 return Ok(());
625 }
626
627 let cur_offset: usize = (3 - 1) * envelope_size;
630
631 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
633
634 fidl::encoding::encode_in_envelope_optional::<u32, D>(
639 self.voltage_step_uv.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
640 encoder,
641 offset + cur_offset,
642 depth,
643 )?;
644
645 _prev_end_offset = cur_offset + envelope_size;
646 if 4 > max_ordinal {
647 return Ok(());
648 }
649
650 let cur_offset: usize = (4 - 1) * envelope_size;
653
654 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
656
657 fidl::encoding::encode_in_envelope_optional::<u32, D>(
662 self.num_steps.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
663 encoder,
664 offset + cur_offset,
665 depth,
666 )?;
667
668 _prev_end_offset = cur_offset + envelope_size;
669
670 Ok(())
671 }
672 }
673
674 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VregMetadata {
675 #[inline(always)]
676 fn new_empty() -> Self {
677 Self::default()
678 }
679
680 unsafe fn decode(
681 &mut self,
682 decoder: &mut fidl::encoding::Decoder<'_, D>,
683 offset: usize,
684 mut depth: fidl::encoding::Depth,
685 ) -> fidl::Result<()> {
686 decoder.debug_check_bounds::<Self>(offset);
687 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
688 None => return Err(fidl::Error::NotNullable),
689 Some(len) => len,
690 };
691 if len == 0 {
693 return Ok(());
694 };
695 depth.increment()?;
696 let envelope_size = 8;
697 let bytes_len = len * envelope_size;
698 let offset = decoder.out_of_line_offset(bytes_len)?;
699 let mut _next_ordinal_to_read = 0;
701 let mut next_offset = offset;
702 let end_offset = offset + bytes_len;
703 _next_ordinal_to_read += 1;
704 if next_offset >= end_offset {
705 return Ok(());
706 }
707
708 while _next_ordinal_to_read < 1 {
710 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
711 _next_ordinal_to_read += 1;
712 next_offset += envelope_size;
713 }
714
715 let next_out_of_line = decoder.next_out_of_line();
716 let handles_before = decoder.remaining_handles();
717 if let Some((inlined, num_bytes, num_handles)) =
718 fidl::encoding::decode_envelope_header(decoder, next_offset)?
719 {
720 let member_inline_size =
721 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
722 decoder.context,
723 );
724 if inlined != (member_inline_size <= 4) {
725 return Err(fidl::Error::InvalidInlineBitInEnvelope);
726 }
727 let inner_offset;
728 let mut inner_depth = depth.clone();
729 if inlined {
730 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
731 inner_offset = next_offset;
732 } else {
733 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
734 inner_depth.increment()?;
735 }
736 let val_ref = self
737 .name
738 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
739 fidl::decode!(
740 fidl::encoding::UnboundedString,
741 D,
742 val_ref,
743 decoder,
744 inner_offset,
745 inner_depth
746 )?;
747 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
748 {
749 return Err(fidl::Error::InvalidNumBytesInEnvelope);
750 }
751 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
752 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
753 }
754 }
755
756 next_offset += envelope_size;
757 _next_ordinal_to_read += 1;
758 if next_offset >= end_offset {
759 return Ok(());
760 }
761
762 while _next_ordinal_to_read < 2 {
764 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
765 _next_ordinal_to_read += 1;
766 next_offset += envelope_size;
767 }
768
769 let next_out_of_line = decoder.next_out_of_line();
770 let handles_before = decoder.remaining_handles();
771 if let Some((inlined, num_bytes, num_handles)) =
772 fidl::encoding::decode_envelope_header(decoder, next_offset)?
773 {
774 let member_inline_size =
775 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
776 if inlined != (member_inline_size <= 4) {
777 return Err(fidl::Error::InvalidInlineBitInEnvelope);
778 }
779 let inner_offset;
780 let mut inner_depth = depth.clone();
781 if inlined {
782 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
783 inner_offset = next_offset;
784 } else {
785 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
786 inner_depth.increment()?;
787 }
788 let val_ref = self.min_voltage_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
789 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
790 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
791 {
792 return Err(fidl::Error::InvalidNumBytesInEnvelope);
793 }
794 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
795 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
796 }
797 }
798
799 next_offset += envelope_size;
800 _next_ordinal_to_read += 1;
801 if next_offset >= end_offset {
802 return Ok(());
803 }
804
805 while _next_ordinal_to_read < 3 {
807 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
808 _next_ordinal_to_read += 1;
809 next_offset += envelope_size;
810 }
811
812 let next_out_of_line = decoder.next_out_of_line();
813 let handles_before = decoder.remaining_handles();
814 if let Some((inlined, num_bytes, num_handles)) =
815 fidl::encoding::decode_envelope_header(decoder, next_offset)?
816 {
817 let member_inline_size =
818 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
819 if inlined != (member_inline_size <= 4) {
820 return Err(fidl::Error::InvalidInlineBitInEnvelope);
821 }
822 let inner_offset;
823 let mut inner_depth = depth.clone();
824 if inlined {
825 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
826 inner_offset = next_offset;
827 } else {
828 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
829 inner_depth.increment()?;
830 }
831 let val_ref = self.voltage_step_uv.get_or_insert_with(|| fidl::new_empty!(u32, D));
832 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
833 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
834 {
835 return Err(fidl::Error::InvalidNumBytesInEnvelope);
836 }
837 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
838 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
839 }
840 }
841
842 next_offset += envelope_size;
843 _next_ordinal_to_read += 1;
844 if next_offset >= end_offset {
845 return Ok(());
846 }
847
848 while _next_ordinal_to_read < 4 {
850 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
851 _next_ordinal_to_read += 1;
852 next_offset += envelope_size;
853 }
854
855 let next_out_of_line = decoder.next_out_of_line();
856 let handles_before = decoder.remaining_handles();
857 if let Some((inlined, num_bytes, num_handles)) =
858 fidl::encoding::decode_envelope_header(decoder, next_offset)?
859 {
860 let member_inline_size =
861 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
862 if inlined != (member_inline_size <= 4) {
863 return Err(fidl::Error::InvalidInlineBitInEnvelope);
864 }
865 let inner_offset;
866 let mut inner_depth = depth.clone();
867 if inlined {
868 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
869 inner_offset = next_offset;
870 } else {
871 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
872 inner_depth.increment()?;
873 }
874 let val_ref = self.num_steps.get_or_insert_with(|| fidl::new_empty!(u32, D));
875 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
876 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
877 {
878 return Err(fidl::Error::InvalidNumBytesInEnvelope);
879 }
880 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
881 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
882 }
883 }
884
885 next_offset += envelope_size;
886
887 while next_offset < end_offset {
889 _next_ordinal_to_read += 1;
890 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
891 next_offset += envelope_size;
892 }
893
894 Ok(())
895 }
896 }
897
898 impl VregSetStateRequest {
899 #[inline(always)]
900 fn max_ordinal_present(&self) -> u64 {
901 if let Some(_) = self.mode {
902 return 4;
903 }
904 if let Some(_) = self.current_ua {
905 return 3;
906 }
907 if let Some(_) = self.enable {
908 return 2;
909 }
910 if let Some(_) = self.step {
911 return 1;
912 }
913 0
914 }
915 }
916
917 impl fidl::encoding::ValueTypeMarker for VregSetStateRequest {
918 type Borrowed<'a> = &'a Self;
919 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
920 value
921 }
922 }
923
924 unsafe impl fidl::encoding::TypeMarker for VregSetStateRequest {
925 type Owned = Self;
926
927 #[inline(always)]
928 fn inline_align(_context: fidl::encoding::Context) -> usize {
929 8
930 }
931
932 #[inline(always)]
933 fn inline_size(_context: fidl::encoding::Context) -> usize {
934 16
935 }
936 }
937
938 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VregSetStateRequest, D>
939 for &VregSetStateRequest
940 {
941 unsafe fn encode(
942 self,
943 encoder: &mut fidl::encoding::Encoder<'_, D>,
944 offset: usize,
945 mut depth: fidl::encoding::Depth,
946 ) -> fidl::Result<()> {
947 encoder.debug_check_bounds::<VregSetStateRequest>(offset);
948 let max_ordinal: u64 = self.max_ordinal_present();
950 encoder.write_num(max_ordinal, offset);
951 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
952 if max_ordinal == 0 {
954 return Ok(());
955 }
956 depth.increment()?;
957 let envelope_size = 8;
958 let bytes_len = max_ordinal as usize * envelope_size;
959 #[allow(unused_variables)]
960 let offset = encoder.out_of_line_offset(bytes_len);
961 let mut _prev_end_offset: usize = 0;
962 if 1 > max_ordinal {
963 return Ok(());
964 }
965
966 let cur_offset: usize = (1 - 1) * envelope_size;
969
970 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
972
973 fidl::encoding::encode_in_envelope_optional::<u32, D>(
978 self.step.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
979 encoder,
980 offset + cur_offset,
981 depth,
982 )?;
983
984 _prev_end_offset = cur_offset + envelope_size;
985 if 2 > max_ordinal {
986 return Ok(());
987 }
988
989 let cur_offset: usize = (2 - 1) * envelope_size;
992
993 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
995
996 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1001 self.enable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1002 encoder,
1003 offset + cur_offset,
1004 depth,
1005 )?;
1006
1007 _prev_end_offset = cur_offset + envelope_size;
1008 if 3 > max_ordinal {
1009 return Ok(());
1010 }
1011
1012 let cur_offset: usize = (3 - 1) * envelope_size;
1015
1016 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1018
1019 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1024 self.current_ua.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1025 encoder,
1026 offset + cur_offset,
1027 depth,
1028 )?;
1029
1030 _prev_end_offset = cur_offset + envelope_size;
1031 if 4 > max_ordinal {
1032 return Ok(());
1033 }
1034
1035 let cur_offset: usize = (4 - 1) * envelope_size;
1038
1039 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1041
1042 fidl::encoding::encode_in_envelope_optional::<RegulatorMode, D>(
1047 self.mode.as_ref().map(<RegulatorMode as fidl::encoding::ValueTypeMarker>::borrow),
1048 encoder,
1049 offset + cur_offset,
1050 depth,
1051 )?;
1052
1053 _prev_end_offset = cur_offset + envelope_size;
1054
1055 Ok(())
1056 }
1057 }
1058
1059 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VregSetStateRequest {
1060 #[inline(always)]
1061 fn new_empty() -> Self {
1062 Self::default()
1063 }
1064
1065 unsafe fn decode(
1066 &mut self,
1067 decoder: &mut fidl::encoding::Decoder<'_, D>,
1068 offset: usize,
1069 mut depth: fidl::encoding::Depth,
1070 ) -> fidl::Result<()> {
1071 decoder.debug_check_bounds::<Self>(offset);
1072 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1073 None => return Err(fidl::Error::NotNullable),
1074 Some(len) => len,
1075 };
1076 if len == 0 {
1078 return Ok(());
1079 };
1080 depth.increment()?;
1081 let envelope_size = 8;
1082 let bytes_len = len * envelope_size;
1083 let offset = decoder.out_of_line_offset(bytes_len)?;
1084 let mut _next_ordinal_to_read = 0;
1086 let mut next_offset = offset;
1087 let end_offset = offset + bytes_len;
1088 _next_ordinal_to_read += 1;
1089 if next_offset >= end_offset {
1090 return Ok(());
1091 }
1092
1093 while _next_ordinal_to_read < 1 {
1095 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1096 _next_ordinal_to_read += 1;
1097 next_offset += envelope_size;
1098 }
1099
1100 let next_out_of_line = decoder.next_out_of_line();
1101 let handles_before = decoder.remaining_handles();
1102 if let Some((inlined, num_bytes, num_handles)) =
1103 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1104 {
1105 let member_inline_size =
1106 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1107 if inlined != (member_inline_size <= 4) {
1108 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1109 }
1110 let inner_offset;
1111 let mut inner_depth = depth.clone();
1112 if inlined {
1113 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1114 inner_offset = next_offset;
1115 } else {
1116 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1117 inner_depth.increment()?;
1118 }
1119 let val_ref = self.step.get_or_insert_with(|| fidl::new_empty!(u32, D));
1120 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1121 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1122 {
1123 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1124 }
1125 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1126 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1127 }
1128 }
1129
1130 next_offset += envelope_size;
1131 _next_ordinal_to_read += 1;
1132 if next_offset >= end_offset {
1133 return Ok(());
1134 }
1135
1136 while _next_ordinal_to_read < 2 {
1138 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1139 _next_ordinal_to_read += 1;
1140 next_offset += envelope_size;
1141 }
1142
1143 let next_out_of_line = decoder.next_out_of_line();
1144 let handles_before = decoder.remaining_handles();
1145 if let Some((inlined, num_bytes, num_handles)) =
1146 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1147 {
1148 let member_inline_size =
1149 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1150 if inlined != (member_inline_size <= 4) {
1151 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1152 }
1153 let inner_offset;
1154 let mut inner_depth = depth.clone();
1155 if inlined {
1156 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1157 inner_offset = next_offset;
1158 } else {
1159 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1160 inner_depth.increment()?;
1161 }
1162 let val_ref = self.enable.get_or_insert_with(|| fidl::new_empty!(bool, D));
1163 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1164 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1165 {
1166 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1167 }
1168 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1169 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1170 }
1171 }
1172
1173 next_offset += envelope_size;
1174 _next_ordinal_to_read += 1;
1175 if next_offset >= end_offset {
1176 return Ok(());
1177 }
1178
1179 while _next_ordinal_to_read < 3 {
1181 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1182 _next_ordinal_to_read += 1;
1183 next_offset += envelope_size;
1184 }
1185
1186 let next_out_of_line = decoder.next_out_of_line();
1187 let handles_before = decoder.remaining_handles();
1188 if let Some((inlined, num_bytes, num_handles)) =
1189 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1190 {
1191 let member_inline_size =
1192 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1193 if inlined != (member_inline_size <= 4) {
1194 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1195 }
1196 let inner_offset;
1197 let mut inner_depth = depth.clone();
1198 if inlined {
1199 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1200 inner_offset = next_offset;
1201 } else {
1202 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1203 inner_depth.increment()?;
1204 }
1205 let val_ref = self.current_ua.get_or_insert_with(|| fidl::new_empty!(u32, D));
1206 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1207 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1208 {
1209 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1210 }
1211 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1212 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1213 }
1214 }
1215
1216 next_offset += envelope_size;
1217 _next_ordinal_to_read += 1;
1218 if next_offset >= end_offset {
1219 return Ok(());
1220 }
1221
1222 while _next_ordinal_to_read < 4 {
1224 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1225 _next_ordinal_to_read += 1;
1226 next_offset += envelope_size;
1227 }
1228
1229 let next_out_of_line = decoder.next_out_of_line();
1230 let handles_before = decoder.remaining_handles();
1231 if let Some((inlined, num_bytes, num_handles)) =
1232 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1233 {
1234 let member_inline_size =
1235 <RegulatorMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1236 if inlined != (member_inline_size <= 4) {
1237 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1238 }
1239 let inner_offset;
1240 let mut inner_depth = depth.clone();
1241 if inlined {
1242 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1243 inner_offset = next_offset;
1244 } else {
1245 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1246 inner_depth.increment()?;
1247 }
1248 let val_ref = self.mode.get_or_insert_with(|| fidl::new_empty!(RegulatorMode, D));
1249 fidl::decode!(RegulatorMode, D, val_ref, decoder, inner_offset, inner_depth)?;
1250 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1251 {
1252 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1253 }
1254 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1255 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1256 }
1257 }
1258
1259 next_offset += envelope_size;
1260
1261 while next_offset < end_offset {
1263 _next_ordinal_to_read += 1;
1264 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1265 next_offset += envelope_size;
1266 }
1267
1268 Ok(())
1269 }
1270 }
1271}