Skip to main content

fidl_fuchsia_hardware_vreg__common/
fidl_fuchsia_hardware_vreg__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11#[derive(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/// Pattern that matches an unknown `RegulatorMode` member.
22#[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    /// Voltage regulator name. This will be set as fuchsia.regulator.NAME property on the child
100    /// device to which regulator consumers can bind to.
101    pub name: Option<String>,
102    /// Minimum voltage of voltage regulator in microvolts.
103    pub min_voltage_uv: Option<u32>,
104    /// Size of a voltage step in microvolts.
105    pub voltage_step_uv: Option<u32>,
106    /// Number of voltage steps. For example, voltage regulator with voltage range 400 uV- 1000 uV
107    /// inclusive and step size 20 uV. Total number of steps is (1000 uV - 400 uV) / 20 uV + 1 = 31
108    /// steps.
109    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                // Copy the object into the buffer.
252                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                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
256                // done second because the memcpy will write garbage to these bytes.
257            }
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            // Zero out padding regions. There's no need to apply masks
273            // because the unmasked parts will be overwritten by fields.
274            // Write the fields.
275            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            // Verify that padding bytes are zero.
298            // Copy from the buffer into the object.
299            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                // Copy the object into the buffer.
350                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                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
354                // done second because the memcpy will write garbage to these bytes.
355            }
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            // Zero out padding regions. There's no need to apply masks
375            // because the unmasked parts will be overwritten by fields.
376            // Write the fields.
377            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            // Verify that padding bytes are zero.
406            // Copy from the buffer into the object.
407            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                // Copy the object into the buffer.
457                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                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
461                // done second because the memcpy will write garbage to these bytes.
462            }
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            // Zero out padding regions. There's no need to apply masks
478            // because the unmasked parts will be overwritten by fields.
479            // Write the fields.
480            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            // Verify that padding bytes are zero.
503            // Copy from the buffer into the object.
504            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            // Vector header
562            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            // Calling encoder.out_of_line_offset(0) is not allowed.
566            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
580            // are envelope_size bytes.
581            let cur_offset: usize = (1 - 1) * envelope_size;
582
583            // Zero reserved fields.
584            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
585
586            // Safety:
587            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
588            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
589            //   envelope_size bytes, there is always sufficient room.
590            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
605            // are envelope_size bytes.
606            let cur_offset: usize = (2 - 1) * envelope_size;
607
608            // Zero reserved fields.
609            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
610
611            // Safety:
612            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
613            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
614            //   envelope_size bytes, there is always sufficient room.
615            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
628            // are envelope_size bytes.
629            let cur_offset: usize = (3 - 1) * envelope_size;
630
631            // Zero reserved fields.
632            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
633
634            // Safety:
635            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
636            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
637            //   envelope_size bytes, there is always sufficient room.
638            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
651            // are envelope_size bytes.
652            let cur_offset: usize = (4 - 1) * envelope_size;
653
654            // Zero reserved fields.
655            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
656
657            // Safety:
658            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
659            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
660            //   envelope_size bytes, there is always sufficient room.
661            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            // Calling decoder.out_of_line_offset(0) is not allowed.
692            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            // Decode the envelope for each type.
700            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            // Decode unknown envelopes for gaps in ordinals.
709            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            // Decode unknown envelopes for gaps in ordinals.
763            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            // Decode unknown envelopes for gaps in ordinals.
806            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            // Decode unknown envelopes for gaps in ordinals.
849            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            // Decode the remaining unknown envelopes.
888            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            // Vector header
949            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            // Calling encoder.out_of_line_offset(0) is not allowed.
953            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
967            // are envelope_size bytes.
968            let cur_offset: usize = (1 - 1) * envelope_size;
969
970            // Zero reserved fields.
971            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
972
973            // Safety:
974            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
975            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
976            //   envelope_size bytes, there is always sufficient room.
977            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
990            // are envelope_size bytes.
991            let cur_offset: usize = (2 - 1) * envelope_size;
992
993            // Zero reserved fields.
994            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
995
996            // Safety:
997            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
998            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
999            //   envelope_size bytes, there is always sufficient room.
1000            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1013            // are envelope_size bytes.
1014            let cur_offset: usize = (3 - 1) * envelope_size;
1015
1016            // Zero reserved fields.
1017            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1018
1019            // Safety:
1020            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1021            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1022            //   envelope_size bytes, there is always sufficient room.
1023            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1036            // are envelope_size bytes.
1037            let cur_offset: usize = (4 - 1) * envelope_size;
1038
1039            // Zero reserved fields.
1040            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1041
1042            // Safety:
1043            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1044            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1045            //   envelope_size bytes, there is always sufficient room.
1046            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            // Calling decoder.out_of_line_offset(0) is not allowed.
1077            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            // Decode the envelope for each type.
1085            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            // Decode unknown envelopes for gaps in ordinals.
1094            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            // Decode unknown envelopes for gaps in ordinals.
1137            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            // Decode unknown envelopes for gaps in ordinals.
1180            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            // Decode unknown envelopes for gaps in ordinals.
1223            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            // Decode the remaining unknown envelopes.
1262            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}