1#![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, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
12#[repr(C)]
13pub struct ArmSmmu {
14 pub base_address: u64,
15}
16
17impl fidl::Persistable for ArmSmmu {}
18
19#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
20pub struct StubIommu;
21
22impl fidl::Persistable for StubIommu {}
23
24#[derive(Clone, Debug, Default, PartialEq)]
25pub struct AggregateEntry {
26 pub provider: Option<String>,
27 pub service: Option<String>,
28 pub resources: Option<Vec<ResourceEntry>>,
29 #[doc(hidden)]
30 pub __source_breaking: fidl::marker::SourceBreaking,
31}
32
33impl fidl::Persistable for AggregateEntry {}
34
35#[derive(Clone, Debug, Default, PartialEq)]
36pub struct BoardConfig {
37 pub devices: Option<Vec<Device>>,
38 pub aggregates: Option<Vec<AggregateEntry>>,
39 pub iommus: Option<Vec<Iommu>>,
40 #[doc(hidden)]
41 pub __source_breaking: fidl::marker::SourceBreaking,
42}
43
44impl fidl::Persistable for BoardConfig {}
45
46#[derive(Clone, Debug, Default, PartialEq)]
47pub struct Device {
48 pub name: Option<String>,
49 pub id: Option<u32>,
50 pub url: Option<String>,
51 pub compatible: Option<String>,
52 pub metadata: Option<Vec<StaticMetadata>>,
53 pub interrupt_controller_id: Option<u32>,
54 pub disabled: Option<bool>,
55 pub driver_host: Option<String>,
56 #[doc(hidden)]
57 pub __source_breaking: fidl::marker::SourceBreaking,
58}
59
60impl fidl::Persistable for Device {}
61
62#[derive(Clone, Debug, Default, PartialEq)]
63pub struct Iommu {
64 pub name: Option<String>,
65 pub id: Option<u32>,
66 pub iommu_type: Option<IommuType>,
67 #[doc(hidden)]
68 pub __source_breaking: fidl::marker::SourceBreaking,
69}
70
71impl fidl::Persistable for Iommu {}
72
73#[derive(Clone, Debug, Default, PartialEq)]
74pub struct ResourceEntry {
75 pub node: Option<String>,
76 pub constraint: Option<fidl_fuchsia_driver_metadata_common::Dictionary>,
77 pub name: Option<String>,
78 #[doc(hidden)]
79 pub __source_breaking: fidl::marker::SourceBreaking,
80}
81
82impl fidl::Persistable for ResourceEntry {}
83
84#[derive(Clone, Debug, Default, PartialEq)]
87pub struct StaticMetadata {
88 pub id: Option<String>,
89 pub data: Option<Vec<u8>>,
90 #[doc(hidden)]
91 pub __source_breaking: fidl::marker::SourceBreaking,
92}
93
94impl fidl::Persistable for StaticMetadata {}
95
96#[derive(Clone, Debug)]
97pub enum IommuType {
98 StubIommu(StubIommu),
99 ArmSmmu(ArmSmmu),
100 #[doc(hidden)]
101 __SourceBreaking {
102 unknown_ordinal: u64,
103 },
104}
105
106#[macro_export]
108macro_rules! IommuTypeUnknown {
109 () => {
110 _
111 };
112}
113
114impl PartialEq for IommuType {
116 fn eq(&self, other: &Self) -> bool {
117 match (self, other) {
118 (Self::StubIommu(x), Self::StubIommu(y)) => *x == *y,
119 (Self::ArmSmmu(x), Self::ArmSmmu(y)) => *x == *y,
120 _ => false,
121 }
122 }
123}
124
125impl IommuType {
126 #[inline]
127 pub fn ordinal(&self) -> u64 {
128 match *self {
129 Self::StubIommu(_) => 1,
130 Self::ArmSmmu(_) => 2,
131 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
132 }
133 }
134
135 #[inline]
136 pub fn unknown_variant_for_testing() -> Self {
137 Self::__SourceBreaking { unknown_ordinal: 0 }
138 }
139
140 #[inline]
141 pub fn is_unknown(&self) -> bool {
142 match self {
143 Self::__SourceBreaking { .. } => true,
144 _ => false,
145 }
146 }
147}
148
149impl fidl::Persistable for IommuType {}
150
151mod internal {
152 use super::*;
153
154 impl fidl::encoding::ValueTypeMarker for ArmSmmu {
155 type Borrowed<'a> = &'a Self;
156 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
157 value
158 }
159 }
160
161 unsafe impl fidl::encoding::TypeMarker for ArmSmmu {
162 type Owned = Self;
163
164 #[inline(always)]
165 fn inline_align(_context: fidl::encoding::Context) -> usize {
166 8
167 }
168
169 #[inline(always)]
170 fn inline_size(_context: fidl::encoding::Context) -> usize {
171 8
172 }
173 #[inline(always)]
174 fn encode_is_copy() -> bool {
175 true
176 }
177
178 #[inline(always)]
179 fn decode_is_copy() -> bool {
180 true
181 }
182 }
183
184 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ArmSmmu, D> for &ArmSmmu {
185 #[inline]
186 unsafe fn encode(
187 self,
188 encoder: &mut fidl::encoding::Encoder<'_, D>,
189 offset: usize,
190 _depth: fidl::encoding::Depth,
191 ) -> fidl::Result<()> {
192 encoder.debug_check_bounds::<ArmSmmu>(offset);
193 unsafe {
194 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
196 (buf_ptr as *mut ArmSmmu).write_unaligned((self as *const ArmSmmu).read());
197 }
200 Ok(())
201 }
202 }
203 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
204 fidl::encoding::Encode<ArmSmmu, D> for (T0,)
205 {
206 #[inline]
207 unsafe fn encode(
208 self,
209 encoder: &mut fidl::encoding::Encoder<'_, D>,
210 offset: usize,
211 depth: fidl::encoding::Depth,
212 ) -> fidl::Result<()> {
213 encoder.debug_check_bounds::<ArmSmmu>(offset);
214 self.0.encode(encoder, offset + 0, depth)?;
218 Ok(())
219 }
220 }
221
222 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ArmSmmu {
223 #[inline(always)]
224 fn new_empty() -> Self {
225 Self { base_address: fidl::new_empty!(u64, D) }
226 }
227
228 #[inline]
229 unsafe fn decode(
230 &mut self,
231 decoder: &mut fidl::encoding::Decoder<'_, D>,
232 offset: usize,
233 _depth: fidl::encoding::Depth,
234 ) -> fidl::Result<()> {
235 decoder.debug_check_bounds::<Self>(offset);
236 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
237 unsafe {
240 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
241 }
242 Ok(())
243 }
244 }
245
246 impl fidl::encoding::ValueTypeMarker for StubIommu {
247 type Borrowed<'a> = &'a Self;
248 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
249 value
250 }
251 }
252
253 unsafe impl fidl::encoding::TypeMarker for StubIommu {
254 type Owned = Self;
255
256 #[inline(always)]
257 fn inline_align(_context: fidl::encoding::Context) -> usize {
258 1
259 }
260
261 #[inline(always)]
262 fn inline_size(_context: fidl::encoding::Context) -> usize {
263 1
264 }
265 }
266
267 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StubIommu, D>
268 for &StubIommu
269 {
270 #[inline]
271 unsafe fn encode(
272 self,
273 encoder: &mut fidl::encoding::Encoder<'_, D>,
274 offset: usize,
275 _depth: fidl::encoding::Depth,
276 ) -> fidl::Result<()> {
277 encoder.debug_check_bounds::<StubIommu>(offset);
278 encoder.write_num(0u8, offset);
279 Ok(())
280 }
281 }
282
283 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StubIommu {
284 #[inline(always)]
285 fn new_empty() -> Self {
286 Self
287 }
288
289 #[inline]
290 unsafe fn decode(
291 &mut self,
292 decoder: &mut fidl::encoding::Decoder<'_, D>,
293 offset: usize,
294 _depth: fidl::encoding::Depth,
295 ) -> fidl::Result<()> {
296 decoder.debug_check_bounds::<Self>(offset);
297 match decoder.read_num::<u8>(offset) {
298 0 => Ok(()),
299 _ => Err(fidl::Error::Invalid),
300 }
301 }
302 }
303
304 impl AggregateEntry {
305 #[inline(always)]
306 fn max_ordinal_present(&self) -> u64 {
307 if let Some(_) = self.resources {
308 return 3;
309 }
310 if let Some(_) = self.service {
311 return 2;
312 }
313 if let Some(_) = self.provider {
314 return 1;
315 }
316 0
317 }
318 }
319
320 impl fidl::encoding::ValueTypeMarker for AggregateEntry {
321 type Borrowed<'a> = &'a Self;
322 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
323 value
324 }
325 }
326
327 unsafe impl fidl::encoding::TypeMarker for AggregateEntry {
328 type Owned = Self;
329
330 #[inline(always)]
331 fn inline_align(_context: fidl::encoding::Context) -> usize {
332 8
333 }
334
335 #[inline(always)]
336 fn inline_size(_context: fidl::encoding::Context) -> usize {
337 16
338 }
339 }
340
341 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AggregateEntry, D>
342 for &AggregateEntry
343 {
344 unsafe fn encode(
345 self,
346 encoder: &mut fidl::encoding::Encoder<'_, D>,
347 offset: usize,
348 mut depth: fidl::encoding::Depth,
349 ) -> fidl::Result<()> {
350 encoder.debug_check_bounds::<AggregateEntry>(offset);
351 let max_ordinal: u64 = self.max_ordinal_present();
353 encoder.write_num(max_ordinal, offset);
354 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
355 if max_ordinal == 0 {
357 return Ok(());
358 }
359 depth.increment()?;
360 let envelope_size = 8;
361 let bytes_len = max_ordinal as usize * envelope_size;
362 #[allow(unused_variables)]
363 let offset = encoder.out_of_line_offset(bytes_len);
364 let mut _prev_end_offset: usize = 0;
365 if 1 > max_ordinal {
366 return Ok(());
367 }
368
369 let cur_offset: usize = (1 - 1) * envelope_size;
372
373 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
375
376 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
381 self.provider.as_ref().map(
382 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
383 ),
384 encoder,
385 offset + cur_offset,
386 depth,
387 )?;
388
389 _prev_end_offset = cur_offset + envelope_size;
390 if 2 > max_ordinal {
391 return Ok(());
392 }
393
394 let cur_offset: usize = (2 - 1) * envelope_size;
397
398 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
400
401 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
406 self.service.as_ref().map(
407 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
408 ),
409 encoder,
410 offset + cur_offset,
411 depth,
412 )?;
413
414 _prev_end_offset = cur_offset + envelope_size;
415 if 3 > max_ordinal {
416 return Ok(());
417 }
418
419 let cur_offset: usize = (3 - 1) * envelope_size;
422
423 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
425
426 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ResourceEntry>, D>(
431 self.resources.as_ref().map(<fidl::encoding::UnboundedVector<ResourceEntry> as fidl::encoding::ValueTypeMarker>::borrow),
432 encoder, offset + cur_offset, depth
433 )?;
434
435 _prev_end_offset = cur_offset + envelope_size;
436
437 Ok(())
438 }
439 }
440
441 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AggregateEntry {
442 #[inline(always)]
443 fn new_empty() -> Self {
444 Self::default()
445 }
446
447 unsafe fn decode(
448 &mut self,
449 decoder: &mut fidl::encoding::Decoder<'_, D>,
450 offset: usize,
451 mut depth: fidl::encoding::Depth,
452 ) -> fidl::Result<()> {
453 decoder.debug_check_bounds::<Self>(offset);
454 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
455 None => return Err(fidl::Error::NotNullable),
456 Some(len) => len,
457 };
458 if len == 0 {
460 return Ok(());
461 };
462 depth.increment()?;
463 let envelope_size = 8;
464 let bytes_len = len * envelope_size;
465 let offset = decoder.out_of_line_offset(bytes_len)?;
466 let mut _next_ordinal_to_read = 0;
468 let mut next_offset = offset;
469 let end_offset = offset + bytes_len;
470 _next_ordinal_to_read += 1;
471 if next_offset >= end_offset {
472 return Ok(());
473 }
474
475 while _next_ordinal_to_read < 1 {
477 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
478 _next_ordinal_to_read += 1;
479 next_offset += envelope_size;
480 }
481
482 let next_out_of_line = decoder.next_out_of_line();
483 let handles_before = decoder.remaining_handles();
484 if let Some((inlined, num_bytes, num_handles)) =
485 fidl::encoding::decode_envelope_header(decoder, next_offset)?
486 {
487 let member_inline_size =
488 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
489 decoder.context,
490 );
491 if inlined != (member_inline_size <= 4) {
492 return Err(fidl::Error::InvalidInlineBitInEnvelope);
493 }
494 let inner_offset;
495 let mut inner_depth = depth.clone();
496 if inlined {
497 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
498 inner_offset = next_offset;
499 } else {
500 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
501 inner_depth.increment()?;
502 }
503 let val_ref = self
504 .provider
505 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
506 fidl::decode!(
507 fidl::encoding::UnboundedString,
508 D,
509 val_ref,
510 decoder,
511 inner_offset,
512 inner_depth
513 )?;
514 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
515 {
516 return Err(fidl::Error::InvalidNumBytesInEnvelope);
517 }
518 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
519 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
520 }
521 }
522
523 next_offset += envelope_size;
524 _next_ordinal_to_read += 1;
525 if next_offset >= end_offset {
526 return Ok(());
527 }
528
529 while _next_ordinal_to_read < 2 {
531 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
532 _next_ordinal_to_read += 1;
533 next_offset += envelope_size;
534 }
535
536 let next_out_of_line = decoder.next_out_of_line();
537 let handles_before = decoder.remaining_handles();
538 if let Some((inlined, num_bytes, num_handles)) =
539 fidl::encoding::decode_envelope_header(decoder, next_offset)?
540 {
541 let member_inline_size =
542 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
543 decoder.context,
544 );
545 if inlined != (member_inline_size <= 4) {
546 return Err(fidl::Error::InvalidInlineBitInEnvelope);
547 }
548 let inner_offset;
549 let mut inner_depth = depth.clone();
550 if inlined {
551 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
552 inner_offset = next_offset;
553 } else {
554 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
555 inner_depth.increment()?;
556 }
557 let val_ref = self
558 .service
559 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
560 fidl::decode!(
561 fidl::encoding::UnboundedString,
562 D,
563 val_ref,
564 decoder,
565 inner_offset,
566 inner_depth
567 )?;
568 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
569 {
570 return Err(fidl::Error::InvalidNumBytesInEnvelope);
571 }
572 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
573 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
574 }
575 }
576
577 next_offset += envelope_size;
578 _next_ordinal_to_read += 1;
579 if next_offset >= end_offset {
580 return Ok(());
581 }
582
583 while _next_ordinal_to_read < 3 {
585 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
586 _next_ordinal_to_read += 1;
587 next_offset += envelope_size;
588 }
589
590 let next_out_of_line = decoder.next_out_of_line();
591 let handles_before = decoder.remaining_handles();
592 if let Some((inlined, num_bytes, num_handles)) =
593 fidl::encoding::decode_envelope_header(decoder, next_offset)?
594 {
595 let member_inline_size = <fidl::encoding::UnboundedVector<ResourceEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
596 if inlined != (member_inline_size <= 4) {
597 return Err(fidl::Error::InvalidInlineBitInEnvelope);
598 }
599 let inner_offset;
600 let mut inner_depth = depth.clone();
601 if inlined {
602 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
603 inner_offset = next_offset;
604 } else {
605 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
606 inner_depth.increment()?;
607 }
608 let val_ref = self.resources.get_or_insert_with(|| {
609 fidl::new_empty!(fidl::encoding::UnboundedVector<ResourceEntry>, D)
610 });
611 fidl::decode!(
612 fidl::encoding::UnboundedVector<ResourceEntry>,
613 D,
614 val_ref,
615 decoder,
616 inner_offset,
617 inner_depth
618 )?;
619 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
620 {
621 return Err(fidl::Error::InvalidNumBytesInEnvelope);
622 }
623 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
624 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
625 }
626 }
627
628 next_offset += envelope_size;
629
630 while next_offset < end_offset {
632 _next_ordinal_to_read += 1;
633 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
634 next_offset += envelope_size;
635 }
636
637 Ok(())
638 }
639 }
640
641 impl BoardConfig {
642 #[inline(always)]
643 fn max_ordinal_present(&self) -> u64 {
644 if let Some(_) = self.iommus {
645 return 3;
646 }
647 if let Some(_) = self.aggregates {
648 return 2;
649 }
650 if let Some(_) = self.devices {
651 return 1;
652 }
653 0
654 }
655 }
656
657 impl fidl::encoding::ValueTypeMarker for BoardConfig {
658 type Borrowed<'a> = &'a Self;
659 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
660 value
661 }
662 }
663
664 unsafe impl fidl::encoding::TypeMarker for BoardConfig {
665 type Owned = Self;
666
667 #[inline(always)]
668 fn inline_align(_context: fidl::encoding::Context) -> usize {
669 8
670 }
671
672 #[inline(always)]
673 fn inline_size(_context: fidl::encoding::Context) -> usize {
674 16
675 }
676 }
677
678 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BoardConfig, D>
679 for &BoardConfig
680 {
681 unsafe fn encode(
682 self,
683 encoder: &mut fidl::encoding::Encoder<'_, D>,
684 offset: usize,
685 mut depth: fidl::encoding::Depth,
686 ) -> fidl::Result<()> {
687 encoder.debug_check_bounds::<BoardConfig>(offset);
688 let max_ordinal: u64 = self.max_ordinal_present();
690 encoder.write_num(max_ordinal, offset);
691 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
692 if max_ordinal == 0 {
694 return Ok(());
695 }
696 depth.increment()?;
697 let envelope_size = 8;
698 let bytes_len = max_ordinal as usize * envelope_size;
699 #[allow(unused_variables)]
700 let offset = encoder.out_of_line_offset(bytes_len);
701 let mut _prev_end_offset: usize = 0;
702 if 1 > max_ordinal {
703 return Ok(());
704 }
705
706 let cur_offset: usize = (1 - 1) * envelope_size;
709
710 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
712
713 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Device>, D>(
718 self.devices.as_ref().map(<fidl::encoding::UnboundedVector<Device> as fidl::encoding::ValueTypeMarker>::borrow),
719 encoder, offset + cur_offset, depth
720 )?;
721
722 _prev_end_offset = cur_offset + envelope_size;
723 if 2 > max_ordinal {
724 return Ok(());
725 }
726
727 let cur_offset: usize = (2 - 1) * envelope_size;
730
731 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
733
734 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<AggregateEntry>, D>(
739 self.aggregates.as_ref().map(<fidl::encoding::UnboundedVector<AggregateEntry> as fidl::encoding::ValueTypeMarker>::borrow),
740 encoder, offset + cur_offset, depth
741 )?;
742
743 _prev_end_offset = cur_offset + envelope_size;
744 if 3 > max_ordinal {
745 return Ok(());
746 }
747
748 let cur_offset: usize = (3 - 1) * envelope_size;
751
752 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
754
755 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Iommu>, D>(
760 self.iommus.as_ref().map(<fidl::encoding::UnboundedVector<Iommu> as fidl::encoding::ValueTypeMarker>::borrow),
761 encoder, offset + cur_offset, depth
762 )?;
763
764 _prev_end_offset = cur_offset + envelope_size;
765
766 Ok(())
767 }
768 }
769
770 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BoardConfig {
771 #[inline(always)]
772 fn new_empty() -> Self {
773 Self::default()
774 }
775
776 unsafe fn decode(
777 &mut self,
778 decoder: &mut fidl::encoding::Decoder<'_, D>,
779 offset: usize,
780 mut depth: fidl::encoding::Depth,
781 ) -> fidl::Result<()> {
782 decoder.debug_check_bounds::<Self>(offset);
783 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
784 None => return Err(fidl::Error::NotNullable),
785 Some(len) => len,
786 };
787 if len == 0 {
789 return Ok(());
790 };
791 depth.increment()?;
792 let envelope_size = 8;
793 let bytes_len = len * envelope_size;
794 let offset = decoder.out_of_line_offset(bytes_len)?;
795 let mut _next_ordinal_to_read = 0;
797 let mut next_offset = offset;
798 let end_offset = offset + bytes_len;
799 _next_ordinal_to_read += 1;
800 if next_offset >= end_offset {
801 return Ok(());
802 }
803
804 while _next_ordinal_to_read < 1 {
806 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
807 _next_ordinal_to_read += 1;
808 next_offset += envelope_size;
809 }
810
811 let next_out_of_line = decoder.next_out_of_line();
812 let handles_before = decoder.remaining_handles();
813 if let Some((inlined, num_bytes, num_handles)) =
814 fidl::encoding::decode_envelope_header(decoder, next_offset)?
815 {
816 let member_inline_size = <fidl::encoding::UnboundedVector<Device> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
817 if inlined != (member_inline_size <= 4) {
818 return Err(fidl::Error::InvalidInlineBitInEnvelope);
819 }
820 let inner_offset;
821 let mut inner_depth = depth.clone();
822 if inlined {
823 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
824 inner_offset = next_offset;
825 } else {
826 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
827 inner_depth.increment()?;
828 }
829 let val_ref = self.devices.get_or_insert_with(|| {
830 fidl::new_empty!(fidl::encoding::UnboundedVector<Device>, D)
831 });
832 fidl::decode!(
833 fidl::encoding::UnboundedVector<Device>,
834 D,
835 val_ref,
836 decoder,
837 inner_offset,
838 inner_depth
839 )?;
840 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
841 {
842 return Err(fidl::Error::InvalidNumBytesInEnvelope);
843 }
844 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
845 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
846 }
847 }
848
849 next_offset += envelope_size;
850 _next_ordinal_to_read += 1;
851 if next_offset >= end_offset {
852 return Ok(());
853 }
854
855 while _next_ordinal_to_read < 2 {
857 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
858 _next_ordinal_to_read += 1;
859 next_offset += envelope_size;
860 }
861
862 let next_out_of_line = decoder.next_out_of_line();
863 let handles_before = decoder.remaining_handles();
864 if let Some((inlined, num_bytes, num_handles)) =
865 fidl::encoding::decode_envelope_header(decoder, next_offset)?
866 {
867 let member_inline_size = <fidl::encoding::UnboundedVector<AggregateEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
868 if inlined != (member_inline_size <= 4) {
869 return Err(fidl::Error::InvalidInlineBitInEnvelope);
870 }
871 let inner_offset;
872 let mut inner_depth = depth.clone();
873 if inlined {
874 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
875 inner_offset = next_offset;
876 } else {
877 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
878 inner_depth.increment()?;
879 }
880 let val_ref = self.aggregates.get_or_insert_with(|| {
881 fidl::new_empty!(fidl::encoding::UnboundedVector<AggregateEntry>, D)
882 });
883 fidl::decode!(
884 fidl::encoding::UnboundedVector<AggregateEntry>,
885 D,
886 val_ref,
887 decoder,
888 inner_offset,
889 inner_depth
890 )?;
891 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
892 {
893 return Err(fidl::Error::InvalidNumBytesInEnvelope);
894 }
895 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
896 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
897 }
898 }
899
900 next_offset += envelope_size;
901 _next_ordinal_to_read += 1;
902 if next_offset >= end_offset {
903 return Ok(());
904 }
905
906 while _next_ordinal_to_read < 3 {
908 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
909 _next_ordinal_to_read += 1;
910 next_offset += envelope_size;
911 }
912
913 let next_out_of_line = decoder.next_out_of_line();
914 let handles_before = decoder.remaining_handles();
915 if let Some((inlined, num_bytes, num_handles)) =
916 fidl::encoding::decode_envelope_header(decoder, next_offset)?
917 {
918 let member_inline_size = <fidl::encoding::UnboundedVector<Iommu> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
919 if inlined != (member_inline_size <= 4) {
920 return Err(fidl::Error::InvalidInlineBitInEnvelope);
921 }
922 let inner_offset;
923 let mut inner_depth = depth.clone();
924 if inlined {
925 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
926 inner_offset = next_offset;
927 } else {
928 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
929 inner_depth.increment()?;
930 }
931 let val_ref = self.iommus.get_or_insert_with(|| {
932 fidl::new_empty!(fidl::encoding::UnboundedVector<Iommu>, D)
933 });
934 fidl::decode!(
935 fidl::encoding::UnboundedVector<Iommu>,
936 D,
937 val_ref,
938 decoder,
939 inner_offset,
940 inner_depth
941 )?;
942 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
943 {
944 return Err(fidl::Error::InvalidNumBytesInEnvelope);
945 }
946 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
947 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
948 }
949 }
950
951 next_offset += envelope_size;
952
953 while next_offset < end_offset {
955 _next_ordinal_to_read += 1;
956 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
957 next_offset += envelope_size;
958 }
959
960 Ok(())
961 }
962 }
963
964 impl Device {
965 #[inline(always)]
966 fn max_ordinal_present(&self) -> u64 {
967 if let Some(_) = self.driver_host {
968 return 8;
969 }
970 if let Some(_) = self.disabled {
971 return 7;
972 }
973 if let Some(_) = self.interrupt_controller_id {
974 return 6;
975 }
976 if let Some(_) = self.metadata {
977 return 5;
978 }
979 if let Some(_) = self.compatible {
980 return 4;
981 }
982 if let Some(_) = self.url {
983 return 3;
984 }
985 if let Some(_) = self.id {
986 return 2;
987 }
988 if let Some(_) = self.name {
989 return 1;
990 }
991 0
992 }
993 }
994
995 impl fidl::encoding::ValueTypeMarker for Device {
996 type Borrowed<'a> = &'a Self;
997 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
998 value
999 }
1000 }
1001
1002 unsafe impl fidl::encoding::TypeMarker for Device {
1003 type Owned = Self;
1004
1005 #[inline(always)]
1006 fn inline_align(_context: fidl::encoding::Context) -> usize {
1007 8
1008 }
1009
1010 #[inline(always)]
1011 fn inline_size(_context: fidl::encoding::Context) -> usize {
1012 16
1013 }
1014 }
1015
1016 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Device, D> for &Device {
1017 unsafe fn encode(
1018 self,
1019 encoder: &mut fidl::encoding::Encoder<'_, D>,
1020 offset: usize,
1021 mut depth: fidl::encoding::Depth,
1022 ) -> fidl::Result<()> {
1023 encoder.debug_check_bounds::<Device>(offset);
1024 let max_ordinal: u64 = self.max_ordinal_present();
1026 encoder.write_num(max_ordinal, offset);
1027 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1028 if max_ordinal == 0 {
1030 return Ok(());
1031 }
1032 depth.increment()?;
1033 let envelope_size = 8;
1034 let bytes_len = max_ordinal as usize * envelope_size;
1035 #[allow(unused_variables)]
1036 let offset = encoder.out_of_line_offset(bytes_len);
1037 let mut _prev_end_offset: usize = 0;
1038 if 1 > max_ordinal {
1039 return Ok(());
1040 }
1041
1042 let cur_offset: usize = (1 - 1) * envelope_size;
1045
1046 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1048
1049 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1054 self.name.as_ref().map(
1055 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1056 ),
1057 encoder,
1058 offset + cur_offset,
1059 depth,
1060 )?;
1061
1062 _prev_end_offset = cur_offset + envelope_size;
1063 if 2 > max_ordinal {
1064 return Ok(());
1065 }
1066
1067 let cur_offset: usize = (2 - 1) * envelope_size;
1070
1071 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1073
1074 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1079 self.id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1080 encoder,
1081 offset + cur_offset,
1082 depth,
1083 )?;
1084
1085 _prev_end_offset = cur_offset + envelope_size;
1086 if 3 > max_ordinal {
1087 return Ok(());
1088 }
1089
1090 let cur_offset: usize = (3 - 1) * envelope_size;
1093
1094 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1096
1097 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1102 self.url.as_ref().map(
1103 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1104 ),
1105 encoder,
1106 offset + cur_offset,
1107 depth,
1108 )?;
1109
1110 _prev_end_offset = cur_offset + envelope_size;
1111 if 4 > max_ordinal {
1112 return Ok(());
1113 }
1114
1115 let cur_offset: usize = (4 - 1) * envelope_size;
1118
1119 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1121
1122 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1127 self.compatible.as_ref().map(
1128 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1129 ),
1130 encoder,
1131 offset + cur_offset,
1132 depth,
1133 )?;
1134
1135 _prev_end_offset = cur_offset + envelope_size;
1136 if 5 > max_ordinal {
1137 return Ok(());
1138 }
1139
1140 let cur_offset: usize = (5 - 1) * envelope_size;
1143
1144 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1146
1147 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<StaticMetadata>, D>(
1152 self.metadata.as_ref().map(<fidl::encoding::UnboundedVector<StaticMetadata> as fidl::encoding::ValueTypeMarker>::borrow),
1153 encoder, offset + cur_offset, depth
1154 )?;
1155
1156 _prev_end_offset = cur_offset + envelope_size;
1157 if 6 > max_ordinal {
1158 return Ok(());
1159 }
1160
1161 let cur_offset: usize = (6 - 1) * envelope_size;
1164
1165 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1167
1168 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1173 self.interrupt_controller_id
1174 .as_ref()
1175 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1176 encoder,
1177 offset + cur_offset,
1178 depth,
1179 )?;
1180
1181 _prev_end_offset = cur_offset + envelope_size;
1182 if 7 > max_ordinal {
1183 return Ok(());
1184 }
1185
1186 let cur_offset: usize = (7 - 1) * envelope_size;
1189
1190 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1192
1193 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1198 self.disabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1199 encoder,
1200 offset + cur_offset,
1201 depth,
1202 )?;
1203
1204 _prev_end_offset = cur_offset + envelope_size;
1205 if 8 > max_ordinal {
1206 return Ok(());
1207 }
1208
1209 let cur_offset: usize = (8 - 1) * envelope_size;
1212
1213 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1215
1216 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1221 self.driver_host.as_ref().map(
1222 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1223 ),
1224 encoder,
1225 offset + cur_offset,
1226 depth,
1227 )?;
1228
1229 _prev_end_offset = cur_offset + envelope_size;
1230
1231 Ok(())
1232 }
1233 }
1234
1235 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Device {
1236 #[inline(always)]
1237 fn new_empty() -> Self {
1238 Self::default()
1239 }
1240
1241 unsafe fn decode(
1242 &mut self,
1243 decoder: &mut fidl::encoding::Decoder<'_, D>,
1244 offset: usize,
1245 mut depth: fidl::encoding::Depth,
1246 ) -> fidl::Result<()> {
1247 decoder.debug_check_bounds::<Self>(offset);
1248 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1249 None => return Err(fidl::Error::NotNullable),
1250 Some(len) => len,
1251 };
1252 if len == 0 {
1254 return Ok(());
1255 };
1256 depth.increment()?;
1257 let envelope_size = 8;
1258 let bytes_len = len * envelope_size;
1259 let offset = decoder.out_of_line_offset(bytes_len)?;
1260 let mut _next_ordinal_to_read = 0;
1262 let mut next_offset = offset;
1263 let end_offset = offset + bytes_len;
1264 _next_ordinal_to_read += 1;
1265 if next_offset >= end_offset {
1266 return Ok(());
1267 }
1268
1269 while _next_ordinal_to_read < 1 {
1271 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1272 _next_ordinal_to_read += 1;
1273 next_offset += envelope_size;
1274 }
1275
1276 let next_out_of_line = decoder.next_out_of_line();
1277 let handles_before = decoder.remaining_handles();
1278 if let Some((inlined, num_bytes, num_handles)) =
1279 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1280 {
1281 let member_inline_size =
1282 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1283 decoder.context,
1284 );
1285 if inlined != (member_inline_size <= 4) {
1286 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1287 }
1288 let inner_offset;
1289 let mut inner_depth = depth.clone();
1290 if inlined {
1291 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1292 inner_offset = next_offset;
1293 } else {
1294 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1295 inner_depth.increment()?;
1296 }
1297 let val_ref = self
1298 .name
1299 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1300 fidl::decode!(
1301 fidl::encoding::UnboundedString,
1302 D,
1303 val_ref,
1304 decoder,
1305 inner_offset,
1306 inner_depth
1307 )?;
1308 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1309 {
1310 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1311 }
1312 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1313 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1314 }
1315 }
1316
1317 next_offset += envelope_size;
1318 _next_ordinal_to_read += 1;
1319 if next_offset >= end_offset {
1320 return Ok(());
1321 }
1322
1323 while _next_ordinal_to_read < 2 {
1325 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1326 _next_ordinal_to_read += 1;
1327 next_offset += envelope_size;
1328 }
1329
1330 let next_out_of_line = decoder.next_out_of_line();
1331 let handles_before = decoder.remaining_handles();
1332 if let Some((inlined, num_bytes, num_handles)) =
1333 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1334 {
1335 let member_inline_size =
1336 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1337 if inlined != (member_inline_size <= 4) {
1338 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1339 }
1340 let inner_offset;
1341 let mut inner_depth = depth.clone();
1342 if inlined {
1343 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1344 inner_offset = next_offset;
1345 } else {
1346 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1347 inner_depth.increment()?;
1348 }
1349 let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1350 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1351 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1352 {
1353 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1354 }
1355 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1356 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1357 }
1358 }
1359
1360 next_offset += envelope_size;
1361 _next_ordinal_to_read += 1;
1362 if next_offset >= end_offset {
1363 return Ok(());
1364 }
1365
1366 while _next_ordinal_to_read < 3 {
1368 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1369 _next_ordinal_to_read += 1;
1370 next_offset += envelope_size;
1371 }
1372
1373 let next_out_of_line = decoder.next_out_of_line();
1374 let handles_before = decoder.remaining_handles();
1375 if let Some((inlined, num_bytes, num_handles)) =
1376 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1377 {
1378 let member_inline_size =
1379 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1380 decoder.context,
1381 );
1382 if inlined != (member_inline_size <= 4) {
1383 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1384 }
1385 let inner_offset;
1386 let mut inner_depth = depth.clone();
1387 if inlined {
1388 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1389 inner_offset = next_offset;
1390 } else {
1391 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1392 inner_depth.increment()?;
1393 }
1394 let val_ref = self
1395 .url
1396 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1397 fidl::decode!(
1398 fidl::encoding::UnboundedString,
1399 D,
1400 val_ref,
1401 decoder,
1402 inner_offset,
1403 inner_depth
1404 )?;
1405 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1406 {
1407 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1408 }
1409 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1410 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1411 }
1412 }
1413
1414 next_offset += envelope_size;
1415 _next_ordinal_to_read += 1;
1416 if next_offset >= end_offset {
1417 return Ok(());
1418 }
1419
1420 while _next_ordinal_to_read < 4 {
1422 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1423 _next_ordinal_to_read += 1;
1424 next_offset += envelope_size;
1425 }
1426
1427 let next_out_of_line = decoder.next_out_of_line();
1428 let handles_before = decoder.remaining_handles();
1429 if let Some((inlined, num_bytes, num_handles)) =
1430 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1431 {
1432 let member_inline_size =
1433 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1434 decoder.context,
1435 );
1436 if inlined != (member_inline_size <= 4) {
1437 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1438 }
1439 let inner_offset;
1440 let mut inner_depth = depth.clone();
1441 if inlined {
1442 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1443 inner_offset = next_offset;
1444 } else {
1445 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1446 inner_depth.increment()?;
1447 }
1448 let val_ref = self
1449 .compatible
1450 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1451 fidl::decode!(
1452 fidl::encoding::UnboundedString,
1453 D,
1454 val_ref,
1455 decoder,
1456 inner_offset,
1457 inner_depth
1458 )?;
1459 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1460 {
1461 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1462 }
1463 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1464 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1465 }
1466 }
1467
1468 next_offset += envelope_size;
1469 _next_ordinal_to_read += 1;
1470 if next_offset >= end_offset {
1471 return Ok(());
1472 }
1473
1474 while _next_ordinal_to_read < 5 {
1476 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1477 _next_ordinal_to_read += 1;
1478 next_offset += envelope_size;
1479 }
1480
1481 let next_out_of_line = decoder.next_out_of_line();
1482 let handles_before = decoder.remaining_handles();
1483 if let Some((inlined, num_bytes, num_handles)) =
1484 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1485 {
1486 let member_inline_size = <fidl::encoding::UnboundedVector<StaticMetadata> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1487 if inlined != (member_inline_size <= 4) {
1488 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1489 }
1490 let inner_offset;
1491 let mut inner_depth = depth.clone();
1492 if inlined {
1493 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1494 inner_offset = next_offset;
1495 } else {
1496 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1497 inner_depth.increment()?;
1498 }
1499 let val_ref = self.metadata.get_or_insert_with(|| {
1500 fidl::new_empty!(fidl::encoding::UnboundedVector<StaticMetadata>, D)
1501 });
1502 fidl::decode!(
1503 fidl::encoding::UnboundedVector<StaticMetadata>,
1504 D,
1505 val_ref,
1506 decoder,
1507 inner_offset,
1508 inner_depth
1509 )?;
1510 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1511 {
1512 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1513 }
1514 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1515 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1516 }
1517 }
1518
1519 next_offset += envelope_size;
1520 _next_ordinal_to_read += 1;
1521 if next_offset >= end_offset {
1522 return Ok(());
1523 }
1524
1525 while _next_ordinal_to_read < 6 {
1527 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1528 _next_ordinal_to_read += 1;
1529 next_offset += envelope_size;
1530 }
1531
1532 let next_out_of_line = decoder.next_out_of_line();
1533 let handles_before = decoder.remaining_handles();
1534 if let Some((inlined, num_bytes, num_handles)) =
1535 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1536 {
1537 let member_inline_size =
1538 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1539 if inlined != (member_inline_size <= 4) {
1540 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1541 }
1542 let inner_offset;
1543 let mut inner_depth = depth.clone();
1544 if inlined {
1545 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1546 inner_offset = next_offset;
1547 } else {
1548 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1549 inner_depth.increment()?;
1550 }
1551 let val_ref =
1552 self.interrupt_controller_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1553 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1554 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1555 {
1556 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1557 }
1558 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1559 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1560 }
1561 }
1562
1563 next_offset += envelope_size;
1564 _next_ordinal_to_read += 1;
1565 if next_offset >= end_offset {
1566 return Ok(());
1567 }
1568
1569 while _next_ordinal_to_read < 7 {
1571 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1572 _next_ordinal_to_read += 1;
1573 next_offset += envelope_size;
1574 }
1575
1576 let next_out_of_line = decoder.next_out_of_line();
1577 let handles_before = decoder.remaining_handles();
1578 if let Some((inlined, num_bytes, num_handles)) =
1579 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1580 {
1581 let member_inline_size =
1582 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1583 if inlined != (member_inline_size <= 4) {
1584 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1585 }
1586 let inner_offset;
1587 let mut inner_depth = depth.clone();
1588 if inlined {
1589 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1590 inner_offset = next_offset;
1591 } else {
1592 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1593 inner_depth.increment()?;
1594 }
1595 let val_ref = self.disabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
1596 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1597 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1598 {
1599 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1600 }
1601 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1602 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1603 }
1604 }
1605
1606 next_offset += envelope_size;
1607 _next_ordinal_to_read += 1;
1608 if next_offset >= end_offset {
1609 return Ok(());
1610 }
1611
1612 while _next_ordinal_to_read < 8 {
1614 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1615 _next_ordinal_to_read += 1;
1616 next_offset += envelope_size;
1617 }
1618
1619 let next_out_of_line = decoder.next_out_of_line();
1620 let handles_before = decoder.remaining_handles();
1621 if let Some((inlined, num_bytes, num_handles)) =
1622 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1623 {
1624 let member_inline_size =
1625 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1626 decoder.context,
1627 );
1628 if inlined != (member_inline_size <= 4) {
1629 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1630 }
1631 let inner_offset;
1632 let mut inner_depth = depth.clone();
1633 if inlined {
1634 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1635 inner_offset = next_offset;
1636 } else {
1637 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1638 inner_depth.increment()?;
1639 }
1640 let val_ref = self
1641 .driver_host
1642 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1643 fidl::decode!(
1644 fidl::encoding::UnboundedString,
1645 D,
1646 val_ref,
1647 decoder,
1648 inner_offset,
1649 inner_depth
1650 )?;
1651 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1652 {
1653 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1654 }
1655 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1656 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1657 }
1658 }
1659
1660 next_offset += envelope_size;
1661
1662 while next_offset < end_offset {
1664 _next_ordinal_to_read += 1;
1665 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1666 next_offset += envelope_size;
1667 }
1668
1669 Ok(())
1670 }
1671 }
1672
1673 impl Iommu {
1674 #[inline(always)]
1675 fn max_ordinal_present(&self) -> u64 {
1676 if let Some(_) = self.iommu_type {
1677 return 3;
1678 }
1679 if let Some(_) = self.id {
1680 return 2;
1681 }
1682 if let Some(_) = self.name {
1683 return 1;
1684 }
1685 0
1686 }
1687 }
1688
1689 impl fidl::encoding::ValueTypeMarker for Iommu {
1690 type Borrowed<'a> = &'a Self;
1691 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1692 value
1693 }
1694 }
1695
1696 unsafe impl fidl::encoding::TypeMarker for Iommu {
1697 type Owned = Self;
1698
1699 #[inline(always)]
1700 fn inline_align(_context: fidl::encoding::Context) -> usize {
1701 8
1702 }
1703
1704 #[inline(always)]
1705 fn inline_size(_context: fidl::encoding::Context) -> usize {
1706 16
1707 }
1708 }
1709
1710 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Iommu, D> for &Iommu {
1711 unsafe fn encode(
1712 self,
1713 encoder: &mut fidl::encoding::Encoder<'_, D>,
1714 offset: usize,
1715 mut depth: fidl::encoding::Depth,
1716 ) -> fidl::Result<()> {
1717 encoder.debug_check_bounds::<Iommu>(offset);
1718 let max_ordinal: u64 = self.max_ordinal_present();
1720 encoder.write_num(max_ordinal, offset);
1721 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1722 if max_ordinal == 0 {
1724 return Ok(());
1725 }
1726 depth.increment()?;
1727 let envelope_size = 8;
1728 let bytes_len = max_ordinal as usize * envelope_size;
1729 #[allow(unused_variables)]
1730 let offset = encoder.out_of_line_offset(bytes_len);
1731 let mut _prev_end_offset: usize = 0;
1732 if 1 > max_ordinal {
1733 return Ok(());
1734 }
1735
1736 let cur_offset: usize = (1 - 1) * envelope_size;
1739
1740 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1742
1743 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1748 self.name.as_ref().map(
1749 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1750 ),
1751 encoder,
1752 offset + cur_offset,
1753 depth,
1754 )?;
1755
1756 _prev_end_offset = cur_offset + envelope_size;
1757 if 2 > max_ordinal {
1758 return Ok(());
1759 }
1760
1761 let cur_offset: usize = (2 - 1) * envelope_size;
1764
1765 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1767
1768 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1773 self.id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1774 encoder,
1775 offset + cur_offset,
1776 depth,
1777 )?;
1778
1779 _prev_end_offset = cur_offset + envelope_size;
1780 if 3 > max_ordinal {
1781 return Ok(());
1782 }
1783
1784 let cur_offset: usize = (3 - 1) * envelope_size;
1787
1788 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1790
1791 fidl::encoding::encode_in_envelope_optional::<IommuType, D>(
1796 self.iommu_type
1797 .as_ref()
1798 .map(<IommuType as fidl::encoding::ValueTypeMarker>::borrow),
1799 encoder,
1800 offset + cur_offset,
1801 depth,
1802 )?;
1803
1804 _prev_end_offset = cur_offset + envelope_size;
1805
1806 Ok(())
1807 }
1808 }
1809
1810 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Iommu {
1811 #[inline(always)]
1812 fn new_empty() -> Self {
1813 Self::default()
1814 }
1815
1816 unsafe fn decode(
1817 &mut self,
1818 decoder: &mut fidl::encoding::Decoder<'_, D>,
1819 offset: usize,
1820 mut depth: fidl::encoding::Depth,
1821 ) -> fidl::Result<()> {
1822 decoder.debug_check_bounds::<Self>(offset);
1823 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1824 None => return Err(fidl::Error::NotNullable),
1825 Some(len) => len,
1826 };
1827 if len == 0 {
1829 return Ok(());
1830 };
1831 depth.increment()?;
1832 let envelope_size = 8;
1833 let bytes_len = len * envelope_size;
1834 let offset = decoder.out_of_line_offset(bytes_len)?;
1835 let mut _next_ordinal_to_read = 0;
1837 let mut next_offset = offset;
1838 let end_offset = offset + bytes_len;
1839 _next_ordinal_to_read += 1;
1840 if next_offset >= end_offset {
1841 return Ok(());
1842 }
1843
1844 while _next_ordinal_to_read < 1 {
1846 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1847 _next_ordinal_to_read += 1;
1848 next_offset += envelope_size;
1849 }
1850
1851 let next_out_of_line = decoder.next_out_of_line();
1852 let handles_before = decoder.remaining_handles();
1853 if let Some((inlined, num_bytes, num_handles)) =
1854 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1855 {
1856 let member_inline_size =
1857 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
1858 decoder.context,
1859 );
1860 if inlined != (member_inline_size <= 4) {
1861 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1862 }
1863 let inner_offset;
1864 let mut inner_depth = depth.clone();
1865 if inlined {
1866 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1867 inner_offset = next_offset;
1868 } else {
1869 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1870 inner_depth.increment()?;
1871 }
1872 let val_ref = self
1873 .name
1874 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
1875 fidl::decode!(
1876 fidl::encoding::UnboundedString,
1877 D,
1878 val_ref,
1879 decoder,
1880 inner_offset,
1881 inner_depth
1882 )?;
1883 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1884 {
1885 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1886 }
1887 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1888 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1889 }
1890 }
1891
1892 next_offset += envelope_size;
1893 _next_ordinal_to_read += 1;
1894 if next_offset >= end_offset {
1895 return Ok(());
1896 }
1897
1898 while _next_ordinal_to_read < 2 {
1900 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1901 _next_ordinal_to_read += 1;
1902 next_offset += envelope_size;
1903 }
1904
1905 let next_out_of_line = decoder.next_out_of_line();
1906 let handles_before = decoder.remaining_handles();
1907 if let Some((inlined, num_bytes, num_handles)) =
1908 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1909 {
1910 let member_inline_size =
1911 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1912 if inlined != (member_inline_size <= 4) {
1913 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1914 }
1915 let inner_offset;
1916 let mut inner_depth = depth.clone();
1917 if inlined {
1918 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1919 inner_offset = next_offset;
1920 } else {
1921 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1922 inner_depth.increment()?;
1923 }
1924 let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1925 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1926 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1927 {
1928 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1929 }
1930 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1931 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1932 }
1933 }
1934
1935 next_offset += envelope_size;
1936 _next_ordinal_to_read += 1;
1937 if next_offset >= end_offset {
1938 return Ok(());
1939 }
1940
1941 while _next_ordinal_to_read < 3 {
1943 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1944 _next_ordinal_to_read += 1;
1945 next_offset += envelope_size;
1946 }
1947
1948 let next_out_of_line = decoder.next_out_of_line();
1949 let handles_before = decoder.remaining_handles();
1950 if let Some((inlined, num_bytes, num_handles)) =
1951 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1952 {
1953 let member_inline_size =
1954 <IommuType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1955 if inlined != (member_inline_size <= 4) {
1956 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1957 }
1958 let inner_offset;
1959 let mut inner_depth = depth.clone();
1960 if inlined {
1961 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1962 inner_offset = next_offset;
1963 } else {
1964 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1965 inner_depth.increment()?;
1966 }
1967 let val_ref = self.iommu_type.get_or_insert_with(|| fidl::new_empty!(IommuType, D));
1968 fidl::decode!(IommuType, D, val_ref, decoder, inner_offset, inner_depth)?;
1969 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1970 {
1971 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1972 }
1973 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1974 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1975 }
1976 }
1977
1978 next_offset += envelope_size;
1979
1980 while next_offset < end_offset {
1982 _next_ordinal_to_read += 1;
1983 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1984 next_offset += envelope_size;
1985 }
1986
1987 Ok(())
1988 }
1989 }
1990
1991 impl ResourceEntry {
1992 #[inline(always)]
1993 fn max_ordinal_present(&self) -> u64 {
1994 if let Some(_) = self.name {
1995 return 3;
1996 }
1997 if let Some(_) = self.constraint {
1998 return 2;
1999 }
2000 if let Some(_) = self.node {
2001 return 1;
2002 }
2003 0
2004 }
2005 }
2006
2007 impl fidl::encoding::ValueTypeMarker for ResourceEntry {
2008 type Borrowed<'a> = &'a Self;
2009 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2010 value
2011 }
2012 }
2013
2014 unsafe impl fidl::encoding::TypeMarker for ResourceEntry {
2015 type Owned = Self;
2016
2017 #[inline(always)]
2018 fn inline_align(_context: fidl::encoding::Context) -> usize {
2019 8
2020 }
2021
2022 #[inline(always)]
2023 fn inline_size(_context: fidl::encoding::Context) -> usize {
2024 16
2025 }
2026 }
2027
2028 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ResourceEntry, D>
2029 for &ResourceEntry
2030 {
2031 unsafe fn encode(
2032 self,
2033 encoder: &mut fidl::encoding::Encoder<'_, D>,
2034 offset: usize,
2035 mut depth: fidl::encoding::Depth,
2036 ) -> fidl::Result<()> {
2037 encoder.debug_check_bounds::<ResourceEntry>(offset);
2038 let max_ordinal: u64 = self.max_ordinal_present();
2040 encoder.write_num(max_ordinal, offset);
2041 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2042 if max_ordinal == 0 {
2044 return Ok(());
2045 }
2046 depth.increment()?;
2047 let envelope_size = 8;
2048 let bytes_len = max_ordinal as usize * envelope_size;
2049 #[allow(unused_variables)]
2050 let offset = encoder.out_of_line_offset(bytes_len);
2051 let mut _prev_end_offset: usize = 0;
2052 if 1 > max_ordinal {
2053 return Ok(());
2054 }
2055
2056 let cur_offset: usize = (1 - 1) * envelope_size;
2059
2060 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2062
2063 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
2068 self.node.as_ref().map(
2069 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2070 ),
2071 encoder,
2072 offset + cur_offset,
2073 depth,
2074 )?;
2075
2076 _prev_end_offset = cur_offset + envelope_size;
2077 if 2 > max_ordinal {
2078 return Ok(());
2079 }
2080
2081 let cur_offset: usize = (2 - 1) * envelope_size;
2084
2085 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2087
2088 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_driver_metadata_common::Dictionary, D>(
2093 self.constraint.as_ref().map(<fidl_fuchsia_driver_metadata_common::Dictionary as fidl::encoding::ValueTypeMarker>::borrow),
2094 encoder, offset + cur_offset, depth
2095 )?;
2096
2097 _prev_end_offset = cur_offset + envelope_size;
2098 if 3 > max_ordinal {
2099 return Ok(());
2100 }
2101
2102 let cur_offset: usize = (3 - 1) * envelope_size;
2105
2106 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2108
2109 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
2114 self.name.as_ref().map(
2115 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2116 ),
2117 encoder,
2118 offset + cur_offset,
2119 depth,
2120 )?;
2121
2122 _prev_end_offset = cur_offset + envelope_size;
2123
2124 Ok(())
2125 }
2126 }
2127
2128 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ResourceEntry {
2129 #[inline(always)]
2130 fn new_empty() -> Self {
2131 Self::default()
2132 }
2133
2134 unsafe fn decode(
2135 &mut self,
2136 decoder: &mut fidl::encoding::Decoder<'_, D>,
2137 offset: usize,
2138 mut depth: fidl::encoding::Depth,
2139 ) -> fidl::Result<()> {
2140 decoder.debug_check_bounds::<Self>(offset);
2141 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2142 None => return Err(fidl::Error::NotNullable),
2143 Some(len) => len,
2144 };
2145 if len == 0 {
2147 return Ok(());
2148 };
2149 depth.increment()?;
2150 let envelope_size = 8;
2151 let bytes_len = len * envelope_size;
2152 let offset = decoder.out_of_line_offset(bytes_len)?;
2153 let mut _next_ordinal_to_read = 0;
2155 let mut next_offset = offset;
2156 let end_offset = offset + bytes_len;
2157 _next_ordinal_to_read += 1;
2158 if next_offset >= end_offset {
2159 return Ok(());
2160 }
2161
2162 while _next_ordinal_to_read < 1 {
2164 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2165 _next_ordinal_to_read += 1;
2166 next_offset += envelope_size;
2167 }
2168
2169 let next_out_of_line = decoder.next_out_of_line();
2170 let handles_before = decoder.remaining_handles();
2171 if let Some((inlined, num_bytes, num_handles)) =
2172 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2173 {
2174 let member_inline_size =
2175 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2176 decoder.context,
2177 );
2178 if inlined != (member_inline_size <= 4) {
2179 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2180 }
2181 let inner_offset;
2182 let mut inner_depth = depth.clone();
2183 if inlined {
2184 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2185 inner_offset = next_offset;
2186 } else {
2187 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2188 inner_depth.increment()?;
2189 }
2190 let val_ref = self
2191 .node
2192 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2193 fidl::decode!(
2194 fidl::encoding::UnboundedString,
2195 D,
2196 val_ref,
2197 decoder,
2198 inner_offset,
2199 inner_depth
2200 )?;
2201 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2202 {
2203 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2204 }
2205 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2206 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2207 }
2208 }
2209
2210 next_offset += envelope_size;
2211 _next_ordinal_to_read += 1;
2212 if next_offset >= end_offset {
2213 return Ok(());
2214 }
2215
2216 while _next_ordinal_to_read < 2 {
2218 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2219 _next_ordinal_to_read += 1;
2220 next_offset += envelope_size;
2221 }
2222
2223 let next_out_of_line = decoder.next_out_of_line();
2224 let handles_before = decoder.remaining_handles();
2225 if let Some((inlined, num_bytes, num_handles)) =
2226 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2227 {
2228 let member_inline_size = <fidl_fuchsia_driver_metadata_common::Dictionary as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2229 if inlined != (member_inline_size <= 4) {
2230 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2231 }
2232 let inner_offset;
2233 let mut inner_depth = depth.clone();
2234 if inlined {
2235 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2236 inner_offset = next_offset;
2237 } else {
2238 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2239 inner_depth.increment()?;
2240 }
2241 let val_ref = self.constraint.get_or_insert_with(|| {
2242 fidl::new_empty!(fidl_fuchsia_driver_metadata_common::Dictionary, D)
2243 });
2244 fidl::decode!(
2245 fidl_fuchsia_driver_metadata_common::Dictionary,
2246 D,
2247 val_ref,
2248 decoder,
2249 inner_offset,
2250 inner_depth
2251 )?;
2252 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2253 {
2254 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2255 }
2256 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2257 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2258 }
2259 }
2260
2261 next_offset += envelope_size;
2262 _next_ordinal_to_read += 1;
2263 if next_offset >= end_offset {
2264 return Ok(());
2265 }
2266
2267 while _next_ordinal_to_read < 3 {
2269 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2270 _next_ordinal_to_read += 1;
2271 next_offset += envelope_size;
2272 }
2273
2274 let next_out_of_line = decoder.next_out_of_line();
2275 let handles_before = decoder.remaining_handles();
2276 if let Some((inlined, num_bytes, num_handles)) =
2277 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2278 {
2279 let member_inline_size =
2280 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2281 decoder.context,
2282 );
2283 if inlined != (member_inline_size <= 4) {
2284 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2285 }
2286 let inner_offset;
2287 let mut inner_depth = depth.clone();
2288 if inlined {
2289 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2290 inner_offset = next_offset;
2291 } else {
2292 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2293 inner_depth.increment()?;
2294 }
2295 let val_ref = self
2296 .name
2297 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2298 fidl::decode!(
2299 fidl::encoding::UnboundedString,
2300 D,
2301 val_ref,
2302 decoder,
2303 inner_offset,
2304 inner_depth
2305 )?;
2306 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2307 {
2308 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2309 }
2310 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2311 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2312 }
2313 }
2314
2315 next_offset += envelope_size;
2316
2317 while next_offset < end_offset {
2319 _next_ordinal_to_read += 1;
2320 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2321 next_offset += envelope_size;
2322 }
2323
2324 Ok(())
2325 }
2326 }
2327
2328 impl StaticMetadata {
2329 #[inline(always)]
2330 fn max_ordinal_present(&self) -> u64 {
2331 if let Some(_) = self.data {
2332 return 2;
2333 }
2334 if let Some(_) = self.id {
2335 return 1;
2336 }
2337 0
2338 }
2339 }
2340
2341 impl fidl::encoding::ValueTypeMarker for StaticMetadata {
2342 type Borrowed<'a> = &'a Self;
2343 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2344 value
2345 }
2346 }
2347
2348 unsafe impl fidl::encoding::TypeMarker for StaticMetadata {
2349 type Owned = Self;
2350
2351 #[inline(always)]
2352 fn inline_align(_context: fidl::encoding::Context) -> usize {
2353 8
2354 }
2355
2356 #[inline(always)]
2357 fn inline_size(_context: fidl::encoding::Context) -> usize {
2358 16
2359 }
2360 }
2361
2362 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StaticMetadata, D>
2363 for &StaticMetadata
2364 {
2365 unsafe fn encode(
2366 self,
2367 encoder: &mut fidl::encoding::Encoder<'_, D>,
2368 offset: usize,
2369 mut depth: fidl::encoding::Depth,
2370 ) -> fidl::Result<()> {
2371 encoder.debug_check_bounds::<StaticMetadata>(offset);
2372 let max_ordinal: u64 = self.max_ordinal_present();
2374 encoder.write_num(max_ordinal, offset);
2375 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2376 if max_ordinal == 0 {
2378 return Ok(());
2379 }
2380 depth.increment()?;
2381 let envelope_size = 8;
2382 let bytes_len = max_ordinal as usize * envelope_size;
2383 #[allow(unused_variables)]
2384 let offset = encoder.out_of_line_offset(bytes_len);
2385 let mut _prev_end_offset: usize = 0;
2386 if 1 > max_ordinal {
2387 return Ok(());
2388 }
2389
2390 let cur_offset: usize = (1 - 1) * envelope_size;
2393
2394 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2396
2397 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
2402 self.id.as_ref().map(
2403 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2404 ),
2405 encoder,
2406 offset + cur_offset,
2407 depth,
2408 )?;
2409
2410 _prev_end_offset = cur_offset + envelope_size;
2411 if 2 > max_ordinal {
2412 return Ok(());
2413 }
2414
2415 let cur_offset: usize = (2 - 1) * envelope_size;
2418
2419 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2421
2422 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
2427 self.data.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
2428 encoder, offset + cur_offset, depth
2429 )?;
2430
2431 _prev_end_offset = cur_offset + envelope_size;
2432
2433 Ok(())
2434 }
2435 }
2436
2437 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StaticMetadata {
2438 #[inline(always)]
2439 fn new_empty() -> Self {
2440 Self::default()
2441 }
2442
2443 unsafe fn decode(
2444 &mut self,
2445 decoder: &mut fidl::encoding::Decoder<'_, D>,
2446 offset: usize,
2447 mut depth: fidl::encoding::Depth,
2448 ) -> fidl::Result<()> {
2449 decoder.debug_check_bounds::<Self>(offset);
2450 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2451 None => return Err(fidl::Error::NotNullable),
2452 Some(len) => len,
2453 };
2454 if len == 0 {
2456 return Ok(());
2457 };
2458 depth.increment()?;
2459 let envelope_size = 8;
2460 let bytes_len = len * envelope_size;
2461 let offset = decoder.out_of_line_offset(bytes_len)?;
2462 let mut _next_ordinal_to_read = 0;
2464 let mut next_offset = offset;
2465 let end_offset = offset + bytes_len;
2466 _next_ordinal_to_read += 1;
2467 if next_offset >= end_offset {
2468 return Ok(());
2469 }
2470
2471 while _next_ordinal_to_read < 1 {
2473 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2474 _next_ordinal_to_read += 1;
2475 next_offset += envelope_size;
2476 }
2477
2478 let next_out_of_line = decoder.next_out_of_line();
2479 let handles_before = decoder.remaining_handles();
2480 if let Some((inlined, num_bytes, num_handles)) =
2481 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2482 {
2483 let member_inline_size =
2484 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2485 decoder.context,
2486 );
2487 if inlined != (member_inline_size <= 4) {
2488 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2489 }
2490 let inner_offset;
2491 let mut inner_depth = depth.clone();
2492 if inlined {
2493 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2494 inner_offset = next_offset;
2495 } else {
2496 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2497 inner_depth.increment()?;
2498 }
2499 let val_ref = self
2500 .id
2501 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2502 fidl::decode!(
2503 fidl::encoding::UnboundedString,
2504 D,
2505 val_ref,
2506 decoder,
2507 inner_offset,
2508 inner_depth
2509 )?;
2510 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2511 {
2512 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2513 }
2514 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2515 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2516 }
2517 }
2518
2519 next_offset += envelope_size;
2520 _next_ordinal_to_read += 1;
2521 if next_offset >= end_offset {
2522 return Ok(());
2523 }
2524
2525 while _next_ordinal_to_read < 2 {
2527 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2528 _next_ordinal_to_read += 1;
2529 next_offset += envelope_size;
2530 }
2531
2532 let next_out_of_line = decoder.next_out_of_line();
2533 let handles_before = decoder.remaining_handles();
2534 if let Some((inlined, num_bytes, num_handles)) =
2535 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2536 {
2537 let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2538 if inlined != (member_inline_size <= 4) {
2539 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2540 }
2541 let inner_offset;
2542 let mut inner_depth = depth.clone();
2543 if inlined {
2544 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2545 inner_offset = next_offset;
2546 } else {
2547 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2548 inner_depth.increment()?;
2549 }
2550 let val_ref = self.data.get_or_insert_with(|| {
2551 fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
2552 });
2553 fidl::decode!(
2554 fidl::encoding::UnboundedVector<u8>,
2555 D,
2556 val_ref,
2557 decoder,
2558 inner_offset,
2559 inner_depth
2560 )?;
2561 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2562 {
2563 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2564 }
2565 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2566 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2567 }
2568 }
2569
2570 next_offset += envelope_size;
2571
2572 while next_offset < end_offset {
2574 _next_ordinal_to_read += 1;
2575 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2576 next_offset += envelope_size;
2577 }
2578
2579 Ok(())
2580 }
2581 }
2582
2583 impl fidl::encoding::ValueTypeMarker for IommuType {
2584 type Borrowed<'a> = &'a Self;
2585 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2586 value
2587 }
2588 }
2589
2590 unsafe impl fidl::encoding::TypeMarker for IommuType {
2591 type Owned = Self;
2592
2593 #[inline(always)]
2594 fn inline_align(_context: fidl::encoding::Context) -> usize {
2595 8
2596 }
2597
2598 #[inline(always)]
2599 fn inline_size(_context: fidl::encoding::Context) -> usize {
2600 16
2601 }
2602 }
2603
2604 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IommuType, D>
2605 for &IommuType
2606 {
2607 #[inline]
2608 unsafe fn encode(
2609 self,
2610 encoder: &mut fidl::encoding::Encoder<'_, D>,
2611 offset: usize,
2612 _depth: fidl::encoding::Depth,
2613 ) -> fidl::Result<()> {
2614 encoder.debug_check_bounds::<IommuType>(offset);
2615 encoder.write_num::<u64>(self.ordinal(), offset);
2616 match self {
2617 IommuType::StubIommu(ref val) => {
2618 fidl::encoding::encode_in_envelope::<StubIommu, D>(
2619 <StubIommu as fidl::encoding::ValueTypeMarker>::borrow(val),
2620 encoder,
2621 offset + 8,
2622 _depth,
2623 )
2624 }
2625 IommuType::ArmSmmu(ref val) => fidl::encoding::encode_in_envelope::<ArmSmmu, D>(
2626 <ArmSmmu as fidl::encoding::ValueTypeMarker>::borrow(val),
2627 encoder,
2628 offset + 8,
2629 _depth,
2630 ),
2631 IommuType::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
2632 }
2633 }
2634 }
2635
2636 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IommuType {
2637 #[inline(always)]
2638 fn new_empty() -> Self {
2639 Self::__SourceBreaking { unknown_ordinal: 0 }
2640 }
2641
2642 #[inline]
2643 unsafe fn decode(
2644 &mut self,
2645 decoder: &mut fidl::encoding::Decoder<'_, D>,
2646 offset: usize,
2647 mut depth: fidl::encoding::Depth,
2648 ) -> fidl::Result<()> {
2649 decoder.debug_check_bounds::<Self>(offset);
2650 #[allow(unused_variables)]
2651 let next_out_of_line = decoder.next_out_of_line();
2652 let handles_before = decoder.remaining_handles();
2653 let (ordinal, inlined, num_bytes, num_handles) =
2654 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2655
2656 let member_inline_size = match ordinal {
2657 1 => <StubIommu as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2658 2 => <ArmSmmu as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2659 0 => return Err(fidl::Error::UnknownUnionTag),
2660 _ => num_bytes as usize,
2661 };
2662
2663 if inlined != (member_inline_size <= 4) {
2664 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2665 }
2666 let _inner_offset;
2667 if inlined {
2668 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2669 _inner_offset = offset + 8;
2670 } else {
2671 depth.increment()?;
2672 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2673 }
2674 match ordinal {
2675 1 => {
2676 #[allow(irrefutable_let_patterns)]
2677 if let IommuType::StubIommu(_) = self {
2678 } else {
2680 *self = IommuType::StubIommu(fidl::new_empty!(StubIommu, D));
2682 }
2683 #[allow(irrefutable_let_patterns)]
2684 if let IommuType::StubIommu(ref mut val) = self {
2685 fidl::decode!(StubIommu, D, val, decoder, _inner_offset, depth)?;
2686 } else {
2687 unreachable!()
2688 }
2689 }
2690 2 => {
2691 #[allow(irrefutable_let_patterns)]
2692 if let IommuType::ArmSmmu(_) = self {
2693 } else {
2695 *self = IommuType::ArmSmmu(fidl::new_empty!(ArmSmmu, D));
2697 }
2698 #[allow(irrefutable_let_patterns)]
2699 if let IommuType::ArmSmmu(ref mut val) = self {
2700 fidl::decode!(ArmSmmu, D, val, decoder, _inner_offset, depth)?;
2701 } else {
2702 unreachable!()
2703 }
2704 }
2705 #[allow(deprecated)]
2706 ordinal => {
2707 for _ in 0..num_handles {
2708 decoder.drop_next_handle()?;
2709 }
2710 *self = IommuType::__SourceBreaking { unknown_ordinal: ordinal };
2711 }
2712 }
2713 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2714 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2715 }
2716 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2717 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2718 }
2719 Ok(())
2720 }
2721 }
2722}