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, Debug, Default, PartialEq)]
14pub struct AdcChannel {
15    /// Index of channel.
16    pub idx: Option<u32>,
17    /// Channel name.
18    pub name: Option<String>,
19    pub id: Option<u32>,
20    #[doc(hidden)]
21    pub __source_breaking: fidl::marker::SourceBreaking,
22}
23
24impl fidl::Persistable for AdcChannel {}
25
26#[derive(Clone, Debug, Default, PartialEq)]
27pub struct Metadata {
28    /// ADC Channels to expose.
29    pub channels: Option<Vec<AdcChannel>>,
30    #[doc(hidden)]
31    pub __source_breaking: fidl::marker::SourceBreaking,
32}
33
34impl fidl::Persistable for Metadata {}
35impl fidl::Serializable for Metadata {
36    const SERIALIZABLE_NAME: &'static str = "fuchsia.hardware.adcimpl.Metadata";
37}
38
39mod internal {
40    use super::*;
41
42    impl AdcChannel {
43        #[inline(always)]
44        fn max_ordinal_present(&self) -> u64 {
45            if let Some(_) = self.id {
46                return 3;
47            }
48            if let Some(_) = self.name {
49                return 2;
50            }
51            if let Some(_) = self.idx {
52                return 1;
53            }
54            0
55        }
56    }
57
58    impl fidl::encoding::ValueTypeMarker for AdcChannel {
59        type Borrowed<'a> = &'a Self;
60        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
61            value
62        }
63    }
64
65    unsafe impl fidl::encoding::TypeMarker for AdcChannel {
66        type Owned = Self;
67
68        #[inline(always)]
69        fn inline_align(_context: fidl::encoding::Context) -> usize {
70            8
71        }
72
73        #[inline(always)]
74        fn inline_size(_context: fidl::encoding::Context) -> usize {
75            16
76        }
77    }
78
79    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdcChannel, D>
80        for &AdcChannel
81    {
82        unsafe fn encode(
83            self,
84            encoder: &mut fidl::encoding::Encoder<'_, D>,
85            offset: usize,
86            mut depth: fidl::encoding::Depth,
87        ) -> fidl::Result<()> {
88            encoder.debug_check_bounds::<AdcChannel>(offset);
89            // Vector header
90            let max_ordinal: u64 = self.max_ordinal_present();
91            encoder.write_num(max_ordinal, offset);
92            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
93            // Calling encoder.out_of_line_offset(0) is not allowed.
94            if max_ordinal == 0 {
95                return Ok(());
96            }
97            depth.increment()?;
98            let envelope_size = 8;
99            let bytes_len = max_ordinal as usize * envelope_size;
100            #[allow(unused_variables)]
101            let offset = encoder.out_of_line_offset(bytes_len);
102            let mut _prev_end_offset: usize = 0;
103            if 1 > max_ordinal {
104                return Ok(());
105            }
106
107            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
108            // are envelope_size bytes.
109            let cur_offset: usize = (1 - 1) * envelope_size;
110
111            // Zero reserved fields.
112            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
113
114            // Safety:
115            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
116            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
117            //   envelope_size bytes, there is always sufficient room.
118            fidl::encoding::encode_in_envelope_optional::<u32, D>(
119                self.idx.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
120                encoder,
121                offset + cur_offset,
122                depth,
123            )?;
124
125            _prev_end_offset = cur_offset + envelope_size;
126            if 2 > max_ordinal {
127                return Ok(());
128            }
129
130            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
131            // are envelope_size bytes.
132            let cur_offset: usize = (2 - 1) * envelope_size;
133
134            // Zero reserved fields.
135            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
136
137            // Safety:
138            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
139            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
140            //   envelope_size bytes, there is always sufficient room.
141            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
142                self.name.as_ref().map(
143                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
144                ),
145                encoder,
146                offset + cur_offset,
147                depth,
148            )?;
149
150            _prev_end_offset = cur_offset + envelope_size;
151            if 3 > max_ordinal {
152                return Ok(());
153            }
154
155            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
156            // are envelope_size bytes.
157            let cur_offset: usize = (3 - 1) * envelope_size;
158
159            // Zero reserved fields.
160            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
161
162            // Safety:
163            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
164            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
165            //   envelope_size bytes, there is always sufficient room.
166            fidl::encoding::encode_in_envelope_optional::<u32, D>(
167                self.id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
168                encoder,
169                offset + cur_offset,
170                depth,
171            )?;
172
173            _prev_end_offset = cur_offset + envelope_size;
174
175            Ok(())
176        }
177    }
178
179    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdcChannel {
180        #[inline(always)]
181        fn new_empty() -> Self {
182            Self::default()
183        }
184
185        unsafe fn decode(
186            &mut self,
187            decoder: &mut fidl::encoding::Decoder<'_, D>,
188            offset: usize,
189            mut depth: fidl::encoding::Depth,
190        ) -> fidl::Result<()> {
191            decoder.debug_check_bounds::<Self>(offset);
192            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
193                None => return Err(fidl::Error::NotNullable),
194                Some(len) => len,
195            };
196            // Calling decoder.out_of_line_offset(0) is not allowed.
197            if len == 0 {
198                return Ok(());
199            };
200            depth.increment()?;
201            let envelope_size = 8;
202            let bytes_len = len * envelope_size;
203            let offset = decoder.out_of_line_offset(bytes_len)?;
204            // Decode the envelope for each type.
205            let mut _next_ordinal_to_read = 0;
206            let mut next_offset = offset;
207            let end_offset = offset + bytes_len;
208            _next_ordinal_to_read += 1;
209            if next_offset >= end_offset {
210                return Ok(());
211            }
212
213            // Decode unknown envelopes for gaps in ordinals.
214            while _next_ordinal_to_read < 1 {
215                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
216                _next_ordinal_to_read += 1;
217                next_offset += envelope_size;
218            }
219
220            let next_out_of_line = decoder.next_out_of_line();
221            let handles_before = decoder.remaining_handles();
222            if let Some((inlined, num_bytes, num_handles)) =
223                fidl::encoding::decode_envelope_header(decoder, next_offset)?
224            {
225                let member_inline_size =
226                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
227                if inlined != (member_inline_size <= 4) {
228                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
229                }
230                let inner_offset;
231                let mut inner_depth = depth.clone();
232                if inlined {
233                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
234                    inner_offset = next_offset;
235                } else {
236                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
237                    inner_depth.increment()?;
238                }
239                let val_ref = self.idx.get_or_insert_with(|| fidl::new_empty!(u32, D));
240                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
241                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
242                {
243                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
244                }
245                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
246                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
247                }
248            }
249
250            next_offset += envelope_size;
251            _next_ordinal_to_read += 1;
252            if next_offset >= end_offset {
253                return Ok(());
254            }
255
256            // Decode unknown envelopes for gaps in ordinals.
257            while _next_ordinal_to_read < 2 {
258                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
259                _next_ordinal_to_read += 1;
260                next_offset += envelope_size;
261            }
262
263            let next_out_of_line = decoder.next_out_of_line();
264            let handles_before = decoder.remaining_handles();
265            if let Some((inlined, num_bytes, num_handles)) =
266                fidl::encoding::decode_envelope_header(decoder, next_offset)?
267            {
268                let member_inline_size =
269                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
270                        decoder.context,
271                    );
272                if inlined != (member_inline_size <= 4) {
273                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
274                }
275                let inner_offset;
276                let mut inner_depth = depth.clone();
277                if inlined {
278                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
279                    inner_offset = next_offset;
280                } else {
281                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
282                    inner_depth.increment()?;
283                }
284                let val_ref = self
285                    .name
286                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
287                fidl::decode!(
288                    fidl::encoding::BoundedString<64>,
289                    D,
290                    val_ref,
291                    decoder,
292                    inner_offset,
293                    inner_depth
294                )?;
295                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
296                {
297                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
298                }
299                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
300                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
301                }
302            }
303
304            next_offset += envelope_size;
305            _next_ordinal_to_read += 1;
306            if next_offset >= end_offset {
307                return Ok(());
308            }
309
310            // Decode unknown envelopes for gaps in ordinals.
311            while _next_ordinal_to_read < 3 {
312                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
313                _next_ordinal_to_read += 1;
314                next_offset += envelope_size;
315            }
316
317            let next_out_of_line = decoder.next_out_of_line();
318            let handles_before = decoder.remaining_handles();
319            if let Some((inlined, num_bytes, num_handles)) =
320                fidl::encoding::decode_envelope_header(decoder, next_offset)?
321            {
322                let member_inline_size =
323                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
324                if inlined != (member_inline_size <= 4) {
325                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
326                }
327                let inner_offset;
328                let mut inner_depth = depth.clone();
329                if inlined {
330                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
331                    inner_offset = next_offset;
332                } else {
333                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
334                    inner_depth.increment()?;
335                }
336                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u32, D));
337                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
338                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
339                {
340                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
341                }
342                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
343                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
344                }
345            }
346
347            next_offset += envelope_size;
348
349            // Decode the remaining unknown envelopes.
350            while next_offset < end_offset {
351                _next_ordinal_to_read += 1;
352                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
353                next_offset += envelope_size;
354            }
355
356            Ok(())
357        }
358    }
359
360    impl Metadata {
361        #[inline(always)]
362        fn max_ordinal_present(&self) -> u64 {
363            if let Some(_) = self.channels {
364                return 1;
365            }
366            0
367        }
368    }
369
370    impl fidl::encoding::ValueTypeMarker for Metadata {
371        type Borrowed<'a> = &'a Self;
372        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
373            value
374        }
375    }
376
377    unsafe impl fidl::encoding::TypeMarker for Metadata {
378        type Owned = Self;
379
380        #[inline(always)]
381        fn inline_align(_context: fidl::encoding::Context) -> usize {
382            8
383        }
384
385        #[inline(always)]
386        fn inline_size(_context: fidl::encoding::Context) -> usize {
387            16
388        }
389    }
390
391    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Metadata, D> for &Metadata {
392        unsafe fn encode(
393            self,
394            encoder: &mut fidl::encoding::Encoder<'_, D>,
395            offset: usize,
396            mut depth: fidl::encoding::Depth,
397        ) -> fidl::Result<()> {
398            encoder.debug_check_bounds::<Metadata>(offset);
399            // Vector header
400            let max_ordinal: u64 = self.max_ordinal_present();
401            encoder.write_num(max_ordinal, offset);
402            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
403            // Calling encoder.out_of_line_offset(0) is not allowed.
404            if max_ordinal == 0 {
405                return Ok(());
406            }
407            depth.increment()?;
408            let envelope_size = 8;
409            let bytes_len = max_ordinal as usize * envelope_size;
410            #[allow(unused_variables)]
411            let offset = encoder.out_of_line_offset(bytes_len);
412            let mut _prev_end_offset: usize = 0;
413            if 1 > max_ordinal {
414                return Ok(());
415            }
416
417            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
418            // are envelope_size bytes.
419            let cur_offset: usize = (1 - 1) * envelope_size;
420
421            // Zero reserved fields.
422            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
423
424            // Safety:
425            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
426            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
427            //   envelope_size bytes, there is always sufficient room.
428            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<AdcChannel>, D>(
429            self.channels.as_ref().map(<fidl::encoding::UnboundedVector<AdcChannel> as fidl::encoding::ValueTypeMarker>::borrow),
430            encoder, offset + cur_offset, depth
431        )?;
432
433            _prev_end_offset = cur_offset + envelope_size;
434
435            Ok(())
436        }
437    }
438
439    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Metadata {
440        #[inline(always)]
441        fn new_empty() -> Self {
442            Self::default()
443        }
444
445        unsafe fn decode(
446            &mut self,
447            decoder: &mut fidl::encoding::Decoder<'_, D>,
448            offset: usize,
449            mut depth: fidl::encoding::Depth,
450        ) -> fidl::Result<()> {
451            decoder.debug_check_bounds::<Self>(offset);
452            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
453                None => return Err(fidl::Error::NotNullable),
454                Some(len) => len,
455            };
456            // Calling decoder.out_of_line_offset(0) is not allowed.
457            if len == 0 {
458                return Ok(());
459            };
460            depth.increment()?;
461            let envelope_size = 8;
462            let bytes_len = len * envelope_size;
463            let offset = decoder.out_of_line_offset(bytes_len)?;
464            // Decode the envelope for each type.
465            let mut _next_ordinal_to_read = 0;
466            let mut next_offset = offset;
467            let end_offset = offset + bytes_len;
468            _next_ordinal_to_read += 1;
469            if next_offset >= end_offset {
470                return Ok(());
471            }
472
473            // Decode unknown envelopes for gaps in ordinals.
474            while _next_ordinal_to_read < 1 {
475                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
476                _next_ordinal_to_read += 1;
477                next_offset += envelope_size;
478            }
479
480            let next_out_of_line = decoder.next_out_of_line();
481            let handles_before = decoder.remaining_handles();
482            if let Some((inlined, num_bytes, num_handles)) =
483                fidl::encoding::decode_envelope_header(decoder, next_offset)?
484            {
485                let member_inline_size = <fidl::encoding::UnboundedVector<AdcChannel> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
486                if inlined != (member_inline_size <= 4) {
487                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
488                }
489                let inner_offset;
490                let mut inner_depth = depth.clone();
491                if inlined {
492                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
493                    inner_offset = next_offset;
494                } else {
495                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
496                    inner_depth.increment()?;
497                }
498                let val_ref = self.channels.get_or_insert_with(|| {
499                    fidl::new_empty!(fidl::encoding::UnboundedVector<AdcChannel>, D)
500                });
501                fidl::decode!(
502                    fidl::encoding::UnboundedVector<AdcChannel>,
503                    D,
504                    val_ref,
505                    decoder,
506                    inner_offset,
507                    inner_depth
508                )?;
509                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
510                {
511                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
512                }
513                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
514                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
515                }
516            }
517
518            next_offset += envelope_size;
519
520            // Decode the remaining unknown envelopes.
521            while next_offset < end_offset {
522                _next_ordinal_to_read += 1;
523                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
524                next_offset += envelope_size;
525            }
526
527            Ok(())
528        }
529    }
530}