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
11pub type Name = String;
13
14pub const INTERFACE_NAME_LENGTH: u8 = 15;
16
17bitflags! {
18 #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
19 pub struct AddressPropertiesInterest: u64 {
20 const VALID_UNTIL = 1;
21 const PREFERRED_LIFETIME_INFO = 2;
22 }
23}
24
25impl AddressPropertiesInterest {
26 #[inline(always)]
27 pub fn from_bits_allow_unknown(bits: u64) -> Self {
28 Self::from_bits_retain(bits)
29 }
30
31 #[inline(always)]
32 pub fn has_unknown_bits(&self) -> bool {
33 self.get_unknown_bits() != 0
34 }
35
36 #[inline(always)]
37 pub fn get_unknown_bits(&self) -> u64 {
38 self.bits() & !Self::all().bits()
39 }
40}
41
42#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
44#[repr(u32)]
45pub enum AddressAssignmentState {
46 Tentative = 1,
53 Assigned = 2,
55 Unavailable = 3,
58}
59
60impl AddressAssignmentState {
61 #[inline]
62 pub fn from_primitive(prim: u32) -> Option<Self> {
63 match prim {
64 1 => Some(Self::Tentative),
65 2 => Some(Self::Assigned),
66 3 => Some(Self::Unavailable),
67 _ => None,
68 }
69 }
70
71 #[inline]
72 pub const fn into_primitive(self) -> u32 {
73 self as u32
74 }
75}
76
77#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
78pub struct Empty;
79
80impl fidl::Persistable for Empty {}
81
82#[derive(Clone, Debug, PartialEq)]
83pub struct WatcherWatchResponse {
84 pub event: Event,
85}
86
87impl fidl::Persistable for WatcherWatchResponse {}
88
89#[derive(Clone, Debug, Default, PartialEq)]
90pub struct Address {
91 pub addr: Option<fidl_fuchsia_net__common::Subnet>,
95 pub valid_until: Option<i64>,
108 pub preferred_lifetime_info: Option<PreferredLifetimeInfo>,
112 pub assignment_state: Option<AddressAssignmentState>,
116 #[doc(hidden)]
117 pub __source_breaking: fidl::marker::SourceBreaking,
118}
119
120impl fidl::Persistable for Address {}
121
122#[derive(Clone, Debug, Default, PartialEq)]
124pub struct Properties {
125 pub id: Option<u64>,
128 pub addresses: Option<Vec<Address>>,
136 pub online: Option<bool>,
138 pub has_default_ipv4_route: Option<bool>,
140 pub has_default_ipv6_route: Option<bool>,
142 pub name: Option<String>,
144 pub port_class: Option<PortClass>,
146 pub port_identity_koid: Option<u64>,
155 #[doc(hidden)]
156 pub __source_breaking: fidl::marker::SourceBreaking,
157}
158
159impl fidl::Persistable for Properties {}
160
161#[derive(Clone, Debug, Default, PartialEq)]
162pub struct WatcherOptions {
163 pub address_properties_interest: Option<AddressPropertiesInterest>,
167 pub include_non_assigned_addresses: Option<bool>,
173 #[doc(hidden)]
174 pub __source_breaking: fidl::marker::SourceBreaking,
175}
176
177impl fidl::Persistable for WatcherOptions {}
178
179#[derive(Clone, Debug, PartialEq)]
180pub enum Event {
181 Existing(Properties),
185 Added(Properties),
189 Removed(u64),
191 Changed(Properties),
196 Idle(Empty),
199}
200
201impl Event {
202 #[inline]
203 pub fn ordinal(&self) -> u64 {
204 match *self {
205 Self::Existing(_) => 1,
206 Self::Added(_) => 2,
207 Self::Removed(_) => 3,
208 Self::Changed(_) => 4,
209 Self::Idle(_) => 5,
210 }
211 }
212}
213
214impl fidl::Persistable for Event {}
215
216#[derive(Clone, Debug)]
218pub enum PortClass {
219 Loopback(Empty),
221 Device(fidl_fuchsia_hardware_network__common::PortClass),
223 Blackhole(Empty),
225 #[doc(hidden)]
226 __SourceBreaking { unknown_ordinal: u64 },
227}
228
229#[macro_export]
231macro_rules! PortClassUnknown {
232 () => {
233 _
234 };
235}
236
237impl PartialEq for PortClass {
239 fn eq(&self, other: &Self) -> bool {
240 match (self, other) {
241 (Self::Loopback(x), Self::Loopback(y)) => *x == *y,
242 (Self::Device(x), Self::Device(y)) => *x == *y,
243 (Self::Blackhole(x), Self::Blackhole(y)) => *x == *y,
244 _ => false,
245 }
246 }
247}
248
249impl PortClass {
250 #[inline]
251 pub fn ordinal(&self) -> u64 {
252 match *self {
253 Self::Loopback(_) => 1,
254 Self::Device(_) => 2,
255 Self::Blackhole(_) => 3,
256 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
257 }
258 }
259
260 #[inline]
261 pub fn unknown_variant_for_testing() -> Self {
262 Self::__SourceBreaking { unknown_ordinal: 0 }
263 }
264
265 #[inline]
266 pub fn is_unknown(&self) -> bool {
267 match self {
268 Self::__SourceBreaking { .. } => true,
269 _ => false,
270 }
271 }
272}
273
274impl fidl::Persistable for PortClass {}
275
276#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
279pub enum PreferredLifetimeInfo {
280 PreferredUntil(i64),
296 Deprecated(Empty),
310}
311
312impl PreferredLifetimeInfo {
313 #[inline]
314 pub fn ordinal(&self) -> u64 {
315 match *self {
316 Self::PreferredUntil(_) => 1,
317 Self::Deprecated(_) => 2,
318 }
319 }
320}
321
322impl fidl::Persistable for PreferredLifetimeInfo {}
323
324pub mod state_ordinals {
325 pub const GET_WATCHER: u64 = 0x4fe223c98b263ae3;
326}
327
328pub mod watcher_ordinals {
329 pub const WATCH: u64 = 0x550767aa9faeeef3;
330}
331
332mod internal {
333 use super::*;
334 unsafe impl fidl::encoding::TypeMarker for AddressPropertiesInterest {
335 type Owned = Self;
336
337 #[inline(always)]
338 fn inline_align(_context: fidl::encoding::Context) -> usize {
339 8
340 }
341
342 #[inline(always)]
343 fn inline_size(_context: fidl::encoding::Context) -> usize {
344 8
345 }
346 }
347
348 impl fidl::encoding::ValueTypeMarker for AddressPropertiesInterest {
349 type Borrowed<'a> = Self;
350 #[inline(always)]
351 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
352 *value
353 }
354 }
355
356 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
357 for AddressPropertiesInterest
358 {
359 #[inline]
360 unsafe fn encode(
361 self,
362 encoder: &mut fidl::encoding::Encoder<'_, D>,
363 offset: usize,
364 _depth: fidl::encoding::Depth,
365 ) -> fidl::Result<()> {
366 encoder.debug_check_bounds::<Self>(offset);
367 encoder.write_num(self.bits(), offset);
368 Ok(())
369 }
370 }
371
372 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
373 for AddressPropertiesInterest
374 {
375 #[inline(always)]
376 fn new_empty() -> Self {
377 Self::empty()
378 }
379
380 #[inline]
381 unsafe fn decode(
382 &mut self,
383 decoder: &mut fidl::encoding::Decoder<'_, D>,
384 offset: usize,
385 _depth: fidl::encoding::Depth,
386 ) -> fidl::Result<()> {
387 decoder.debug_check_bounds::<Self>(offset);
388 let prim = decoder.read_num::<u64>(offset);
389 *self = Self::from_bits_allow_unknown(prim);
390 Ok(())
391 }
392 }
393 unsafe impl fidl::encoding::TypeMarker for AddressAssignmentState {
394 type Owned = Self;
395
396 #[inline(always)]
397 fn inline_align(_context: fidl::encoding::Context) -> usize {
398 std::mem::align_of::<u32>()
399 }
400
401 #[inline(always)]
402 fn inline_size(_context: fidl::encoding::Context) -> usize {
403 std::mem::size_of::<u32>()
404 }
405
406 #[inline(always)]
407 fn encode_is_copy() -> bool {
408 true
409 }
410
411 #[inline(always)]
412 fn decode_is_copy() -> bool {
413 false
414 }
415 }
416
417 impl fidl::encoding::ValueTypeMarker for AddressAssignmentState {
418 type Borrowed<'a> = Self;
419 #[inline(always)]
420 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
421 *value
422 }
423 }
424
425 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
426 for AddressAssignmentState
427 {
428 #[inline]
429 unsafe fn encode(
430 self,
431 encoder: &mut fidl::encoding::Encoder<'_, D>,
432 offset: usize,
433 _depth: fidl::encoding::Depth,
434 ) -> fidl::Result<()> {
435 encoder.debug_check_bounds::<Self>(offset);
436 encoder.write_num(self.into_primitive(), offset);
437 Ok(())
438 }
439 }
440
441 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
442 for AddressAssignmentState
443 {
444 #[inline(always)]
445 fn new_empty() -> Self {
446 Self::Tentative
447 }
448
449 #[inline]
450 unsafe fn decode(
451 &mut self,
452 decoder: &mut fidl::encoding::Decoder<'_, D>,
453 offset: usize,
454 _depth: fidl::encoding::Depth,
455 ) -> fidl::Result<()> {
456 decoder.debug_check_bounds::<Self>(offset);
457 let prim = decoder.read_num::<u32>(offset);
458
459 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
460 Ok(())
461 }
462 }
463
464 impl fidl::encoding::ValueTypeMarker for Empty {
465 type Borrowed<'a> = &'a Self;
466 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
467 value
468 }
469 }
470
471 unsafe impl fidl::encoding::TypeMarker for Empty {
472 type Owned = Self;
473
474 #[inline(always)]
475 fn inline_align(_context: fidl::encoding::Context) -> usize {
476 1
477 }
478
479 #[inline(always)]
480 fn inline_size(_context: fidl::encoding::Context) -> usize {
481 1
482 }
483 }
484
485 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Empty, D> for &Empty {
486 #[inline]
487 unsafe fn encode(
488 self,
489 encoder: &mut fidl::encoding::Encoder<'_, D>,
490 offset: usize,
491 _depth: fidl::encoding::Depth,
492 ) -> fidl::Result<()> {
493 encoder.debug_check_bounds::<Empty>(offset);
494 encoder.write_num(0u8, offset);
495 Ok(())
496 }
497 }
498
499 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Empty {
500 #[inline(always)]
501 fn new_empty() -> Self {
502 Self
503 }
504
505 #[inline]
506 unsafe fn decode(
507 &mut self,
508 decoder: &mut fidl::encoding::Decoder<'_, D>,
509 offset: usize,
510 _depth: fidl::encoding::Depth,
511 ) -> fidl::Result<()> {
512 decoder.debug_check_bounds::<Self>(offset);
513 match decoder.read_num::<u8>(offset) {
514 0 => Ok(()),
515 _ => Err(fidl::Error::Invalid),
516 }
517 }
518 }
519
520 impl fidl::encoding::ValueTypeMarker for WatcherWatchResponse {
521 type Borrowed<'a> = &'a Self;
522 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
523 value
524 }
525 }
526
527 unsafe impl fidl::encoding::TypeMarker for WatcherWatchResponse {
528 type Owned = Self;
529
530 #[inline(always)]
531 fn inline_align(_context: fidl::encoding::Context) -> usize {
532 8
533 }
534
535 #[inline(always)]
536 fn inline_size(_context: fidl::encoding::Context) -> usize {
537 16
538 }
539 }
540
541 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WatcherWatchResponse, D>
542 for &WatcherWatchResponse
543 {
544 #[inline]
545 unsafe fn encode(
546 self,
547 encoder: &mut fidl::encoding::Encoder<'_, D>,
548 offset: usize,
549 _depth: fidl::encoding::Depth,
550 ) -> fidl::Result<()> {
551 encoder.debug_check_bounds::<WatcherWatchResponse>(offset);
552 fidl::encoding::Encode::<WatcherWatchResponse, D>::encode(
554 (<Event as fidl::encoding::ValueTypeMarker>::borrow(&self.event),),
555 encoder,
556 offset,
557 _depth,
558 )
559 }
560 }
561 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Event, D>>
562 fidl::encoding::Encode<WatcherWatchResponse, D> for (T0,)
563 {
564 #[inline]
565 unsafe fn encode(
566 self,
567 encoder: &mut fidl::encoding::Encoder<'_, D>,
568 offset: usize,
569 depth: fidl::encoding::Depth,
570 ) -> fidl::Result<()> {
571 encoder.debug_check_bounds::<WatcherWatchResponse>(offset);
572 self.0.encode(encoder, offset + 0, depth)?;
576 Ok(())
577 }
578 }
579
580 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WatcherWatchResponse {
581 #[inline(always)]
582 fn new_empty() -> Self {
583 Self { event: fidl::new_empty!(Event, D) }
584 }
585
586 #[inline]
587 unsafe fn decode(
588 &mut self,
589 decoder: &mut fidl::encoding::Decoder<'_, D>,
590 offset: usize,
591 _depth: fidl::encoding::Depth,
592 ) -> fidl::Result<()> {
593 decoder.debug_check_bounds::<Self>(offset);
594 fidl::decode!(Event, D, &mut self.event, decoder, offset + 0, _depth)?;
596 Ok(())
597 }
598 }
599
600 impl Address {
601 #[inline(always)]
602 fn max_ordinal_present(&self) -> u64 {
603 if let Some(_) = self.assignment_state {
604 return 4;
605 }
606 if let Some(_) = self.preferred_lifetime_info {
607 return 3;
608 }
609 if let Some(_) = self.valid_until {
610 return 2;
611 }
612 if let Some(_) = self.addr {
613 return 1;
614 }
615 0
616 }
617 }
618
619 impl fidl::encoding::ValueTypeMarker for Address {
620 type Borrowed<'a> = &'a Self;
621 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
622 value
623 }
624 }
625
626 unsafe impl fidl::encoding::TypeMarker for Address {
627 type Owned = Self;
628
629 #[inline(always)]
630 fn inline_align(_context: fidl::encoding::Context) -> usize {
631 8
632 }
633
634 #[inline(always)]
635 fn inline_size(_context: fidl::encoding::Context) -> usize {
636 16
637 }
638 }
639
640 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Address, D> for &Address {
641 unsafe fn encode(
642 self,
643 encoder: &mut fidl::encoding::Encoder<'_, D>,
644 offset: usize,
645 mut depth: fidl::encoding::Depth,
646 ) -> fidl::Result<()> {
647 encoder.debug_check_bounds::<Address>(offset);
648 let max_ordinal: u64 = self.max_ordinal_present();
650 encoder.write_num(max_ordinal, offset);
651 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
652 if max_ordinal == 0 {
654 return Ok(());
655 }
656 depth.increment()?;
657 let envelope_size = 8;
658 let bytes_len = max_ordinal as usize * envelope_size;
659 #[allow(unused_variables)]
660 let offset = encoder.out_of_line_offset(bytes_len);
661 let mut _prev_end_offset: usize = 0;
662 if 1 > max_ordinal {
663 return Ok(());
664 }
665
666 let cur_offset: usize = (1 - 1) * envelope_size;
669
670 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
672
673 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Subnet, D>(
678 self.addr.as_ref().map(
679 <fidl_fuchsia_net__common::Subnet as fidl::encoding::ValueTypeMarker>::borrow,
680 ),
681 encoder,
682 offset + cur_offset,
683 depth,
684 )?;
685
686 _prev_end_offset = cur_offset + envelope_size;
687 if 2 > max_ordinal {
688 return Ok(());
689 }
690
691 let cur_offset: usize = (2 - 1) * envelope_size;
694
695 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
697
698 fidl::encoding::encode_in_envelope_optional::<i64, D>(
703 self.valid_until.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
704 encoder,
705 offset + cur_offset,
706 depth,
707 )?;
708
709 _prev_end_offset = cur_offset + envelope_size;
710 if 3 > max_ordinal {
711 return Ok(());
712 }
713
714 let cur_offset: usize = (3 - 1) * envelope_size;
717
718 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
720
721 fidl::encoding::encode_in_envelope_optional::<PreferredLifetimeInfo, D>(
726 self.preferred_lifetime_info
727 .as_ref()
728 .map(<PreferredLifetimeInfo as fidl::encoding::ValueTypeMarker>::borrow),
729 encoder,
730 offset + cur_offset,
731 depth,
732 )?;
733
734 _prev_end_offset = cur_offset + envelope_size;
735 if 4 > max_ordinal {
736 return Ok(());
737 }
738
739 let cur_offset: usize = (4 - 1) * envelope_size;
742
743 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
745
746 fidl::encoding::encode_in_envelope_optional::<AddressAssignmentState, D>(
751 self.assignment_state
752 .as_ref()
753 .map(<AddressAssignmentState as fidl::encoding::ValueTypeMarker>::borrow),
754 encoder,
755 offset + cur_offset,
756 depth,
757 )?;
758
759 _prev_end_offset = cur_offset + envelope_size;
760
761 Ok(())
762 }
763 }
764
765 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Address {
766 #[inline(always)]
767 fn new_empty() -> Self {
768 Self::default()
769 }
770
771 unsafe fn decode(
772 &mut self,
773 decoder: &mut fidl::encoding::Decoder<'_, D>,
774 offset: usize,
775 mut depth: fidl::encoding::Depth,
776 ) -> fidl::Result<()> {
777 decoder.debug_check_bounds::<Self>(offset);
778 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
779 None => return Err(fidl::Error::NotNullable),
780 Some(len) => len,
781 };
782 if len == 0 {
784 return Ok(());
785 };
786 depth.increment()?;
787 let envelope_size = 8;
788 let bytes_len = len * envelope_size;
789 let offset = decoder.out_of_line_offset(bytes_len)?;
790 let mut _next_ordinal_to_read = 0;
792 let mut next_offset = offset;
793 let end_offset = offset + bytes_len;
794 _next_ordinal_to_read += 1;
795 if next_offset >= end_offset {
796 return Ok(());
797 }
798
799 while _next_ordinal_to_read < 1 {
801 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
802 _next_ordinal_to_read += 1;
803 next_offset += envelope_size;
804 }
805
806 let next_out_of_line = decoder.next_out_of_line();
807 let handles_before = decoder.remaining_handles();
808 if let Some((inlined, num_bytes, num_handles)) =
809 fidl::encoding::decode_envelope_header(decoder, next_offset)?
810 {
811 let member_inline_size =
812 <fidl_fuchsia_net__common::Subnet as fidl::encoding::TypeMarker>::inline_size(
813 decoder.context,
814 );
815 if inlined != (member_inline_size <= 4) {
816 return Err(fidl::Error::InvalidInlineBitInEnvelope);
817 }
818 let inner_offset;
819 let mut inner_depth = depth.clone();
820 if inlined {
821 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
822 inner_offset = next_offset;
823 } else {
824 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
825 inner_depth.increment()?;
826 }
827 let val_ref = self
828 .addr
829 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_net__common::Subnet, D));
830 fidl::decode!(
831 fidl_fuchsia_net__common::Subnet,
832 D,
833 val_ref,
834 decoder,
835 inner_offset,
836 inner_depth
837 )?;
838 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
839 {
840 return Err(fidl::Error::InvalidNumBytesInEnvelope);
841 }
842 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
843 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
844 }
845 }
846
847 next_offset += envelope_size;
848 _next_ordinal_to_read += 1;
849 if next_offset >= end_offset {
850 return Ok(());
851 }
852
853 while _next_ordinal_to_read < 2 {
855 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
856 _next_ordinal_to_read += 1;
857 next_offset += envelope_size;
858 }
859
860 let next_out_of_line = decoder.next_out_of_line();
861 let handles_before = decoder.remaining_handles();
862 if let Some((inlined, num_bytes, num_handles)) =
863 fidl::encoding::decode_envelope_header(decoder, next_offset)?
864 {
865 let member_inline_size =
866 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
867 if inlined != (member_inline_size <= 4) {
868 return Err(fidl::Error::InvalidInlineBitInEnvelope);
869 }
870 let inner_offset;
871 let mut inner_depth = depth.clone();
872 if inlined {
873 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
874 inner_offset = next_offset;
875 } else {
876 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
877 inner_depth.increment()?;
878 }
879 let val_ref = self.valid_until.get_or_insert_with(|| fidl::new_empty!(i64, D));
880 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
881 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
882 {
883 return Err(fidl::Error::InvalidNumBytesInEnvelope);
884 }
885 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
886 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
887 }
888 }
889
890 next_offset += envelope_size;
891 _next_ordinal_to_read += 1;
892 if next_offset >= end_offset {
893 return Ok(());
894 }
895
896 while _next_ordinal_to_read < 3 {
898 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
899 _next_ordinal_to_read += 1;
900 next_offset += envelope_size;
901 }
902
903 let next_out_of_line = decoder.next_out_of_line();
904 let handles_before = decoder.remaining_handles();
905 if let Some((inlined, num_bytes, num_handles)) =
906 fidl::encoding::decode_envelope_header(decoder, next_offset)?
907 {
908 let member_inline_size =
909 <PreferredLifetimeInfo as fidl::encoding::TypeMarker>::inline_size(
910 decoder.context,
911 );
912 if inlined != (member_inline_size <= 4) {
913 return Err(fidl::Error::InvalidInlineBitInEnvelope);
914 }
915 let inner_offset;
916 let mut inner_depth = depth.clone();
917 if inlined {
918 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
919 inner_offset = next_offset;
920 } else {
921 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
922 inner_depth.increment()?;
923 }
924 let val_ref = self
925 .preferred_lifetime_info
926 .get_or_insert_with(|| fidl::new_empty!(PreferredLifetimeInfo, D));
927 fidl::decode!(
928 PreferredLifetimeInfo,
929 D,
930 val_ref,
931 decoder,
932 inner_offset,
933 inner_depth
934 )?;
935 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
936 {
937 return Err(fidl::Error::InvalidNumBytesInEnvelope);
938 }
939 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
940 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
941 }
942 }
943
944 next_offset += envelope_size;
945 _next_ordinal_to_read += 1;
946 if next_offset >= end_offset {
947 return Ok(());
948 }
949
950 while _next_ordinal_to_read < 4 {
952 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
953 _next_ordinal_to_read += 1;
954 next_offset += envelope_size;
955 }
956
957 let next_out_of_line = decoder.next_out_of_line();
958 let handles_before = decoder.remaining_handles();
959 if let Some((inlined, num_bytes, num_handles)) =
960 fidl::encoding::decode_envelope_header(decoder, next_offset)?
961 {
962 let member_inline_size =
963 <AddressAssignmentState as fidl::encoding::TypeMarker>::inline_size(
964 decoder.context,
965 );
966 if inlined != (member_inline_size <= 4) {
967 return Err(fidl::Error::InvalidInlineBitInEnvelope);
968 }
969 let inner_offset;
970 let mut inner_depth = depth.clone();
971 if inlined {
972 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
973 inner_offset = next_offset;
974 } else {
975 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
976 inner_depth.increment()?;
977 }
978 let val_ref = self
979 .assignment_state
980 .get_or_insert_with(|| fidl::new_empty!(AddressAssignmentState, D));
981 fidl::decode!(
982 AddressAssignmentState,
983 D,
984 val_ref,
985 decoder,
986 inner_offset,
987 inner_depth
988 )?;
989 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
990 {
991 return Err(fidl::Error::InvalidNumBytesInEnvelope);
992 }
993 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
994 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
995 }
996 }
997
998 next_offset += envelope_size;
999
1000 while next_offset < end_offset {
1002 _next_ordinal_to_read += 1;
1003 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1004 next_offset += envelope_size;
1005 }
1006
1007 Ok(())
1008 }
1009 }
1010
1011 impl Properties {
1012 #[inline(always)]
1013 fn max_ordinal_present(&self) -> u64 {
1014 if let Some(_) = self.port_identity_koid {
1015 return 9;
1016 }
1017 if let Some(_) = self.port_class {
1018 return 8;
1019 }
1020 if let Some(_) = self.name {
1021 return 7;
1022 }
1023 if let Some(_) = self.has_default_ipv6_route {
1024 return 6;
1025 }
1026 if let Some(_) = self.has_default_ipv4_route {
1027 return 5;
1028 }
1029 if let Some(_) = self.online {
1030 return 3;
1031 }
1032 if let Some(_) = self.addresses {
1033 return 2;
1034 }
1035 if let Some(_) = self.id {
1036 return 1;
1037 }
1038 0
1039 }
1040 }
1041
1042 impl fidl::encoding::ValueTypeMarker for Properties {
1043 type Borrowed<'a> = &'a Self;
1044 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1045 value
1046 }
1047 }
1048
1049 unsafe impl fidl::encoding::TypeMarker for Properties {
1050 type Owned = Self;
1051
1052 #[inline(always)]
1053 fn inline_align(_context: fidl::encoding::Context) -> usize {
1054 8
1055 }
1056
1057 #[inline(always)]
1058 fn inline_size(_context: fidl::encoding::Context) -> usize {
1059 16
1060 }
1061 }
1062
1063 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Properties, D>
1064 for &Properties
1065 {
1066 unsafe fn encode(
1067 self,
1068 encoder: &mut fidl::encoding::Encoder<'_, D>,
1069 offset: usize,
1070 mut depth: fidl::encoding::Depth,
1071 ) -> fidl::Result<()> {
1072 encoder.debug_check_bounds::<Properties>(offset);
1073 let max_ordinal: u64 = self.max_ordinal_present();
1075 encoder.write_num(max_ordinal, offset);
1076 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1077 if max_ordinal == 0 {
1079 return Ok(());
1080 }
1081 depth.increment()?;
1082 let envelope_size = 8;
1083 let bytes_len = max_ordinal as usize * envelope_size;
1084 #[allow(unused_variables)]
1085 let offset = encoder.out_of_line_offset(bytes_len);
1086 let mut _prev_end_offset: usize = 0;
1087 if 1 > max_ordinal {
1088 return Ok(());
1089 }
1090
1091 let cur_offset: usize = (1 - 1) * envelope_size;
1094
1095 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1097
1098 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1103 self.id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1104 encoder,
1105 offset + cur_offset,
1106 depth,
1107 )?;
1108
1109 _prev_end_offset = cur_offset + envelope_size;
1110 if 2 > max_ordinal {
1111 return Ok(());
1112 }
1113
1114 let cur_offset: usize = (2 - 1) * envelope_size;
1117
1118 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1120
1121 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Address>, D>(
1126 self.addresses.as_ref().map(<fidl::encoding::UnboundedVector<Address> as fidl::encoding::ValueTypeMarker>::borrow),
1127 encoder, offset + cur_offset, depth
1128 )?;
1129
1130 _prev_end_offset = cur_offset + envelope_size;
1131 if 3 > max_ordinal {
1132 return Ok(());
1133 }
1134
1135 let cur_offset: usize = (3 - 1) * envelope_size;
1138
1139 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1141
1142 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1147 self.online.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1148 encoder,
1149 offset + cur_offset,
1150 depth,
1151 )?;
1152
1153 _prev_end_offset = cur_offset + envelope_size;
1154 if 5 > max_ordinal {
1155 return Ok(());
1156 }
1157
1158 let cur_offset: usize = (5 - 1) * envelope_size;
1161
1162 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1164
1165 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1170 self.has_default_ipv4_route
1171 .as_ref()
1172 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1173 encoder,
1174 offset + cur_offset,
1175 depth,
1176 )?;
1177
1178 _prev_end_offset = cur_offset + envelope_size;
1179 if 6 > max_ordinal {
1180 return Ok(());
1181 }
1182
1183 let cur_offset: usize = (6 - 1) * envelope_size;
1186
1187 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1189
1190 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1195 self.has_default_ipv6_route
1196 .as_ref()
1197 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1198 encoder,
1199 offset + cur_offset,
1200 depth,
1201 )?;
1202
1203 _prev_end_offset = cur_offset + envelope_size;
1204 if 7 > max_ordinal {
1205 return Ok(());
1206 }
1207
1208 let cur_offset: usize = (7 - 1) * envelope_size;
1211
1212 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1214
1215 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<15>, D>(
1220 self.name.as_ref().map(
1221 <fidl::encoding::BoundedString<15> as fidl::encoding::ValueTypeMarker>::borrow,
1222 ),
1223 encoder,
1224 offset + cur_offset,
1225 depth,
1226 )?;
1227
1228 _prev_end_offset = cur_offset + envelope_size;
1229 if 8 > max_ordinal {
1230 return Ok(());
1231 }
1232
1233 let cur_offset: usize = (8 - 1) * envelope_size;
1236
1237 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1239
1240 fidl::encoding::encode_in_envelope_optional::<PortClass, D>(
1245 self.port_class
1246 .as_ref()
1247 .map(<PortClass as fidl::encoding::ValueTypeMarker>::borrow),
1248 encoder,
1249 offset + cur_offset,
1250 depth,
1251 )?;
1252
1253 _prev_end_offset = cur_offset + envelope_size;
1254 if 9 > max_ordinal {
1255 return Ok(());
1256 }
1257
1258 let cur_offset: usize = (9 - 1) * envelope_size;
1261
1262 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1264
1265 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1270 self.port_identity_koid
1271 .as_ref()
1272 .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1273 encoder,
1274 offset + cur_offset,
1275 depth,
1276 )?;
1277
1278 _prev_end_offset = cur_offset + envelope_size;
1279
1280 Ok(())
1281 }
1282 }
1283
1284 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Properties {
1285 #[inline(always)]
1286 fn new_empty() -> Self {
1287 Self::default()
1288 }
1289
1290 unsafe fn decode(
1291 &mut self,
1292 decoder: &mut fidl::encoding::Decoder<'_, D>,
1293 offset: usize,
1294 mut depth: fidl::encoding::Depth,
1295 ) -> fidl::Result<()> {
1296 decoder.debug_check_bounds::<Self>(offset);
1297 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1298 None => return Err(fidl::Error::NotNullable),
1299 Some(len) => len,
1300 };
1301 if len == 0 {
1303 return Ok(());
1304 };
1305 depth.increment()?;
1306 let envelope_size = 8;
1307 let bytes_len = len * envelope_size;
1308 let offset = decoder.out_of_line_offset(bytes_len)?;
1309 let mut _next_ordinal_to_read = 0;
1311 let mut next_offset = offset;
1312 let end_offset = offset + bytes_len;
1313 _next_ordinal_to_read += 1;
1314 if next_offset >= end_offset {
1315 return Ok(());
1316 }
1317
1318 while _next_ordinal_to_read < 1 {
1320 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1321 _next_ordinal_to_read += 1;
1322 next_offset += envelope_size;
1323 }
1324
1325 let next_out_of_line = decoder.next_out_of_line();
1326 let handles_before = decoder.remaining_handles();
1327 if let Some((inlined, num_bytes, num_handles)) =
1328 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1329 {
1330 let member_inline_size =
1331 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1332 if inlined != (member_inline_size <= 4) {
1333 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1334 }
1335 let inner_offset;
1336 let mut inner_depth = depth.clone();
1337 if inlined {
1338 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1339 inner_offset = next_offset;
1340 } else {
1341 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1342 inner_depth.increment()?;
1343 }
1344 let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u64, D));
1345 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1346 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1347 {
1348 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1349 }
1350 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1351 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1352 }
1353 }
1354
1355 next_offset += envelope_size;
1356 _next_ordinal_to_read += 1;
1357 if next_offset >= end_offset {
1358 return Ok(());
1359 }
1360
1361 while _next_ordinal_to_read < 2 {
1363 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1364 _next_ordinal_to_read += 1;
1365 next_offset += envelope_size;
1366 }
1367
1368 let next_out_of_line = decoder.next_out_of_line();
1369 let handles_before = decoder.remaining_handles();
1370 if let Some((inlined, num_bytes, num_handles)) =
1371 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1372 {
1373 let member_inline_size = <fidl::encoding::UnboundedVector<Address> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1374 if inlined != (member_inline_size <= 4) {
1375 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1376 }
1377 let inner_offset;
1378 let mut inner_depth = depth.clone();
1379 if inlined {
1380 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1381 inner_offset = next_offset;
1382 } else {
1383 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1384 inner_depth.increment()?;
1385 }
1386 let val_ref = self.addresses.get_or_insert_with(|| {
1387 fidl::new_empty!(fidl::encoding::UnboundedVector<Address>, D)
1388 });
1389 fidl::decode!(
1390 fidl::encoding::UnboundedVector<Address>,
1391 D,
1392 val_ref,
1393 decoder,
1394 inner_offset,
1395 inner_depth
1396 )?;
1397 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1398 {
1399 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1400 }
1401 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1402 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1403 }
1404 }
1405
1406 next_offset += envelope_size;
1407 _next_ordinal_to_read += 1;
1408 if next_offset >= end_offset {
1409 return Ok(());
1410 }
1411
1412 while _next_ordinal_to_read < 3 {
1414 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1415 _next_ordinal_to_read += 1;
1416 next_offset += envelope_size;
1417 }
1418
1419 let next_out_of_line = decoder.next_out_of_line();
1420 let handles_before = decoder.remaining_handles();
1421 if let Some((inlined, num_bytes, num_handles)) =
1422 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1423 {
1424 let member_inline_size =
1425 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1426 if inlined != (member_inline_size <= 4) {
1427 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1428 }
1429 let inner_offset;
1430 let mut inner_depth = depth.clone();
1431 if inlined {
1432 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1433 inner_offset = next_offset;
1434 } else {
1435 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1436 inner_depth.increment()?;
1437 }
1438 let val_ref = self.online.get_or_insert_with(|| fidl::new_empty!(bool, D));
1439 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1440 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1441 {
1442 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1443 }
1444 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1445 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1446 }
1447 }
1448
1449 next_offset += envelope_size;
1450 _next_ordinal_to_read += 1;
1451 if next_offset >= end_offset {
1452 return Ok(());
1453 }
1454
1455 while _next_ordinal_to_read < 5 {
1457 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1458 _next_ordinal_to_read += 1;
1459 next_offset += envelope_size;
1460 }
1461
1462 let next_out_of_line = decoder.next_out_of_line();
1463 let handles_before = decoder.remaining_handles();
1464 if let Some((inlined, num_bytes, num_handles)) =
1465 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1466 {
1467 let member_inline_size =
1468 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1469 if inlined != (member_inline_size <= 4) {
1470 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1471 }
1472 let inner_offset;
1473 let mut inner_depth = depth.clone();
1474 if inlined {
1475 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1476 inner_offset = next_offset;
1477 } else {
1478 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1479 inner_depth.increment()?;
1480 }
1481 let val_ref =
1482 self.has_default_ipv4_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
1483 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1484 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1485 {
1486 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1487 }
1488 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1489 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1490 }
1491 }
1492
1493 next_offset += envelope_size;
1494 _next_ordinal_to_read += 1;
1495 if next_offset >= end_offset {
1496 return Ok(());
1497 }
1498
1499 while _next_ordinal_to_read < 6 {
1501 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1502 _next_ordinal_to_read += 1;
1503 next_offset += envelope_size;
1504 }
1505
1506 let next_out_of_line = decoder.next_out_of_line();
1507 let handles_before = decoder.remaining_handles();
1508 if let Some((inlined, num_bytes, num_handles)) =
1509 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1510 {
1511 let member_inline_size =
1512 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1513 if inlined != (member_inline_size <= 4) {
1514 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1515 }
1516 let inner_offset;
1517 let mut inner_depth = depth.clone();
1518 if inlined {
1519 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1520 inner_offset = next_offset;
1521 } else {
1522 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1523 inner_depth.increment()?;
1524 }
1525 let val_ref =
1526 self.has_default_ipv6_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
1527 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1528 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1529 {
1530 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1531 }
1532 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1533 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1534 }
1535 }
1536
1537 next_offset += envelope_size;
1538 _next_ordinal_to_read += 1;
1539 if next_offset >= end_offset {
1540 return Ok(());
1541 }
1542
1543 while _next_ordinal_to_read < 7 {
1545 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1546 _next_ordinal_to_read += 1;
1547 next_offset += envelope_size;
1548 }
1549
1550 let next_out_of_line = decoder.next_out_of_line();
1551 let handles_before = decoder.remaining_handles();
1552 if let Some((inlined, num_bytes, num_handles)) =
1553 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1554 {
1555 let member_inline_size =
1556 <fidl::encoding::BoundedString<15> as fidl::encoding::TypeMarker>::inline_size(
1557 decoder.context,
1558 );
1559 if inlined != (member_inline_size <= 4) {
1560 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1561 }
1562 let inner_offset;
1563 let mut inner_depth = depth.clone();
1564 if inlined {
1565 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1566 inner_offset = next_offset;
1567 } else {
1568 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1569 inner_depth.increment()?;
1570 }
1571 let val_ref = self
1572 .name
1573 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<15>, D));
1574 fidl::decode!(
1575 fidl::encoding::BoundedString<15>,
1576 D,
1577 val_ref,
1578 decoder,
1579 inner_offset,
1580 inner_depth
1581 )?;
1582 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1583 {
1584 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1585 }
1586 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1587 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1588 }
1589 }
1590
1591 next_offset += envelope_size;
1592 _next_ordinal_to_read += 1;
1593 if next_offset >= end_offset {
1594 return Ok(());
1595 }
1596
1597 while _next_ordinal_to_read < 8 {
1599 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1600 _next_ordinal_to_read += 1;
1601 next_offset += envelope_size;
1602 }
1603
1604 let next_out_of_line = decoder.next_out_of_line();
1605 let handles_before = decoder.remaining_handles();
1606 if let Some((inlined, num_bytes, num_handles)) =
1607 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1608 {
1609 let member_inline_size =
1610 <PortClass as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1611 if inlined != (member_inline_size <= 4) {
1612 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1613 }
1614 let inner_offset;
1615 let mut inner_depth = depth.clone();
1616 if inlined {
1617 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1618 inner_offset = next_offset;
1619 } else {
1620 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1621 inner_depth.increment()?;
1622 }
1623 let val_ref = self.port_class.get_or_insert_with(|| fidl::new_empty!(PortClass, D));
1624 fidl::decode!(PortClass, D, val_ref, decoder, inner_offset, inner_depth)?;
1625 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1626 {
1627 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1628 }
1629 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1630 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1631 }
1632 }
1633
1634 next_offset += envelope_size;
1635 _next_ordinal_to_read += 1;
1636 if next_offset >= end_offset {
1637 return Ok(());
1638 }
1639
1640 while _next_ordinal_to_read < 9 {
1642 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1643 _next_ordinal_to_read += 1;
1644 next_offset += envelope_size;
1645 }
1646
1647 let next_out_of_line = decoder.next_out_of_line();
1648 let handles_before = decoder.remaining_handles();
1649 if let Some((inlined, num_bytes, num_handles)) =
1650 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1651 {
1652 let member_inline_size =
1653 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1654 if inlined != (member_inline_size <= 4) {
1655 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1656 }
1657 let inner_offset;
1658 let mut inner_depth = depth.clone();
1659 if inlined {
1660 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1661 inner_offset = next_offset;
1662 } else {
1663 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1664 inner_depth.increment()?;
1665 }
1666 let val_ref =
1667 self.port_identity_koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
1668 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1669 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1670 {
1671 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1672 }
1673 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1674 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1675 }
1676 }
1677
1678 next_offset += envelope_size;
1679
1680 while next_offset < end_offset {
1682 _next_ordinal_to_read += 1;
1683 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1684 next_offset += envelope_size;
1685 }
1686
1687 Ok(())
1688 }
1689 }
1690
1691 impl WatcherOptions {
1692 #[inline(always)]
1693 fn max_ordinal_present(&self) -> u64 {
1694 if let Some(_) = self.include_non_assigned_addresses {
1695 return 2;
1696 }
1697 if let Some(_) = self.address_properties_interest {
1698 return 1;
1699 }
1700 0
1701 }
1702 }
1703
1704 impl fidl::encoding::ValueTypeMarker for WatcherOptions {
1705 type Borrowed<'a> = &'a Self;
1706 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1707 value
1708 }
1709 }
1710
1711 unsafe impl fidl::encoding::TypeMarker for WatcherOptions {
1712 type Owned = Self;
1713
1714 #[inline(always)]
1715 fn inline_align(_context: fidl::encoding::Context) -> usize {
1716 8
1717 }
1718
1719 #[inline(always)]
1720 fn inline_size(_context: fidl::encoding::Context) -> usize {
1721 16
1722 }
1723 }
1724
1725 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WatcherOptions, D>
1726 for &WatcherOptions
1727 {
1728 unsafe fn encode(
1729 self,
1730 encoder: &mut fidl::encoding::Encoder<'_, D>,
1731 offset: usize,
1732 mut depth: fidl::encoding::Depth,
1733 ) -> fidl::Result<()> {
1734 encoder.debug_check_bounds::<WatcherOptions>(offset);
1735 let max_ordinal: u64 = self.max_ordinal_present();
1737 encoder.write_num(max_ordinal, offset);
1738 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1739 if max_ordinal == 0 {
1741 return Ok(());
1742 }
1743 depth.increment()?;
1744 let envelope_size = 8;
1745 let bytes_len = max_ordinal as usize * envelope_size;
1746 #[allow(unused_variables)]
1747 let offset = encoder.out_of_line_offset(bytes_len);
1748 let mut _prev_end_offset: usize = 0;
1749 if 1 > max_ordinal {
1750 return Ok(());
1751 }
1752
1753 let cur_offset: usize = (1 - 1) * envelope_size;
1756
1757 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1759
1760 fidl::encoding::encode_in_envelope_optional::<AddressPropertiesInterest, D>(
1765 self.address_properties_interest
1766 .as_ref()
1767 .map(<AddressPropertiesInterest as fidl::encoding::ValueTypeMarker>::borrow),
1768 encoder,
1769 offset + cur_offset,
1770 depth,
1771 )?;
1772
1773 _prev_end_offset = cur_offset + envelope_size;
1774 if 2 > max_ordinal {
1775 return Ok(());
1776 }
1777
1778 let cur_offset: usize = (2 - 1) * envelope_size;
1781
1782 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1784
1785 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1790 self.include_non_assigned_addresses
1791 .as_ref()
1792 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1793 encoder,
1794 offset + cur_offset,
1795 depth,
1796 )?;
1797
1798 _prev_end_offset = cur_offset + envelope_size;
1799
1800 Ok(())
1801 }
1802 }
1803
1804 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WatcherOptions {
1805 #[inline(always)]
1806 fn new_empty() -> Self {
1807 Self::default()
1808 }
1809
1810 unsafe fn decode(
1811 &mut self,
1812 decoder: &mut fidl::encoding::Decoder<'_, D>,
1813 offset: usize,
1814 mut depth: fidl::encoding::Depth,
1815 ) -> fidl::Result<()> {
1816 decoder.debug_check_bounds::<Self>(offset);
1817 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1818 None => return Err(fidl::Error::NotNullable),
1819 Some(len) => len,
1820 };
1821 if len == 0 {
1823 return Ok(());
1824 };
1825 depth.increment()?;
1826 let envelope_size = 8;
1827 let bytes_len = len * envelope_size;
1828 let offset = decoder.out_of_line_offset(bytes_len)?;
1829 let mut _next_ordinal_to_read = 0;
1831 let mut next_offset = offset;
1832 let end_offset = offset + bytes_len;
1833 _next_ordinal_to_read += 1;
1834 if next_offset >= end_offset {
1835 return Ok(());
1836 }
1837
1838 while _next_ordinal_to_read < 1 {
1840 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1841 _next_ordinal_to_read += 1;
1842 next_offset += envelope_size;
1843 }
1844
1845 let next_out_of_line = decoder.next_out_of_line();
1846 let handles_before = decoder.remaining_handles();
1847 if let Some((inlined, num_bytes, num_handles)) =
1848 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1849 {
1850 let member_inline_size =
1851 <AddressPropertiesInterest as fidl::encoding::TypeMarker>::inline_size(
1852 decoder.context,
1853 );
1854 if inlined != (member_inline_size <= 4) {
1855 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1856 }
1857 let inner_offset;
1858 let mut inner_depth = depth.clone();
1859 if inlined {
1860 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1861 inner_offset = next_offset;
1862 } else {
1863 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1864 inner_depth.increment()?;
1865 }
1866 let val_ref = self
1867 .address_properties_interest
1868 .get_or_insert_with(|| fidl::new_empty!(AddressPropertiesInterest, D));
1869 fidl::decode!(
1870 AddressPropertiesInterest,
1871 D,
1872 val_ref,
1873 decoder,
1874 inner_offset,
1875 inner_depth
1876 )?;
1877 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1878 {
1879 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1880 }
1881 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1882 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1883 }
1884 }
1885
1886 next_offset += envelope_size;
1887 _next_ordinal_to_read += 1;
1888 if next_offset >= end_offset {
1889 return Ok(());
1890 }
1891
1892 while _next_ordinal_to_read < 2 {
1894 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1895 _next_ordinal_to_read += 1;
1896 next_offset += envelope_size;
1897 }
1898
1899 let next_out_of_line = decoder.next_out_of_line();
1900 let handles_before = decoder.remaining_handles();
1901 if let Some((inlined, num_bytes, num_handles)) =
1902 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1903 {
1904 let member_inline_size =
1905 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1906 if inlined != (member_inline_size <= 4) {
1907 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1908 }
1909 let inner_offset;
1910 let mut inner_depth = depth.clone();
1911 if inlined {
1912 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1913 inner_offset = next_offset;
1914 } else {
1915 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1916 inner_depth.increment()?;
1917 }
1918 let val_ref = self
1919 .include_non_assigned_addresses
1920 .get_or_insert_with(|| fidl::new_empty!(bool, D));
1921 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1922 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1923 {
1924 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1925 }
1926 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1927 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1928 }
1929 }
1930
1931 next_offset += envelope_size;
1932
1933 while next_offset < end_offset {
1935 _next_ordinal_to_read += 1;
1936 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1937 next_offset += envelope_size;
1938 }
1939
1940 Ok(())
1941 }
1942 }
1943
1944 impl fidl::encoding::ValueTypeMarker for Event {
1945 type Borrowed<'a> = &'a Self;
1946 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1947 value
1948 }
1949 }
1950
1951 unsafe impl fidl::encoding::TypeMarker for Event {
1952 type Owned = Self;
1953
1954 #[inline(always)]
1955 fn inline_align(_context: fidl::encoding::Context) -> usize {
1956 8
1957 }
1958
1959 #[inline(always)]
1960 fn inline_size(_context: fidl::encoding::Context) -> usize {
1961 16
1962 }
1963 }
1964
1965 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Event, D> for &Event {
1966 #[inline]
1967 unsafe fn encode(
1968 self,
1969 encoder: &mut fidl::encoding::Encoder<'_, D>,
1970 offset: usize,
1971 _depth: fidl::encoding::Depth,
1972 ) -> fidl::Result<()> {
1973 encoder.debug_check_bounds::<Event>(offset);
1974 encoder.write_num::<u64>(self.ordinal(), offset);
1975 match self {
1976 Event::Existing(ref val) => fidl::encoding::encode_in_envelope::<Properties, D>(
1977 <Properties as fidl::encoding::ValueTypeMarker>::borrow(val),
1978 encoder,
1979 offset + 8,
1980 _depth,
1981 ),
1982 Event::Added(ref val) => fidl::encoding::encode_in_envelope::<Properties, D>(
1983 <Properties as fidl::encoding::ValueTypeMarker>::borrow(val),
1984 encoder,
1985 offset + 8,
1986 _depth,
1987 ),
1988 Event::Removed(ref val) => fidl::encoding::encode_in_envelope::<u64, D>(
1989 <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
1990 encoder,
1991 offset + 8,
1992 _depth,
1993 ),
1994 Event::Changed(ref val) => fidl::encoding::encode_in_envelope::<Properties, D>(
1995 <Properties as fidl::encoding::ValueTypeMarker>::borrow(val),
1996 encoder,
1997 offset + 8,
1998 _depth,
1999 ),
2000 Event::Idle(ref val) => fidl::encoding::encode_in_envelope::<Empty, D>(
2001 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2002 encoder,
2003 offset + 8,
2004 _depth,
2005 ),
2006 }
2007 }
2008 }
2009
2010 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Event {
2011 #[inline(always)]
2012 fn new_empty() -> Self {
2013 Self::Existing(fidl::new_empty!(Properties, D))
2014 }
2015
2016 #[inline]
2017 unsafe fn decode(
2018 &mut self,
2019 decoder: &mut fidl::encoding::Decoder<'_, D>,
2020 offset: usize,
2021 mut depth: fidl::encoding::Depth,
2022 ) -> fidl::Result<()> {
2023 decoder.debug_check_bounds::<Self>(offset);
2024 #[allow(unused_variables)]
2025 let next_out_of_line = decoder.next_out_of_line();
2026 let handles_before = decoder.remaining_handles();
2027 let (ordinal, inlined, num_bytes, num_handles) =
2028 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2029
2030 let member_inline_size = match ordinal {
2031 1 => <Properties as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2032 2 => <Properties as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2033 3 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2034 4 => <Properties as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2035 5 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2036 _ => return Err(fidl::Error::UnknownUnionTag),
2037 };
2038
2039 if inlined != (member_inline_size <= 4) {
2040 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2041 }
2042 let _inner_offset;
2043 if inlined {
2044 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2045 _inner_offset = offset + 8;
2046 } else {
2047 depth.increment()?;
2048 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2049 }
2050 match ordinal {
2051 1 => {
2052 #[allow(irrefutable_let_patterns)]
2053 if let Event::Existing(_) = self {
2054 } else {
2056 *self = Event::Existing(fidl::new_empty!(Properties, D));
2058 }
2059 #[allow(irrefutable_let_patterns)]
2060 if let Event::Existing(ref mut val) = self {
2061 fidl::decode!(Properties, D, val, decoder, _inner_offset, depth)?;
2062 } else {
2063 unreachable!()
2064 }
2065 }
2066 2 => {
2067 #[allow(irrefutable_let_patterns)]
2068 if let Event::Added(_) = self {
2069 } else {
2071 *self = Event::Added(fidl::new_empty!(Properties, D));
2073 }
2074 #[allow(irrefutable_let_patterns)]
2075 if let Event::Added(ref mut val) = self {
2076 fidl::decode!(Properties, D, val, decoder, _inner_offset, depth)?;
2077 } else {
2078 unreachable!()
2079 }
2080 }
2081 3 => {
2082 #[allow(irrefutable_let_patterns)]
2083 if let Event::Removed(_) = self {
2084 } else {
2086 *self = Event::Removed(fidl::new_empty!(u64, D));
2088 }
2089 #[allow(irrefutable_let_patterns)]
2090 if let Event::Removed(ref mut val) = self {
2091 fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
2092 } else {
2093 unreachable!()
2094 }
2095 }
2096 4 => {
2097 #[allow(irrefutable_let_patterns)]
2098 if let Event::Changed(_) = self {
2099 } else {
2101 *self = Event::Changed(fidl::new_empty!(Properties, D));
2103 }
2104 #[allow(irrefutable_let_patterns)]
2105 if let Event::Changed(ref mut val) = self {
2106 fidl::decode!(Properties, D, val, decoder, _inner_offset, depth)?;
2107 } else {
2108 unreachable!()
2109 }
2110 }
2111 5 => {
2112 #[allow(irrefutable_let_patterns)]
2113 if let Event::Idle(_) = self {
2114 } else {
2116 *self = Event::Idle(fidl::new_empty!(Empty, D));
2118 }
2119 #[allow(irrefutable_let_patterns)]
2120 if let Event::Idle(ref mut val) = self {
2121 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2122 } else {
2123 unreachable!()
2124 }
2125 }
2126 ordinal => panic!("unexpected ordinal {:?}", ordinal),
2127 }
2128 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2129 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2130 }
2131 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2132 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2133 }
2134 Ok(())
2135 }
2136 }
2137
2138 impl fidl::encoding::ValueTypeMarker for PortClass {
2139 type Borrowed<'a> = &'a Self;
2140 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2141 value
2142 }
2143 }
2144
2145 unsafe impl fidl::encoding::TypeMarker for PortClass {
2146 type Owned = Self;
2147
2148 #[inline(always)]
2149 fn inline_align(_context: fidl::encoding::Context) -> usize {
2150 8
2151 }
2152
2153 #[inline(always)]
2154 fn inline_size(_context: fidl::encoding::Context) -> usize {
2155 16
2156 }
2157 }
2158
2159 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PortClass, D>
2160 for &PortClass
2161 {
2162 #[inline]
2163 unsafe fn encode(
2164 self,
2165 encoder: &mut fidl::encoding::Encoder<'_, D>,
2166 offset: usize,
2167 _depth: fidl::encoding::Depth,
2168 ) -> fidl::Result<()> {
2169 encoder.debug_check_bounds::<PortClass>(offset);
2170 encoder.write_num::<u64>(self.ordinal(), offset);
2171 match self {
2172 PortClass::Loopback(ref val) => {
2173 fidl::encoding::encode_in_envelope::<Empty, D>(
2174 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2175 encoder, offset + 8, _depth
2176 )
2177 }
2178 PortClass::Device(ref val) => {
2179 fidl::encoding::encode_in_envelope::<fidl_fuchsia_hardware_network__common::PortClass, D>(
2180 <fidl_fuchsia_hardware_network__common::PortClass as fidl::encoding::ValueTypeMarker>::borrow(val),
2181 encoder, offset + 8, _depth
2182 )
2183 }
2184 PortClass::Blackhole(ref val) => {
2185 fidl::encoding::encode_in_envelope::<Empty, D>(
2186 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2187 encoder, offset + 8, _depth
2188 )
2189 }
2190 PortClass::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
2191 }
2192 }
2193 }
2194
2195 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PortClass {
2196 #[inline(always)]
2197 fn new_empty() -> Self {
2198 Self::__SourceBreaking { unknown_ordinal: 0 }
2199 }
2200
2201 #[inline]
2202 unsafe fn decode(
2203 &mut self,
2204 decoder: &mut fidl::encoding::Decoder<'_, D>,
2205 offset: usize,
2206 mut depth: fidl::encoding::Depth,
2207 ) -> fidl::Result<()> {
2208 decoder.debug_check_bounds::<Self>(offset);
2209 #[allow(unused_variables)]
2210 let next_out_of_line = decoder.next_out_of_line();
2211 let handles_before = decoder.remaining_handles();
2212 let (ordinal, inlined, num_bytes, num_handles) =
2213 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2214
2215 let member_inline_size = match ordinal {
2216 1 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2217 2 => <fidl_fuchsia_hardware_network__common::PortClass as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2218 3 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2219 0 => return Err(fidl::Error::UnknownUnionTag),
2220 _ => num_bytes as usize,
2221 };
2222
2223 if inlined != (member_inline_size <= 4) {
2224 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2225 }
2226 let _inner_offset;
2227 if inlined {
2228 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2229 _inner_offset = offset + 8;
2230 } else {
2231 depth.increment()?;
2232 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2233 }
2234 match ordinal {
2235 1 => {
2236 #[allow(irrefutable_let_patterns)]
2237 if let PortClass::Loopback(_) = self {
2238 } else {
2240 *self = PortClass::Loopback(fidl::new_empty!(Empty, D));
2242 }
2243 #[allow(irrefutable_let_patterns)]
2244 if let PortClass::Loopback(ref mut val) = self {
2245 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2246 } else {
2247 unreachable!()
2248 }
2249 }
2250 2 => {
2251 #[allow(irrefutable_let_patterns)]
2252 if let PortClass::Device(_) = self {
2253 } else {
2255 *self = PortClass::Device(fidl::new_empty!(
2257 fidl_fuchsia_hardware_network__common::PortClass,
2258 D
2259 ));
2260 }
2261 #[allow(irrefutable_let_patterns)]
2262 if let PortClass::Device(ref mut val) = self {
2263 fidl::decode!(
2264 fidl_fuchsia_hardware_network__common::PortClass,
2265 D,
2266 val,
2267 decoder,
2268 _inner_offset,
2269 depth
2270 )?;
2271 } else {
2272 unreachable!()
2273 }
2274 }
2275 3 => {
2276 #[allow(irrefutable_let_patterns)]
2277 if let PortClass::Blackhole(_) = self {
2278 } else {
2280 *self = PortClass::Blackhole(fidl::new_empty!(Empty, D));
2282 }
2283 #[allow(irrefutable_let_patterns)]
2284 if let PortClass::Blackhole(ref mut val) = self {
2285 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2286 } else {
2287 unreachable!()
2288 }
2289 }
2290 #[allow(deprecated)]
2291 ordinal => {
2292 for _ in 0..num_handles {
2293 decoder.drop_next_handle()?;
2294 }
2295 *self = PortClass::__SourceBreaking { unknown_ordinal: ordinal };
2296 }
2297 }
2298 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2299 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2300 }
2301 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2302 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2303 }
2304 Ok(())
2305 }
2306 }
2307
2308 impl fidl::encoding::ValueTypeMarker for PreferredLifetimeInfo {
2309 type Borrowed<'a> = &'a Self;
2310 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2311 value
2312 }
2313 }
2314
2315 unsafe impl fidl::encoding::TypeMarker for PreferredLifetimeInfo {
2316 type Owned = Self;
2317
2318 #[inline(always)]
2319 fn inline_align(_context: fidl::encoding::Context) -> usize {
2320 8
2321 }
2322
2323 #[inline(always)]
2324 fn inline_size(_context: fidl::encoding::Context) -> usize {
2325 16
2326 }
2327 }
2328
2329 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PreferredLifetimeInfo, D>
2330 for &PreferredLifetimeInfo
2331 {
2332 #[inline]
2333 unsafe fn encode(
2334 self,
2335 encoder: &mut fidl::encoding::Encoder<'_, D>,
2336 offset: usize,
2337 _depth: fidl::encoding::Depth,
2338 ) -> fidl::Result<()> {
2339 encoder.debug_check_bounds::<PreferredLifetimeInfo>(offset);
2340 encoder.write_num::<u64>(self.ordinal(), offset);
2341 match self {
2342 PreferredLifetimeInfo::PreferredUntil(ref val) => {
2343 fidl::encoding::encode_in_envelope::<i64, D>(
2344 <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
2345 encoder,
2346 offset + 8,
2347 _depth,
2348 )
2349 }
2350 PreferredLifetimeInfo::Deprecated(ref val) => {
2351 fidl::encoding::encode_in_envelope::<Empty, D>(
2352 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2353 encoder,
2354 offset + 8,
2355 _depth,
2356 )
2357 }
2358 }
2359 }
2360 }
2361
2362 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PreferredLifetimeInfo {
2363 #[inline(always)]
2364 fn new_empty() -> Self {
2365 Self::PreferredUntil(fidl::new_empty!(i64, D))
2366 }
2367
2368 #[inline]
2369 unsafe fn decode(
2370 &mut self,
2371 decoder: &mut fidl::encoding::Decoder<'_, D>,
2372 offset: usize,
2373 mut depth: fidl::encoding::Depth,
2374 ) -> fidl::Result<()> {
2375 decoder.debug_check_bounds::<Self>(offset);
2376 #[allow(unused_variables)]
2377 let next_out_of_line = decoder.next_out_of_line();
2378 let handles_before = decoder.remaining_handles();
2379 let (ordinal, inlined, num_bytes, num_handles) =
2380 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2381
2382 let member_inline_size = match ordinal {
2383 1 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2384 2 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2385 _ => return Err(fidl::Error::UnknownUnionTag),
2386 };
2387
2388 if inlined != (member_inline_size <= 4) {
2389 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2390 }
2391 let _inner_offset;
2392 if inlined {
2393 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2394 _inner_offset = offset + 8;
2395 } else {
2396 depth.increment()?;
2397 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2398 }
2399 match ordinal {
2400 1 => {
2401 #[allow(irrefutable_let_patterns)]
2402 if let PreferredLifetimeInfo::PreferredUntil(_) = self {
2403 } else {
2405 *self = PreferredLifetimeInfo::PreferredUntil(fidl::new_empty!(i64, D));
2407 }
2408 #[allow(irrefutable_let_patterns)]
2409 if let PreferredLifetimeInfo::PreferredUntil(ref mut val) = self {
2410 fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
2411 } else {
2412 unreachable!()
2413 }
2414 }
2415 2 => {
2416 #[allow(irrefutable_let_patterns)]
2417 if let PreferredLifetimeInfo::Deprecated(_) = self {
2418 } else {
2420 *self = PreferredLifetimeInfo::Deprecated(fidl::new_empty!(Empty, D));
2422 }
2423 #[allow(irrefutable_let_patterns)]
2424 if let PreferredLifetimeInfo::Deprecated(ref mut val) = self {
2425 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2426 } else {
2427 unreachable!()
2428 }
2429 }
2430 ordinal => panic!("unexpected ordinal {:?}", ordinal),
2431 }
2432 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2433 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2434 }
2435 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2436 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2437 }
2438 Ok(())
2439 }
2440 }
2441}