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 #[doc(hidden)]
147 pub __source_breaking: fidl::marker::SourceBreaking,
148}
149
150impl fidl::Persistable for Properties {}
151
152#[derive(Clone, Debug, Default, PartialEq)]
153pub struct WatcherOptions {
154 pub address_properties_interest: Option<AddressPropertiesInterest>,
158 pub include_non_assigned_addresses: Option<bool>,
164 #[doc(hidden)]
165 pub __source_breaking: fidl::marker::SourceBreaking,
166}
167
168impl fidl::Persistable for WatcherOptions {}
169
170#[derive(Clone, Debug, PartialEq)]
171pub enum Event {
172 Existing(Properties),
176 Added(Properties),
180 Removed(u64),
182 Changed(Properties),
187 Idle(Empty),
190}
191
192impl Event {
193 #[inline]
194 pub fn ordinal(&self) -> u64 {
195 match *self {
196 Self::Existing(_) => 1,
197 Self::Added(_) => 2,
198 Self::Removed(_) => 3,
199 Self::Changed(_) => 4,
200 Self::Idle(_) => 5,
201 }
202 }
203}
204
205impl fidl::Persistable for Event {}
206
207#[derive(Clone, Debug)]
209pub enum PortClass {
210 Loopback(Empty),
212 Device(fidl_fuchsia_hardware_network__common::PortClass),
214 Blackhole(Empty),
216 #[doc(hidden)]
217 __SourceBreaking { unknown_ordinal: u64 },
218}
219
220#[macro_export]
222macro_rules! PortClassUnknown {
223 () => {
224 _
225 };
226}
227
228impl PartialEq for PortClass {
230 fn eq(&self, other: &Self) -> bool {
231 match (self, other) {
232 (Self::Loopback(x), Self::Loopback(y)) => *x == *y,
233 (Self::Device(x), Self::Device(y)) => *x == *y,
234 (Self::Blackhole(x), Self::Blackhole(y)) => *x == *y,
235 _ => false,
236 }
237 }
238}
239
240impl PortClass {
241 #[inline]
242 pub fn ordinal(&self) -> u64 {
243 match *self {
244 Self::Loopback(_) => 1,
245 Self::Device(_) => 2,
246 Self::Blackhole(_) => 3,
247 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
248 }
249 }
250
251 #[inline]
252 pub fn unknown_variant_for_testing() -> Self {
253 Self::__SourceBreaking { unknown_ordinal: 0 }
254 }
255
256 #[inline]
257 pub fn is_unknown(&self) -> bool {
258 match self {
259 Self::__SourceBreaking { .. } => true,
260 _ => false,
261 }
262 }
263}
264
265impl fidl::Persistable for PortClass {}
266
267#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
270pub enum PreferredLifetimeInfo {
271 PreferredUntil(i64),
287 Deprecated(Empty),
301}
302
303impl PreferredLifetimeInfo {
304 #[inline]
305 pub fn ordinal(&self) -> u64 {
306 match *self {
307 Self::PreferredUntil(_) => 1,
308 Self::Deprecated(_) => 2,
309 }
310 }
311}
312
313impl fidl::Persistable for PreferredLifetimeInfo {}
314
315pub mod state_ordinals {
316 pub const GET_WATCHER: u64 = 0x4fe223c98b263ae3;
317}
318
319pub mod watcher_ordinals {
320 pub const WATCH: u64 = 0x550767aa9faeeef3;
321}
322
323mod internal {
324 use super::*;
325 unsafe impl fidl::encoding::TypeMarker for AddressPropertiesInterest {
326 type Owned = Self;
327
328 #[inline(always)]
329 fn inline_align(_context: fidl::encoding::Context) -> usize {
330 8
331 }
332
333 #[inline(always)]
334 fn inline_size(_context: fidl::encoding::Context) -> usize {
335 8
336 }
337 }
338
339 impl fidl::encoding::ValueTypeMarker for AddressPropertiesInterest {
340 type Borrowed<'a> = Self;
341 #[inline(always)]
342 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
343 *value
344 }
345 }
346
347 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
348 for AddressPropertiesInterest
349 {
350 #[inline]
351 unsafe fn encode(
352 self,
353 encoder: &mut fidl::encoding::Encoder<'_, D>,
354 offset: usize,
355 _depth: fidl::encoding::Depth,
356 ) -> fidl::Result<()> {
357 encoder.debug_check_bounds::<Self>(offset);
358 encoder.write_num(self.bits(), offset);
359 Ok(())
360 }
361 }
362
363 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
364 for AddressPropertiesInterest
365 {
366 #[inline(always)]
367 fn new_empty() -> Self {
368 Self::empty()
369 }
370
371 #[inline]
372 unsafe fn decode(
373 &mut self,
374 decoder: &mut fidl::encoding::Decoder<'_, D>,
375 offset: usize,
376 _depth: fidl::encoding::Depth,
377 ) -> fidl::Result<()> {
378 decoder.debug_check_bounds::<Self>(offset);
379 let prim = decoder.read_num::<u64>(offset);
380 *self = Self::from_bits_allow_unknown(prim);
381 Ok(())
382 }
383 }
384 unsafe impl fidl::encoding::TypeMarker for AddressAssignmentState {
385 type Owned = Self;
386
387 #[inline(always)]
388 fn inline_align(_context: fidl::encoding::Context) -> usize {
389 std::mem::align_of::<u32>()
390 }
391
392 #[inline(always)]
393 fn inline_size(_context: fidl::encoding::Context) -> usize {
394 std::mem::size_of::<u32>()
395 }
396
397 #[inline(always)]
398 fn encode_is_copy() -> bool {
399 true
400 }
401
402 #[inline(always)]
403 fn decode_is_copy() -> bool {
404 false
405 }
406 }
407
408 impl fidl::encoding::ValueTypeMarker for AddressAssignmentState {
409 type Borrowed<'a> = Self;
410 #[inline(always)]
411 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
412 *value
413 }
414 }
415
416 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
417 for AddressAssignmentState
418 {
419 #[inline]
420 unsafe fn encode(
421 self,
422 encoder: &mut fidl::encoding::Encoder<'_, D>,
423 offset: usize,
424 _depth: fidl::encoding::Depth,
425 ) -> fidl::Result<()> {
426 encoder.debug_check_bounds::<Self>(offset);
427 encoder.write_num(self.into_primitive(), offset);
428 Ok(())
429 }
430 }
431
432 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
433 for AddressAssignmentState
434 {
435 #[inline(always)]
436 fn new_empty() -> Self {
437 Self::Tentative
438 }
439
440 #[inline]
441 unsafe fn decode(
442 &mut self,
443 decoder: &mut fidl::encoding::Decoder<'_, D>,
444 offset: usize,
445 _depth: fidl::encoding::Depth,
446 ) -> fidl::Result<()> {
447 decoder.debug_check_bounds::<Self>(offset);
448 let prim = decoder.read_num::<u32>(offset);
449
450 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
451 Ok(())
452 }
453 }
454
455 impl fidl::encoding::ValueTypeMarker for Empty {
456 type Borrowed<'a> = &'a Self;
457 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
458 value
459 }
460 }
461
462 unsafe impl fidl::encoding::TypeMarker for Empty {
463 type Owned = Self;
464
465 #[inline(always)]
466 fn inline_align(_context: fidl::encoding::Context) -> usize {
467 1
468 }
469
470 #[inline(always)]
471 fn inline_size(_context: fidl::encoding::Context) -> usize {
472 1
473 }
474 }
475
476 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Empty, D> for &Empty {
477 #[inline]
478 unsafe fn encode(
479 self,
480 encoder: &mut fidl::encoding::Encoder<'_, D>,
481 offset: usize,
482 _depth: fidl::encoding::Depth,
483 ) -> fidl::Result<()> {
484 encoder.debug_check_bounds::<Empty>(offset);
485 encoder.write_num(0u8, offset);
486 Ok(())
487 }
488 }
489
490 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Empty {
491 #[inline(always)]
492 fn new_empty() -> Self {
493 Self
494 }
495
496 #[inline]
497 unsafe fn decode(
498 &mut self,
499 decoder: &mut fidl::encoding::Decoder<'_, D>,
500 offset: usize,
501 _depth: fidl::encoding::Depth,
502 ) -> fidl::Result<()> {
503 decoder.debug_check_bounds::<Self>(offset);
504 match decoder.read_num::<u8>(offset) {
505 0 => Ok(()),
506 _ => Err(fidl::Error::Invalid),
507 }
508 }
509 }
510
511 impl fidl::encoding::ValueTypeMarker for WatcherWatchResponse {
512 type Borrowed<'a> = &'a Self;
513 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
514 value
515 }
516 }
517
518 unsafe impl fidl::encoding::TypeMarker for WatcherWatchResponse {
519 type Owned = Self;
520
521 #[inline(always)]
522 fn inline_align(_context: fidl::encoding::Context) -> usize {
523 8
524 }
525
526 #[inline(always)]
527 fn inline_size(_context: fidl::encoding::Context) -> usize {
528 16
529 }
530 }
531
532 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WatcherWatchResponse, D>
533 for &WatcherWatchResponse
534 {
535 #[inline]
536 unsafe fn encode(
537 self,
538 encoder: &mut fidl::encoding::Encoder<'_, D>,
539 offset: usize,
540 _depth: fidl::encoding::Depth,
541 ) -> fidl::Result<()> {
542 encoder.debug_check_bounds::<WatcherWatchResponse>(offset);
543 fidl::encoding::Encode::<WatcherWatchResponse, D>::encode(
545 (<Event as fidl::encoding::ValueTypeMarker>::borrow(&self.event),),
546 encoder,
547 offset,
548 _depth,
549 )
550 }
551 }
552 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Event, D>>
553 fidl::encoding::Encode<WatcherWatchResponse, D> for (T0,)
554 {
555 #[inline]
556 unsafe fn encode(
557 self,
558 encoder: &mut fidl::encoding::Encoder<'_, D>,
559 offset: usize,
560 depth: fidl::encoding::Depth,
561 ) -> fidl::Result<()> {
562 encoder.debug_check_bounds::<WatcherWatchResponse>(offset);
563 self.0.encode(encoder, offset + 0, depth)?;
567 Ok(())
568 }
569 }
570
571 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WatcherWatchResponse {
572 #[inline(always)]
573 fn new_empty() -> Self {
574 Self { event: fidl::new_empty!(Event, D) }
575 }
576
577 #[inline]
578 unsafe fn decode(
579 &mut self,
580 decoder: &mut fidl::encoding::Decoder<'_, D>,
581 offset: usize,
582 _depth: fidl::encoding::Depth,
583 ) -> fidl::Result<()> {
584 decoder.debug_check_bounds::<Self>(offset);
585 fidl::decode!(Event, D, &mut self.event, decoder, offset + 0, _depth)?;
587 Ok(())
588 }
589 }
590
591 impl Address {
592 #[inline(always)]
593 fn max_ordinal_present(&self) -> u64 {
594 if let Some(_) = self.assignment_state {
595 return 4;
596 }
597 if let Some(_) = self.preferred_lifetime_info {
598 return 3;
599 }
600 if let Some(_) = self.valid_until {
601 return 2;
602 }
603 if let Some(_) = self.addr {
604 return 1;
605 }
606 0
607 }
608 }
609
610 impl fidl::encoding::ValueTypeMarker for Address {
611 type Borrowed<'a> = &'a Self;
612 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
613 value
614 }
615 }
616
617 unsafe impl fidl::encoding::TypeMarker for Address {
618 type Owned = Self;
619
620 #[inline(always)]
621 fn inline_align(_context: fidl::encoding::Context) -> usize {
622 8
623 }
624
625 #[inline(always)]
626 fn inline_size(_context: fidl::encoding::Context) -> usize {
627 16
628 }
629 }
630
631 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Address, D> for &Address {
632 unsafe fn encode(
633 self,
634 encoder: &mut fidl::encoding::Encoder<'_, D>,
635 offset: usize,
636 mut depth: fidl::encoding::Depth,
637 ) -> fidl::Result<()> {
638 encoder.debug_check_bounds::<Address>(offset);
639 let max_ordinal: u64 = self.max_ordinal_present();
641 encoder.write_num(max_ordinal, offset);
642 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
643 if max_ordinal == 0 {
645 return Ok(());
646 }
647 depth.increment()?;
648 let envelope_size = 8;
649 let bytes_len = max_ordinal as usize * envelope_size;
650 #[allow(unused_variables)]
651 let offset = encoder.out_of_line_offset(bytes_len);
652 let mut _prev_end_offset: usize = 0;
653 if 1 > max_ordinal {
654 return Ok(());
655 }
656
657 let cur_offset: usize = (1 - 1) * envelope_size;
660
661 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
663
664 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_net__common::Subnet, D>(
669 self.addr.as_ref().map(
670 <fidl_fuchsia_net__common::Subnet as fidl::encoding::ValueTypeMarker>::borrow,
671 ),
672 encoder,
673 offset + cur_offset,
674 depth,
675 )?;
676
677 _prev_end_offset = cur_offset + envelope_size;
678 if 2 > max_ordinal {
679 return Ok(());
680 }
681
682 let cur_offset: usize = (2 - 1) * envelope_size;
685
686 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
688
689 fidl::encoding::encode_in_envelope_optional::<i64, D>(
694 self.valid_until.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
695 encoder,
696 offset + cur_offset,
697 depth,
698 )?;
699
700 _prev_end_offset = cur_offset + envelope_size;
701 if 3 > max_ordinal {
702 return Ok(());
703 }
704
705 let cur_offset: usize = (3 - 1) * envelope_size;
708
709 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
711
712 fidl::encoding::encode_in_envelope_optional::<PreferredLifetimeInfo, D>(
717 self.preferred_lifetime_info
718 .as_ref()
719 .map(<PreferredLifetimeInfo as fidl::encoding::ValueTypeMarker>::borrow),
720 encoder,
721 offset + cur_offset,
722 depth,
723 )?;
724
725 _prev_end_offset = cur_offset + envelope_size;
726 if 4 > max_ordinal {
727 return Ok(());
728 }
729
730 let cur_offset: usize = (4 - 1) * envelope_size;
733
734 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
736
737 fidl::encoding::encode_in_envelope_optional::<AddressAssignmentState, D>(
742 self.assignment_state
743 .as_ref()
744 .map(<AddressAssignmentState as fidl::encoding::ValueTypeMarker>::borrow),
745 encoder,
746 offset + cur_offset,
747 depth,
748 )?;
749
750 _prev_end_offset = cur_offset + envelope_size;
751
752 Ok(())
753 }
754 }
755
756 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Address {
757 #[inline(always)]
758 fn new_empty() -> Self {
759 Self::default()
760 }
761
762 unsafe fn decode(
763 &mut self,
764 decoder: &mut fidl::encoding::Decoder<'_, D>,
765 offset: usize,
766 mut depth: fidl::encoding::Depth,
767 ) -> fidl::Result<()> {
768 decoder.debug_check_bounds::<Self>(offset);
769 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
770 None => return Err(fidl::Error::NotNullable),
771 Some(len) => len,
772 };
773 if len == 0 {
775 return Ok(());
776 };
777 depth.increment()?;
778 let envelope_size = 8;
779 let bytes_len = len * envelope_size;
780 let offset = decoder.out_of_line_offset(bytes_len)?;
781 let mut _next_ordinal_to_read = 0;
783 let mut next_offset = offset;
784 let end_offset = offset + bytes_len;
785 _next_ordinal_to_read += 1;
786 if next_offset >= end_offset {
787 return Ok(());
788 }
789
790 while _next_ordinal_to_read < 1 {
792 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
793 _next_ordinal_to_read += 1;
794 next_offset += envelope_size;
795 }
796
797 let next_out_of_line = decoder.next_out_of_line();
798 let handles_before = decoder.remaining_handles();
799 if let Some((inlined, num_bytes, num_handles)) =
800 fidl::encoding::decode_envelope_header(decoder, next_offset)?
801 {
802 let member_inline_size =
803 <fidl_fuchsia_net__common::Subnet as fidl::encoding::TypeMarker>::inline_size(
804 decoder.context,
805 );
806 if inlined != (member_inline_size <= 4) {
807 return Err(fidl::Error::InvalidInlineBitInEnvelope);
808 }
809 let inner_offset;
810 let mut inner_depth = depth.clone();
811 if inlined {
812 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
813 inner_offset = next_offset;
814 } else {
815 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
816 inner_depth.increment()?;
817 }
818 let val_ref = self
819 .addr
820 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_net__common::Subnet, D));
821 fidl::decode!(
822 fidl_fuchsia_net__common::Subnet,
823 D,
824 val_ref,
825 decoder,
826 inner_offset,
827 inner_depth
828 )?;
829 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
830 {
831 return Err(fidl::Error::InvalidNumBytesInEnvelope);
832 }
833 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
834 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
835 }
836 }
837
838 next_offset += envelope_size;
839 _next_ordinal_to_read += 1;
840 if next_offset >= end_offset {
841 return Ok(());
842 }
843
844 while _next_ordinal_to_read < 2 {
846 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
847 _next_ordinal_to_read += 1;
848 next_offset += envelope_size;
849 }
850
851 let next_out_of_line = decoder.next_out_of_line();
852 let handles_before = decoder.remaining_handles();
853 if let Some((inlined, num_bytes, num_handles)) =
854 fidl::encoding::decode_envelope_header(decoder, next_offset)?
855 {
856 let member_inline_size =
857 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
858 if inlined != (member_inline_size <= 4) {
859 return Err(fidl::Error::InvalidInlineBitInEnvelope);
860 }
861 let inner_offset;
862 let mut inner_depth = depth.clone();
863 if inlined {
864 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
865 inner_offset = next_offset;
866 } else {
867 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
868 inner_depth.increment()?;
869 }
870 let val_ref = self.valid_until.get_or_insert_with(|| fidl::new_empty!(i64, D));
871 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
872 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
873 {
874 return Err(fidl::Error::InvalidNumBytesInEnvelope);
875 }
876 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
877 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
878 }
879 }
880
881 next_offset += envelope_size;
882 _next_ordinal_to_read += 1;
883 if next_offset >= end_offset {
884 return Ok(());
885 }
886
887 while _next_ordinal_to_read < 3 {
889 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
890 _next_ordinal_to_read += 1;
891 next_offset += envelope_size;
892 }
893
894 let next_out_of_line = decoder.next_out_of_line();
895 let handles_before = decoder.remaining_handles();
896 if let Some((inlined, num_bytes, num_handles)) =
897 fidl::encoding::decode_envelope_header(decoder, next_offset)?
898 {
899 let member_inline_size =
900 <PreferredLifetimeInfo as fidl::encoding::TypeMarker>::inline_size(
901 decoder.context,
902 );
903 if inlined != (member_inline_size <= 4) {
904 return Err(fidl::Error::InvalidInlineBitInEnvelope);
905 }
906 let inner_offset;
907 let mut inner_depth = depth.clone();
908 if inlined {
909 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
910 inner_offset = next_offset;
911 } else {
912 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
913 inner_depth.increment()?;
914 }
915 let val_ref = self
916 .preferred_lifetime_info
917 .get_or_insert_with(|| fidl::new_empty!(PreferredLifetimeInfo, D));
918 fidl::decode!(
919 PreferredLifetimeInfo,
920 D,
921 val_ref,
922 decoder,
923 inner_offset,
924 inner_depth
925 )?;
926 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
927 {
928 return Err(fidl::Error::InvalidNumBytesInEnvelope);
929 }
930 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
931 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
932 }
933 }
934
935 next_offset += envelope_size;
936 _next_ordinal_to_read += 1;
937 if next_offset >= end_offset {
938 return Ok(());
939 }
940
941 while _next_ordinal_to_read < 4 {
943 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
944 _next_ordinal_to_read += 1;
945 next_offset += envelope_size;
946 }
947
948 let next_out_of_line = decoder.next_out_of_line();
949 let handles_before = decoder.remaining_handles();
950 if let Some((inlined, num_bytes, num_handles)) =
951 fidl::encoding::decode_envelope_header(decoder, next_offset)?
952 {
953 let member_inline_size =
954 <AddressAssignmentState as fidl::encoding::TypeMarker>::inline_size(
955 decoder.context,
956 );
957 if inlined != (member_inline_size <= 4) {
958 return Err(fidl::Error::InvalidInlineBitInEnvelope);
959 }
960 let inner_offset;
961 let mut inner_depth = depth.clone();
962 if inlined {
963 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
964 inner_offset = next_offset;
965 } else {
966 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
967 inner_depth.increment()?;
968 }
969 let val_ref = self
970 .assignment_state
971 .get_or_insert_with(|| fidl::new_empty!(AddressAssignmentState, D));
972 fidl::decode!(
973 AddressAssignmentState,
974 D,
975 val_ref,
976 decoder,
977 inner_offset,
978 inner_depth
979 )?;
980 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
981 {
982 return Err(fidl::Error::InvalidNumBytesInEnvelope);
983 }
984 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
985 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
986 }
987 }
988
989 next_offset += envelope_size;
990
991 while next_offset < end_offset {
993 _next_ordinal_to_read += 1;
994 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
995 next_offset += envelope_size;
996 }
997
998 Ok(())
999 }
1000 }
1001
1002 impl Properties {
1003 #[inline(always)]
1004 fn max_ordinal_present(&self) -> u64 {
1005 if let Some(_) = self.port_class {
1006 return 8;
1007 }
1008 if let Some(_) = self.name {
1009 return 7;
1010 }
1011 if let Some(_) = self.has_default_ipv6_route {
1012 return 6;
1013 }
1014 if let Some(_) = self.has_default_ipv4_route {
1015 return 5;
1016 }
1017 if let Some(_) = self.online {
1018 return 3;
1019 }
1020 if let Some(_) = self.addresses {
1021 return 2;
1022 }
1023 if let Some(_) = self.id {
1024 return 1;
1025 }
1026 0
1027 }
1028 }
1029
1030 impl fidl::encoding::ValueTypeMarker for Properties {
1031 type Borrowed<'a> = &'a Self;
1032 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1033 value
1034 }
1035 }
1036
1037 unsafe impl fidl::encoding::TypeMarker for Properties {
1038 type Owned = Self;
1039
1040 #[inline(always)]
1041 fn inline_align(_context: fidl::encoding::Context) -> usize {
1042 8
1043 }
1044
1045 #[inline(always)]
1046 fn inline_size(_context: fidl::encoding::Context) -> usize {
1047 16
1048 }
1049 }
1050
1051 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Properties, D>
1052 for &Properties
1053 {
1054 unsafe fn encode(
1055 self,
1056 encoder: &mut fidl::encoding::Encoder<'_, D>,
1057 offset: usize,
1058 mut depth: fidl::encoding::Depth,
1059 ) -> fidl::Result<()> {
1060 encoder.debug_check_bounds::<Properties>(offset);
1061 let max_ordinal: u64 = self.max_ordinal_present();
1063 encoder.write_num(max_ordinal, offset);
1064 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1065 if max_ordinal == 0 {
1067 return Ok(());
1068 }
1069 depth.increment()?;
1070 let envelope_size = 8;
1071 let bytes_len = max_ordinal as usize * envelope_size;
1072 #[allow(unused_variables)]
1073 let offset = encoder.out_of_line_offset(bytes_len);
1074 let mut _prev_end_offset: usize = 0;
1075 if 1 > max_ordinal {
1076 return Ok(());
1077 }
1078
1079 let cur_offset: usize = (1 - 1) * envelope_size;
1082
1083 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1085
1086 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1091 self.id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1092 encoder,
1093 offset + cur_offset,
1094 depth,
1095 )?;
1096
1097 _prev_end_offset = cur_offset + envelope_size;
1098 if 2 > max_ordinal {
1099 return Ok(());
1100 }
1101
1102 let cur_offset: usize = (2 - 1) * envelope_size;
1105
1106 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1108
1109 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Address>, D>(
1114 self.addresses.as_ref().map(<fidl::encoding::UnboundedVector<Address> as fidl::encoding::ValueTypeMarker>::borrow),
1115 encoder, offset + cur_offset, depth
1116 )?;
1117
1118 _prev_end_offset = cur_offset + envelope_size;
1119 if 3 > max_ordinal {
1120 return Ok(());
1121 }
1122
1123 let cur_offset: usize = (3 - 1) * envelope_size;
1126
1127 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1129
1130 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1135 self.online.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1136 encoder,
1137 offset + cur_offset,
1138 depth,
1139 )?;
1140
1141 _prev_end_offset = cur_offset + envelope_size;
1142 if 5 > max_ordinal {
1143 return Ok(());
1144 }
1145
1146 let cur_offset: usize = (5 - 1) * envelope_size;
1149
1150 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1152
1153 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1158 self.has_default_ipv4_route
1159 .as_ref()
1160 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1161 encoder,
1162 offset + cur_offset,
1163 depth,
1164 )?;
1165
1166 _prev_end_offset = cur_offset + envelope_size;
1167 if 6 > max_ordinal {
1168 return Ok(());
1169 }
1170
1171 let cur_offset: usize = (6 - 1) * envelope_size;
1174
1175 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1177
1178 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1183 self.has_default_ipv6_route
1184 .as_ref()
1185 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1186 encoder,
1187 offset + cur_offset,
1188 depth,
1189 )?;
1190
1191 _prev_end_offset = cur_offset + envelope_size;
1192 if 7 > max_ordinal {
1193 return Ok(());
1194 }
1195
1196 let cur_offset: usize = (7 - 1) * envelope_size;
1199
1200 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1202
1203 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<15>, D>(
1208 self.name.as_ref().map(
1209 <fidl::encoding::BoundedString<15> as fidl::encoding::ValueTypeMarker>::borrow,
1210 ),
1211 encoder,
1212 offset + cur_offset,
1213 depth,
1214 )?;
1215
1216 _prev_end_offset = cur_offset + envelope_size;
1217 if 8 > max_ordinal {
1218 return Ok(());
1219 }
1220
1221 let cur_offset: usize = (8 - 1) * envelope_size;
1224
1225 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1227
1228 fidl::encoding::encode_in_envelope_optional::<PortClass, D>(
1233 self.port_class
1234 .as_ref()
1235 .map(<PortClass as fidl::encoding::ValueTypeMarker>::borrow),
1236 encoder,
1237 offset + cur_offset,
1238 depth,
1239 )?;
1240
1241 _prev_end_offset = cur_offset + envelope_size;
1242
1243 Ok(())
1244 }
1245 }
1246
1247 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Properties {
1248 #[inline(always)]
1249 fn new_empty() -> Self {
1250 Self::default()
1251 }
1252
1253 unsafe fn decode(
1254 &mut self,
1255 decoder: &mut fidl::encoding::Decoder<'_, D>,
1256 offset: usize,
1257 mut depth: fidl::encoding::Depth,
1258 ) -> fidl::Result<()> {
1259 decoder.debug_check_bounds::<Self>(offset);
1260 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1261 None => return Err(fidl::Error::NotNullable),
1262 Some(len) => len,
1263 };
1264 if len == 0 {
1266 return Ok(());
1267 };
1268 depth.increment()?;
1269 let envelope_size = 8;
1270 let bytes_len = len * envelope_size;
1271 let offset = decoder.out_of_line_offset(bytes_len)?;
1272 let mut _next_ordinal_to_read = 0;
1274 let mut next_offset = offset;
1275 let end_offset = offset + bytes_len;
1276 _next_ordinal_to_read += 1;
1277 if next_offset >= end_offset {
1278 return Ok(());
1279 }
1280
1281 while _next_ordinal_to_read < 1 {
1283 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1284 _next_ordinal_to_read += 1;
1285 next_offset += envelope_size;
1286 }
1287
1288 let next_out_of_line = decoder.next_out_of_line();
1289 let handles_before = decoder.remaining_handles();
1290 if let Some((inlined, num_bytes, num_handles)) =
1291 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1292 {
1293 let member_inline_size =
1294 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1295 if inlined != (member_inline_size <= 4) {
1296 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1297 }
1298 let inner_offset;
1299 let mut inner_depth = depth.clone();
1300 if inlined {
1301 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1302 inner_offset = next_offset;
1303 } else {
1304 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1305 inner_depth.increment()?;
1306 }
1307 let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u64, D));
1308 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1309 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1310 {
1311 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1312 }
1313 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1314 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1315 }
1316 }
1317
1318 next_offset += envelope_size;
1319 _next_ordinal_to_read += 1;
1320 if next_offset >= end_offset {
1321 return Ok(());
1322 }
1323
1324 while _next_ordinal_to_read < 2 {
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 = <fidl::encoding::UnboundedVector<Address> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1337 if inlined != (member_inline_size <= 4) {
1338 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1339 }
1340 let inner_offset;
1341 let mut inner_depth = depth.clone();
1342 if inlined {
1343 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1344 inner_offset = next_offset;
1345 } else {
1346 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1347 inner_depth.increment()?;
1348 }
1349 let val_ref = self.addresses.get_or_insert_with(|| {
1350 fidl::new_empty!(fidl::encoding::UnboundedVector<Address>, D)
1351 });
1352 fidl::decode!(
1353 fidl::encoding::UnboundedVector<Address>,
1354 D,
1355 val_ref,
1356 decoder,
1357 inner_offset,
1358 inner_depth
1359 )?;
1360 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1361 {
1362 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1363 }
1364 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1365 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1366 }
1367 }
1368
1369 next_offset += envelope_size;
1370 _next_ordinal_to_read += 1;
1371 if next_offset >= end_offset {
1372 return Ok(());
1373 }
1374
1375 while _next_ordinal_to_read < 3 {
1377 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1378 _next_ordinal_to_read += 1;
1379 next_offset += envelope_size;
1380 }
1381
1382 let next_out_of_line = decoder.next_out_of_line();
1383 let handles_before = decoder.remaining_handles();
1384 if let Some((inlined, num_bytes, num_handles)) =
1385 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1386 {
1387 let member_inline_size =
1388 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1389 if inlined != (member_inline_size <= 4) {
1390 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1391 }
1392 let inner_offset;
1393 let mut inner_depth = depth.clone();
1394 if inlined {
1395 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1396 inner_offset = next_offset;
1397 } else {
1398 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1399 inner_depth.increment()?;
1400 }
1401 let val_ref = self.online.get_or_insert_with(|| fidl::new_empty!(bool, D));
1402 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
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 < 5 {
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 =
1445 self.has_default_ipv4_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
1446 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1447 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1448 {
1449 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1450 }
1451 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1452 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1453 }
1454 }
1455
1456 next_offset += envelope_size;
1457 _next_ordinal_to_read += 1;
1458 if next_offset >= end_offset {
1459 return Ok(());
1460 }
1461
1462 while _next_ordinal_to_read < 6 {
1464 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1465 _next_ordinal_to_read += 1;
1466 next_offset += envelope_size;
1467 }
1468
1469 let next_out_of_line = decoder.next_out_of_line();
1470 let handles_before = decoder.remaining_handles();
1471 if let Some((inlined, num_bytes, num_handles)) =
1472 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1473 {
1474 let member_inline_size =
1475 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1476 if inlined != (member_inline_size <= 4) {
1477 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1478 }
1479 let inner_offset;
1480 let mut inner_depth = depth.clone();
1481 if inlined {
1482 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1483 inner_offset = next_offset;
1484 } else {
1485 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1486 inner_depth.increment()?;
1487 }
1488 let val_ref =
1489 self.has_default_ipv6_route.get_or_insert_with(|| fidl::new_empty!(bool, D));
1490 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1491 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1492 {
1493 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1494 }
1495 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1496 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1497 }
1498 }
1499
1500 next_offset += envelope_size;
1501 _next_ordinal_to_read += 1;
1502 if next_offset >= end_offset {
1503 return Ok(());
1504 }
1505
1506 while _next_ordinal_to_read < 7 {
1508 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1509 _next_ordinal_to_read += 1;
1510 next_offset += envelope_size;
1511 }
1512
1513 let next_out_of_line = decoder.next_out_of_line();
1514 let handles_before = decoder.remaining_handles();
1515 if let Some((inlined, num_bytes, num_handles)) =
1516 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1517 {
1518 let member_inline_size =
1519 <fidl::encoding::BoundedString<15> as fidl::encoding::TypeMarker>::inline_size(
1520 decoder.context,
1521 );
1522 if inlined != (member_inline_size <= 4) {
1523 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1524 }
1525 let inner_offset;
1526 let mut inner_depth = depth.clone();
1527 if inlined {
1528 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1529 inner_offset = next_offset;
1530 } else {
1531 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1532 inner_depth.increment()?;
1533 }
1534 let val_ref = self
1535 .name
1536 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<15>, D));
1537 fidl::decode!(
1538 fidl::encoding::BoundedString<15>,
1539 D,
1540 val_ref,
1541 decoder,
1542 inner_offset,
1543 inner_depth
1544 )?;
1545 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1546 {
1547 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1548 }
1549 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1550 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1551 }
1552 }
1553
1554 next_offset += envelope_size;
1555 _next_ordinal_to_read += 1;
1556 if next_offset >= end_offset {
1557 return Ok(());
1558 }
1559
1560 while _next_ordinal_to_read < 8 {
1562 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1563 _next_ordinal_to_read += 1;
1564 next_offset += envelope_size;
1565 }
1566
1567 let next_out_of_line = decoder.next_out_of_line();
1568 let handles_before = decoder.remaining_handles();
1569 if let Some((inlined, num_bytes, num_handles)) =
1570 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1571 {
1572 let member_inline_size =
1573 <PortClass as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1574 if inlined != (member_inline_size <= 4) {
1575 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1576 }
1577 let inner_offset;
1578 let mut inner_depth = depth.clone();
1579 if inlined {
1580 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1581 inner_offset = next_offset;
1582 } else {
1583 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1584 inner_depth.increment()?;
1585 }
1586 let val_ref = self.port_class.get_or_insert_with(|| fidl::new_empty!(PortClass, D));
1587 fidl::decode!(PortClass, D, val_ref, decoder, inner_offset, inner_depth)?;
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
1599 while next_offset < end_offset {
1601 _next_ordinal_to_read += 1;
1602 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1603 next_offset += envelope_size;
1604 }
1605
1606 Ok(())
1607 }
1608 }
1609
1610 impl WatcherOptions {
1611 #[inline(always)]
1612 fn max_ordinal_present(&self) -> u64 {
1613 if let Some(_) = self.include_non_assigned_addresses {
1614 return 2;
1615 }
1616 if let Some(_) = self.address_properties_interest {
1617 return 1;
1618 }
1619 0
1620 }
1621 }
1622
1623 impl fidl::encoding::ValueTypeMarker for WatcherOptions {
1624 type Borrowed<'a> = &'a Self;
1625 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1626 value
1627 }
1628 }
1629
1630 unsafe impl fidl::encoding::TypeMarker for WatcherOptions {
1631 type Owned = Self;
1632
1633 #[inline(always)]
1634 fn inline_align(_context: fidl::encoding::Context) -> usize {
1635 8
1636 }
1637
1638 #[inline(always)]
1639 fn inline_size(_context: fidl::encoding::Context) -> usize {
1640 16
1641 }
1642 }
1643
1644 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WatcherOptions, D>
1645 for &WatcherOptions
1646 {
1647 unsafe fn encode(
1648 self,
1649 encoder: &mut fidl::encoding::Encoder<'_, D>,
1650 offset: usize,
1651 mut depth: fidl::encoding::Depth,
1652 ) -> fidl::Result<()> {
1653 encoder.debug_check_bounds::<WatcherOptions>(offset);
1654 let max_ordinal: u64 = self.max_ordinal_present();
1656 encoder.write_num(max_ordinal, offset);
1657 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1658 if max_ordinal == 0 {
1660 return Ok(());
1661 }
1662 depth.increment()?;
1663 let envelope_size = 8;
1664 let bytes_len = max_ordinal as usize * envelope_size;
1665 #[allow(unused_variables)]
1666 let offset = encoder.out_of_line_offset(bytes_len);
1667 let mut _prev_end_offset: usize = 0;
1668 if 1 > max_ordinal {
1669 return Ok(());
1670 }
1671
1672 let cur_offset: usize = (1 - 1) * envelope_size;
1675
1676 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1678
1679 fidl::encoding::encode_in_envelope_optional::<AddressPropertiesInterest, D>(
1684 self.address_properties_interest
1685 .as_ref()
1686 .map(<AddressPropertiesInterest as fidl::encoding::ValueTypeMarker>::borrow),
1687 encoder,
1688 offset + cur_offset,
1689 depth,
1690 )?;
1691
1692 _prev_end_offset = cur_offset + envelope_size;
1693 if 2 > max_ordinal {
1694 return Ok(());
1695 }
1696
1697 let cur_offset: usize = (2 - 1) * envelope_size;
1700
1701 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1703
1704 fidl::encoding::encode_in_envelope_optional::<bool, D>(
1709 self.include_non_assigned_addresses
1710 .as_ref()
1711 .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1712 encoder,
1713 offset + cur_offset,
1714 depth,
1715 )?;
1716
1717 _prev_end_offset = cur_offset + envelope_size;
1718
1719 Ok(())
1720 }
1721 }
1722
1723 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WatcherOptions {
1724 #[inline(always)]
1725 fn new_empty() -> Self {
1726 Self::default()
1727 }
1728
1729 unsafe fn decode(
1730 &mut self,
1731 decoder: &mut fidl::encoding::Decoder<'_, D>,
1732 offset: usize,
1733 mut depth: fidl::encoding::Depth,
1734 ) -> fidl::Result<()> {
1735 decoder.debug_check_bounds::<Self>(offset);
1736 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1737 None => return Err(fidl::Error::NotNullable),
1738 Some(len) => len,
1739 };
1740 if len == 0 {
1742 return Ok(());
1743 };
1744 depth.increment()?;
1745 let envelope_size = 8;
1746 let bytes_len = len * envelope_size;
1747 let offset = decoder.out_of_line_offset(bytes_len)?;
1748 let mut _next_ordinal_to_read = 0;
1750 let mut next_offset = offset;
1751 let end_offset = offset + bytes_len;
1752 _next_ordinal_to_read += 1;
1753 if next_offset >= end_offset {
1754 return Ok(());
1755 }
1756
1757 while _next_ordinal_to_read < 1 {
1759 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1760 _next_ordinal_to_read += 1;
1761 next_offset += envelope_size;
1762 }
1763
1764 let next_out_of_line = decoder.next_out_of_line();
1765 let handles_before = decoder.remaining_handles();
1766 if let Some((inlined, num_bytes, num_handles)) =
1767 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1768 {
1769 let member_inline_size =
1770 <AddressPropertiesInterest as fidl::encoding::TypeMarker>::inline_size(
1771 decoder.context,
1772 );
1773 if inlined != (member_inline_size <= 4) {
1774 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1775 }
1776 let inner_offset;
1777 let mut inner_depth = depth.clone();
1778 if inlined {
1779 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1780 inner_offset = next_offset;
1781 } else {
1782 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1783 inner_depth.increment()?;
1784 }
1785 let val_ref = self
1786 .address_properties_interest
1787 .get_or_insert_with(|| fidl::new_empty!(AddressPropertiesInterest, D));
1788 fidl::decode!(
1789 AddressPropertiesInterest,
1790 D,
1791 val_ref,
1792 decoder,
1793 inner_offset,
1794 inner_depth
1795 )?;
1796 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1797 {
1798 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1799 }
1800 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1801 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1802 }
1803 }
1804
1805 next_offset += envelope_size;
1806 _next_ordinal_to_read += 1;
1807 if next_offset >= end_offset {
1808 return Ok(());
1809 }
1810
1811 while _next_ordinal_to_read < 2 {
1813 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1814 _next_ordinal_to_read += 1;
1815 next_offset += envelope_size;
1816 }
1817
1818 let next_out_of_line = decoder.next_out_of_line();
1819 let handles_before = decoder.remaining_handles();
1820 if let Some((inlined, num_bytes, num_handles)) =
1821 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1822 {
1823 let member_inline_size =
1824 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1825 if inlined != (member_inline_size <= 4) {
1826 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1827 }
1828 let inner_offset;
1829 let mut inner_depth = depth.clone();
1830 if inlined {
1831 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1832 inner_offset = next_offset;
1833 } else {
1834 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1835 inner_depth.increment()?;
1836 }
1837 let val_ref = self
1838 .include_non_assigned_addresses
1839 .get_or_insert_with(|| fidl::new_empty!(bool, D));
1840 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1841 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1842 {
1843 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1844 }
1845 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1846 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1847 }
1848 }
1849
1850 next_offset += envelope_size;
1851
1852 while next_offset < end_offset {
1854 _next_ordinal_to_read += 1;
1855 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1856 next_offset += envelope_size;
1857 }
1858
1859 Ok(())
1860 }
1861 }
1862
1863 impl fidl::encoding::ValueTypeMarker for Event {
1864 type Borrowed<'a> = &'a Self;
1865 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1866 value
1867 }
1868 }
1869
1870 unsafe impl fidl::encoding::TypeMarker for Event {
1871 type Owned = Self;
1872
1873 #[inline(always)]
1874 fn inline_align(_context: fidl::encoding::Context) -> usize {
1875 8
1876 }
1877
1878 #[inline(always)]
1879 fn inline_size(_context: fidl::encoding::Context) -> usize {
1880 16
1881 }
1882 }
1883
1884 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Event, D> for &Event {
1885 #[inline]
1886 unsafe fn encode(
1887 self,
1888 encoder: &mut fidl::encoding::Encoder<'_, D>,
1889 offset: usize,
1890 _depth: fidl::encoding::Depth,
1891 ) -> fidl::Result<()> {
1892 encoder.debug_check_bounds::<Event>(offset);
1893 encoder.write_num::<u64>(self.ordinal(), offset);
1894 match self {
1895 Event::Existing(ref val) => fidl::encoding::encode_in_envelope::<Properties, D>(
1896 <Properties as fidl::encoding::ValueTypeMarker>::borrow(val),
1897 encoder,
1898 offset + 8,
1899 _depth,
1900 ),
1901 Event::Added(ref val) => fidl::encoding::encode_in_envelope::<Properties, D>(
1902 <Properties as fidl::encoding::ValueTypeMarker>::borrow(val),
1903 encoder,
1904 offset + 8,
1905 _depth,
1906 ),
1907 Event::Removed(ref val) => fidl::encoding::encode_in_envelope::<u64, D>(
1908 <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
1909 encoder,
1910 offset + 8,
1911 _depth,
1912 ),
1913 Event::Changed(ref val) => fidl::encoding::encode_in_envelope::<Properties, D>(
1914 <Properties as fidl::encoding::ValueTypeMarker>::borrow(val),
1915 encoder,
1916 offset + 8,
1917 _depth,
1918 ),
1919 Event::Idle(ref val) => fidl::encoding::encode_in_envelope::<Empty, D>(
1920 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
1921 encoder,
1922 offset + 8,
1923 _depth,
1924 ),
1925 }
1926 }
1927 }
1928
1929 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Event {
1930 #[inline(always)]
1931 fn new_empty() -> Self {
1932 Self::Existing(fidl::new_empty!(Properties, D))
1933 }
1934
1935 #[inline]
1936 unsafe fn decode(
1937 &mut self,
1938 decoder: &mut fidl::encoding::Decoder<'_, D>,
1939 offset: usize,
1940 mut depth: fidl::encoding::Depth,
1941 ) -> fidl::Result<()> {
1942 decoder.debug_check_bounds::<Self>(offset);
1943 #[allow(unused_variables)]
1944 let next_out_of_line = decoder.next_out_of_line();
1945 let handles_before = decoder.remaining_handles();
1946 let (ordinal, inlined, num_bytes, num_handles) =
1947 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
1948
1949 let member_inline_size = match ordinal {
1950 1 => <Properties as fidl::encoding::TypeMarker>::inline_size(decoder.context),
1951 2 => <Properties as fidl::encoding::TypeMarker>::inline_size(decoder.context),
1952 3 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
1953 4 => <Properties as fidl::encoding::TypeMarker>::inline_size(decoder.context),
1954 5 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
1955 _ => return Err(fidl::Error::UnknownUnionTag),
1956 };
1957
1958 if inlined != (member_inline_size <= 4) {
1959 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1960 }
1961 let _inner_offset;
1962 if inlined {
1963 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
1964 _inner_offset = offset + 8;
1965 } else {
1966 depth.increment()?;
1967 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1968 }
1969 match ordinal {
1970 1 => {
1971 #[allow(irrefutable_let_patterns)]
1972 if let Event::Existing(_) = self {
1973 } else {
1975 *self = Event::Existing(fidl::new_empty!(Properties, D));
1977 }
1978 #[allow(irrefutable_let_patterns)]
1979 if let Event::Existing(ref mut val) = self {
1980 fidl::decode!(Properties, D, val, decoder, _inner_offset, depth)?;
1981 } else {
1982 unreachable!()
1983 }
1984 }
1985 2 => {
1986 #[allow(irrefutable_let_patterns)]
1987 if let Event::Added(_) = self {
1988 } else {
1990 *self = Event::Added(fidl::new_empty!(Properties, D));
1992 }
1993 #[allow(irrefutable_let_patterns)]
1994 if let Event::Added(ref mut val) = self {
1995 fidl::decode!(Properties, D, val, decoder, _inner_offset, depth)?;
1996 } else {
1997 unreachable!()
1998 }
1999 }
2000 3 => {
2001 #[allow(irrefutable_let_patterns)]
2002 if let Event::Removed(_) = self {
2003 } else {
2005 *self = Event::Removed(fidl::new_empty!(u64, D));
2007 }
2008 #[allow(irrefutable_let_patterns)]
2009 if let Event::Removed(ref mut val) = self {
2010 fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
2011 } else {
2012 unreachable!()
2013 }
2014 }
2015 4 => {
2016 #[allow(irrefutable_let_patterns)]
2017 if let Event::Changed(_) = self {
2018 } else {
2020 *self = Event::Changed(fidl::new_empty!(Properties, D));
2022 }
2023 #[allow(irrefutable_let_patterns)]
2024 if let Event::Changed(ref mut val) = self {
2025 fidl::decode!(Properties, D, val, decoder, _inner_offset, depth)?;
2026 } else {
2027 unreachable!()
2028 }
2029 }
2030 5 => {
2031 #[allow(irrefutable_let_patterns)]
2032 if let Event::Idle(_) = self {
2033 } else {
2035 *self = Event::Idle(fidl::new_empty!(Empty, D));
2037 }
2038 #[allow(irrefutable_let_patterns)]
2039 if let Event::Idle(ref mut val) = self {
2040 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2041 } else {
2042 unreachable!()
2043 }
2044 }
2045 ordinal => panic!("unexpected ordinal {:?}", ordinal),
2046 }
2047 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2048 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2049 }
2050 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2051 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2052 }
2053 Ok(())
2054 }
2055 }
2056
2057 impl fidl::encoding::ValueTypeMarker for PortClass {
2058 type Borrowed<'a> = &'a Self;
2059 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2060 value
2061 }
2062 }
2063
2064 unsafe impl fidl::encoding::TypeMarker for PortClass {
2065 type Owned = Self;
2066
2067 #[inline(always)]
2068 fn inline_align(_context: fidl::encoding::Context) -> usize {
2069 8
2070 }
2071
2072 #[inline(always)]
2073 fn inline_size(_context: fidl::encoding::Context) -> usize {
2074 16
2075 }
2076 }
2077
2078 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PortClass, D>
2079 for &PortClass
2080 {
2081 #[inline]
2082 unsafe fn encode(
2083 self,
2084 encoder: &mut fidl::encoding::Encoder<'_, D>,
2085 offset: usize,
2086 _depth: fidl::encoding::Depth,
2087 ) -> fidl::Result<()> {
2088 encoder.debug_check_bounds::<PortClass>(offset);
2089 encoder.write_num::<u64>(self.ordinal(), offset);
2090 match self {
2091 PortClass::Loopback(ref val) => {
2092 fidl::encoding::encode_in_envelope::<Empty, D>(
2093 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2094 encoder, offset + 8, _depth
2095 )
2096 }
2097 PortClass::Device(ref val) => {
2098 fidl::encoding::encode_in_envelope::<fidl_fuchsia_hardware_network__common::PortClass, D>(
2099 <fidl_fuchsia_hardware_network__common::PortClass as fidl::encoding::ValueTypeMarker>::borrow(val),
2100 encoder, offset + 8, _depth
2101 )
2102 }
2103 PortClass::Blackhole(ref val) => {
2104 fidl::encoding::encode_in_envelope::<Empty, D>(
2105 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2106 encoder, offset + 8, _depth
2107 )
2108 }
2109 PortClass::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
2110 }
2111 }
2112 }
2113
2114 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PortClass {
2115 #[inline(always)]
2116 fn new_empty() -> Self {
2117 Self::__SourceBreaking { unknown_ordinal: 0 }
2118 }
2119
2120 #[inline]
2121 unsafe fn decode(
2122 &mut self,
2123 decoder: &mut fidl::encoding::Decoder<'_, D>,
2124 offset: usize,
2125 mut depth: fidl::encoding::Depth,
2126 ) -> fidl::Result<()> {
2127 decoder.debug_check_bounds::<Self>(offset);
2128 #[allow(unused_variables)]
2129 let next_out_of_line = decoder.next_out_of_line();
2130 let handles_before = decoder.remaining_handles();
2131 let (ordinal, inlined, num_bytes, num_handles) =
2132 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2133
2134 let member_inline_size = match ordinal {
2135 1 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2136 2 => <fidl_fuchsia_hardware_network__common::PortClass as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2137 3 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2138 0 => return Err(fidl::Error::UnknownUnionTag),
2139 _ => num_bytes as usize,
2140 };
2141
2142 if inlined != (member_inline_size <= 4) {
2143 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2144 }
2145 let _inner_offset;
2146 if inlined {
2147 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2148 _inner_offset = offset + 8;
2149 } else {
2150 depth.increment()?;
2151 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2152 }
2153 match ordinal {
2154 1 => {
2155 #[allow(irrefutable_let_patterns)]
2156 if let PortClass::Loopback(_) = self {
2157 } else {
2159 *self = PortClass::Loopback(fidl::new_empty!(Empty, D));
2161 }
2162 #[allow(irrefutable_let_patterns)]
2163 if let PortClass::Loopback(ref mut val) = self {
2164 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2165 } else {
2166 unreachable!()
2167 }
2168 }
2169 2 => {
2170 #[allow(irrefutable_let_patterns)]
2171 if let PortClass::Device(_) = self {
2172 } else {
2174 *self = PortClass::Device(fidl::new_empty!(
2176 fidl_fuchsia_hardware_network__common::PortClass,
2177 D
2178 ));
2179 }
2180 #[allow(irrefutable_let_patterns)]
2181 if let PortClass::Device(ref mut val) = self {
2182 fidl::decode!(
2183 fidl_fuchsia_hardware_network__common::PortClass,
2184 D,
2185 val,
2186 decoder,
2187 _inner_offset,
2188 depth
2189 )?;
2190 } else {
2191 unreachable!()
2192 }
2193 }
2194 3 => {
2195 #[allow(irrefutable_let_patterns)]
2196 if let PortClass::Blackhole(_) = self {
2197 } else {
2199 *self = PortClass::Blackhole(fidl::new_empty!(Empty, D));
2201 }
2202 #[allow(irrefutable_let_patterns)]
2203 if let PortClass::Blackhole(ref mut val) = self {
2204 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2205 } else {
2206 unreachable!()
2207 }
2208 }
2209 #[allow(deprecated)]
2210 ordinal => {
2211 for _ in 0..num_handles {
2212 decoder.drop_next_handle()?;
2213 }
2214 *self = PortClass::__SourceBreaking { unknown_ordinal: ordinal };
2215 }
2216 }
2217 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2218 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2219 }
2220 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2221 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2222 }
2223 Ok(())
2224 }
2225 }
2226
2227 impl fidl::encoding::ValueTypeMarker for PreferredLifetimeInfo {
2228 type Borrowed<'a> = &'a Self;
2229 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2230 value
2231 }
2232 }
2233
2234 unsafe impl fidl::encoding::TypeMarker for PreferredLifetimeInfo {
2235 type Owned = Self;
2236
2237 #[inline(always)]
2238 fn inline_align(_context: fidl::encoding::Context) -> usize {
2239 8
2240 }
2241
2242 #[inline(always)]
2243 fn inline_size(_context: fidl::encoding::Context) -> usize {
2244 16
2245 }
2246 }
2247
2248 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PreferredLifetimeInfo, D>
2249 for &PreferredLifetimeInfo
2250 {
2251 #[inline]
2252 unsafe fn encode(
2253 self,
2254 encoder: &mut fidl::encoding::Encoder<'_, D>,
2255 offset: usize,
2256 _depth: fidl::encoding::Depth,
2257 ) -> fidl::Result<()> {
2258 encoder.debug_check_bounds::<PreferredLifetimeInfo>(offset);
2259 encoder.write_num::<u64>(self.ordinal(), offset);
2260 match self {
2261 PreferredLifetimeInfo::PreferredUntil(ref val) => {
2262 fidl::encoding::encode_in_envelope::<i64, D>(
2263 <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
2264 encoder,
2265 offset + 8,
2266 _depth,
2267 )
2268 }
2269 PreferredLifetimeInfo::Deprecated(ref val) => {
2270 fidl::encoding::encode_in_envelope::<Empty, D>(
2271 <Empty as fidl::encoding::ValueTypeMarker>::borrow(val),
2272 encoder,
2273 offset + 8,
2274 _depth,
2275 )
2276 }
2277 }
2278 }
2279 }
2280
2281 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PreferredLifetimeInfo {
2282 #[inline(always)]
2283 fn new_empty() -> Self {
2284 Self::PreferredUntil(fidl::new_empty!(i64, D))
2285 }
2286
2287 #[inline]
2288 unsafe fn decode(
2289 &mut self,
2290 decoder: &mut fidl::encoding::Decoder<'_, D>,
2291 offset: usize,
2292 mut depth: fidl::encoding::Depth,
2293 ) -> fidl::Result<()> {
2294 decoder.debug_check_bounds::<Self>(offset);
2295 #[allow(unused_variables)]
2296 let next_out_of_line = decoder.next_out_of_line();
2297 let handles_before = decoder.remaining_handles();
2298 let (ordinal, inlined, num_bytes, num_handles) =
2299 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
2300
2301 let member_inline_size = match ordinal {
2302 1 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2303 2 => <Empty as fidl::encoding::TypeMarker>::inline_size(decoder.context),
2304 _ => return Err(fidl::Error::UnknownUnionTag),
2305 };
2306
2307 if inlined != (member_inline_size <= 4) {
2308 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2309 }
2310 let _inner_offset;
2311 if inlined {
2312 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
2313 _inner_offset = offset + 8;
2314 } else {
2315 depth.increment()?;
2316 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2317 }
2318 match ordinal {
2319 1 => {
2320 #[allow(irrefutable_let_patterns)]
2321 if let PreferredLifetimeInfo::PreferredUntil(_) = self {
2322 } else {
2324 *self = PreferredLifetimeInfo::PreferredUntil(fidl::new_empty!(i64, D));
2326 }
2327 #[allow(irrefutable_let_patterns)]
2328 if let PreferredLifetimeInfo::PreferredUntil(ref mut val) = self {
2329 fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
2330 } else {
2331 unreachable!()
2332 }
2333 }
2334 2 => {
2335 #[allow(irrefutable_let_patterns)]
2336 if let PreferredLifetimeInfo::Deprecated(_) = self {
2337 } else {
2339 *self = PreferredLifetimeInfo::Deprecated(fidl::new_empty!(Empty, D));
2341 }
2342 #[allow(irrefutable_let_patterns)]
2343 if let PreferredLifetimeInfo::Deprecated(ref mut val) = self {
2344 fidl::decode!(Empty, D, val, decoder, _inner_offset, depth)?;
2345 } else {
2346 unreachable!()
2347 }
2348 }
2349 ordinal => panic!("unexpected ordinal {:?}", ordinal),
2350 }
2351 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
2352 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2353 }
2354 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2355 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2356 }
2357 Ok(())
2358 }
2359 }
2360}