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