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 pub port_identity_koid_filter: Option<u64>,
179 #[doc(hidden)]
180 pub __source_breaking: fidl::marker::SourceBreaking,
181}
182
183impl fidl::Persistable for WatcherOptions {}
184
185#[derive(Clone, Debug, PartialEq)]
186pub enum Event {
187 Existing(Properties),
191 Added(Properties),
195 Removed(u64),
197 Changed(Properties),
202 Idle(Empty),
205}
206
207impl Event {
208 #[inline]
209 pub fn ordinal(&self) -> u64 {
210 match *self {
211 Self::Existing(_) => 1,
212 Self::Added(_) => 2,
213 Self::Removed(_) => 3,
214 Self::Changed(_) => 4,
215 Self::Idle(_) => 5,
216 }
217 }
218}
219
220impl fidl::Persistable for Event {}
221
222#[derive(Clone, Debug)]
224pub enum PortClass {
225 Loopback(Empty),
227 Device(fidl_fuchsia_hardware_network__common::PortClass),
229 Blackhole(Empty),
231 #[doc(hidden)]
232 __SourceBreaking { unknown_ordinal: u64 },
233}
234
235#[macro_export]
237macro_rules! PortClassUnknown {
238 () => {
239 _
240 };
241}
242
243impl PartialEq for PortClass {
245 fn eq(&self, other: &Self) -> bool {
246 match (self, other) {
247 (Self::Loopback(x), Self::Loopback(y)) => *x == *y,
248 (Self::Device(x), Self::Device(y)) => *x == *y,
249 (Self::Blackhole(x), Self::Blackhole(y)) => *x == *y,
250 _ => false,
251 }
252 }
253}
254
255impl PortClass {
256 #[inline]
257 pub fn ordinal(&self) -> u64 {
258 match *self {
259 Self::Loopback(_) => 1,
260 Self::Device(_) => 2,
261 Self::Blackhole(_) => 3,
262 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
263 }
264 }
265
266 #[inline]
267 pub fn unknown_variant_for_testing() -> Self {
268 Self::__SourceBreaking { unknown_ordinal: 0 }
269 }
270
271 #[inline]
272 pub fn is_unknown(&self) -> bool {
273 match self {
274 Self::__SourceBreaking { .. } => true,
275 _ => false,
276 }
277 }
278}
279
280impl fidl::Persistable for PortClass {}
281
282#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
285pub enum PreferredLifetimeInfo {
286 PreferredUntil(i64),
302 Deprecated(Empty),
316}
317
318impl PreferredLifetimeInfo {
319 #[inline]
320 pub fn ordinal(&self) -> u64 {
321 match *self {
322 Self::PreferredUntil(_) => 1,
323 Self::Deprecated(_) => 2,
324 }
325 }
326}
327
328impl fidl::Persistable for PreferredLifetimeInfo {}
329
330pub mod state_ordinals {
331 pub const GET_WATCHER: u64 = 0x4fe223c98b263ae3;
332}
333
334pub mod watcher_ordinals {
335 pub const WATCH: u64 = 0x550767aa9faeeef3;
336}
337
338mod internal {
339 use super::*;
340 unsafe impl fidl::encoding::TypeMarker for AddressPropertiesInterest {
341 type Owned = Self;
342
343 #[inline(always)]
344 fn inline_align(_context: fidl::encoding::Context) -> usize {
345 8
346 }
347
348 #[inline(always)]
349 fn inline_size(_context: fidl::encoding::Context) -> usize {
350 8
351 }
352 }
353
354 impl fidl::encoding::ValueTypeMarker for AddressPropertiesInterest {
355 type Borrowed<'a> = Self;
356 #[inline(always)]
357 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
358 *value
359 }
360 }
361
362 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
363 for AddressPropertiesInterest
364 {
365 #[inline]
366 unsafe fn encode(
367 self,
368 encoder: &mut fidl::encoding::Encoder<'_, D>,
369 offset: usize,
370 _depth: fidl::encoding::Depth,
371 ) -> fidl::Result<()> {
372 encoder.debug_check_bounds::<Self>(offset);
373 encoder.write_num(self.bits(), offset);
374 Ok(())
375 }
376 }
377
378 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
379 for AddressPropertiesInterest
380 {
381 #[inline(always)]
382 fn new_empty() -> Self {
383 Self::empty()
384 }
385
386 #[inline]
387 unsafe fn decode(
388 &mut self,
389 decoder: &mut fidl::encoding::Decoder<'_, D>,
390 offset: usize,
391 _depth: fidl::encoding::Depth,
392 ) -> fidl::Result<()> {
393 decoder.debug_check_bounds::<Self>(offset);
394 let prim = decoder.read_num::<u64>(offset);
395 *self = Self::from_bits_allow_unknown(prim);
396 Ok(())
397 }
398 }
399 unsafe impl fidl::encoding::TypeMarker for AddressAssignmentState {
400 type Owned = Self;
401
402 #[inline(always)]
403 fn inline_align(_context: fidl::encoding::Context) -> usize {
404 std::mem::align_of::<u32>()
405 }
406
407 #[inline(always)]
408 fn inline_size(_context: fidl::encoding::Context) -> usize {
409 std::mem::size_of::<u32>()
410 }
411
412 #[inline(always)]
413 fn encode_is_copy() -> bool {
414 true
415 }
416
417 #[inline(always)]
418 fn decode_is_copy() -> bool {
419 false
420 }
421 }
422
423 impl fidl::encoding::ValueTypeMarker for AddressAssignmentState {
424 type Borrowed<'a> = Self;
425 #[inline(always)]
426 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
427 *value
428 }
429 }
430
431 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
432 for AddressAssignmentState
433 {
434 #[inline]
435 unsafe fn encode(
436 self,
437 encoder: &mut fidl::encoding::Encoder<'_, D>,
438 offset: usize,
439 _depth: fidl::encoding::Depth,
440 ) -> fidl::Result<()> {
441 encoder.debug_check_bounds::<Self>(offset);
442 encoder.write_num(self.into_primitive(), offset);
443 Ok(())
444 }
445 }
446
447 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
448 for AddressAssignmentState
449 {
450 #[inline(always)]
451 fn new_empty() -> Self {
452 Self::Tentative
453 }
454
455 #[inline]
456 unsafe fn decode(
457 &mut self,
458 decoder: &mut fidl::encoding::Decoder<'_, D>,
459 offset: usize,
460 _depth: fidl::encoding::Depth,
461 ) -> fidl::Result<()> {
462 decoder.debug_check_bounds::<Self>(offset);
463 let prim = decoder.read_num::<u32>(offset);
464
465 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
466 Ok(())
467 }
468 }
469
470 impl fidl::encoding::ValueTypeMarker for Empty {
471 type Borrowed<'a> = &'a Self;
472 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
473 value
474 }
475 }
476
477 unsafe impl fidl::encoding::TypeMarker for Empty {
478 type Owned = Self;
479
480 #[inline(always)]
481 fn inline_align(_context: fidl::encoding::Context) -> usize {
482 1
483 }
484
485 #[inline(always)]
486 fn inline_size(_context: fidl::encoding::Context) -> usize {
487 1
488 }
489 }
490
491 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Empty, D> for &Empty {
492 #[inline]
493 unsafe fn encode(
494 self,
495 encoder: &mut fidl::encoding::Encoder<'_, D>,
496 offset: usize,
497 _depth: fidl::encoding::Depth,
498 ) -> fidl::Result<()> {
499 encoder.debug_check_bounds::<Empty>(offset);
500 encoder.write_num(0u8, offset);
501 Ok(())
502 }
503 }
504
505 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Empty {
506 #[inline(always)]
507 fn new_empty() -> Self {
508 Self
509 }
510
511 #[inline]
512 unsafe fn decode(
513 &mut self,
514 decoder: &mut fidl::encoding::Decoder<'_, D>,
515 offset: usize,
516 _depth: fidl::encoding::Depth,
517 ) -> fidl::Result<()> {
518 decoder.debug_check_bounds::<Self>(offset);
519 match decoder.read_num::<u8>(offset) {
520 0 => Ok(()),
521 _ => Err(fidl::Error::Invalid),
522 }
523 }
524 }
525
526 impl fidl::encoding::ValueTypeMarker for WatcherWatchResponse {
527 type Borrowed<'a> = &'a Self;
528 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
529 value
530 }
531 }
532
533 unsafe impl fidl::encoding::TypeMarker for WatcherWatchResponse {
534 type Owned = Self;
535
536 #[inline(always)]
537 fn inline_align(_context: fidl::encoding::Context) -> usize {
538 8
539 }
540
541 #[inline(always)]
542 fn inline_size(_context: fidl::encoding::Context) -> usize {
543 16
544 }
545 }
546
547 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WatcherWatchResponse, D>
548 for &WatcherWatchResponse
549 {
550 #[inline]
551 unsafe fn encode(
552 self,
553 encoder: &mut fidl::encoding::Encoder<'_, D>,
554 offset: usize,
555 _depth: fidl::encoding::Depth,
556 ) -> fidl::Result<()> {
557 encoder.debug_check_bounds::<WatcherWatchResponse>(offset);
558 fidl::encoding::Encode::<WatcherWatchResponse, D>::encode(
560 (<Event as fidl::encoding::ValueTypeMarker>::borrow(&self.event),),
561 encoder,
562 offset,
563 _depth,
564 )
565 }
566 }
567 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Event, D>>
568 fidl::encoding::Encode<WatcherWatchResponse, D> for (T0,)
569 {
570 #[inline]
571 unsafe fn encode(
572 self,
573 encoder: &mut fidl::encoding::Encoder<'_, D>,
574 offset: usize,
575 depth: fidl::encoding::Depth,
576 ) -> fidl::Result<()> {
577 encoder.debug_check_bounds::<WatcherWatchResponse>(offset);
578 self.0.encode(encoder, offset + 0, depth)?;
582 Ok(())
583 }
584 }
585
586 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WatcherWatchResponse {
587 #[inline(always)]
588 fn new_empty() -> Self {
589 Self { event: fidl::new_empty!(Event, D) }
590 }
591
592 #[inline]
593 unsafe fn decode(
594 &mut self,
595 decoder: &mut fidl::encoding::Decoder<'_, D>,
596 offset: usize,
597 _depth: fidl::encoding::Depth,
598 ) -> fidl::Result<()> {
599 decoder.debug_check_bounds::<Self>(offset);
600 fidl::decode!(Event, D, &mut self.event, decoder, offset + 0, _depth)?;
602 Ok(())
603 }
604 }
605
606 impl Address {
607 #[inline(always)]
608 fn max_ordinal_present(&self) -> u64 {
609 if let Some(_) = self.assignment_state {
610 return 4;
611 }
612 if let Some(_) = self.preferred_lifetime_info {
613 return 3;
614 }
615 if let Some(_) = self.valid_until {
616 return 2;
617 }
618 if let Some(_) = self.addr {
619 return 1;
620 }
621 0
622 }
623 }
624
625 impl fidl::encoding::ValueTypeMarker for Address {
626 type Borrowed<'a> = &'a Self;
627 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
628 value
629 }
630 }
631
632 unsafe impl fidl::encoding::TypeMarker for Address {
633 type Owned = Self;
634
635 #[inline(always)]
636 fn inline_align(_context: fidl::encoding::Context) -> usize {
637 8
638 }
639
640 #[inline(always)]
641 fn inline_size(_context: fidl::encoding::Context) -> usize {
642 16
643 }
644 }
645
646 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Address, D> for &Address {
647 unsafe fn encode(
648 self,
649 encoder: &mut fidl::encoding::Encoder<'_, D>,
650 offset: usize,
651 mut depth: fidl::encoding::Depth,
652 ) -> fidl::Result<()> {
653 encoder.debug_check_bounds::<Address>(offset);
654 let max_ordinal: u64 = self.max_ordinal_present();
656 encoder.write_num(max_ordinal, offset);
657 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
658 if max_ordinal == 0 {
660 return Ok(());
661 }
662 depth.increment()?;
663 let envelope_size = 8;
664 let bytes_len = max_ordinal as usize * envelope_size;
665 #[allow(unused_variables)]
666 let offset = encoder.out_of_line_offset(bytes_len);
667 let mut _prev_end_offset: usize = 0;
668 if 1 > max_ordinal {
669 return Ok(());
670 }
671
672 let cur_offset: usize = (1 - 1) * envelope_size;
675
676 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
678
679 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Subnet, D>(
684 self.addr.as_ref().map(
685 <fidl_fuchsia_net__common::Subnet as fidl::encoding::ValueTypeMarker>::borrow,
686 ),
687 encoder,
688 offset + cur_offset,
689 depth,
690 )?;
691
692 _prev_end_offset = cur_offset + envelope_size;
693 if 2 > max_ordinal {
694 return Ok(());
695 }
696
697 let cur_offset: usize = (2 - 1) * envelope_size;
700
701 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
703
704 fidl::encoding::encode_in_envelope_optional::<i64, D>(
709 self.valid_until.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
710 encoder,
711 offset + cur_offset,
712 depth,
713 )?;
714
715 _prev_end_offset = cur_offset + envelope_size;
716 if 3 > max_ordinal {
717 return Ok(());
718 }
719
720 let cur_offset: usize = (3 - 1) * envelope_size;
723
724 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
726
727 fidl::encoding::encode_in_envelope_optional::<PreferredLifetimeInfo, D>(
732 self.preferred_lifetime_info
733 .as_ref()
734 .map(<PreferredLifetimeInfo as fidl::encoding::ValueTypeMarker>::borrow),
735 encoder,
736 offset + cur_offset,
737 depth,
738 )?;
739
740 _prev_end_offset = cur_offset + envelope_size;
741 if 4 > max_ordinal {
742 return Ok(());
743 }
744
745 let cur_offset: usize = (4 - 1) * envelope_size;
748
749 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
751
752 fidl::encoding::encode_in_envelope_optional::<AddressAssignmentState, D>(
757 self.assignment_state
758 .as_ref()
759 .map(<AddressAssignmentState as fidl::encoding::ValueTypeMarker>::borrow),
760 encoder,
761 offset + cur_offset,
762 depth,
763 )?;
764
765 _prev_end_offset = cur_offset + envelope_size;
766
767 Ok(())
768 }
769 }
770
771 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Address {
772 #[inline(always)]
773 fn new_empty() -> Self {
774 Self::default()
775 }
776
777 unsafe fn decode(
778 &mut self,
779 decoder: &mut fidl::encoding::Decoder<'_, D>,
780 offset: usize,
781 mut depth: fidl::encoding::Depth,
782 ) -> fidl::Result<()> {
783 decoder.debug_check_bounds::<Self>(offset);
784 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
785 None => return Err(fidl::Error::NotNullable),
786 Some(len) => len,
787 };
788 if len == 0 {
790 return Ok(());
791 };
792 depth.increment()?;
793 let envelope_size = 8;
794 let bytes_len = len * envelope_size;
795 let offset = decoder.out_of_line_offset(bytes_len)?;
796 let mut _next_ordinal_to_read = 0;
798 let mut next_offset = offset;
799 let end_offset = offset + bytes_len;
800 _next_ordinal_to_read += 1;
801 if next_offset >= end_offset {
802 return Ok(());
803 }
804
805 while _next_ordinal_to_read < 1 {
807 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
808 _next_ordinal_to_read += 1;
809 next_offset += envelope_size;
810 }
811
812 let next_out_of_line = decoder.next_out_of_line();
813 let handles_before = decoder.remaining_handles();
814 if let Some((inlined, num_bytes, num_handles)) =
815 fidl::encoding::decode_envelope_header(decoder, next_offset)?
816 {
817 let member_inline_size =
818 <fidl_fuchsia_net__common::Subnet as fidl::encoding::TypeMarker>::inline_size(
819 decoder.context,
820 );
821 if inlined != (member_inline_size <= 4) {
822 return Err(fidl::Error::InvalidInlineBitInEnvelope);
823 }
824 let inner_offset;
825 let mut inner_depth = depth.clone();
826 if inlined {
827 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
828 inner_offset = next_offset;
829 } else {
830 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
831 inner_depth.increment()?;
832 }
833 let val_ref = self
834 .addr
835 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_net__common::Subnet, D));
836 fidl::decode!(
837 fidl_fuchsia_net__common::Subnet,
838 D,
839 val_ref,
840 decoder,
841 inner_offset,
842 inner_depth
843 )?;
844 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
845 {
846 return Err(fidl::Error::InvalidNumBytesInEnvelope);
847 }
848 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
849 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
850 }
851 }
852
853 next_offset += envelope_size;
854 _next_ordinal_to_read += 1;
855 if next_offset >= end_offset {
856 return Ok(());
857 }
858
859 while _next_ordinal_to_read < 2 {
861 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
862 _next_ordinal_to_read += 1;
863 next_offset += envelope_size;
864 }
865
866 let next_out_of_line = decoder.next_out_of_line();
867 let handles_before = decoder.remaining_handles();
868 if let Some((inlined, num_bytes, num_handles)) =
869 fidl::encoding::decode_envelope_header(decoder, next_offset)?
870 {
871 let member_inline_size =
872 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
873 if inlined != (member_inline_size <= 4) {
874 return Err(fidl::Error::InvalidInlineBitInEnvelope);
875 }
876 let inner_offset;
877 let mut inner_depth = depth.clone();
878 if inlined {
879 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
880 inner_offset = next_offset;
881 } else {
882 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
883 inner_depth.increment()?;
884 }
885 let val_ref = self.valid_until.get_or_insert_with(|| fidl::new_empty!(i64, D));
886 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
887 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
888 {
889 return Err(fidl::Error::InvalidNumBytesInEnvelope);
890 }
891 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
892 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
893 }
894 }
895
896 next_offset += envelope_size;
897 _next_ordinal_to_read += 1;
898 if next_offset >= end_offset {
899 return Ok(());
900 }
901
902 while _next_ordinal_to_read < 3 {
904 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
905 _next_ordinal_to_read += 1;
906 next_offset += envelope_size;
907 }
908
909 let next_out_of_line = decoder.next_out_of_line();
910 let handles_before = decoder.remaining_handles();
911 if let Some((inlined, num_bytes, num_handles)) =
912 fidl::encoding::decode_envelope_header(decoder, next_offset)?
913 {
914 let member_inline_size =
915 <PreferredLifetimeInfo as fidl::encoding::TypeMarker>::inline_size(
916 decoder.context,
917 );
918 if inlined != (member_inline_size <= 4) {
919 return Err(fidl::Error::InvalidInlineBitInEnvelope);
920 }
921 let inner_offset;
922 let mut inner_depth = depth.clone();
923 if inlined {
924 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
925 inner_offset = next_offset;
926 } else {
927 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
928 inner_depth.increment()?;
929 }
930 let val_ref = self
931 .preferred_lifetime_info
932 .get_or_insert_with(|| fidl::new_empty!(PreferredLifetimeInfo, D));
933 fidl::decode!(
934 PreferredLifetimeInfo,
935 D,
936 val_ref,
937 decoder,
938 inner_offset,
939 inner_depth
940 )?;
941 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
942 {
943 return Err(fidl::Error::InvalidNumBytesInEnvelope);
944 }
945 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
946 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
947 }
948 }
949
950 next_offset += envelope_size;
951 _next_ordinal_to_read += 1;
952 if next_offset >= end_offset {
953 return Ok(());
954 }
955
956 while _next_ordinal_to_read < 4 {
958 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
959 _next_ordinal_to_read += 1;
960 next_offset += envelope_size;
961 }
962
963 let next_out_of_line = decoder.next_out_of_line();
964 let handles_before = decoder.remaining_handles();
965 if let Some((inlined, num_bytes, num_handles)) =
966 fidl::encoding::decode_envelope_header(decoder, next_offset)?
967 {
968 let member_inline_size =
969 <AddressAssignmentState as fidl::encoding::TypeMarker>::inline_size(
970 decoder.context,
971 );
972 if inlined != (member_inline_size <= 4) {
973 return Err(fidl::Error::InvalidInlineBitInEnvelope);
974 }
975 let inner_offset;
976 let mut inner_depth = depth.clone();
977 if inlined {
978 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
979 inner_offset = next_offset;
980 } else {
981 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
982 inner_depth.increment()?;
983 }
984 let val_ref = self
985 .assignment_state
986 .get_or_insert_with(|| fidl::new_empty!(AddressAssignmentState, D));
987 fidl::decode!(
988 AddressAssignmentState,
989 D,
990 val_ref,
991 decoder,
992 inner_offset,
993 inner_depth
994 )?;
995 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
996 {
997 return Err(fidl::Error::InvalidNumBytesInEnvelope);
998 }
999 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1000 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1001 }
1002 }
1003
1004 next_offset += envelope_size;
1005
1006 while next_offset < end_offset {
1008 _next_ordinal_to_read += 1;
1009 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1010 next_offset += envelope_size;
1011 }
1012
1013 Ok(())
1014 }
1015 }
1016
1017 impl Properties {
1018 #[inline(always)]
1019 fn max_ordinal_present(&self) -> u64 {
1020 if let Some(_) = self.port_identity_koid {
1021 return 9;
1022 }
1023 if let Some(_) = self.port_class {
1024 return 8;
1025 }
1026 if let Some(_) = self.name {
1027 return 7;
1028 }
1029 if let Some(_) = self.has_default_ipv6_route {
1030 return 6;
1031 }
1032 if let Some(_) = self.has_default_ipv4_route {
1033 return 5;
1034 }
1035 if let Some(_) = self.online {
1036 return 3;
1037 }
1038 if let Some(_) = self.addresses {
1039 return 2;
1040 }
1041 if let Some(_) = self.id {
1042 return 1;
1043 }
1044 0
1045 }
1046 }
1047
1048 impl fidl::encoding::ValueTypeMarker for Properties {
1049 type Borrowed<'a> = &'a Self;
1050 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1051 value
1052 }
1053 }
1054
1055 unsafe impl fidl::encoding::TypeMarker for Properties {
1056 type Owned = Self;
1057
1058 #[inline(always)]
1059 fn inline_align(_context: fidl::encoding::Context) -> usize {
1060 8
1061 }
1062
1063 #[inline(always)]
1064 fn inline_size(_context: fidl::encoding::Context) -> usize {
1065 16
1066 }
1067 }
1068
1069 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Properties, D>
1070 for &Properties
1071 {
1072 unsafe fn encode(
1073 self,
1074 encoder: &mut fidl::encoding::Encoder<'_, D>,
1075 offset: usize,
1076 mut depth: fidl::encoding::Depth,
1077 ) -> fidl::Result<()> {
1078 encoder.debug_check_bounds::<Properties>(offset);
1079 let max_ordinal: u64 = self.max_ordinal_present();
1081 encoder.write_num(max_ordinal, offset);
1082 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1083 if max_ordinal == 0 {
1085 return Ok(());
1086 }
1087 depth.increment()?;
1088 let envelope_size = 8;
1089 let bytes_len = max_ordinal as usize * envelope_size;
1090 #[allow(unused_variables)]
1091 let offset = encoder.out_of_line_offset(bytes_len);
1092 let mut _prev_end_offset: usize = 0;
1093 if 1 > max_ordinal {
1094 return Ok(());
1095 }
1096
1097 let cur_offset: usize = (1 - 1) * envelope_size;
1100
1101 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1103
1104 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1109 self.id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1110 encoder,
1111 offset + cur_offset,
1112 depth,
1113 )?;
1114
1115 _prev_end_offset = cur_offset + envelope_size;
1116 if 2 > max_ordinal {
1117 return Ok(());
1118 }
1119
1120 let cur_offset: usize = (2 - 1) * envelope_size;
1123
1124 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1126
1127 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Address>, D>(
1132 self.addresses.as_ref().map(<fidl::encoding::UnboundedVector<Address> as fidl::encoding::ValueTypeMarker>::borrow),
1133 encoder, offset + cur_offset, depth
1134 )?;
1135
1136 _prev_end_offset = cur_offset + envelope_size;
1137 if 3 > max_ordinal {
1138 return Ok(());
1139 }
1140
1141 let cur_offset: usize = (3 - 1) * envelope_size;
1144
1145 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1147
1148 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1153 self.online.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1154 encoder,
1155 offset + cur_offset,
1156 depth,
1157 )?;
1158
1159 _prev_end_offset = cur_offset + envelope_size;
1160 if 5 > max_ordinal {
1161 return Ok(());
1162 }
1163
1164 let cur_offset: usize = (5 - 1) * envelope_size;
1167
1168 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1170
1171 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1176 self.has_default_ipv4_route
1177 .as_ref()
1178 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1179 encoder,
1180 offset + cur_offset,
1181 depth,
1182 )?;
1183
1184 _prev_end_offset = cur_offset + envelope_size;
1185 if 6 > max_ordinal {
1186 return Ok(());
1187 }
1188
1189 let cur_offset: usize = (6 - 1) * envelope_size;
1192
1193 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1195
1196 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1201 self.has_default_ipv6_route
1202 .as_ref()
1203 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1204 encoder,
1205 offset + cur_offset,
1206 depth,
1207 )?;
1208
1209 _prev_end_offset = cur_offset + envelope_size;
1210 if 7 > max_ordinal {
1211 return Ok(());
1212 }
1213
1214 let cur_offset: usize = (7 - 1) * envelope_size;
1217
1218 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1220
1221 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<15>, D>(
1226 self.name.as_ref().map(
1227 <fidl::encoding::BoundedString<15> as fidl::encoding::ValueTypeMarker>::borrow,
1228 ),
1229 encoder,
1230 offset + cur_offset,
1231 depth,
1232 )?;
1233
1234 _prev_end_offset = cur_offset + envelope_size;
1235 if 8 > max_ordinal {
1236 return Ok(());
1237 }
1238
1239 let cur_offset: usize = (8 - 1) * envelope_size;
1242
1243 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1245
1246 fidl::encoding::encode_in_envelope_optional::<PortClass, D>(
1251 self.port_class
1252 .as_ref()
1253 .map(<PortClass as fidl::encoding::ValueTypeMarker>::borrow),
1254 encoder,
1255 offset + cur_offset,
1256 depth,
1257 )?;
1258
1259 _prev_end_offset = cur_offset + envelope_size;
1260 if 9 > max_ordinal {
1261 return Ok(());
1262 }
1263
1264 let cur_offset: usize = (9 - 1) * envelope_size;
1267
1268 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1270
1271 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1276 self.port_identity_koid
1277 .as_ref()
1278 .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1279 encoder,
1280 offset + cur_offset,
1281 depth,
1282 )?;
1283
1284 _prev_end_offset = cur_offset + envelope_size;
1285
1286 Ok(())
1287 }
1288 }
1289
1290 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Properties {
1291 #[inline(always)]
1292 fn new_empty() -> Self {
1293 Self::default()
1294 }
1295
1296 unsafe fn decode(
1297 &mut self,
1298 decoder: &mut fidl::encoding::Decoder<'_, D>,
1299 offset: usize,
1300 mut depth: fidl::encoding::Depth,
1301 ) -> fidl::Result<()> {
1302 decoder.debug_check_bounds::<Self>(offset);
1303 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1304 None => return Err(fidl::Error::NotNullable),
1305 Some(len) => len,
1306 };
1307 if len == 0 {
1309 return Ok(());
1310 };
1311 depth.increment()?;
1312 let envelope_size = 8;
1313 let bytes_len = len * envelope_size;
1314 let offset = decoder.out_of_line_offset(bytes_len)?;
1315 let mut _next_ordinal_to_read = 0;
1317 let mut next_offset = offset;
1318 let end_offset = offset + bytes_len;
1319 _next_ordinal_to_read += 1;
1320 if next_offset >= end_offset {
1321 return Ok(());
1322 }
1323
1324 while _next_ordinal_to_read < 1 {
1326 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1327 _next_ordinal_to_read += 1;
1328 next_offset += envelope_size;
1329 }
1330
1331 let next_out_of_line = decoder.next_out_of_line();
1332 let handles_before = decoder.remaining_handles();
1333 if let Some((inlined, num_bytes, num_handles)) =
1334 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1335 {
1336 let member_inline_size =
1337 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1338 if inlined != (member_inline_size <= 4) {
1339 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1340 }
1341 let inner_offset;
1342 let mut inner_depth = depth.clone();
1343 if inlined {
1344 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1345 inner_offset = next_offset;
1346 } else {
1347 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1348 inner_depth.increment()?;
1349 }
1350 let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u64, D));
1351 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
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::encoding::UnboundedVector<Address> 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.addresses.get_or_insert_with(|| {
1393 fidl::new_empty!(fidl::encoding::UnboundedVector<Address>, D)
1394 });
1395 fidl::decode!(
1396 fidl::encoding::UnboundedVector<Address>,
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 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1432 if inlined != (member_inline_size <= 4) {
1433 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1434 }
1435 let inner_offset;
1436 let mut inner_depth = depth.clone();
1437 if inlined {
1438 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1439 inner_offset = next_offset;
1440 } else {
1441 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1442 inner_depth.increment()?;
1443 }
1444 let val_ref = self.online.get_or_insert_with(|| fidl::new_empty!(bool, D));
1445 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1446 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1447 {
1448 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1449 }
1450 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1451 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1452 }
1453 }
1454
1455 next_offset += envelope_size;
1456 _next_ordinal_to_read += 1;
1457 if next_offset >= end_offset {
1458 return Ok(());
1459 }
1460
1461 while _next_ordinal_to_read < 5 {
1463 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1464 _next_ordinal_to_read += 1;
1465 next_offset += envelope_size;
1466 }
1467
1468 let next_out_of_line = decoder.next_out_of_line();
1469 let handles_before = decoder.remaining_handles();
1470 if let Some((inlined, num_bytes, num_handles)) =
1471 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1472 {
1473 let member_inline_size =
1474 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1475 if inlined != (member_inline_size <= 4) {
1476 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1477 }
1478 let inner_offset;
1479 let mut inner_depth = depth.clone();
1480 if inlined {
1481 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1482 inner_offset = next_offset;
1483 } else {
1484 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1485 inner_depth.increment()?;
1486 }
1487 let val_ref =
1488 self.has_default_ipv4_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
1489 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1490 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1491 {
1492 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1493 }
1494 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1495 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1496 }
1497 }
1498
1499 next_offset += envelope_size;
1500 _next_ordinal_to_read += 1;
1501 if next_offset >= end_offset {
1502 return Ok(());
1503 }
1504
1505 while _next_ordinal_to_read < 6 {
1507 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1508 _next_ordinal_to_read += 1;
1509 next_offset += envelope_size;
1510 }
1511
1512 let next_out_of_line = decoder.next_out_of_line();
1513 let handles_before = decoder.remaining_handles();
1514 if let Some((inlined, num_bytes, num_handles)) =
1515 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1516 {
1517 let member_inline_size =
1518 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1519 if inlined != (member_inline_size <= 4) {
1520 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1521 }
1522 let inner_offset;
1523 let mut inner_depth = depth.clone();
1524 if inlined {
1525 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1526 inner_offset = next_offset;
1527 } else {
1528 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1529 inner_depth.increment()?;
1530 }
1531 let val_ref =
1532 self.has_default_ipv6_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
1533 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1534 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1535 {
1536 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1537 }
1538 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1539 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1540 }
1541 }
1542
1543 next_offset += envelope_size;
1544 _next_ordinal_to_read += 1;
1545 if next_offset >= end_offset {
1546 return Ok(());
1547 }
1548
1549 while _next_ordinal_to_read < 7 {
1551 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1552 _next_ordinal_to_read += 1;
1553 next_offset += envelope_size;
1554 }
1555
1556 let next_out_of_line = decoder.next_out_of_line();
1557 let handles_before = decoder.remaining_handles();
1558 if let Some((inlined, num_bytes, num_handles)) =
1559 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1560 {
1561 let member_inline_size =
1562 <fidl::encoding::BoundedString<15> as fidl::encoding::TypeMarker>::inline_size(
1563 decoder.context,
1564 );
1565 if inlined != (member_inline_size <= 4) {
1566 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1567 }
1568 let inner_offset;
1569 let mut inner_depth = depth.clone();
1570 if inlined {
1571 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1572 inner_offset = next_offset;
1573 } else {
1574 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1575 inner_depth.increment()?;
1576 }
1577 let val_ref = self
1578 .name
1579 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<15>, D));
1580 fidl::decode!(
1581 fidl::encoding::BoundedString<15>,
1582 D,
1583 val_ref,
1584 decoder,
1585 inner_offset,
1586 inner_depth
1587 )?;
1588 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1589 {
1590 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1591 }
1592 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1593 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1594 }
1595 }
1596
1597 next_offset += envelope_size;
1598 _next_ordinal_to_read += 1;
1599 if next_offset >= end_offset {
1600 return Ok(());
1601 }
1602
1603 while _next_ordinal_to_read < 8 {
1605 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1606 _next_ordinal_to_read += 1;
1607 next_offset += envelope_size;
1608 }
1609
1610 let next_out_of_line = decoder.next_out_of_line();
1611 let handles_before = decoder.remaining_handles();
1612 if let Some((inlined, num_bytes, num_handles)) =
1613 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1614 {
1615 let member_inline_size =
1616 <PortClass as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1617 if inlined != (member_inline_size <= 4) {
1618 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1619 }
1620 let inner_offset;
1621 let mut inner_depth = depth.clone();
1622 if inlined {
1623 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1624 inner_offset = next_offset;
1625 } else {
1626 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1627 inner_depth.increment()?;
1628 }
1629 let val_ref = self.port_class.get_or_insert_with(|| fidl::new_empty!(PortClass, D));
1630 fidl::decode!(PortClass, D, val_ref, decoder, inner_offset, inner_depth)?;
1631 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1632 {
1633 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1634 }
1635 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1636 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1637 }
1638 }
1639
1640 next_offset += envelope_size;
1641 _next_ordinal_to_read += 1;
1642 if next_offset >= end_offset {
1643 return Ok(());
1644 }
1645
1646 while _next_ordinal_to_read < 9 {
1648 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1649 _next_ordinal_to_read += 1;
1650 next_offset += envelope_size;
1651 }
1652
1653 let next_out_of_line = decoder.next_out_of_line();
1654 let handles_before = decoder.remaining_handles();
1655 if let Some((inlined, num_bytes, num_handles)) =
1656 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1657 {
1658 let member_inline_size =
1659 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1660 if inlined != (member_inline_size <= 4) {
1661 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1662 }
1663 let inner_offset;
1664 let mut inner_depth = depth.clone();
1665 if inlined {
1666 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1667 inner_offset = next_offset;
1668 } else {
1669 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1670 inner_depth.increment()?;
1671 }
1672 let val_ref =
1673 self.port_identity_koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
1674 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1675 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1676 {
1677 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1678 }
1679 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1680 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1681 }
1682 }
1683
1684 next_offset += envelope_size;
1685
1686 while next_offset < end_offset {
1688 _next_ordinal_to_read += 1;
1689 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1690 next_offset += envelope_size;
1691 }
1692
1693 Ok(())
1694 }
1695 }
1696
1697 impl WatcherOptions {
1698 #[inline(always)]
1699 fn max_ordinal_present(&self) -> u64 {
1700 if let Some(_) = self.port_identity_koid_filter {
1701 return 3;
1702 }
1703 if let Some(_) = self.include_non_assigned_addresses {
1704 return 2;
1705 }
1706 if let Some(_) = self.address_properties_interest {
1707 return 1;
1708 }
1709 0
1710 }
1711 }
1712
1713 impl fidl::encoding::ValueTypeMarker for WatcherOptions {
1714 type Borrowed<'a> = &'a Self;
1715 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1716 value
1717 }
1718 }
1719
1720 unsafe impl fidl::encoding::TypeMarker for WatcherOptions {
1721 type Owned = Self;
1722
1723 #[inline(always)]
1724 fn inline_align(_context: fidl::encoding::Context) -> usize {
1725 8
1726 }
1727
1728 #[inline(always)]
1729 fn inline_size(_context: fidl::encoding::Context) -> usize {
1730 16
1731 }
1732 }
1733
1734 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WatcherOptions, D>
1735 for &WatcherOptions
1736 {
1737 unsafe fn encode(
1738 self,
1739 encoder: &mut fidl::encoding::Encoder<'_, D>,
1740 offset: usize,
1741 mut depth: fidl::encoding::Depth,
1742 ) -> fidl::Result<()> {
1743 encoder.debug_check_bounds::<WatcherOptions>(offset);
1744 let max_ordinal: u64 = self.max_ordinal_present();
1746 encoder.write_num(max_ordinal, offset);
1747 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1748 if max_ordinal == 0 {
1750 return Ok(());
1751 }
1752 depth.increment()?;
1753 let envelope_size = 8;
1754 let bytes_len = max_ordinal as usize * envelope_size;
1755 #[allow(unused_variables)]
1756 let offset = encoder.out_of_line_offset(bytes_len);
1757 let mut _prev_end_offset: usize = 0;
1758 if 1 > max_ordinal {
1759 return Ok(());
1760 }
1761
1762 let cur_offset: usize = (1 - 1) * envelope_size;
1765
1766 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1768
1769 fidl::encoding::encode_in_envelope_optional::<AddressPropertiesInterest, D>(
1774 self.address_properties_interest
1775 .as_ref()
1776 .map(<AddressPropertiesInterest as fidl::encoding::ValueTypeMarker>::borrow),
1777 encoder,
1778 offset + cur_offset,
1779 depth,
1780 )?;
1781
1782 _prev_end_offset = cur_offset + envelope_size;
1783 if 2 > max_ordinal {
1784 return Ok(());
1785 }
1786
1787 let cur_offset: usize = (2 - 1) * envelope_size;
1790
1791 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1793
1794 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1799 self.include_non_assigned_addresses
1800 .as_ref()
1801 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1802 encoder,
1803 offset + cur_offset,
1804 depth,
1805 )?;
1806
1807 _prev_end_offset = cur_offset + envelope_size;
1808 if 3 > max_ordinal {
1809 return Ok(());
1810 }
1811
1812 let cur_offset: usize = (3 - 1) * envelope_size;
1815
1816 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1818
1819 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1824 self.port_identity_koid_filter
1825 .as_ref()
1826 .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1827 encoder,
1828 offset + cur_offset,
1829 depth,
1830 )?;
1831
1832 _prev_end_offset = cur_offset + envelope_size;
1833
1834 Ok(())
1835 }
1836 }
1837
1838 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WatcherOptions {
1839 #[inline(always)]
1840 fn new_empty() -> Self {
1841 Self::default()
1842 }
1843
1844 unsafe fn decode(
1845 &mut self,
1846 decoder: &mut fidl::encoding::Decoder<'_, D>,
1847 offset: usize,
1848 mut depth: fidl::encoding::Depth,
1849 ) -> fidl::Result<()> {
1850 decoder.debug_check_bounds::<Self>(offset);
1851 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1852 None => return Err(fidl::Error::NotNullable),
1853 Some(len) => len,
1854 };
1855 if len == 0 {
1857 return Ok(());
1858 };
1859 depth.increment()?;
1860 let envelope_size = 8;
1861 let bytes_len = len * envelope_size;
1862 let offset = decoder.out_of_line_offset(bytes_len)?;
1863 let mut _next_ordinal_to_read = 0;
1865 let mut next_offset = offset;
1866 let end_offset = offset + bytes_len;
1867 _next_ordinal_to_read += 1;
1868 if next_offset >= end_offset {
1869 return Ok(());
1870 }
1871
1872 while _next_ordinal_to_read < 1 {
1874 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1875 _next_ordinal_to_read += 1;
1876 next_offset += envelope_size;
1877 }
1878
1879 let next_out_of_line = decoder.next_out_of_line();
1880 let handles_before = decoder.remaining_handles();
1881 if let Some((inlined, num_bytes, num_handles)) =
1882 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1883 {
1884 let member_inline_size =
1885 <AddressPropertiesInterest as fidl::encoding::TypeMarker>::inline_size(
1886 decoder.context,
1887 );
1888 if inlined != (member_inline_size <= 4) {
1889 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1890 }
1891 let inner_offset;
1892 let mut inner_depth = depth.clone();
1893 if inlined {
1894 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1895 inner_offset = next_offset;
1896 } else {
1897 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1898 inner_depth.increment()?;
1899 }
1900 let val_ref = self
1901 .address_properties_interest
1902 .get_or_insert_with(|| fidl::new_empty!(AddressPropertiesInterest, D));
1903 fidl::decode!(
1904 AddressPropertiesInterest,
1905 D,
1906 val_ref,
1907 decoder,
1908 inner_offset,
1909 inner_depth
1910 )?;
1911 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1912 {
1913 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1914 }
1915 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1916 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1917 }
1918 }
1919
1920 next_offset += envelope_size;
1921 _next_ordinal_to_read += 1;
1922 if next_offset >= end_offset {
1923 return Ok(());
1924 }
1925
1926 while _next_ordinal_to_read < 2 {
1928 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1929 _next_ordinal_to_read += 1;
1930 next_offset += envelope_size;
1931 }
1932
1933 let next_out_of_line = decoder.next_out_of_line();
1934 let handles_before = decoder.remaining_handles();
1935 if let Some((inlined, num_bytes, num_handles)) =
1936 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1937 {
1938 let member_inline_size =
1939 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1940 if inlined != (member_inline_size <= 4) {
1941 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1942 }
1943 let inner_offset;
1944 let mut inner_depth = depth.clone();
1945 if inlined {
1946 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1947 inner_offset = next_offset;
1948 } else {
1949 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1950 inner_depth.increment()?;
1951 }
1952 let val_ref = self
1953 .include_non_assigned_addresses
1954 .get_or_insert_with(|| fidl::new_empty!(bool, D));
1955 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1956 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1957 {
1958 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1959 }
1960 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1961 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1962 }
1963 }
1964
1965 next_offset += envelope_size;
1966 _next_ordinal_to_read += 1;
1967 if next_offset >= end_offset {
1968 return Ok(());
1969 }
1970
1971 while _next_ordinal_to_read < 3 {
1973 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1974 _next_ordinal_to_read += 1;
1975 next_offset += envelope_size;
1976 }
1977
1978 let next_out_of_line = decoder.next_out_of_line();
1979 let handles_before = decoder.remaining_handles();
1980 if let Some((inlined, num_bytes, num_handles)) =
1981 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1982 {
1983 let member_inline_size =
1984 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1985 if inlined != (member_inline_size <= 4) {
1986 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1987 }
1988 let inner_offset;
1989 let mut inner_depth = depth.clone();
1990 if inlined {
1991 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1992 inner_offset = next_offset;
1993 } else {
1994 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1995 inner_depth.increment()?;
1996 }
1997 let val_ref =
1998 self.port_identity_koid_filter.get_or_insert_with(|| fidl::new_empty!(u64, D));
1999 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2000 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2001 {
2002 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2003 }
2004 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2005 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2006 }
2007 }
2008
2009 next_offset += envelope_size;
2010
2011 while next_offset < end_offset {
2013 _next_ordinal_to_read += 1;
2014 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2015 next_offset += envelope_size;
2016 }
2017
2018 Ok(())
2019 }
2020 }
2021
2022 impl fidl::encoding::ValueTypeMarker for Event {
2023 type Borrowed<'a> = &'a Self;
2024 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2025 value
2026 }
2027 }
2028
2029 unsafe impl fidl::encoding::TypeMarker for Event {
2030 type Owned = Self;
2031
2032 #[inline(always)]
2033 fn inline_align(_context: fidl::encoding::Context) -> usize {
2034 8
2035 }
2036
2037 #[inline(always)]
2038 fn inline_size(_context: fidl::encoding::Context) -> usize {
2039 16
2040 }
2041 }
2042
2043 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Event, D> for &Event {
2044 #[inline]
2045 unsafe fn encode(
2046 self,
2047 encoder: &mut fidl::encoding::Encoder<'_, D>,
2048 offset: usize,
2049 _depth: fidl::encoding::Depth,
2050 ) -> fidl::Result<()> {
2051 encoder.debug_check_bounds::<Event>(offset);
2052 encoder.write_num::<u64>(self.ordinal(), offset);
2053 match self {
2054 Event::Existing(ref val) => fidl::encoding::encode_in_envelope::<Properties, D>(
2055 <Properties as fidl::encoding::ValueTypeMarker>::borrow(val),
2056 encoder,
2057 offset + 8,
2058 _depth,
2059 ),
2060 Event::Added(ref val) => fidl::encoding::encode_in_envelope::<Properties, D>(
2061 <Properties as fidl::encoding::ValueTypeMarker>::borrow(val),
2062 encoder,
2063 offset + 8,
2064 _depth,
2065 ),
2066 Event::Removed(ref val) => fidl::encoding::encode_in_envelope::<u64, D>(
2067 <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
2068 encoder,
2069 offset + 8,
2070 _depth,
2071 ),
2072 Event::Changed(ref val) => fidl::encoding::encode_in_envelope::<Properties, D>(
2073 <Properties as fidl::encoding::ValueTypeMarker>::borrow(val),
2074 encoder,
2075 offset + 8,
2076 _depth,
2077 ),
2078 Event::Idle(ref val) => fidl::encoding::encode_in_envelope::<Empty, D>(
2079 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2080 encoder,
2081 offset + 8,
2082 _depth,
2083 ),
2084 }
2085 }
2086 }
2087
2088 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Event {
2089 #[inline(always)]
2090 fn new_empty() -> Self {
2091 Self::Existing(fidl::new_empty!(Properties, D))
2092 }
2093
2094 #[inline]
2095 unsafe fn decode(
2096 &mut self,
2097 decoder: &mut fidl::encoding::Decoder<'_, D>,
2098 offset: usize,
2099 mut depth: fidl::encoding::Depth,
2100 ) -> fidl::Result<()> {
2101 decoder.debug_check_bounds::<Self>(offset);
2102 #[allow(unused_variables)]
2103 let next_out_of_line = decoder.next_out_of_line();
2104 let handles_before = decoder.remaining_handles();
2105 let (ordinal, inlined, num_bytes, num_handles) =
2106 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2107
2108 let member_inline_size = match ordinal {
2109 1 => <Properties as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2110 2 => <Properties as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2111 3 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2112 4 => <Properties as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2113 5 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2114 _ => return Err(fidl::Error::UnknownUnionTag),
2115 };
2116
2117 if inlined != (member_inline_size <= 4) {
2118 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2119 }
2120 let _inner_offset;
2121 if inlined {
2122 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2123 _inner_offset = offset + 8;
2124 } else {
2125 depth.increment()?;
2126 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2127 }
2128 match ordinal {
2129 1 => {
2130 #[allow(irrefutable_let_patterns)]
2131 if let Event::Existing(_) = self {
2132 } else {
2134 *self = Event::Existing(fidl::new_empty!(Properties, D));
2136 }
2137 #[allow(irrefutable_let_patterns)]
2138 if let Event::Existing(ref mut val) = self {
2139 fidl::decode!(Properties, D, val, decoder, _inner_offset, depth)?;
2140 } else {
2141 unreachable!()
2142 }
2143 }
2144 2 => {
2145 #[allow(irrefutable_let_patterns)]
2146 if let Event::Added(_) = self {
2147 } else {
2149 *self = Event::Added(fidl::new_empty!(Properties, D));
2151 }
2152 #[allow(irrefutable_let_patterns)]
2153 if let Event::Added(ref mut val) = self {
2154 fidl::decode!(Properties, D, val, decoder, _inner_offset, depth)?;
2155 } else {
2156 unreachable!()
2157 }
2158 }
2159 3 => {
2160 #[allow(irrefutable_let_patterns)]
2161 if let Event::Removed(_) = self {
2162 } else {
2164 *self = Event::Removed(fidl::new_empty!(u64, D));
2166 }
2167 #[allow(irrefutable_let_patterns)]
2168 if let Event::Removed(ref mut val) = self {
2169 fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
2170 } else {
2171 unreachable!()
2172 }
2173 }
2174 4 => {
2175 #[allow(irrefutable_let_patterns)]
2176 if let Event::Changed(_) = self {
2177 } else {
2179 *self = Event::Changed(fidl::new_empty!(Properties, D));
2181 }
2182 #[allow(irrefutable_let_patterns)]
2183 if let Event::Changed(ref mut val) = self {
2184 fidl::decode!(Properties, D, val, decoder, _inner_offset, depth)?;
2185 } else {
2186 unreachable!()
2187 }
2188 }
2189 5 => {
2190 #[allow(irrefutable_let_patterns)]
2191 if let Event::Idle(_) = self {
2192 } else {
2194 *self = Event::Idle(fidl::new_empty!(Empty, D));
2196 }
2197 #[allow(irrefutable_let_patterns)]
2198 if let Event::Idle(ref mut val) = self {
2199 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2200 } else {
2201 unreachable!()
2202 }
2203 }
2204 ordinal => panic!("unexpected ordinal {:?}", ordinal),
2205 }
2206 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2207 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2208 }
2209 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2210 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2211 }
2212 Ok(())
2213 }
2214 }
2215
2216 impl fidl::encoding::ValueTypeMarker for PortClass {
2217 type Borrowed<'a> = &'a Self;
2218 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2219 value
2220 }
2221 }
2222
2223 unsafe impl fidl::encoding::TypeMarker for PortClass {
2224 type Owned = Self;
2225
2226 #[inline(always)]
2227 fn inline_align(_context: fidl::encoding::Context) -> usize {
2228 8
2229 }
2230
2231 #[inline(always)]
2232 fn inline_size(_context: fidl::encoding::Context) -> usize {
2233 16
2234 }
2235 }
2236
2237 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PortClass, D>
2238 for &PortClass
2239 {
2240 #[inline]
2241 unsafe fn encode(
2242 self,
2243 encoder: &mut fidl::encoding::Encoder<'_, D>,
2244 offset: usize,
2245 _depth: fidl::encoding::Depth,
2246 ) -> fidl::Result<()> {
2247 encoder.debug_check_bounds::<PortClass>(offset);
2248 encoder.write_num::<u64>(self.ordinal(), offset);
2249 match self {
2250 PortClass::Loopback(ref val) => {
2251 fidl::encoding::encode_in_envelope::<Empty, D>(
2252 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2253 encoder, offset + 8, _depth
2254 )
2255 }
2256 PortClass::Device(ref val) => {
2257 fidl::encoding::encode_in_envelope::<fidl_fuchsia_hardware_network__common::PortClass, D>(
2258 <fidl_fuchsia_hardware_network__common::PortClass as fidl::encoding::ValueTypeMarker>::borrow(val),
2259 encoder, offset + 8, _depth
2260 )
2261 }
2262 PortClass::Blackhole(ref val) => {
2263 fidl::encoding::encode_in_envelope::<Empty, D>(
2264 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2265 encoder, offset + 8, _depth
2266 )
2267 }
2268 PortClass::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
2269 }
2270 }
2271 }
2272
2273 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PortClass {
2274 #[inline(always)]
2275 fn new_empty() -> Self {
2276 Self::__SourceBreaking { unknown_ordinal: 0 }
2277 }
2278
2279 #[inline]
2280 unsafe fn decode(
2281 &mut self,
2282 decoder: &mut fidl::encoding::Decoder<'_, D>,
2283 offset: usize,
2284 mut depth: fidl::encoding::Depth,
2285 ) -> fidl::Result<()> {
2286 decoder.debug_check_bounds::<Self>(offset);
2287 #[allow(unused_variables)]
2288 let next_out_of_line = decoder.next_out_of_line();
2289 let handles_before = decoder.remaining_handles();
2290 let (ordinal, inlined, num_bytes, num_handles) =
2291 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2292
2293 let member_inline_size = match ordinal {
2294 1 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2295 2 => <fidl_fuchsia_hardware_network__common::PortClass as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2296 3 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2297 0 => return Err(fidl::Error::UnknownUnionTag),
2298 _ => num_bytes as usize,
2299 };
2300
2301 if inlined != (member_inline_size <= 4) {
2302 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2303 }
2304 let _inner_offset;
2305 if inlined {
2306 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2307 _inner_offset = offset + 8;
2308 } else {
2309 depth.increment()?;
2310 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2311 }
2312 match ordinal {
2313 1 => {
2314 #[allow(irrefutable_let_patterns)]
2315 if let PortClass::Loopback(_) = self {
2316 } else {
2318 *self = PortClass::Loopback(fidl::new_empty!(Empty, D));
2320 }
2321 #[allow(irrefutable_let_patterns)]
2322 if let PortClass::Loopback(ref mut val) = self {
2323 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2324 } else {
2325 unreachable!()
2326 }
2327 }
2328 2 => {
2329 #[allow(irrefutable_let_patterns)]
2330 if let PortClass::Device(_) = self {
2331 } else {
2333 *self = PortClass::Device(fidl::new_empty!(
2335 fidl_fuchsia_hardware_network__common::PortClass,
2336 D
2337 ));
2338 }
2339 #[allow(irrefutable_let_patterns)]
2340 if let PortClass::Device(ref mut val) = self {
2341 fidl::decode!(
2342 fidl_fuchsia_hardware_network__common::PortClass,
2343 D,
2344 val,
2345 decoder,
2346 _inner_offset,
2347 depth
2348 )?;
2349 } else {
2350 unreachable!()
2351 }
2352 }
2353 3 => {
2354 #[allow(irrefutable_let_patterns)]
2355 if let PortClass::Blackhole(_) = self {
2356 } else {
2358 *self = PortClass::Blackhole(fidl::new_empty!(Empty, D));
2360 }
2361 #[allow(irrefutable_let_patterns)]
2362 if let PortClass::Blackhole(ref mut val) = self {
2363 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2364 } else {
2365 unreachable!()
2366 }
2367 }
2368 #[allow(deprecated)]
2369 ordinal => {
2370 for _ in 0..num_handles {
2371 decoder.drop_next_handle()?;
2372 }
2373 *self = PortClass::__SourceBreaking { unknown_ordinal: ordinal };
2374 }
2375 }
2376 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2377 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2378 }
2379 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2380 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2381 }
2382 Ok(())
2383 }
2384 }
2385
2386 impl fidl::encoding::ValueTypeMarker for PreferredLifetimeInfo {
2387 type Borrowed<'a> = &'a Self;
2388 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2389 value
2390 }
2391 }
2392
2393 unsafe impl fidl::encoding::TypeMarker for PreferredLifetimeInfo {
2394 type Owned = Self;
2395
2396 #[inline(always)]
2397 fn inline_align(_context: fidl::encoding::Context) -> usize {
2398 8
2399 }
2400
2401 #[inline(always)]
2402 fn inline_size(_context: fidl::encoding::Context) -> usize {
2403 16
2404 }
2405 }
2406
2407 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PreferredLifetimeInfo, D>
2408 for &PreferredLifetimeInfo
2409 {
2410 #[inline]
2411 unsafe fn encode(
2412 self,
2413 encoder: &mut fidl::encoding::Encoder<'_, D>,
2414 offset: usize,
2415 _depth: fidl::encoding::Depth,
2416 ) -> fidl::Result<()> {
2417 encoder.debug_check_bounds::<PreferredLifetimeInfo>(offset);
2418 encoder.write_num::<u64>(self.ordinal(), offset);
2419 match self {
2420 PreferredLifetimeInfo::PreferredUntil(ref val) => {
2421 fidl::encoding::encode_in_envelope::<i64, D>(
2422 <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
2423 encoder,
2424 offset + 8,
2425 _depth,
2426 )
2427 }
2428 PreferredLifetimeInfo::Deprecated(ref val) => {
2429 fidl::encoding::encode_in_envelope::<Empty, D>(
2430 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2431 encoder,
2432 offset + 8,
2433 _depth,
2434 )
2435 }
2436 }
2437 }
2438 }
2439
2440 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PreferredLifetimeInfo {
2441 #[inline(always)]
2442 fn new_empty() -> Self {
2443 Self::PreferredUntil(fidl::new_empty!(i64, D))
2444 }
2445
2446 #[inline]
2447 unsafe fn decode(
2448 &mut self,
2449 decoder: &mut fidl::encoding::Decoder<'_, D>,
2450 offset: usize,
2451 mut depth: fidl::encoding::Depth,
2452 ) -> fidl::Result<()> {
2453 decoder.debug_check_bounds::<Self>(offset);
2454 #[allow(unused_variables)]
2455 let next_out_of_line = decoder.next_out_of_line();
2456 let handles_before = decoder.remaining_handles();
2457 let (ordinal, inlined, num_bytes, num_handles) =
2458 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2459
2460 let member_inline_size = match ordinal {
2461 1 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2462 2 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2463 _ => return Err(fidl::Error::UnknownUnionTag),
2464 };
2465
2466 if inlined != (member_inline_size <= 4) {
2467 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2468 }
2469 let _inner_offset;
2470 if inlined {
2471 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2472 _inner_offset = offset + 8;
2473 } else {
2474 depth.increment()?;
2475 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2476 }
2477 match ordinal {
2478 1 => {
2479 #[allow(irrefutable_let_patterns)]
2480 if let PreferredLifetimeInfo::PreferredUntil(_) = self {
2481 } else {
2483 *self = PreferredLifetimeInfo::PreferredUntil(fidl::new_empty!(i64, D));
2485 }
2486 #[allow(irrefutable_let_patterns)]
2487 if let PreferredLifetimeInfo::PreferredUntil(ref mut val) = self {
2488 fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
2489 } else {
2490 unreachable!()
2491 }
2492 }
2493 2 => {
2494 #[allow(irrefutable_let_patterns)]
2495 if let PreferredLifetimeInfo::Deprecated(_) = self {
2496 } else {
2498 *self = PreferredLifetimeInfo::Deprecated(fidl::new_empty!(Empty, D));
2500 }
2501 #[allow(irrefutable_let_patterns)]
2502 if let PreferredLifetimeInfo::Deprecated(ref mut val) = self {
2503 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2504 } else {
2505 unreachable!()
2506 }
2507 }
2508 ordinal => panic!("unexpected ordinal {:?}", ordinal),
2509 }
2510 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2511 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2512 }
2513 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2514 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2515 }
2516 Ok(())
2517 }
2518 }
2519}