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, 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#[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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
139
140 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
142
143 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 let cur_offset: usize = (2 - 1) * envelope_size;
164
165 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
167
168 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 let cur_offset: usize = (3 - 1) * envelope_size;
189
190 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
192
193 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 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 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
473
474 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
476
477 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 let cur_offset: usize = (2 - 1) * envelope_size;
494
495 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
497
498 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 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
728
729 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
731
732 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 let cur_offset: usize = (2 - 1) * envelope_size;
753
754 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
756
757 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 let cur_offset: usize = (3 - 1) * envelope_size;
776
777 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
779
780 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 let cur_offset: usize = (4 - 1) * envelope_size;
801
802 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
804
805 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 let cur_offset: usize = (5 - 1) * envelope_size;
826
827 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
829
830 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 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 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 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 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
1210
1211 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1213
1214 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 let cur_offset: usize = (2 - 1) * envelope_size;
1235
1236 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1238
1239 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 let cur_offset: usize = (3 - 1) * envelope_size;
1256
1257 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1259
1260 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 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 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
1544
1545 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1547
1548 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 let cur_offset: usize = (2 - 1) * envelope_size;
1569
1570 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1572
1573 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 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 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 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 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 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}