Skip to main content

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