Skip to main content

fidl_fuchsia_board_dml_config_common/
fidl_fuchsia_board_dml_config_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(Clone, Debug, Default, PartialEq)]
12pub struct AggregateEntry {
13    pub provider: Option<String>,
14    pub service: Option<String>,
15    pub resources: Option<Vec<ResourceEntry>>,
16    #[doc(hidden)]
17    pub __source_breaking: fidl::marker::SourceBreaking,
18}
19
20impl fidl::Persistable for AggregateEntry {}
21
22#[derive(Clone, Debug, Default, PartialEq)]
23pub struct BoardConfig {
24    pub devices: Option<Vec<Device>>,
25    pub aggregates: Option<Vec<AggregateEntry>>,
26    #[doc(hidden)]
27    pub __source_breaking: fidl::marker::SourceBreaking,
28}
29
30impl fidl::Persistable for BoardConfig {}
31
32#[derive(Clone, Debug, Default, PartialEq)]
33pub struct Device {
34    pub name: Option<String>,
35    pub id: Option<u32>,
36    pub url: Option<String>,
37    pub compatible: Option<String>,
38    pub metadata: Option<Vec<StaticMetadata>>,
39    #[doc(hidden)]
40    pub __source_breaking: fidl::marker::SourceBreaking,
41}
42
43impl fidl::Persistable for Device {}
44
45#[derive(Clone, Debug, Default, PartialEq)]
46pub struct ResourceEntry {
47    pub node: Option<String>,
48    pub constraint: Option<fidl_fuchsia_driver_metadata_common::Dictionary>,
49    pub name: Option<String>,
50    #[doc(hidden)]
51    pub __source_breaking: fidl::marker::SourceBreaking,
52}
53
54impl fidl::Persistable for ResourceEntry {}
55
56/// Metadata that is statically defined in the board configuration and passed
57/// to the device.
58#[derive(Clone, Debug, Default, PartialEq)]
59pub struct StaticMetadata {
60    pub id: Option<String>,
61    pub data: Option<Vec<u8>>,
62    #[doc(hidden)]
63    pub __source_breaking: fidl::marker::SourceBreaking,
64}
65
66impl fidl::Persistable for StaticMetadata {}
67
68mod internal {
69    use super::*;
70
71    impl AggregateEntry {
72        #[inline(always)]
73        fn max_ordinal_present(&self) -> u64 {
74            if let Some(_) = self.resources {
75                return 3;
76            }
77            if let Some(_) = self.service {
78                return 2;
79            }
80            if let Some(_) = self.provider {
81                return 1;
82            }
83            0
84        }
85    }
86
87    impl fidl::encoding::ValueTypeMarker for AggregateEntry {
88        type Borrowed<'a> = &'a Self;
89        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
90            value
91        }
92    }
93
94    unsafe impl fidl::encoding::TypeMarker for AggregateEntry {
95        type Owned = Self;
96
97        #[inline(always)]
98        fn inline_align(_context: fidl::encoding::Context) -> usize {
99            8
100        }
101
102        #[inline(always)]
103        fn inline_size(_context: fidl::encoding::Context) -> usize {
104            16
105        }
106    }
107
108    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AggregateEntry, D>
109        for &AggregateEntry
110    {
111        unsafe fn encode(
112            self,
113            encoder: &mut fidl::encoding::Encoder<'_, D>,
114            offset: usize,
115            mut depth: fidl::encoding::Depth,
116        ) -> fidl::Result<()> {
117            encoder.debug_check_bounds::<AggregateEntry>(offset);
118            // Vector header
119            let max_ordinal: u64 = self.max_ordinal_present();
120            encoder.write_num(max_ordinal, offset);
121            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
122            // Calling encoder.out_of_line_offset(0) is not allowed.
123            if max_ordinal == 0 {
124                return Ok(());
125            }
126            depth.increment()?;
127            let envelope_size = 8;
128            let bytes_len = max_ordinal as usize * envelope_size;
129            #[allow(unused_variables)]
130            let offset = encoder.out_of_line_offset(bytes_len);
131            let mut _prev_end_offset: usize = 0;
132            if 1 > max_ordinal {
133                return Ok(());
134            }
135
136            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
137            // are envelope_size bytes.
138            let cur_offset: usize = (1 - 1) * envelope_size;
139
140            // Zero reserved fields.
141            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
142
143            // Safety:
144            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
145            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
146            //   envelope_size bytes, there is always sufficient room.
147            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
148                self.provider.as_ref().map(
149                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
150                ),
151                encoder,
152                offset + cur_offset,
153                depth,
154            )?;
155
156            _prev_end_offset = cur_offset + envelope_size;
157            if 2 > max_ordinal {
158                return Ok(());
159            }
160
161            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
162            // are envelope_size bytes.
163            let cur_offset: usize = (2 - 1) * envelope_size;
164
165            // Zero reserved fields.
166            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
167
168            // Safety:
169            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
170            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
171            //   envelope_size bytes, there is always sufficient room.
172            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
173                self.service.as_ref().map(
174                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
175                ),
176                encoder,
177                offset + cur_offset,
178                depth,
179            )?;
180
181            _prev_end_offset = cur_offset + envelope_size;
182            if 3 > max_ordinal {
183                return Ok(());
184            }
185
186            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
187            // are envelope_size bytes.
188            let cur_offset: usize = (3 - 1) * envelope_size;
189
190            // Zero reserved fields.
191            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
192
193            // Safety:
194            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
195            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
196            //   envelope_size bytes, there is always sufficient room.
197            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ResourceEntry>, D>(
198            self.resources.as_ref().map(<fidl::encoding::UnboundedVector<ResourceEntry> as fidl::encoding::ValueTypeMarker>::borrow),
199            encoder, offset + cur_offset, depth
200        )?;
201
202            _prev_end_offset = cur_offset + envelope_size;
203
204            Ok(())
205        }
206    }
207
208    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AggregateEntry {
209        #[inline(always)]
210        fn new_empty() -> Self {
211            Self::default()
212        }
213
214        unsafe fn decode(
215            &mut self,
216            decoder: &mut fidl::encoding::Decoder<'_, D>,
217            offset: usize,
218            mut depth: fidl::encoding::Depth,
219        ) -> fidl::Result<()> {
220            decoder.debug_check_bounds::<Self>(offset);
221            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
222                None => return Err(fidl::Error::NotNullable),
223                Some(len) => len,
224            };
225            // Calling decoder.out_of_line_offset(0) is not allowed.
226            if len == 0 {
227                return Ok(());
228            };
229            depth.increment()?;
230            let envelope_size = 8;
231            let bytes_len = len * envelope_size;
232            let offset = decoder.out_of_line_offset(bytes_len)?;
233            // Decode the envelope for each type.
234            let mut _next_ordinal_to_read = 0;
235            let mut next_offset = offset;
236            let end_offset = offset + bytes_len;
237            _next_ordinal_to_read += 1;
238            if next_offset >= end_offset {
239                return Ok(());
240            }
241
242            // Decode unknown envelopes for gaps in ordinals.
243            while _next_ordinal_to_read < 1 {
244                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
245                _next_ordinal_to_read += 1;
246                next_offset += envelope_size;
247            }
248
249            let next_out_of_line = decoder.next_out_of_line();
250            let handles_before = decoder.remaining_handles();
251            if let Some((inlined, num_bytes, num_handles)) =
252                fidl::encoding::decode_envelope_header(decoder, next_offset)?
253            {
254                let member_inline_size =
255                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
256                        decoder.context,
257                    );
258                if inlined != (member_inline_size <= 4) {
259                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
260                }
261                let inner_offset;
262                let mut inner_depth = depth.clone();
263                if inlined {
264                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
265                    inner_offset = next_offset;
266                } else {
267                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
268                    inner_depth.increment()?;
269                }
270                let val_ref = self
271                    .provider
272                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
273                fidl::decode!(
274                    fidl::encoding::UnboundedString,
275                    D,
276                    val_ref,
277                    decoder,
278                    inner_offset,
279                    inner_depth
280                )?;
281                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
282                {
283                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
284                }
285                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
286                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
287                }
288            }
289
290            next_offset += envelope_size;
291            _next_ordinal_to_read += 1;
292            if next_offset >= end_offset {
293                return Ok(());
294            }
295
296            // Decode unknown envelopes for gaps in ordinals.
297            while _next_ordinal_to_read < 2 {
298                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
299                _next_ordinal_to_read += 1;
300                next_offset += envelope_size;
301            }
302
303            let next_out_of_line = decoder.next_out_of_line();
304            let handles_before = decoder.remaining_handles();
305            if let Some((inlined, num_bytes, num_handles)) =
306                fidl::encoding::decode_envelope_header(decoder, next_offset)?
307            {
308                let member_inline_size =
309                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
310                        decoder.context,
311                    );
312                if inlined != (member_inline_size <= 4) {
313                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
314                }
315                let inner_offset;
316                let mut inner_depth = depth.clone();
317                if inlined {
318                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
319                    inner_offset = next_offset;
320                } else {
321                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
322                    inner_depth.increment()?;
323                }
324                let val_ref = self
325                    .service
326                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
327                fidl::decode!(
328                    fidl::encoding::UnboundedString,
329                    D,
330                    val_ref,
331                    decoder,
332                    inner_offset,
333                    inner_depth
334                )?;
335                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
336                {
337                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
338                }
339                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
340                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
341                }
342            }
343
344            next_offset += envelope_size;
345            _next_ordinal_to_read += 1;
346            if next_offset >= end_offset {
347                return Ok(());
348            }
349
350            // Decode unknown envelopes for gaps in ordinals.
351            while _next_ordinal_to_read < 3 {
352                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
353                _next_ordinal_to_read += 1;
354                next_offset += envelope_size;
355            }
356
357            let next_out_of_line = decoder.next_out_of_line();
358            let handles_before = decoder.remaining_handles();
359            if let Some((inlined, num_bytes, num_handles)) =
360                fidl::encoding::decode_envelope_header(decoder, next_offset)?
361            {
362                let member_inline_size = <fidl::encoding::UnboundedVector<ResourceEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
363                if inlined != (member_inline_size <= 4) {
364                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
365                }
366                let inner_offset;
367                let mut inner_depth = depth.clone();
368                if inlined {
369                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
370                    inner_offset = next_offset;
371                } else {
372                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
373                    inner_depth.increment()?;
374                }
375                let val_ref = self.resources.get_or_insert_with(|| {
376                    fidl::new_empty!(fidl::encoding::UnboundedVector<ResourceEntry>, D)
377                });
378                fidl::decode!(
379                    fidl::encoding::UnboundedVector<ResourceEntry>,
380                    D,
381                    val_ref,
382                    decoder,
383                    inner_offset,
384                    inner_depth
385                )?;
386                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
387                {
388                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
389                }
390                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
391                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
392                }
393            }
394
395            next_offset += envelope_size;
396
397            // Decode the remaining unknown envelopes.
398            while next_offset < end_offset {
399                _next_ordinal_to_read += 1;
400                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
401                next_offset += envelope_size;
402            }
403
404            Ok(())
405        }
406    }
407
408    impl BoardConfig {
409        #[inline(always)]
410        fn max_ordinal_present(&self) -> u64 {
411            if let Some(_) = self.aggregates {
412                return 2;
413            }
414            if let Some(_) = self.devices {
415                return 1;
416            }
417            0
418        }
419    }
420
421    impl fidl::encoding::ValueTypeMarker for BoardConfig {
422        type Borrowed<'a> = &'a Self;
423        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
424            value
425        }
426    }
427
428    unsafe impl fidl::encoding::TypeMarker for BoardConfig {
429        type Owned = Self;
430
431        #[inline(always)]
432        fn inline_align(_context: fidl::encoding::Context) -> usize {
433            8
434        }
435
436        #[inline(always)]
437        fn inline_size(_context: fidl::encoding::Context) -> usize {
438            16
439        }
440    }
441
442    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BoardConfig, D>
443        for &BoardConfig
444    {
445        unsafe fn encode(
446            self,
447            encoder: &mut fidl::encoding::Encoder<'_, D>,
448            offset: usize,
449            mut depth: fidl::encoding::Depth,
450        ) -> fidl::Result<()> {
451            encoder.debug_check_bounds::<BoardConfig>(offset);
452            // Vector header
453            let max_ordinal: u64 = self.max_ordinal_present();
454            encoder.write_num(max_ordinal, offset);
455            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
456            // Calling encoder.out_of_line_offset(0) is not allowed.
457            if max_ordinal == 0 {
458                return Ok(());
459            }
460            depth.increment()?;
461            let envelope_size = 8;
462            let bytes_len = max_ordinal as usize * envelope_size;
463            #[allow(unused_variables)]
464            let offset = encoder.out_of_line_offset(bytes_len);
465            let mut _prev_end_offset: usize = 0;
466            if 1 > max_ordinal {
467                return Ok(());
468            }
469
470            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
471            // are envelope_size bytes.
472            let cur_offset: usize = (1 - 1) * envelope_size;
473
474            // Zero reserved fields.
475            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
476
477            // Safety:
478            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
479            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
480            //   envelope_size bytes, there is always sufficient room.
481            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Device>, D>(
482            self.devices.as_ref().map(<fidl::encoding::UnboundedVector<Device> as fidl::encoding::ValueTypeMarker>::borrow),
483            encoder, offset + cur_offset, depth
484        )?;
485
486            _prev_end_offset = cur_offset + envelope_size;
487            if 2 > max_ordinal {
488                return Ok(());
489            }
490
491            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
492            // are envelope_size bytes.
493            let cur_offset: usize = (2 - 1) * envelope_size;
494
495            // Zero reserved fields.
496            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
497
498            // Safety:
499            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
500            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
501            //   envelope_size bytes, there is always sufficient room.
502            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<AggregateEntry>, D>(
503            self.aggregates.as_ref().map(<fidl::encoding::UnboundedVector<AggregateEntry> as fidl::encoding::ValueTypeMarker>::borrow),
504            encoder, offset + cur_offset, depth
505        )?;
506
507            _prev_end_offset = cur_offset + envelope_size;
508
509            Ok(())
510        }
511    }
512
513    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BoardConfig {
514        #[inline(always)]
515        fn new_empty() -> Self {
516            Self::default()
517        }
518
519        unsafe fn decode(
520            &mut self,
521            decoder: &mut fidl::encoding::Decoder<'_, D>,
522            offset: usize,
523            mut depth: fidl::encoding::Depth,
524        ) -> fidl::Result<()> {
525            decoder.debug_check_bounds::<Self>(offset);
526            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
527                None => return Err(fidl::Error::NotNullable),
528                Some(len) => len,
529            };
530            // Calling decoder.out_of_line_offset(0) is not allowed.
531            if len == 0 {
532                return Ok(());
533            };
534            depth.increment()?;
535            let envelope_size = 8;
536            let bytes_len = len * envelope_size;
537            let offset = decoder.out_of_line_offset(bytes_len)?;
538            // Decode the envelope for each type.
539            let mut _next_ordinal_to_read = 0;
540            let mut next_offset = offset;
541            let end_offset = offset + bytes_len;
542            _next_ordinal_to_read += 1;
543            if next_offset >= end_offset {
544                return Ok(());
545            }
546
547            // Decode unknown envelopes for gaps in ordinals.
548            while _next_ordinal_to_read < 1 {
549                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
550                _next_ordinal_to_read += 1;
551                next_offset += envelope_size;
552            }
553
554            let next_out_of_line = decoder.next_out_of_line();
555            let handles_before = decoder.remaining_handles();
556            if let Some((inlined, num_bytes, num_handles)) =
557                fidl::encoding::decode_envelope_header(decoder, next_offset)?
558            {
559                let member_inline_size = <fidl::encoding::UnboundedVector<Device> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
560                if inlined != (member_inline_size <= 4) {
561                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
562                }
563                let inner_offset;
564                let mut inner_depth = depth.clone();
565                if inlined {
566                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
567                    inner_offset = next_offset;
568                } else {
569                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
570                    inner_depth.increment()?;
571                }
572                let val_ref = self.devices.get_or_insert_with(|| {
573                    fidl::new_empty!(fidl::encoding::UnboundedVector<Device>, D)
574                });
575                fidl::decode!(
576                    fidl::encoding::UnboundedVector<Device>,
577                    D,
578                    val_ref,
579                    decoder,
580                    inner_offset,
581                    inner_depth
582                )?;
583                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
584                {
585                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
586                }
587                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
588                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
589                }
590            }
591
592            next_offset += envelope_size;
593            _next_ordinal_to_read += 1;
594            if next_offset >= end_offset {
595                return Ok(());
596            }
597
598            // Decode unknown envelopes for gaps in ordinals.
599            while _next_ordinal_to_read < 2 {
600                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
601                _next_ordinal_to_read += 1;
602                next_offset += envelope_size;
603            }
604
605            let next_out_of_line = decoder.next_out_of_line();
606            let handles_before = decoder.remaining_handles();
607            if let Some((inlined, num_bytes, num_handles)) =
608                fidl::encoding::decode_envelope_header(decoder, next_offset)?
609            {
610                let member_inline_size = <fidl::encoding::UnboundedVector<AggregateEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
611                if inlined != (member_inline_size <= 4) {
612                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
613                }
614                let inner_offset;
615                let mut inner_depth = depth.clone();
616                if inlined {
617                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
618                    inner_offset = next_offset;
619                } else {
620                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
621                    inner_depth.increment()?;
622                }
623                let val_ref = self.aggregates.get_or_insert_with(|| {
624                    fidl::new_empty!(fidl::encoding::UnboundedVector<AggregateEntry>, D)
625                });
626                fidl::decode!(
627                    fidl::encoding::UnboundedVector<AggregateEntry>,
628                    D,
629                    val_ref,
630                    decoder,
631                    inner_offset,
632                    inner_depth
633                )?;
634                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
635                {
636                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
637                }
638                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
639                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
640                }
641            }
642
643            next_offset += envelope_size;
644
645            // Decode the remaining unknown envelopes.
646            while next_offset < end_offset {
647                _next_ordinal_to_read += 1;
648                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
649                next_offset += envelope_size;
650            }
651
652            Ok(())
653        }
654    }
655
656    impl Device {
657        #[inline(always)]
658        fn max_ordinal_present(&self) -> u64 {
659            if let Some(_) = self.metadata {
660                return 5;
661            }
662            if let Some(_) = self.compatible {
663                return 4;
664            }
665            if let Some(_) = self.url {
666                return 3;
667            }
668            if let Some(_) = self.id {
669                return 2;
670            }
671            if let Some(_) = self.name {
672                return 1;
673            }
674            0
675        }
676    }
677
678    impl fidl::encoding::ValueTypeMarker for Device {
679        type Borrowed<'a> = &'a Self;
680        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
681            value
682        }
683    }
684
685    unsafe impl fidl::encoding::TypeMarker for Device {
686        type Owned = Self;
687
688        #[inline(always)]
689        fn inline_align(_context: fidl::encoding::Context) -> usize {
690            8
691        }
692
693        #[inline(always)]
694        fn inline_size(_context: fidl::encoding::Context) -> usize {
695            16
696        }
697    }
698
699    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Device, D> for &Device {
700        unsafe fn encode(
701            self,
702            encoder: &mut fidl::encoding::Encoder<'_, D>,
703            offset: usize,
704            mut depth: fidl::encoding::Depth,
705        ) -> fidl::Result<()> {
706            encoder.debug_check_bounds::<Device>(offset);
707            // Vector header
708            let max_ordinal: u64 = self.max_ordinal_present();
709            encoder.write_num(max_ordinal, offset);
710            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
711            // Calling encoder.out_of_line_offset(0) is not allowed.
712            if max_ordinal == 0 {
713                return Ok(());
714            }
715            depth.increment()?;
716            let envelope_size = 8;
717            let bytes_len = max_ordinal as usize * envelope_size;
718            #[allow(unused_variables)]
719            let offset = encoder.out_of_line_offset(bytes_len);
720            let mut _prev_end_offset: usize = 0;
721            if 1 > max_ordinal {
722                return Ok(());
723            }
724
725            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
726            // are envelope_size bytes.
727            let cur_offset: usize = (1 - 1) * envelope_size;
728
729            // Zero reserved fields.
730            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
731
732            // Safety:
733            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
734            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
735            //   envelope_size bytes, there is always sufficient room.
736            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
737                self.name.as_ref().map(
738                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
739                ),
740                encoder,
741                offset + cur_offset,
742                depth,
743            )?;
744
745            _prev_end_offset = cur_offset + envelope_size;
746            if 2 > max_ordinal {
747                return Ok(());
748            }
749
750            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
751            // are envelope_size bytes.
752            let cur_offset: usize = (2 - 1) * envelope_size;
753
754            // Zero reserved fields.
755            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
756
757            // Safety:
758            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
759            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
760            //   envelope_size bytes, there is always sufficient room.
761            fidl::encoding::encode_in_envelope_optional::<u32, D>(
762                self.id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
763                encoder,
764                offset + cur_offset,
765                depth,
766            )?;
767
768            _prev_end_offset = cur_offset + envelope_size;
769            if 3 > max_ordinal {
770                return Ok(());
771            }
772
773            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
774            // are envelope_size bytes.
775            let cur_offset: usize = (3 - 1) * envelope_size;
776
777            // Zero reserved fields.
778            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
779
780            // Safety:
781            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
782            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
783            //   envelope_size bytes, there is always sufficient room.
784            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
785                self.url.as_ref().map(
786                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
787                ),
788                encoder,
789                offset + cur_offset,
790                depth,
791            )?;
792
793            _prev_end_offset = cur_offset + envelope_size;
794            if 4 > max_ordinal {
795                return Ok(());
796            }
797
798            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
799            // are envelope_size bytes.
800            let cur_offset: usize = (4 - 1) * envelope_size;
801
802            // Zero reserved fields.
803            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
804
805            // Safety:
806            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
807            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
808            //   envelope_size bytes, there is always sufficient room.
809            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
810                self.compatible.as_ref().map(
811                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
812                ),
813                encoder,
814                offset + cur_offset,
815                depth,
816            )?;
817
818            _prev_end_offset = cur_offset + envelope_size;
819            if 5 > max_ordinal {
820                return Ok(());
821            }
822
823            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
824            // are envelope_size bytes.
825            let cur_offset: usize = (5 - 1) * envelope_size;
826
827            // Zero reserved fields.
828            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
829
830            // Safety:
831            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
832            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
833            //   envelope_size bytes, there is always sufficient room.
834            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<StaticMetadata>, D>(
835            self.metadata.as_ref().map(<fidl::encoding::UnboundedVector<StaticMetadata> as fidl::encoding::ValueTypeMarker>::borrow),
836            encoder, offset + cur_offset, depth
837        )?;
838
839            _prev_end_offset = cur_offset + envelope_size;
840
841            Ok(())
842        }
843    }
844
845    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Device {
846        #[inline(always)]
847        fn new_empty() -> Self {
848            Self::default()
849        }
850
851        unsafe fn decode(
852            &mut self,
853            decoder: &mut fidl::encoding::Decoder<'_, D>,
854            offset: usize,
855            mut depth: fidl::encoding::Depth,
856        ) -> fidl::Result<()> {
857            decoder.debug_check_bounds::<Self>(offset);
858            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
859                None => return Err(fidl::Error::NotNullable),
860                Some(len) => len,
861            };
862            // Calling decoder.out_of_line_offset(0) is not allowed.
863            if len == 0 {
864                return Ok(());
865            };
866            depth.increment()?;
867            let envelope_size = 8;
868            let bytes_len = len * envelope_size;
869            let offset = decoder.out_of_line_offset(bytes_len)?;
870            // Decode the envelope for each type.
871            let mut _next_ordinal_to_read = 0;
872            let mut next_offset = offset;
873            let end_offset = offset + bytes_len;
874            _next_ordinal_to_read += 1;
875            if next_offset >= end_offset {
876                return Ok(());
877            }
878
879            // Decode unknown envelopes for gaps in ordinals.
880            while _next_ordinal_to_read < 1 {
881                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
882                _next_ordinal_to_read += 1;
883                next_offset += envelope_size;
884            }
885
886            let next_out_of_line = decoder.next_out_of_line();
887            let handles_before = decoder.remaining_handles();
888            if let Some((inlined, num_bytes, num_handles)) =
889                fidl::encoding::decode_envelope_header(decoder, next_offset)?
890            {
891                let member_inline_size =
892                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
893                        decoder.context,
894                    );
895                if inlined != (member_inline_size <= 4) {
896                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
897                }
898                let inner_offset;
899                let mut inner_depth = depth.clone();
900                if inlined {
901                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
902                    inner_offset = next_offset;
903                } else {
904                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
905                    inner_depth.increment()?;
906                }
907                let val_ref = self
908                    .name
909                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
910                fidl::decode!(
911                    fidl::encoding::UnboundedString,
912                    D,
913                    val_ref,
914                    decoder,
915                    inner_offset,
916                    inner_depth
917                )?;
918                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
919                {
920                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
921                }
922                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
923                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
924                }
925            }
926
927            next_offset += envelope_size;
928            _next_ordinal_to_read += 1;
929            if next_offset >= end_offset {
930                return Ok(());
931            }
932
933            // Decode unknown envelopes for gaps in ordinals.
934            while _next_ordinal_to_read < 2 {
935                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
936                _next_ordinal_to_read += 1;
937                next_offset += envelope_size;
938            }
939
940            let next_out_of_line = decoder.next_out_of_line();
941            let handles_before = decoder.remaining_handles();
942            if let Some((inlined, num_bytes, num_handles)) =
943                fidl::encoding::decode_envelope_header(decoder, next_offset)?
944            {
945                let member_inline_size =
946                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
947                if inlined != (member_inline_size <= 4) {
948                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
949                }
950                let inner_offset;
951                let mut inner_depth = depth.clone();
952                if inlined {
953                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
954                    inner_offset = next_offset;
955                } else {
956                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
957                    inner_depth.increment()?;
958                }
959                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u32, D));
960                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
961                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
962                {
963                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
964                }
965                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
966                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
967                }
968            }
969
970            next_offset += envelope_size;
971            _next_ordinal_to_read += 1;
972            if next_offset >= end_offset {
973                return Ok(());
974            }
975
976            // Decode unknown envelopes for gaps in ordinals.
977            while _next_ordinal_to_read < 3 {
978                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
979                _next_ordinal_to_read += 1;
980                next_offset += envelope_size;
981            }
982
983            let next_out_of_line = decoder.next_out_of_line();
984            let handles_before = decoder.remaining_handles();
985            if let Some((inlined, num_bytes, num_handles)) =
986                fidl::encoding::decode_envelope_header(decoder, next_offset)?
987            {
988                let member_inline_size =
989                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
990                        decoder.context,
991                    );
992                if inlined != (member_inline_size <= 4) {
993                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
994                }
995                let inner_offset;
996                let mut inner_depth = depth.clone();
997                if inlined {
998                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
999                    inner_offset = next_offset;
1000                } else {
1001                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1002                    inner_depth.increment()?;
1003                }
1004                let val_ref = self
1005                    .url
1006                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1007                fidl::decode!(
1008                    fidl::encoding::UnboundedString,
1009                    D,
1010                    val_ref,
1011                    decoder,
1012                    inner_offset,
1013                    inner_depth
1014                )?;
1015                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1016                {
1017                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1018                }
1019                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1020                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1021                }
1022            }
1023
1024            next_offset += envelope_size;
1025            _next_ordinal_to_read += 1;
1026            if next_offset >= end_offset {
1027                return Ok(());
1028            }
1029
1030            // Decode unknown envelopes for gaps in ordinals.
1031            while _next_ordinal_to_read < 4 {
1032                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1033                _next_ordinal_to_read += 1;
1034                next_offset += envelope_size;
1035            }
1036
1037            let next_out_of_line = decoder.next_out_of_line();
1038            let handles_before = decoder.remaining_handles();
1039            if let Some((inlined, num_bytes, num_handles)) =
1040                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1041            {
1042                let member_inline_size =
1043                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1044                        decoder.context,
1045                    );
1046                if inlined != (member_inline_size <= 4) {
1047                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1048                }
1049                let inner_offset;
1050                let mut inner_depth = depth.clone();
1051                if inlined {
1052                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1053                    inner_offset = next_offset;
1054                } else {
1055                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1056                    inner_depth.increment()?;
1057                }
1058                let val_ref = self
1059                    .compatible
1060                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1061                fidl::decode!(
1062                    fidl::encoding::UnboundedString,
1063                    D,
1064                    val_ref,
1065                    decoder,
1066                    inner_offset,
1067                    inner_depth
1068                )?;
1069                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1070                {
1071                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1072                }
1073                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1074                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1075                }
1076            }
1077
1078            next_offset += envelope_size;
1079            _next_ordinal_to_read += 1;
1080            if next_offset >= end_offset {
1081                return Ok(());
1082            }
1083
1084            // Decode unknown envelopes for gaps in ordinals.
1085            while _next_ordinal_to_read < 5 {
1086                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1087                _next_ordinal_to_read += 1;
1088                next_offset += envelope_size;
1089            }
1090
1091            let next_out_of_line = decoder.next_out_of_line();
1092            let handles_before = decoder.remaining_handles();
1093            if let Some((inlined, num_bytes, num_handles)) =
1094                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1095            {
1096                let member_inline_size = <fidl::encoding::UnboundedVector<StaticMetadata> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1097                if inlined != (member_inline_size <= 4) {
1098                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1099                }
1100                let inner_offset;
1101                let mut inner_depth = depth.clone();
1102                if inlined {
1103                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1104                    inner_offset = next_offset;
1105                } else {
1106                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1107                    inner_depth.increment()?;
1108                }
1109                let val_ref = self.metadata.get_or_insert_with(|| {
1110                    fidl::new_empty!(fidl::encoding::UnboundedVector<StaticMetadata>, D)
1111                });
1112                fidl::decode!(
1113                    fidl::encoding::UnboundedVector<StaticMetadata>,
1114                    D,
1115                    val_ref,
1116                    decoder,
1117                    inner_offset,
1118                    inner_depth
1119                )?;
1120                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1121                {
1122                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1123                }
1124                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1125                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1126                }
1127            }
1128
1129            next_offset += envelope_size;
1130
1131            // Decode the remaining unknown envelopes.
1132            while next_offset < end_offset {
1133                _next_ordinal_to_read += 1;
1134                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1135                next_offset += envelope_size;
1136            }
1137
1138            Ok(())
1139        }
1140    }
1141
1142    impl ResourceEntry {
1143        #[inline(always)]
1144        fn max_ordinal_present(&self) -> u64 {
1145            if let Some(_) = self.name {
1146                return 3;
1147            }
1148            if let Some(_) = self.constraint {
1149                return 2;
1150            }
1151            if let Some(_) = self.node {
1152                return 1;
1153            }
1154            0
1155        }
1156    }
1157
1158    impl fidl::encoding::ValueTypeMarker for ResourceEntry {
1159        type Borrowed<'a> = &'a Self;
1160        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1161            value
1162        }
1163    }
1164
1165    unsafe impl fidl::encoding::TypeMarker for ResourceEntry {
1166        type Owned = Self;
1167
1168        #[inline(always)]
1169        fn inline_align(_context: fidl::encoding::Context) -> usize {
1170            8
1171        }
1172
1173        #[inline(always)]
1174        fn inline_size(_context: fidl::encoding::Context) -> usize {
1175            16
1176        }
1177    }
1178
1179    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ResourceEntry, D>
1180        for &ResourceEntry
1181    {
1182        unsafe fn encode(
1183            self,
1184            encoder: &mut fidl::encoding::Encoder<'_, D>,
1185            offset: usize,
1186            mut depth: fidl::encoding::Depth,
1187        ) -> fidl::Result<()> {
1188            encoder.debug_check_bounds::<ResourceEntry>(offset);
1189            // Vector header
1190            let max_ordinal: u64 = self.max_ordinal_present();
1191            encoder.write_num(max_ordinal, offset);
1192            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1193            // Calling encoder.out_of_line_offset(0) is not allowed.
1194            if max_ordinal == 0 {
1195                return Ok(());
1196            }
1197            depth.increment()?;
1198            let envelope_size = 8;
1199            let bytes_len = max_ordinal as usize * envelope_size;
1200            #[allow(unused_variables)]
1201            let offset = encoder.out_of_line_offset(bytes_len);
1202            let mut _prev_end_offset: usize = 0;
1203            if 1 > max_ordinal {
1204                return Ok(());
1205            }
1206
1207            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1208            // are envelope_size bytes.
1209            let cur_offset: usize = (1 - 1) * envelope_size;
1210
1211            // Zero reserved fields.
1212            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1213
1214            // Safety:
1215            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1216            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1217            //   envelope_size bytes, there is always sufficient room.
1218            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1219                self.node.as_ref().map(
1220                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1221                ),
1222                encoder,
1223                offset + cur_offset,
1224                depth,
1225            )?;
1226
1227            _prev_end_offset = cur_offset + envelope_size;
1228            if 2 > max_ordinal {
1229                return Ok(());
1230            }
1231
1232            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1233            // are envelope_size bytes.
1234            let cur_offset: usize = (2 - 1) * envelope_size;
1235
1236            // Zero reserved fields.
1237            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1238
1239            // Safety:
1240            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1241            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1242            //   envelope_size bytes, there is always sufficient room.
1243            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_driver_metadata_common::Dictionary, D>(
1244            self.constraint.as_ref().map(<fidl_fuchsia_driver_metadata_common::Dictionary as fidl::encoding::ValueTypeMarker>::borrow),
1245            encoder, offset + cur_offset, depth
1246        )?;
1247
1248            _prev_end_offset = cur_offset + envelope_size;
1249            if 3 > max_ordinal {
1250                return Ok(());
1251            }
1252
1253            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1254            // are envelope_size bytes.
1255            let cur_offset: usize = (3 - 1) * envelope_size;
1256
1257            // Zero reserved fields.
1258            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1259
1260            // Safety:
1261            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1262            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1263            //   envelope_size bytes, there is always sufficient room.
1264            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1265                self.name.as_ref().map(
1266                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1267                ),
1268                encoder,
1269                offset + cur_offset,
1270                depth,
1271            )?;
1272
1273            _prev_end_offset = cur_offset + envelope_size;
1274
1275            Ok(())
1276        }
1277    }
1278
1279    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ResourceEntry {
1280        #[inline(always)]
1281        fn new_empty() -> Self {
1282            Self::default()
1283        }
1284
1285        unsafe fn decode(
1286            &mut self,
1287            decoder: &mut fidl::encoding::Decoder<'_, D>,
1288            offset: usize,
1289            mut depth: fidl::encoding::Depth,
1290        ) -> fidl::Result<()> {
1291            decoder.debug_check_bounds::<Self>(offset);
1292            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1293                None => return Err(fidl::Error::NotNullable),
1294                Some(len) => len,
1295            };
1296            // Calling decoder.out_of_line_offset(0) is not allowed.
1297            if len == 0 {
1298                return Ok(());
1299            };
1300            depth.increment()?;
1301            let envelope_size = 8;
1302            let bytes_len = len * envelope_size;
1303            let offset = decoder.out_of_line_offset(bytes_len)?;
1304            // Decode the envelope for each type.
1305            let mut _next_ordinal_to_read = 0;
1306            let mut next_offset = offset;
1307            let end_offset = offset + bytes_len;
1308            _next_ordinal_to_read += 1;
1309            if next_offset >= end_offset {
1310                return Ok(());
1311            }
1312
1313            // Decode unknown envelopes for gaps in ordinals.
1314            while _next_ordinal_to_read < 1 {
1315                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1316                _next_ordinal_to_read += 1;
1317                next_offset += envelope_size;
1318            }
1319
1320            let next_out_of_line = decoder.next_out_of_line();
1321            let handles_before = decoder.remaining_handles();
1322            if let Some((inlined, num_bytes, num_handles)) =
1323                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1324            {
1325                let member_inline_size =
1326                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1327                        decoder.context,
1328                    );
1329                if inlined != (member_inline_size <= 4) {
1330                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1331                }
1332                let inner_offset;
1333                let mut inner_depth = depth.clone();
1334                if inlined {
1335                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1336                    inner_offset = next_offset;
1337                } else {
1338                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1339                    inner_depth.increment()?;
1340                }
1341                let val_ref = self
1342                    .node
1343                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1344                fidl::decode!(
1345                    fidl::encoding::UnboundedString,
1346                    D,
1347                    val_ref,
1348                    decoder,
1349                    inner_offset,
1350                    inner_depth
1351                )?;
1352                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1353                {
1354                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1355                }
1356                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1357                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1358                }
1359            }
1360
1361            next_offset += envelope_size;
1362            _next_ordinal_to_read += 1;
1363            if next_offset >= end_offset {
1364                return Ok(());
1365            }
1366
1367            // Decode unknown envelopes for gaps in ordinals.
1368            while _next_ordinal_to_read < 2 {
1369                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1370                _next_ordinal_to_read += 1;
1371                next_offset += envelope_size;
1372            }
1373
1374            let next_out_of_line = decoder.next_out_of_line();
1375            let handles_before = decoder.remaining_handles();
1376            if let Some((inlined, num_bytes, num_handles)) =
1377                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1378            {
1379                let member_inline_size = <fidl_fuchsia_driver_metadata_common::Dictionary as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1380                if inlined != (member_inline_size <= 4) {
1381                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1382                }
1383                let inner_offset;
1384                let mut inner_depth = depth.clone();
1385                if inlined {
1386                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1387                    inner_offset = next_offset;
1388                } else {
1389                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1390                    inner_depth.increment()?;
1391                }
1392                let val_ref = self.constraint.get_or_insert_with(|| {
1393                    fidl::new_empty!(fidl_fuchsia_driver_metadata_common::Dictionary, D)
1394                });
1395                fidl::decode!(
1396                    fidl_fuchsia_driver_metadata_common::Dictionary,
1397                    D,
1398                    val_ref,
1399                    decoder,
1400                    inner_offset,
1401                    inner_depth
1402                )?;
1403                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1404                {
1405                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1406                }
1407                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1408                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1409                }
1410            }
1411
1412            next_offset += envelope_size;
1413            _next_ordinal_to_read += 1;
1414            if next_offset >= end_offset {
1415                return Ok(());
1416            }
1417
1418            // Decode unknown envelopes for gaps in ordinals.
1419            while _next_ordinal_to_read < 3 {
1420                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1421                _next_ordinal_to_read += 1;
1422                next_offset += envelope_size;
1423            }
1424
1425            let next_out_of_line = decoder.next_out_of_line();
1426            let handles_before = decoder.remaining_handles();
1427            if let Some((inlined, num_bytes, num_handles)) =
1428                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1429            {
1430                let member_inline_size =
1431                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1432                        decoder.context,
1433                    );
1434                if inlined != (member_inline_size <= 4) {
1435                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1436                }
1437                let inner_offset;
1438                let mut inner_depth = depth.clone();
1439                if inlined {
1440                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1441                    inner_offset = next_offset;
1442                } else {
1443                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1444                    inner_depth.increment()?;
1445                }
1446                let val_ref = self
1447                    .name
1448                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1449                fidl::decode!(
1450                    fidl::encoding::UnboundedString,
1451                    D,
1452                    val_ref,
1453                    decoder,
1454                    inner_offset,
1455                    inner_depth
1456                )?;
1457                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1458                {
1459                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1460                }
1461                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1462                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1463                }
1464            }
1465
1466            next_offset += envelope_size;
1467
1468            // Decode the remaining unknown envelopes.
1469            while next_offset < end_offset {
1470                _next_ordinal_to_read += 1;
1471                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1472                next_offset += envelope_size;
1473            }
1474
1475            Ok(())
1476        }
1477    }
1478
1479    impl StaticMetadata {
1480        #[inline(always)]
1481        fn max_ordinal_present(&self) -> u64 {
1482            if let Some(_) = self.data {
1483                return 2;
1484            }
1485            if let Some(_) = self.id {
1486                return 1;
1487            }
1488            0
1489        }
1490    }
1491
1492    impl fidl::encoding::ValueTypeMarker for StaticMetadata {
1493        type Borrowed<'a> = &'a Self;
1494        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1495            value
1496        }
1497    }
1498
1499    unsafe impl fidl::encoding::TypeMarker for StaticMetadata {
1500        type Owned = Self;
1501
1502        #[inline(always)]
1503        fn inline_align(_context: fidl::encoding::Context) -> usize {
1504            8
1505        }
1506
1507        #[inline(always)]
1508        fn inline_size(_context: fidl::encoding::Context) -> usize {
1509            16
1510        }
1511    }
1512
1513    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StaticMetadata, D>
1514        for &StaticMetadata
1515    {
1516        unsafe fn encode(
1517            self,
1518            encoder: &mut fidl::encoding::Encoder<'_, D>,
1519            offset: usize,
1520            mut depth: fidl::encoding::Depth,
1521        ) -> fidl::Result<()> {
1522            encoder.debug_check_bounds::<StaticMetadata>(offset);
1523            // Vector header
1524            let max_ordinal: u64 = self.max_ordinal_present();
1525            encoder.write_num(max_ordinal, offset);
1526            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1527            // Calling encoder.out_of_line_offset(0) is not allowed.
1528            if max_ordinal == 0 {
1529                return Ok(());
1530            }
1531            depth.increment()?;
1532            let envelope_size = 8;
1533            let bytes_len = max_ordinal as usize * envelope_size;
1534            #[allow(unused_variables)]
1535            let offset = encoder.out_of_line_offset(bytes_len);
1536            let mut _prev_end_offset: usize = 0;
1537            if 1 > max_ordinal {
1538                return Ok(());
1539            }
1540
1541            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1542            // are envelope_size bytes.
1543            let cur_offset: usize = (1 - 1) * envelope_size;
1544
1545            // Zero reserved fields.
1546            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1547
1548            // Safety:
1549            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1550            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1551            //   envelope_size bytes, there is always sufficient room.
1552            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1553                self.id.as_ref().map(
1554                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1555                ),
1556                encoder,
1557                offset + cur_offset,
1558                depth,
1559            )?;
1560
1561            _prev_end_offset = cur_offset + envelope_size;
1562            if 2 > max_ordinal {
1563                return Ok(());
1564            }
1565
1566            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1567            // are envelope_size bytes.
1568            let cur_offset: usize = (2 - 1) * envelope_size;
1569
1570            // Zero reserved fields.
1571            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1572
1573            // Safety:
1574            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1575            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1576            //   envelope_size bytes, there is always sufficient room.
1577            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
1578            self.data.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
1579            encoder, offset + cur_offset, depth
1580        )?;
1581
1582            _prev_end_offset = cur_offset + envelope_size;
1583
1584            Ok(())
1585        }
1586    }
1587
1588    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StaticMetadata {
1589        #[inline(always)]
1590        fn new_empty() -> Self {
1591            Self::default()
1592        }
1593
1594        unsafe fn decode(
1595            &mut self,
1596            decoder: &mut fidl::encoding::Decoder<'_, D>,
1597            offset: usize,
1598            mut depth: fidl::encoding::Depth,
1599        ) -> fidl::Result<()> {
1600            decoder.debug_check_bounds::<Self>(offset);
1601            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1602                None => return Err(fidl::Error::NotNullable),
1603                Some(len) => len,
1604            };
1605            // Calling decoder.out_of_line_offset(0) is not allowed.
1606            if len == 0 {
1607                return Ok(());
1608            };
1609            depth.increment()?;
1610            let envelope_size = 8;
1611            let bytes_len = len * envelope_size;
1612            let offset = decoder.out_of_line_offset(bytes_len)?;
1613            // Decode the envelope for each type.
1614            let mut _next_ordinal_to_read = 0;
1615            let mut next_offset = offset;
1616            let end_offset = offset + bytes_len;
1617            _next_ordinal_to_read += 1;
1618            if next_offset >= end_offset {
1619                return Ok(());
1620            }
1621
1622            // Decode unknown envelopes for gaps in ordinals.
1623            while _next_ordinal_to_read < 1 {
1624                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1625                _next_ordinal_to_read += 1;
1626                next_offset += envelope_size;
1627            }
1628
1629            let next_out_of_line = decoder.next_out_of_line();
1630            let handles_before = decoder.remaining_handles();
1631            if let Some((inlined, num_bytes, num_handles)) =
1632                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1633            {
1634                let member_inline_size =
1635                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1636                        decoder.context,
1637                    );
1638                if inlined != (member_inline_size <= 4) {
1639                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1640                }
1641                let inner_offset;
1642                let mut inner_depth = depth.clone();
1643                if inlined {
1644                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1645                    inner_offset = next_offset;
1646                } else {
1647                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1648                    inner_depth.increment()?;
1649                }
1650                let val_ref = self
1651                    .id
1652                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1653                fidl::decode!(
1654                    fidl::encoding::UnboundedString,
1655                    D,
1656                    val_ref,
1657                    decoder,
1658                    inner_offset,
1659                    inner_depth
1660                )?;
1661                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1662                {
1663                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1664                }
1665                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1666                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1667                }
1668            }
1669
1670            next_offset += envelope_size;
1671            _next_ordinal_to_read += 1;
1672            if next_offset >= end_offset {
1673                return Ok(());
1674            }
1675
1676            // Decode unknown envelopes for gaps in ordinals.
1677            while _next_ordinal_to_read < 2 {
1678                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1679                _next_ordinal_to_read += 1;
1680                next_offset += envelope_size;
1681            }
1682
1683            let next_out_of_line = decoder.next_out_of_line();
1684            let handles_before = decoder.remaining_handles();
1685            if let Some((inlined, num_bytes, num_handles)) =
1686                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1687            {
1688                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1689                if inlined != (member_inline_size <= 4) {
1690                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1691                }
1692                let inner_offset;
1693                let mut inner_depth = depth.clone();
1694                if inlined {
1695                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1696                    inner_offset = next_offset;
1697                } else {
1698                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1699                    inner_depth.increment()?;
1700                }
1701                let val_ref = self.data.get_or_insert_with(|| {
1702                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
1703                });
1704                fidl::decode!(
1705                    fidl::encoding::UnboundedVector<u8>,
1706                    D,
1707                    val_ref,
1708                    decoder,
1709                    inner_offset,
1710                    inner_depth
1711                )?;
1712                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1713                {
1714                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1715                }
1716                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1717                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1718                }
1719            }
1720
1721            next_offset += envelope_size;
1722
1723            // Decode the remaining unknown envelopes.
1724            while next_offset < end_offset {
1725                _next_ordinal_to_read += 1;
1726                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1727                next_offset += envelope_size;
1728            }
1729
1730            Ok(())
1731        }
1732    }
1733}