Skip to main content

fidl_fuchsia_bluetooth_affordances_common/
fidl_fuchsia_bluetooth_affordances_common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
12#[repr(u32)]
13pub enum Error {
14    /// Operation failed (check logs).
15    Internal = 1,
16    /// Operation timed out.
17    Timeout = 2,
18    /// One or more required parameters are not set.
19    MissingParameters = 3,
20}
21
22impl Error {
23    #[inline]
24    pub fn from_primitive(prim: u32) -> Option<Self> {
25        match prim {
26            1 => Some(Self::Internal),
27            2 => Some(Self::Timeout),
28            3 => Some(Self::MissingParameters),
29            _ => None,
30        }
31    }
32
33    #[inline]
34    pub const fn into_primitive(self) -> u32 {
35        self as u32
36    }
37}
38
39#[derive(Clone, Debug, Default, PartialEq)]
40pub struct GattClientControllerDiscoverServicesResponse {
41    pub services: Option<Vec<fidl_fuchsia_bluetooth_gatt2_common::ServiceInfo>>,
42    #[doc(hidden)]
43    pub __source_breaking: fidl::marker::SourceBreaking,
44}
45
46impl fidl::Persistable for GattClientControllerDiscoverServicesResponse {}
47
48#[derive(Clone, Debug, Default, PartialEq)]
49pub struct HostControllerSetConnectabilityRequest {
50    /// Required. Set to true if making connectable or false if revoking connectability.
51    pub connectable: Option<bool>,
52    #[doc(hidden)]
53    pub __source_breaking: fidl::marker::SourceBreaking,
54}
55
56impl fidl::Persistable for HostControllerSetConnectabilityRequest {}
57
58#[derive(Clone, Debug, Default, PartialEq)]
59pub struct HostControllerSetDiscoverabilityRequest {
60    /// Required. Set to true if making discoverable or false if revoking discoverability.
61    pub discoverable: Option<bool>,
62    #[doc(hidden)]
63    pub __source_breaking: fidl::marker::SourceBreaking,
64}
65
66impl fidl::Persistable for HostControllerSetDiscoverabilityRequest {}
67
68#[derive(Clone, Debug, Default, PartialEq)]
69pub struct HostControllerGetHostsResponse {
70    pub hosts: Option<Vec<fidl_fuchsia_bluetooth_sys_common::HostInfo>>,
71    #[doc(hidden)]
72    pub __source_breaking: fidl::marker::SourceBreaking,
73}
74
75impl fidl::Persistable for HostControllerGetHostsResponse {}
76
77/// Defines how to find a host to perform an operation on. At least one field must be present.
78#[derive(Clone, Debug, Default, PartialEq)]
79pub struct HostSelector {
80    /// The ID of the host to act on.
81    pub id: Option<fidl_fuchsia_bluetooth_common::HostId>,
82    #[doc(hidden)]
83    pub __source_breaking: fidl::marker::SourceBreaking,
84}
85
86impl fidl::Persistable for HostSelector {}
87
88#[derive(Clone, Debug, Default, PartialEq)]
89pub struct PeerControllerGetPeerIdRequest {
90    /// Required. The address of the peer to get the ID of (in little-endian order).
91    pub address: Option<fidl_fuchsia_bluetooth_common::Address>,
92    #[doc(hidden)]
93    pub __source_breaking: fidl::marker::SourceBreaking,
94}
95
96impl fidl::Persistable for PeerControllerGetPeerIdRequest {}
97
98#[derive(Clone, Debug, Default, PartialEq)]
99pub struct PeerControllerSetDiscoveryRequest {
100    /// Required. Set to true if starting discovery or false if stopping discovery.
101    pub discovery: Option<bool>,
102    #[doc(hidden)]
103    pub __source_breaking: fidl::marker::SourceBreaking,
104}
105
106impl fidl::Persistable for PeerControllerSetDiscoveryRequest {}
107
108#[derive(Clone, Debug, Default, PartialEq)]
109pub struct PeerControllerGetKnownPeersResponse {
110    pub peers: Option<Vec<fidl_fuchsia_bluetooth_sys_common::Peer>>,
111    #[doc(hidden)]
112    pub __source_breaking: fidl::marker::SourceBreaking,
113}
114
115impl fidl::Persistable for PeerControllerGetKnownPeersResponse {}
116
117#[derive(Clone, Debug, Default, PartialEq)]
118pub struct PeerControllerGetPeerIdResponse {
119    /// The ID of the peer.
120    pub id: Option<fidl_fuchsia_bluetooth_common::PeerId>,
121    #[doc(hidden)]
122    pub __source_breaking: fidl::marker::SourceBreaking,
123}
124
125impl fidl::Persistable for PeerControllerGetPeerIdResponse {}
126
127/// Defines how to find a peer to perform an operation on. At least one field must be present.
128#[derive(Clone, Debug, Default, PartialEq)]
129pub struct PeerSelector {
130    /// The ID of the peer to act on.
131    pub id: Option<fidl_fuchsia_bluetooth_common::PeerId>,
132    #[doc(hidden)]
133    pub __source_breaking: fidl::marker::SourceBreaking,
134}
135
136impl fidl::Persistable for PeerSelector {}
137
138#[derive(Clone, Debug, Default, PartialEq)]
139pub struct PeripheralControllerAdvertiseRequest {
140    /// Required. Advertising parameters.
141    pub parameters: Option<fidl_fuchsia_bluetooth_le_common::AdvertisingParameters>,
142    /// Required. Timeout for advertising in seconds.
143    pub timeout: Option<u64>,
144    #[doc(hidden)]
145    pub __source_breaking: fidl::marker::SourceBreaking,
146}
147
148impl fidl::Persistable for PeripheralControllerAdvertiseRequest {}
149
150#[derive(Clone, Debug, Default, PartialEq)]
151pub struct PeripheralControllerAdvertiseResponse {
152    /// The ID of the peer that connected.
153    pub peer_id: Option<fidl_fuchsia_bluetooth_common::PeerId>,
154    #[doc(hidden)]
155    pub __source_breaking: fidl::marker::SourceBreaking,
156}
157
158impl fidl::Persistable for PeripheralControllerAdvertiseResponse {}
159
160#[derive(Clone, Debug, Default, PartialEq)]
161pub struct ScanResultListenerOnPeersDiscoveredRequest {
162    pub peers: Option<Vec<ScannedPeer>>,
163    #[doc(hidden)]
164    pub __source_breaking: fidl::marker::SourceBreaking,
165}
166
167impl fidl::Persistable for ScanResultListenerOnPeersDiscoveredRequest {}
168
169/// Represents a peer discovered during an LE scan. LE scan responses do not include peer addresses,
170/// so the address is queried in `bt-affordances` and included here.
171#[derive(Clone, Debug, Default, PartialEq)]
172pub struct ScannedPeer {
173    /// The peer information from the scan result.
174    pub peer: Option<fidl_fuchsia_bluetooth_le_common::Peer>,
175    /// The address of the peer.
176    pub address: Option<fidl_fuchsia_bluetooth_common::Address>,
177    #[doc(hidden)]
178    pub __source_breaking: fidl::marker::SourceBreaking,
179}
180
181impl fidl::Persistable for ScannedPeer {}
182
183pub mod central_controller_ordinals {
184    pub const START_SCAN: u64 = 0x7f8e8fdaa5b359ea;
185    pub const CONNECT_PERIPHERAL: u64 = 0x4cf45727cca182cd;
186}
187
188pub mod gatt_client_controller_ordinals {
189    pub const DISCOVER_SERVICES: u64 = 0x2451643d00753f94;
190}
191
192pub mod host_controller_ordinals {
193    pub const GET_HOSTS: u64 = 0x167d2522684d453d;
194    pub const SET_DISCOVERABILITY: u64 = 0x1e977b538b94b08b;
195    pub const SET_CONNECTABILITY: u64 = 0x93572b659adf7d;
196}
197
198pub mod peer_controller_ordinals {
199    pub const GET_KNOWN_PEERS: u64 = 0x482cf3745bab65f6;
200    pub const GET_PEER_ID: u64 = 0x5f6f76185d19eb18;
201    pub const SET_DISCOVERY: u64 = 0x3269624c9e1d6ab3;
202}
203
204pub mod peripheral_controller_ordinals {
205    pub const ADVERTISE: u64 = 0x59079a81362a66f3;
206}
207
208pub mod scan_result_listener_ordinals {
209    pub const ON_PEERS_DISCOVERED: u64 = 0x111ea99f3f0c8009;
210}
211
212mod internal {
213    use super::*;
214    unsafe impl fidl::encoding::TypeMarker for Error {
215        type Owned = Self;
216
217        #[inline(always)]
218        fn inline_align(_context: fidl::encoding::Context) -> usize {
219            std::mem::align_of::<u32>()
220        }
221
222        #[inline(always)]
223        fn inline_size(_context: fidl::encoding::Context) -> usize {
224            std::mem::size_of::<u32>()
225        }
226
227        #[inline(always)]
228        fn encode_is_copy() -> bool {
229            true
230        }
231
232        #[inline(always)]
233        fn decode_is_copy() -> bool {
234            false
235        }
236    }
237
238    impl fidl::encoding::ValueTypeMarker for Error {
239        type Borrowed<'a> = Self;
240        #[inline(always)]
241        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
242            *value
243        }
244    }
245
246    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Error {
247        #[inline]
248        unsafe fn encode(
249            self,
250            encoder: &mut fidl::encoding::Encoder<'_, D>,
251            offset: usize,
252            _depth: fidl::encoding::Depth,
253        ) -> fidl::Result<()> {
254            encoder.debug_check_bounds::<Self>(offset);
255            encoder.write_num(self.into_primitive(), offset);
256            Ok(())
257        }
258    }
259
260    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Error {
261        #[inline(always)]
262        fn new_empty() -> Self {
263            Self::Internal
264        }
265
266        #[inline]
267        unsafe fn decode(
268            &mut self,
269            decoder: &mut fidl::encoding::Decoder<'_, D>,
270            offset: usize,
271            _depth: fidl::encoding::Depth,
272        ) -> fidl::Result<()> {
273            decoder.debug_check_bounds::<Self>(offset);
274            let prim = decoder.read_num::<u32>(offset);
275
276            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
277            Ok(())
278        }
279    }
280
281    impl GattClientControllerDiscoverServicesResponse {
282        #[inline(always)]
283        fn max_ordinal_present(&self) -> u64 {
284            if let Some(_) = self.services {
285                return 1;
286            }
287            0
288        }
289    }
290
291    impl fidl::encoding::ValueTypeMarker for GattClientControllerDiscoverServicesResponse {
292        type Borrowed<'a> = &'a Self;
293        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
294            value
295        }
296    }
297
298    unsafe impl fidl::encoding::TypeMarker for GattClientControllerDiscoverServicesResponse {
299        type Owned = Self;
300
301        #[inline(always)]
302        fn inline_align(_context: fidl::encoding::Context) -> usize {
303            8
304        }
305
306        #[inline(always)]
307        fn inline_size(_context: fidl::encoding::Context) -> usize {
308            16
309        }
310    }
311
312    unsafe impl<D: fidl::encoding::ResourceDialect>
313        fidl::encoding::Encode<GattClientControllerDiscoverServicesResponse, D>
314        for &GattClientControllerDiscoverServicesResponse
315    {
316        unsafe fn encode(
317            self,
318            encoder: &mut fidl::encoding::Encoder<'_, D>,
319            offset: usize,
320            mut depth: fidl::encoding::Depth,
321        ) -> fidl::Result<()> {
322            encoder.debug_check_bounds::<GattClientControllerDiscoverServicesResponse>(offset);
323            // Vector header
324            let max_ordinal: u64 = self.max_ordinal_present();
325            encoder.write_num(max_ordinal, offset);
326            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
327            // Calling encoder.out_of_line_offset(0) is not allowed.
328            if max_ordinal == 0 {
329                return Ok(());
330            }
331            depth.increment()?;
332            let envelope_size = 8;
333            let bytes_len = max_ordinal as usize * envelope_size;
334            #[allow(unused_variables)]
335            let offset = encoder.out_of_line_offset(bytes_len);
336            let mut _prev_end_offset: usize = 0;
337            if 1 > max_ordinal {
338                return Ok(());
339            }
340
341            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
342            // are envelope_size bytes.
343            let cur_offset: usize = (1 - 1) * envelope_size;
344
345            // Zero reserved fields.
346            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
347
348            // Safety:
349            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
350            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
351            //   envelope_size bytes, there is always sufficient room.
352            fidl::encoding::encode_in_envelope_optional::<
353                fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth_gatt2_common::ServiceInfo>,
354                D,
355            >(
356                self.services.as_ref().map(
357                    <fidl::encoding::UnboundedVector<
358                        fidl_fuchsia_bluetooth_gatt2_common::ServiceInfo,
359                    > as fidl::encoding::ValueTypeMarker>::borrow,
360                ),
361                encoder,
362                offset + cur_offset,
363                depth,
364            )?;
365
366            _prev_end_offset = cur_offset + envelope_size;
367
368            Ok(())
369        }
370    }
371
372    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
373        for GattClientControllerDiscoverServicesResponse
374    {
375        #[inline(always)]
376        fn new_empty() -> Self {
377            Self::default()
378        }
379
380        unsafe fn decode(
381            &mut self,
382            decoder: &mut fidl::encoding::Decoder<'_, D>,
383            offset: usize,
384            mut depth: fidl::encoding::Depth,
385        ) -> fidl::Result<()> {
386            decoder.debug_check_bounds::<Self>(offset);
387            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
388                None => return Err(fidl::Error::NotNullable),
389                Some(len) => len,
390            };
391            // Calling decoder.out_of_line_offset(0) is not allowed.
392            if len == 0 {
393                return Ok(());
394            };
395            depth.increment()?;
396            let envelope_size = 8;
397            let bytes_len = len * envelope_size;
398            let offset = decoder.out_of_line_offset(bytes_len)?;
399            // Decode the envelope for each type.
400            let mut _next_ordinal_to_read = 0;
401            let mut next_offset = offset;
402            let end_offset = offset + bytes_len;
403            _next_ordinal_to_read += 1;
404            if next_offset >= end_offset {
405                return Ok(());
406            }
407
408            // Decode unknown envelopes for gaps in ordinals.
409            while _next_ordinal_to_read < 1 {
410                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
411                _next_ordinal_to_read += 1;
412                next_offset += envelope_size;
413            }
414
415            let next_out_of_line = decoder.next_out_of_line();
416            let handles_before = decoder.remaining_handles();
417            if let Some((inlined, num_bytes, num_handles)) =
418                fidl::encoding::decode_envelope_header(decoder, next_offset)?
419            {
420                let member_inline_size = <fidl::encoding::UnboundedVector<
421                    fidl_fuchsia_bluetooth_gatt2_common::ServiceInfo,
422                > as fidl::encoding::TypeMarker>::inline_size(
423                    decoder.context
424                );
425                if inlined != (member_inline_size <= 4) {
426                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
427                }
428                let inner_offset;
429                let mut inner_depth = depth.clone();
430                if inlined {
431                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
432                    inner_offset = next_offset;
433                } else {
434                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
435                    inner_depth.increment()?;
436                }
437                let val_ref = self.services.get_or_insert_with(|| {
438                    fidl::new_empty!(
439                        fidl::encoding::UnboundedVector<
440                            fidl_fuchsia_bluetooth_gatt2_common::ServiceInfo,
441                        >,
442                        D
443                    )
444                });
445                fidl::decode!(
446                    fidl::encoding::UnboundedVector<
447                        fidl_fuchsia_bluetooth_gatt2_common::ServiceInfo,
448                    >,
449                    D,
450                    val_ref,
451                    decoder,
452                    inner_offset,
453                    inner_depth
454                )?;
455                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
456                {
457                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
458                }
459                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
460                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
461                }
462            }
463
464            next_offset += envelope_size;
465
466            // Decode the remaining unknown envelopes.
467            while next_offset < end_offset {
468                _next_ordinal_to_read += 1;
469                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
470                next_offset += envelope_size;
471            }
472
473            Ok(())
474        }
475    }
476
477    impl HostControllerSetConnectabilityRequest {
478        #[inline(always)]
479        fn max_ordinal_present(&self) -> u64 {
480            if let Some(_) = self.connectable {
481                return 1;
482            }
483            0
484        }
485    }
486
487    impl fidl::encoding::ValueTypeMarker for HostControllerSetConnectabilityRequest {
488        type Borrowed<'a> = &'a Self;
489        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
490            value
491        }
492    }
493
494    unsafe impl fidl::encoding::TypeMarker for HostControllerSetConnectabilityRequest {
495        type Owned = Self;
496
497        #[inline(always)]
498        fn inline_align(_context: fidl::encoding::Context) -> usize {
499            8
500        }
501
502        #[inline(always)]
503        fn inline_size(_context: fidl::encoding::Context) -> usize {
504            16
505        }
506    }
507
508    unsafe impl<D: fidl::encoding::ResourceDialect>
509        fidl::encoding::Encode<HostControllerSetConnectabilityRequest, D>
510        for &HostControllerSetConnectabilityRequest
511    {
512        unsafe fn encode(
513            self,
514            encoder: &mut fidl::encoding::Encoder<'_, D>,
515            offset: usize,
516            mut depth: fidl::encoding::Depth,
517        ) -> fidl::Result<()> {
518            encoder.debug_check_bounds::<HostControllerSetConnectabilityRequest>(offset);
519            // Vector header
520            let max_ordinal: u64 = self.max_ordinal_present();
521            encoder.write_num(max_ordinal, offset);
522            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
523            // Calling encoder.out_of_line_offset(0) is not allowed.
524            if max_ordinal == 0 {
525                return Ok(());
526            }
527            depth.increment()?;
528            let envelope_size = 8;
529            let bytes_len = max_ordinal as usize * envelope_size;
530            #[allow(unused_variables)]
531            let offset = encoder.out_of_line_offset(bytes_len);
532            let mut _prev_end_offset: usize = 0;
533            if 1 > max_ordinal {
534                return Ok(());
535            }
536
537            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
538            // are envelope_size bytes.
539            let cur_offset: usize = (1 - 1) * envelope_size;
540
541            // Zero reserved fields.
542            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
543
544            // Safety:
545            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
546            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
547            //   envelope_size bytes, there is always sufficient room.
548            fidl::encoding::encode_in_envelope_optional::<bool, D>(
549                self.connectable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
550                encoder,
551                offset + cur_offset,
552                depth,
553            )?;
554
555            _prev_end_offset = cur_offset + envelope_size;
556
557            Ok(())
558        }
559    }
560
561    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
562        for HostControllerSetConnectabilityRequest
563    {
564        #[inline(always)]
565        fn new_empty() -> Self {
566            Self::default()
567        }
568
569        unsafe fn decode(
570            &mut self,
571            decoder: &mut fidl::encoding::Decoder<'_, D>,
572            offset: usize,
573            mut depth: fidl::encoding::Depth,
574        ) -> fidl::Result<()> {
575            decoder.debug_check_bounds::<Self>(offset);
576            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
577                None => return Err(fidl::Error::NotNullable),
578                Some(len) => len,
579            };
580            // Calling decoder.out_of_line_offset(0) is not allowed.
581            if len == 0 {
582                return Ok(());
583            };
584            depth.increment()?;
585            let envelope_size = 8;
586            let bytes_len = len * envelope_size;
587            let offset = decoder.out_of_line_offset(bytes_len)?;
588            // Decode the envelope for each type.
589            let mut _next_ordinal_to_read = 0;
590            let mut next_offset = offset;
591            let end_offset = offset + bytes_len;
592            _next_ordinal_to_read += 1;
593            if next_offset >= end_offset {
594                return Ok(());
595            }
596
597            // Decode unknown envelopes for gaps in ordinals.
598            while _next_ordinal_to_read < 1 {
599                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
600                _next_ordinal_to_read += 1;
601                next_offset += envelope_size;
602            }
603
604            let next_out_of_line = decoder.next_out_of_line();
605            let handles_before = decoder.remaining_handles();
606            if let Some((inlined, num_bytes, num_handles)) =
607                fidl::encoding::decode_envelope_header(decoder, next_offset)?
608            {
609                let member_inline_size =
610                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
611                if inlined != (member_inline_size <= 4) {
612                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
613                }
614                let inner_offset;
615                let mut inner_depth = depth.clone();
616                if inlined {
617                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
618                    inner_offset = next_offset;
619                } else {
620                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
621                    inner_depth.increment()?;
622                }
623                let val_ref = self.connectable.get_or_insert_with(|| fidl::new_empty!(bool, D));
624                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
625                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
626                {
627                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
628                }
629                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
630                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
631                }
632            }
633
634            next_offset += envelope_size;
635
636            // Decode the remaining unknown envelopes.
637            while next_offset < end_offset {
638                _next_ordinal_to_read += 1;
639                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
640                next_offset += envelope_size;
641            }
642
643            Ok(())
644        }
645    }
646
647    impl HostControllerSetDiscoverabilityRequest {
648        #[inline(always)]
649        fn max_ordinal_present(&self) -> u64 {
650            if let Some(_) = self.discoverable {
651                return 1;
652            }
653            0
654        }
655    }
656
657    impl fidl::encoding::ValueTypeMarker for HostControllerSetDiscoverabilityRequest {
658        type Borrowed<'a> = &'a Self;
659        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
660            value
661        }
662    }
663
664    unsafe impl fidl::encoding::TypeMarker for HostControllerSetDiscoverabilityRequest {
665        type Owned = Self;
666
667        #[inline(always)]
668        fn inline_align(_context: fidl::encoding::Context) -> usize {
669            8
670        }
671
672        #[inline(always)]
673        fn inline_size(_context: fidl::encoding::Context) -> usize {
674            16
675        }
676    }
677
678    unsafe impl<D: fidl::encoding::ResourceDialect>
679        fidl::encoding::Encode<HostControllerSetDiscoverabilityRequest, D>
680        for &HostControllerSetDiscoverabilityRequest
681    {
682        unsafe fn encode(
683            self,
684            encoder: &mut fidl::encoding::Encoder<'_, D>,
685            offset: usize,
686            mut depth: fidl::encoding::Depth,
687        ) -> fidl::Result<()> {
688            encoder.debug_check_bounds::<HostControllerSetDiscoverabilityRequest>(offset);
689            // Vector header
690            let max_ordinal: u64 = self.max_ordinal_present();
691            encoder.write_num(max_ordinal, offset);
692            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
693            // Calling encoder.out_of_line_offset(0) is not allowed.
694            if max_ordinal == 0 {
695                return Ok(());
696            }
697            depth.increment()?;
698            let envelope_size = 8;
699            let bytes_len = max_ordinal as usize * envelope_size;
700            #[allow(unused_variables)]
701            let offset = encoder.out_of_line_offset(bytes_len);
702            let mut _prev_end_offset: usize = 0;
703            if 1 > max_ordinal {
704                return Ok(());
705            }
706
707            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
708            // are envelope_size bytes.
709            let cur_offset: usize = (1 - 1) * envelope_size;
710
711            // Zero reserved fields.
712            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
713
714            // Safety:
715            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
716            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
717            //   envelope_size bytes, there is always sufficient room.
718            fidl::encoding::encode_in_envelope_optional::<bool, D>(
719                self.discoverable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
720                encoder,
721                offset + cur_offset,
722                depth,
723            )?;
724
725            _prev_end_offset = cur_offset + envelope_size;
726
727            Ok(())
728        }
729    }
730
731    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
732        for HostControllerSetDiscoverabilityRequest
733    {
734        #[inline(always)]
735        fn new_empty() -> Self {
736            Self::default()
737        }
738
739        unsafe fn decode(
740            &mut self,
741            decoder: &mut fidl::encoding::Decoder<'_, D>,
742            offset: usize,
743            mut depth: fidl::encoding::Depth,
744        ) -> fidl::Result<()> {
745            decoder.debug_check_bounds::<Self>(offset);
746            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
747                None => return Err(fidl::Error::NotNullable),
748                Some(len) => len,
749            };
750            // Calling decoder.out_of_line_offset(0) is not allowed.
751            if len == 0 {
752                return Ok(());
753            };
754            depth.increment()?;
755            let envelope_size = 8;
756            let bytes_len = len * envelope_size;
757            let offset = decoder.out_of_line_offset(bytes_len)?;
758            // Decode the envelope for each type.
759            let mut _next_ordinal_to_read = 0;
760            let mut next_offset = offset;
761            let end_offset = offset + bytes_len;
762            _next_ordinal_to_read += 1;
763            if next_offset >= end_offset {
764                return Ok(());
765            }
766
767            // Decode unknown envelopes for gaps in ordinals.
768            while _next_ordinal_to_read < 1 {
769                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
770                _next_ordinal_to_read += 1;
771                next_offset += envelope_size;
772            }
773
774            let next_out_of_line = decoder.next_out_of_line();
775            let handles_before = decoder.remaining_handles();
776            if let Some((inlined, num_bytes, num_handles)) =
777                fidl::encoding::decode_envelope_header(decoder, next_offset)?
778            {
779                let member_inline_size =
780                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
781                if inlined != (member_inline_size <= 4) {
782                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
783                }
784                let inner_offset;
785                let mut inner_depth = depth.clone();
786                if inlined {
787                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
788                    inner_offset = next_offset;
789                } else {
790                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
791                    inner_depth.increment()?;
792                }
793                let val_ref = self.discoverable.get_or_insert_with(|| fidl::new_empty!(bool, D));
794                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
795                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
796                {
797                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
798                }
799                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
800                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
801                }
802            }
803
804            next_offset += envelope_size;
805
806            // Decode the remaining unknown envelopes.
807            while next_offset < end_offset {
808                _next_ordinal_to_read += 1;
809                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
810                next_offset += envelope_size;
811            }
812
813            Ok(())
814        }
815    }
816
817    impl HostControllerGetHostsResponse {
818        #[inline(always)]
819        fn max_ordinal_present(&self) -> u64 {
820            if let Some(_) = self.hosts {
821                return 1;
822            }
823            0
824        }
825    }
826
827    impl fidl::encoding::ValueTypeMarker for HostControllerGetHostsResponse {
828        type Borrowed<'a> = &'a Self;
829        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
830            value
831        }
832    }
833
834    unsafe impl fidl::encoding::TypeMarker for HostControllerGetHostsResponse {
835        type Owned = Self;
836
837        #[inline(always)]
838        fn inline_align(_context: fidl::encoding::Context) -> usize {
839            8
840        }
841
842        #[inline(always)]
843        fn inline_size(_context: fidl::encoding::Context) -> usize {
844            16
845        }
846    }
847
848    unsafe impl<D: fidl::encoding::ResourceDialect>
849        fidl::encoding::Encode<HostControllerGetHostsResponse, D>
850        for &HostControllerGetHostsResponse
851    {
852        unsafe fn encode(
853            self,
854            encoder: &mut fidl::encoding::Encoder<'_, D>,
855            offset: usize,
856            mut depth: fidl::encoding::Depth,
857        ) -> fidl::Result<()> {
858            encoder.debug_check_bounds::<HostControllerGetHostsResponse>(offset);
859            // Vector header
860            let max_ordinal: u64 = self.max_ordinal_present();
861            encoder.write_num(max_ordinal, offset);
862            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
863            // Calling encoder.out_of_line_offset(0) is not allowed.
864            if max_ordinal == 0 {
865                return Ok(());
866            }
867            depth.increment()?;
868            let envelope_size = 8;
869            let bytes_len = max_ordinal as usize * envelope_size;
870            #[allow(unused_variables)]
871            let offset = encoder.out_of_line_offset(bytes_len);
872            let mut _prev_end_offset: usize = 0;
873            if 1 > max_ordinal {
874                return Ok(());
875            }
876
877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
878            // are envelope_size bytes.
879            let cur_offset: usize = (1 - 1) * envelope_size;
880
881            // Zero reserved fields.
882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
883
884            // Safety:
885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
887            //   envelope_size bytes, there is always sufficient room.
888            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth_sys_common::HostInfo>, D>(
889            self.hosts.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth_sys_common::HostInfo> as fidl::encoding::ValueTypeMarker>::borrow),
890            encoder, offset + cur_offset, depth
891        )?;
892
893            _prev_end_offset = cur_offset + envelope_size;
894
895            Ok(())
896        }
897    }
898
899    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
900        for HostControllerGetHostsResponse
901    {
902        #[inline(always)]
903        fn new_empty() -> Self {
904            Self::default()
905        }
906
907        unsafe fn decode(
908            &mut self,
909            decoder: &mut fidl::encoding::Decoder<'_, D>,
910            offset: usize,
911            mut depth: fidl::encoding::Depth,
912        ) -> fidl::Result<()> {
913            decoder.debug_check_bounds::<Self>(offset);
914            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
915                None => return Err(fidl::Error::NotNullable),
916                Some(len) => len,
917            };
918            // Calling decoder.out_of_line_offset(0) is not allowed.
919            if len == 0 {
920                return Ok(());
921            };
922            depth.increment()?;
923            let envelope_size = 8;
924            let bytes_len = len * envelope_size;
925            let offset = decoder.out_of_line_offset(bytes_len)?;
926            // Decode the envelope for each type.
927            let mut _next_ordinal_to_read = 0;
928            let mut next_offset = offset;
929            let end_offset = offset + bytes_len;
930            _next_ordinal_to_read += 1;
931            if next_offset >= end_offset {
932                return Ok(());
933            }
934
935            // Decode unknown envelopes for gaps in ordinals.
936            while _next_ordinal_to_read < 1 {
937                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
938                _next_ordinal_to_read += 1;
939                next_offset += envelope_size;
940            }
941
942            let next_out_of_line = decoder.next_out_of_line();
943            let handles_before = decoder.remaining_handles();
944            if let Some((inlined, num_bytes, num_handles)) =
945                fidl::encoding::decode_envelope_header(decoder, next_offset)?
946            {
947                let member_inline_size = <fidl::encoding::UnboundedVector<
948                    fidl_fuchsia_bluetooth_sys_common::HostInfo,
949                > as fidl::encoding::TypeMarker>::inline_size(
950                    decoder.context
951                );
952                if inlined != (member_inline_size <= 4) {
953                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
954                }
955                let inner_offset;
956                let mut inner_depth = depth.clone();
957                if inlined {
958                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
959                    inner_offset = next_offset;
960                } else {
961                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
962                    inner_depth.increment()?;
963                }
964                let val_ref = self.hosts.get_or_insert_with(|| {
965                    fidl::new_empty!(
966                        fidl::encoding::UnboundedVector<
967                            fidl_fuchsia_bluetooth_sys_common::HostInfo,
968                        >,
969                        D
970                    )
971                });
972                fidl::decode!(
973                    fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth_sys_common::HostInfo>,
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            // Decode the remaining unknown envelopes.
992            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 HostSelector {
1003        #[inline(always)]
1004        fn max_ordinal_present(&self) -> u64 {
1005            if let Some(_) = self.id {
1006                return 1;
1007            }
1008            0
1009        }
1010    }
1011
1012    impl fidl::encoding::ValueTypeMarker for HostSelector {
1013        type Borrowed<'a> = &'a Self;
1014        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1015            value
1016        }
1017    }
1018
1019    unsafe impl fidl::encoding::TypeMarker for HostSelector {
1020        type Owned = Self;
1021
1022        #[inline(always)]
1023        fn inline_align(_context: fidl::encoding::Context) -> usize {
1024            8
1025        }
1026
1027        #[inline(always)]
1028        fn inline_size(_context: fidl::encoding::Context) -> usize {
1029            16
1030        }
1031    }
1032
1033    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HostSelector, D>
1034        for &HostSelector
1035    {
1036        unsafe fn encode(
1037            self,
1038            encoder: &mut fidl::encoding::Encoder<'_, D>,
1039            offset: usize,
1040            mut depth: fidl::encoding::Depth,
1041        ) -> fidl::Result<()> {
1042            encoder.debug_check_bounds::<HostSelector>(offset);
1043            // Vector header
1044            let max_ordinal: u64 = self.max_ordinal_present();
1045            encoder.write_num(max_ordinal, offset);
1046            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1047            // Calling encoder.out_of_line_offset(0) is not allowed.
1048            if max_ordinal == 0 {
1049                return Ok(());
1050            }
1051            depth.increment()?;
1052            let envelope_size = 8;
1053            let bytes_len = max_ordinal as usize * envelope_size;
1054            #[allow(unused_variables)]
1055            let offset = encoder.out_of_line_offset(bytes_len);
1056            let mut _prev_end_offset: usize = 0;
1057            if 1 > max_ordinal {
1058                return Ok(());
1059            }
1060
1061            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1062            // are envelope_size bytes.
1063            let cur_offset: usize = (1 - 1) * envelope_size;
1064
1065            // Zero reserved fields.
1066            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1067
1068            // Safety:
1069            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1070            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1071            //   envelope_size bytes, there is always sufficient room.
1072            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth_common::HostId, D>(
1073            self.id.as_ref().map(<fidl_fuchsia_bluetooth_common::HostId as fidl::encoding::ValueTypeMarker>::borrow),
1074            encoder, offset + cur_offset, depth
1075        )?;
1076
1077            _prev_end_offset = cur_offset + envelope_size;
1078
1079            Ok(())
1080        }
1081    }
1082
1083    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HostSelector {
1084        #[inline(always)]
1085        fn new_empty() -> Self {
1086            Self::default()
1087        }
1088
1089        unsafe fn decode(
1090            &mut self,
1091            decoder: &mut fidl::encoding::Decoder<'_, D>,
1092            offset: usize,
1093            mut depth: fidl::encoding::Depth,
1094        ) -> fidl::Result<()> {
1095            decoder.debug_check_bounds::<Self>(offset);
1096            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1097                None => return Err(fidl::Error::NotNullable),
1098                Some(len) => len,
1099            };
1100            // Calling decoder.out_of_line_offset(0) is not allowed.
1101            if len == 0 {
1102                return Ok(());
1103            };
1104            depth.increment()?;
1105            let envelope_size = 8;
1106            let bytes_len = len * envelope_size;
1107            let offset = decoder.out_of_line_offset(bytes_len)?;
1108            // Decode the envelope for each type.
1109            let mut _next_ordinal_to_read = 0;
1110            let mut next_offset = offset;
1111            let end_offset = offset + bytes_len;
1112            _next_ordinal_to_read += 1;
1113            if next_offset >= end_offset {
1114                return Ok(());
1115            }
1116
1117            // Decode unknown envelopes for gaps in ordinals.
1118            while _next_ordinal_to_read < 1 {
1119                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1120                _next_ordinal_to_read += 1;
1121                next_offset += envelope_size;
1122            }
1123
1124            let next_out_of_line = decoder.next_out_of_line();
1125            let handles_before = decoder.remaining_handles();
1126            if let Some((inlined, num_bytes, num_handles)) =
1127                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1128            {
1129                let member_inline_size = <fidl_fuchsia_bluetooth_common::HostId as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1130                if inlined != (member_inline_size <= 4) {
1131                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1132                }
1133                let inner_offset;
1134                let mut inner_depth = depth.clone();
1135                if inlined {
1136                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1137                    inner_offset = next_offset;
1138                } else {
1139                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1140                    inner_depth.increment()?;
1141                }
1142                let val_ref = self.id.get_or_insert_with(|| {
1143                    fidl::new_empty!(fidl_fuchsia_bluetooth_common::HostId, D)
1144                });
1145                fidl::decode!(
1146                    fidl_fuchsia_bluetooth_common::HostId,
1147                    D,
1148                    val_ref,
1149                    decoder,
1150                    inner_offset,
1151                    inner_depth
1152                )?;
1153                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1154                {
1155                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1156                }
1157                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1158                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1159                }
1160            }
1161
1162            next_offset += envelope_size;
1163
1164            // Decode the remaining unknown envelopes.
1165            while next_offset < end_offset {
1166                _next_ordinal_to_read += 1;
1167                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1168                next_offset += envelope_size;
1169            }
1170
1171            Ok(())
1172        }
1173    }
1174
1175    impl PeerControllerGetPeerIdRequest {
1176        #[inline(always)]
1177        fn max_ordinal_present(&self) -> u64 {
1178            if let Some(_) = self.address {
1179                return 1;
1180            }
1181            0
1182        }
1183    }
1184
1185    impl fidl::encoding::ValueTypeMarker for PeerControllerGetPeerIdRequest {
1186        type Borrowed<'a> = &'a Self;
1187        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1188            value
1189        }
1190    }
1191
1192    unsafe impl fidl::encoding::TypeMarker for PeerControllerGetPeerIdRequest {
1193        type Owned = Self;
1194
1195        #[inline(always)]
1196        fn inline_align(_context: fidl::encoding::Context) -> usize {
1197            8
1198        }
1199
1200        #[inline(always)]
1201        fn inline_size(_context: fidl::encoding::Context) -> usize {
1202            16
1203        }
1204    }
1205
1206    unsafe impl<D: fidl::encoding::ResourceDialect>
1207        fidl::encoding::Encode<PeerControllerGetPeerIdRequest, D>
1208        for &PeerControllerGetPeerIdRequest
1209    {
1210        unsafe fn encode(
1211            self,
1212            encoder: &mut fidl::encoding::Encoder<'_, D>,
1213            offset: usize,
1214            mut depth: fidl::encoding::Depth,
1215        ) -> fidl::Result<()> {
1216            encoder.debug_check_bounds::<PeerControllerGetPeerIdRequest>(offset);
1217            // Vector header
1218            let max_ordinal: u64 = self.max_ordinal_present();
1219            encoder.write_num(max_ordinal, offset);
1220            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1221            // Calling encoder.out_of_line_offset(0) is not allowed.
1222            if max_ordinal == 0 {
1223                return Ok(());
1224            }
1225            depth.increment()?;
1226            let envelope_size = 8;
1227            let bytes_len = max_ordinal as usize * envelope_size;
1228            #[allow(unused_variables)]
1229            let offset = encoder.out_of_line_offset(bytes_len);
1230            let mut _prev_end_offset: usize = 0;
1231            if 1 > max_ordinal {
1232                return Ok(());
1233            }
1234
1235            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1236            // are envelope_size bytes.
1237            let cur_offset: usize = (1 - 1) * envelope_size;
1238
1239            // Zero reserved fields.
1240            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1241
1242            // Safety:
1243            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1244            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1245            //   envelope_size bytes, there is always sufficient room.
1246            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth_common::Address, D>(
1247            self.address.as_ref().map(<fidl_fuchsia_bluetooth_common::Address as fidl::encoding::ValueTypeMarker>::borrow),
1248            encoder, offset + cur_offset, depth
1249        )?;
1250
1251            _prev_end_offset = cur_offset + envelope_size;
1252
1253            Ok(())
1254        }
1255    }
1256
1257    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1258        for PeerControllerGetPeerIdRequest
1259    {
1260        #[inline(always)]
1261        fn new_empty() -> Self {
1262            Self::default()
1263        }
1264
1265        unsafe fn decode(
1266            &mut self,
1267            decoder: &mut fidl::encoding::Decoder<'_, D>,
1268            offset: usize,
1269            mut depth: fidl::encoding::Depth,
1270        ) -> fidl::Result<()> {
1271            decoder.debug_check_bounds::<Self>(offset);
1272            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1273                None => return Err(fidl::Error::NotNullable),
1274                Some(len) => len,
1275            };
1276            // Calling decoder.out_of_line_offset(0) is not allowed.
1277            if len == 0 {
1278                return Ok(());
1279            };
1280            depth.increment()?;
1281            let envelope_size = 8;
1282            let bytes_len = len * envelope_size;
1283            let offset = decoder.out_of_line_offset(bytes_len)?;
1284            // Decode the envelope for each type.
1285            let mut _next_ordinal_to_read = 0;
1286            let mut next_offset = offset;
1287            let end_offset = offset + bytes_len;
1288            _next_ordinal_to_read += 1;
1289            if next_offset >= end_offset {
1290                return Ok(());
1291            }
1292
1293            // Decode unknown envelopes for gaps in ordinals.
1294            while _next_ordinal_to_read < 1 {
1295                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1296                _next_ordinal_to_read += 1;
1297                next_offset += envelope_size;
1298            }
1299
1300            let next_out_of_line = decoder.next_out_of_line();
1301            let handles_before = decoder.remaining_handles();
1302            if let Some((inlined, num_bytes, num_handles)) =
1303                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1304            {
1305                let member_inline_size = <fidl_fuchsia_bluetooth_common::Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1306                if inlined != (member_inline_size <= 4) {
1307                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1308                }
1309                let inner_offset;
1310                let mut inner_depth = depth.clone();
1311                if inlined {
1312                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1313                    inner_offset = next_offset;
1314                } else {
1315                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1316                    inner_depth.increment()?;
1317                }
1318                let val_ref = self.address.get_or_insert_with(|| {
1319                    fidl::new_empty!(fidl_fuchsia_bluetooth_common::Address, D)
1320                });
1321                fidl::decode!(
1322                    fidl_fuchsia_bluetooth_common::Address,
1323                    D,
1324                    val_ref,
1325                    decoder,
1326                    inner_offset,
1327                    inner_depth
1328                )?;
1329                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1330                {
1331                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1332                }
1333                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1334                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1335                }
1336            }
1337
1338            next_offset += envelope_size;
1339
1340            // Decode the remaining unknown envelopes.
1341            while next_offset < end_offset {
1342                _next_ordinal_to_read += 1;
1343                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1344                next_offset += envelope_size;
1345            }
1346
1347            Ok(())
1348        }
1349    }
1350
1351    impl PeerControllerSetDiscoveryRequest {
1352        #[inline(always)]
1353        fn max_ordinal_present(&self) -> u64 {
1354            if let Some(_) = self.discovery {
1355                return 1;
1356            }
1357            0
1358        }
1359    }
1360
1361    impl fidl::encoding::ValueTypeMarker for PeerControllerSetDiscoveryRequest {
1362        type Borrowed<'a> = &'a Self;
1363        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1364            value
1365        }
1366    }
1367
1368    unsafe impl fidl::encoding::TypeMarker for PeerControllerSetDiscoveryRequest {
1369        type Owned = Self;
1370
1371        #[inline(always)]
1372        fn inline_align(_context: fidl::encoding::Context) -> usize {
1373            8
1374        }
1375
1376        #[inline(always)]
1377        fn inline_size(_context: fidl::encoding::Context) -> usize {
1378            16
1379        }
1380    }
1381
1382    unsafe impl<D: fidl::encoding::ResourceDialect>
1383        fidl::encoding::Encode<PeerControllerSetDiscoveryRequest, D>
1384        for &PeerControllerSetDiscoveryRequest
1385    {
1386        unsafe fn encode(
1387            self,
1388            encoder: &mut fidl::encoding::Encoder<'_, D>,
1389            offset: usize,
1390            mut depth: fidl::encoding::Depth,
1391        ) -> fidl::Result<()> {
1392            encoder.debug_check_bounds::<PeerControllerSetDiscoveryRequest>(offset);
1393            // Vector header
1394            let max_ordinal: u64 = self.max_ordinal_present();
1395            encoder.write_num(max_ordinal, offset);
1396            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1397            // Calling encoder.out_of_line_offset(0) is not allowed.
1398            if max_ordinal == 0 {
1399                return Ok(());
1400            }
1401            depth.increment()?;
1402            let envelope_size = 8;
1403            let bytes_len = max_ordinal as usize * envelope_size;
1404            #[allow(unused_variables)]
1405            let offset = encoder.out_of_line_offset(bytes_len);
1406            let mut _prev_end_offset: usize = 0;
1407            if 1 > max_ordinal {
1408                return Ok(());
1409            }
1410
1411            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1412            // are envelope_size bytes.
1413            let cur_offset: usize = (1 - 1) * envelope_size;
1414
1415            // Zero reserved fields.
1416            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1417
1418            // Safety:
1419            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1420            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1421            //   envelope_size bytes, there is always sufficient room.
1422            fidl::encoding::encode_in_envelope_optional::<bool, D>(
1423                self.discovery.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1424                encoder,
1425                offset + cur_offset,
1426                depth,
1427            )?;
1428
1429            _prev_end_offset = cur_offset + envelope_size;
1430
1431            Ok(())
1432        }
1433    }
1434
1435    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1436        for PeerControllerSetDiscoveryRequest
1437    {
1438        #[inline(always)]
1439        fn new_empty() -> Self {
1440            Self::default()
1441        }
1442
1443        unsafe fn decode(
1444            &mut self,
1445            decoder: &mut fidl::encoding::Decoder<'_, D>,
1446            offset: usize,
1447            mut depth: fidl::encoding::Depth,
1448        ) -> fidl::Result<()> {
1449            decoder.debug_check_bounds::<Self>(offset);
1450            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1451                None => return Err(fidl::Error::NotNullable),
1452                Some(len) => len,
1453            };
1454            // Calling decoder.out_of_line_offset(0) is not allowed.
1455            if len == 0 {
1456                return Ok(());
1457            };
1458            depth.increment()?;
1459            let envelope_size = 8;
1460            let bytes_len = len * envelope_size;
1461            let offset = decoder.out_of_line_offset(bytes_len)?;
1462            // Decode the envelope for each type.
1463            let mut _next_ordinal_to_read = 0;
1464            let mut next_offset = offset;
1465            let end_offset = offset + bytes_len;
1466            _next_ordinal_to_read += 1;
1467            if next_offset >= end_offset {
1468                return Ok(());
1469            }
1470
1471            // Decode unknown envelopes for gaps in ordinals.
1472            while _next_ordinal_to_read < 1 {
1473                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1474                _next_ordinal_to_read += 1;
1475                next_offset += envelope_size;
1476            }
1477
1478            let next_out_of_line = decoder.next_out_of_line();
1479            let handles_before = decoder.remaining_handles();
1480            if let Some((inlined, num_bytes, num_handles)) =
1481                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1482            {
1483                let member_inline_size =
1484                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1485                if inlined != (member_inline_size <= 4) {
1486                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1487                }
1488                let inner_offset;
1489                let mut inner_depth = depth.clone();
1490                if inlined {
1491                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1492                    inner_offset = next_offset;
1493                } else {
1494                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1495                    inner_depth.increment()?;
1496                }
1497                let val_ref = self.discovery.get_or_insert_with(|| fidl::new_empty!(bool, D));
1498                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1499                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1500                {
1501                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1502                }
1503                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1504                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1505                }
1506            }
1507
1508            next_offset += envelope_size;
1509
1510            // Decode the remaining unknown envelopes.
1511            while next_offset < end_offset {
1512                _next_ordinal_to_read += 1;
1513                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1514                next_offset += envelope_size;
1515            }
1516
1517            Ok(())
1518        }
1519    }
1520
1521    impl PeerControllerGetKnownPeersResponse {
1522        #[inline(always)]
1523        fn max_ordinal_present(&self) -> u64 {
1524            if let Some(_) = self.peers {
1525                return 1;
1526            }
1527            0
1528        }
1529    }
1530
1531    impl fidl::encoding::ValueTypeMarker for PeerControllerGetKnownPeersResponse {
1532        type Borrowed<'a> = &'a Self;
1533        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1534            value
1535        }
1536    }
1537
1538    unsafe impl fidl::encoding::TypeMarker for PeerControllerGetKnownPeersResponse {
1539        type Owned = Self;
1540
1541        #[inline(always)]
1542        fn inline_align(_context: fidl::encoding::Context) -> usize {
1543            8
1544        }
1545
1546        #[inline(always)]
1547        fn inline_size(_context: fidl::encoding::Context) -> usize {
1548            16
1549        }
1550    }
1551
1552    unsafe impl<D: fidl::encoding::ResourceDialect>
1553        fidl::encoding::Encode<PeerControllerGetKnownPeersResponse, D>
1554        for &PeerControllerGetKnownPeersResponse
1555    {
1556        unsafe fn encode(
1557            self,
1558            encoder: &mut fidl::encoding::Encoder<'_, D>,
1559            offset: usize,
1560            mut depth: fidl::encoding::Depth,
1561        ) -> fidl::Result<()> {
1562            encoder.debug_check_bounds::<PeerControllerGetKnownPeersResponse>(offset);
1563            // Vector header
1564            let max_ordinal: u64 = self.max_ordinal_present();
1565            encoder.write_num(max_ordinal, offset);
1566            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1567            // Calling encoder.out_of_line_offset(0) is not allowed.
1568            if max_ordinal == 0 {
1569                return Ok(());
1570            }
1571            depth.increment()?;
1572            let envelope_size = 8;
1573            let bytes_len = max_ordinal as usize * envelope_size;
1574            #[allow(unused_variables)]
1575            let offset = encoder.out_of_line_offset(bytes_len);
1576            let mut _prev_end_offset: usize = 0;
1577            if 1 > max_ordinal {
1578                return Ok(());
1579            }
1580
1581            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1582            // are envelope_size bytes.
1583            let cur_offset: usize = (1 - 1) * envelope_size;
1584
1585            // Zero reserved fields.
1586            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1587
1588            // Safety:
1589            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1590            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1591            //   envelope_size bytes, there is always sufficient room.
1592            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth_sys_common::Peer>, D>(
1593            self.peers.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth_sys_common::Peer> as fidl::encoding::ValueTypeMarker>::borrow),
1594            encoder, offset + cur_offset, depth
1595        )?;
1596
1597            _prev_end_offset = cur_offset + envelope_size;
1598
1599            Ok(())
1600        }
1601    }
1602
1603    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1604        for PeerControllerGetKnownPeersResponse
1605    {
1606        #[inline(always)]
1607        fn new_empty() -> Self {
1608            Self::default()
1609        }
1610
1611        unsafe fn decode(
1612            &mut self,
1613            decoder: &mut fidl::encoding::Decoder<'_, D>,
1614            offset: usize,
1615            mut depth: fidl::encoding::Depth,
1616        ) -> fidl::Result<()> {
1617            decoder.debug_check_bounds::<Self>(offset);
1618            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1619                None => return Err(fidl::Error::NotNullable),
1620                Some(len) => len,
1621            };
1622            // Calling decoder.out_of_line_offset(0) is not allowed.
1623            if len == 0 {
1624                return Ok(());
1625            };
1626            depth.increment()?;
1627            let envelope_size = 8;
1628            let bytes_len = len * envelope_size;
1629            let offset = decoder.out_of_line_offset(bytes_len)?;
1630            // Decode the envelope for each type.
1631            let mut _next_ordinal_to_read = 0;
1632            let mut next_offset = offset;
1633            let end_offset = offset + bytes_len;
1634            _next_ordinal_to_read += 1;
1635            if next_offset >= end_offset {
1636                return Ok(());
1637            }
1638
1639            // Decode unknown envelopes for gaps in ordinals.
1640            while _next_ordinal_to_read < 1 {
1641                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1642                _next_ordinal_to_read += 1;
1643                next_offset += envelope_size;
1644            }
1645
1646            let next_out_of_line = decoder.next_out_of_line();
1647            let handles_before = decoder.remaining_handles();
1648            if let Some((inlined, num_bytes, num_handles)) =
1649                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1650            {
1651                let member_inline_size = <fidl::encoding::UnboundedVector<
1652                    fidl_fuchsia_bluetooth_sys_common::Peer,
1653                > as fidl::encoding::TypeMarker>::inline_size(
1654                    decoder.context
1655                );
1656                if inlined != (member_inline_size <= 4) {
1657                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1658                }
1659                let inner_offset;
1660                let mut inner_depth = depth.clone();
1661                if inlined {
1662                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1663                    inner_offset = next_offset;
1664                } else {
1665                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1666                    inner_depth.increment()?;
1667                }
1668                let val_ref = self.peers.get_or_insert_with(|| {
1669                    fidl::new_empty!(
1670                        fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth_sys_common::Peer>,
1671                        D
1672                    )
1673                });
1674                fidl::decode!(
1675                    fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth_sys_common::Peer>,
1676                    D,
1677                    val_ref,
1678                    decoder,
1679                    inner_offset,
1680                    inner_depth
1681                )?;
1682                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1683                {
1684                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1685                }
1686                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1687                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1688                }
1689            }
1690
1691            next_offset += envelope_size;
1692
1693            // Decode the remaining unknown envelopes.
1694            while next_offset < end_offset {
1695                _next_ordinal_to_read += 1;
1696                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1697                next_offset += envelope_size;
1698            }
1699
1700            Ok(())
1701        }
1702    }
1703
1704    impl PeerControllerGetPeerIdResponse {
1705        #[inline(always)]
1706        fn max_ordinal_present(&self) -> u64 {
1707            if let Some(_) = self.id {
1708                return 1;
1709            }
1710            0
1711        }
1712    }
1713
1714    impl fidl::encoding::ValueTypeMarker for PeerControllerGetPeerIdResponse {
1715        type Borrowed<'a> = &'a Self;
1716        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1717            value
1718        }
1719    }
1720
1721    unsafe impl fidl::encoding::TypeMarker for PeerControllerGetPeerIdResponse {
1722        type Owned = Self;
1723
1724        #[inline(always)]
1725        fn inline_align(_context: fidl::encoding::Context) -> usize {
1726            8
1727        }
1728
1729        #[inline(always)]
1730        fn inline_size(_context: fidl::encoding::Context) -> usize {
1731            16
1732        }
1733    }
1734
1735    unsafe impl<D: fidl::encoding::ResourceDialect>
1736        fidl::encoding::Encode<PeerControllerGetPeerIdResponse, D>
1737        for &PeerControllerGetPeerIdResponse
1738    {
1739        unsafe fn encode(
1740            self,
1741            encoder: &mut fidl::encoding::Encoder<'_, D>,
1742            offset: usize,
1743            mut depth: fidl::encoding::Depth,
1744        ) -> fidl::Result<()> {
1745            encoder.debug_check_bounds::<PeerControllerGetPeerIdResponse>(offset);
1746            // Vector header
1747            let max_ordinal: u64 = self.max_ordinal_present();
1748            encoder.write_num(max_ordinal, offset);
1749            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1750            // Calling encoder.out_of_line_offset(0) is not allowed.
1751            if max_ordinal == 0 {
1752                return Ok(());
1753            }
1754            depth.increment()?;
1755            let envelope_size = 8;
1756            let bytes_len = max_ordinal as usize * envelope_size;
1757            #[allow(unused_variables)]
1758            let offset = encoder.out_of_line_offset(bytes_len);
1759            let mut _prev_end_offset: usize = 0;
1760            if 1 > max_ordinal {
1761                return Ok(());
1762            }
1763
1764            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1765            // are envelope_size bytes.
1766            let cur_offset: usize = (1 - 1) * envelope_size;
1767
1768            // Zero reserved fields.
1769            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1770
1771            // Safety:
1772            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1773            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1774            //   envelope_size bytes, there is always sufficient room.
1775            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth_common::PeerId, D>(
1776            self.id.as_ref().map(<fidl_fuchsia_bluetooth_common::PeerId as fidl::encoding::ValueTypeMarker>::borrow),
1777            encoder, offset + cur_offset, depth
1778        )?;
1779
1780            _prev_end_offset = cur_offset + envelope_size;
1781
1782            Ok(())
1783        }
1784    }
1785
1786    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1787        for PeerControllerGetPeerIdResponse
1788    {
1789        #[inline(always)]
1790        fn new_empty() -> Self {
1791            Self::default()
1792        }
1793
1794        unsafe fn decode(
1795            &mut self,
1796            decoder: &mut fidl::encoding::Decoder<'_, D>,
1797            offset: usize,
1798            mut depth: fidl::encoding::Depth,
1799        ) -> fidl::Result<()> {
1800            decoder.debug_check_bounds::<Self>(offset);
1801            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1802                None => return Err(fidl::Error::NotNullable),
1803                Some(len) => len,
1804            };
1805            // Calling decoder.out_of_line_offset(0) is not allowed.
1806            if len == 0 {
1807                return Ok(());
1808            };
1809            depth.increment()?;
1810            let envelope_size = 8;
1811            let bytes_len = len * envelope_size;
1812            let offset = decoder.out_of_line_offset(bytes_len)?;
1813            // Decode the envelope for each type.
1814            let mut _next_ordinal_to_read = 0;
1815            let mut next_offset = offset;
1816            let end_offset = offset + bytes_len;
1817            _next_ordinal_to_read += 1;
1818            if next_offset >= end_offset {
1819                return Ok(());
1820            }
1821
1822            // Decode unknown envelopes for gaps in ordinals.
1823            while _next_ordinal_to_read < 1 {
1824                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1825                _next_ordinal_to_read += 1;
1826                next_offset += envelope_size;
1827            }
1828
1829            let next_out_of_line = decoder.next_out_of_line();
1830            let handles_before = decoder.remaining_handles();
1831            if let Some((inlined, num_bytes, num_handles)) =
1832                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1833            {
1834                let member_inline_size = <fidl_fuchsia_bluetooth_common::PeerId as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1835                if inlined != (member_inline_size <= 4) {
1836                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1837                }
1838                let inner_offset;
1839                let mut inner_depth = depth.clone();
1840                if inlined {
1841                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1842                    inner_offset = next_offset;
1843                } else {
1844                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1845                    inner_depth.increment()?;
1846                }
1847                let val_ref = self.id.get_or_insert_with(|| {
1848                    fidl::new_empty!(fidl_fuchsia_bluetooth_common::PeerId, D)
1849                });
1850                fidl::decode!(
1851                    fidl_fuchsia_bluetooth_common::PeerId,
1852                    D,
1853                    val_ref,
1854                    decoder,
1855                    inner_offset,
1856                    inner_depth
1857                )?;
1858                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1859                {
1860                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1861                }
1862                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1863                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1864                }
1865            }
1866
1867            next_offset += envelope_size;
1868
1869            // Decode the remaining unknown envelopes.
1870            while next_offset < end_offset {
1871                _next_ordinal_to_read += 1;
1872                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1873                next_offset += envelope_size;
1874            }
1875
1876            Ok(())
1877        }
1878    }
1879
1880    impl PeerSelector {
1881        #[inline(always)]
1882        fn max_ordinal_present(&self) -> u64 {
1883            if let Some(_) = self.id {
1884                return 1;
1885            }
1886            0
1887        }
1888    }
1889
1890    impl fidl::encoding::ValueTypeMarker for PeerSelector {
1891        type Borrowed<'a> = &'a Self;
1892        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1893            value
1894        }
1895    }
1896
1897    unsafe impl fidl::encoding::TypeMarker for PeerSelector {
1898        type Owned = Self;
1899
1900        #[inline(always)]
1901        fn inline_align(_context: fidl::encoding::Context) -> usize {
1902            8
1903        }
1904
1905        #[inline(always)]
1906        fn inline_size(_context: fidl::encoding::Context) -> usize {
1907            16
1908        }
1909    }
1910
1911    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PeerSelector, D>
1912        for &PeerSelector
1913    {
1914        unsafe fn encode(
1915            self,
1916            encoder: &mut fidl::encoding::Encoder<'_, D>,
1917            offset: usize,
1918            mut depth: fidl::encoding::Depth,
1919        ) -> fidl::Result<()> {
1920            encoder.debug_check_bounds::<PeerSelector>(offset);
1921            // Vector header
1922            let max_ordinal: u64 = self.max_ordinal_present();
1923            encoder.write_num(max_ordinal, offset);
1924            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1925            // Calling encoder.out_of_line_offset(0) is not allowed.
1926            if max_ordinal == 0 {
1927                return Ok(());
1928            }
1929            depth.increment()?;
1930            let envelope_size = 8;
1931            let bytes_len = max_ordinal as usize * envelope_size;
1932            #[allow(unused_variables)]
1933            let offset = encoder.out_of_line_offset(bytes_len);
1934            let mut _prev_end_offset: usize = 0;
1935            if 1 > max_ordinal {
1936                return Ok(());
1937            }
1938
1939            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1940            // are envelope_size bytes.
1941            let cur_offset: usize = (1 - 1) * envelope_size;
1942
1943            // Zero reserved fields.
1944            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1945
1946            // Safety:
1947            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1948            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1949            //   envelope_size bytes, there is always sufficient room.
1950            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth_common::PeerId, D>(
1951            self.id.as_ref().map(<fidl_fuchsia_bluetooth_common::PeerId as fidl::encoding::ValueTypeMarker>::borrow),
1952            encoder, offset + cur_offset, depth
1953        )?;
1954
1955            _prev_end_offset = cur_offset + envelope_size;
1956
1957            Ok(())
1958        }
1959    }
1960
1961    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PeerSelector {
1962        #[inline(always)]
1963        fn new_empty() -> Self {
1964            Self::default()
1965        }
1966
1967        unsafe fn decode(
1968            &mut self,
1969            decoder: &mut fidl::encoding::Decoder<'_, D>,
1970            offset: usize,
1971            mut depth: fidl::encoding::Depth,
1972        ) -> fidl::Result<()> {
1973            decoder.debug_check_bounds::<Self>(offset);
1974            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1975                None => return Err(fidl::Error::NotNullable),
1976                Some(len) => len,
1977            };
1978            // Calling decoder.out_of_line_offset(0) is not allowed.
1979            if len == 0 {
1980                return Ok(());
1981            };
1982            depth.increment()?;
1983            let envelope_size = 8;
1984            let bytes_len = len * envelope_size;
1985            let offset = decoder.out_of_line_offset(bytes_len)?;
1986            // Decode the envelope for each type.
1987            let mut _next_ordinal_to_read = 0;
1988            let mut next_offset = offset;
1989            let end_offset = offset + bytes_len;
1990            _next_ordinal_to_read += 1;
1991            if next_offset >= end_offset {
1992                return Ok(());
1993            }
1994
1995            // Decode unknown envelopes for gaps in ordinals.
1996            while _next_ordinal_to_read < 1 {
1997                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1998                _next_ordinal_to_read += 1;
1999                next_offset += envelope_size;
2000            }
2001
2002            let next_out_of_line = decoder.next_out_of_line();
2003            let handles_before = decoder.remaining_handles();
2004            if let Some((inlined, num_bytes, num_handles)) =
2005                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2006            {
2007                let member_inline_size = <fidl_fuchsia_bluetooth_common::PeerId as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2008                if inlined != (member_inline_size <= 4) {
2009                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2010                }
2011                let inner_offset;
2012                let mut inner_depth = depth.clone();
2013                if inlined {
2014                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2015                    inner_offset = next_offset;
2016                } else {
2017                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2018                    inner_depth.increment()?;
2019                }
2020                let val_ref = self.id.get_or_insert_with(|| {
2021                    fidl::new_empty!(fidl_fuchsia_bluetooth_common::PeerId, D)
2022                });
2023                fidl::decode!(
2024                    fidl_fuchsia_bluetooth_common::PeerId,
2025                    D,
2026                    val_ref,
2027                    decoder,
2028                    inner_offset,
2029                    inner_depth
2030                )?;
2031                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2032                {
2033                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2034                }
2035                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2036                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2037                }
2038            }
2039
2040            next_offset += envelope_size;
2041
2042            // Decode the remaining unknown envelopes.
2043            while next_offset < end_offset {
2044                _next_ordinal_to_read += 1;
2045                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2046                next_offset += envelope_size;
2047            }
2048
2049            Ok(())
2050        }
2051    }
2052
2053    impl PeripheralControllerAdvertiseRequest {
2054        #[inline(always)]
2055        fn max_ordinal_present(&self) -> u64 {
2056            if let Some(_) = self.timeout {
2057                return 2;
2058            }
2059            if let Some(_) = self.parameters {
2060                return 1;
2061            }
2062            0
2063        }
2064    }
2065
2066    impl fidl::encoding::ValueTypeMarker for PeripheralControllerAdvertiseRequest {
2067        type Borrowed<'a> = &'a Self;
2068        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2069            value
2070        }
2071    }
2072
2073    unsafe impl fidl::encoding::TypeMarker for PeripheralControllerAdvertiseRequest {
2074        type Owned = Self;
2075
2076        #[inline(always)]
2077        fn inline_align(_context: fidl::encoding::Context) -> usize {
2078            8
2079        }
2080
2081        #[inline(always)]
2082        fn inline_size(_context: fidl::encoding::Context) -> usize {
2083            16
2084        }
2085    }
2086
2087    unsafe impl<D: fidl::encoding::ResourceDialect>
2088        fidl::encoding::Encode<PeripheralControllerAdvertiseRequest, D>
2089        for &PeripheralControllerAdvertiseRequest
2090    {
2091        unsafe fn encode(
2092            self,
2093            encoder: &mut fidl::encoding::Encoder<'_, D>,
2094            offset: usize,
2095            mut depth: fidl::encoding::Depth,
2096        ) -> fidl::Result<()> {
2097            encoder.debug_check_bounds::<PeripheralControllerAdvertiseRequest>(offset);
2098            // Vector header
2099            let max_ordinal: u64 = self.max_ordinal_present();
2100            encoder.write_num(max_ordinal, offset);
2101            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2102            // Calling encoder.out_of_line_offset(0) is not allowed.
2103            if max_ordinal == 0 {
2104                return Ok(());
2105            }
2106            depth.increment()?;
2107            let envelope_size = 8;
2108            let bytes_len = max_ordinal as usize * envelope_size;
2109            #[allow(unused_variables)]
2110            let offset = encoder.out_of_line_offset(bytes_len);
2111            let mut _prev_end_offset: usize = 0;
2112            if 1 > max_ordinal {
2113                return Ok(());
2114            }
2115
2116            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2117            // are envelope_size bytes.
2118            let cur_offset: usize = (1 - 1) * envelope_size;
2119
2120            // Zero reserved fields.
2121            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2122
2123            // Safety:
2124            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2125            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2126            //   envelope_size bytes, there is always sufficient room.
2127            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth_le_common::AdvertisingParameters, D>(
2128            self.parameters.as_ref().map(<fidl_fuchsia_bluetooth_le_common::AdvertisingParameters as fidl::encoding::ValueTypeMarker>::borrow),
2129            encoder, offset + cur_offset, depth
2130        )?;
2131
2132            _prev_end_offset = cur_offset + envelope_size;
2133            if 2 > max_ordinal {
2134                return Ok(());
2135            }
2136
2137            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2138            // are envelope_size bytes.
2139            let cur_offset: usize = (2 - 1) * envelope_size;
2140
2141            // Zero reserved fields.
2142            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2143
2144            // Safety:
2145            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2146            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2147            //   envelope_size bytes, there is always sufficient room.
2148            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2149                self.timeout.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2150                encoder,
2151                offset + cur_offset,
2152                depth,
2153            )?;
2154
2155            _prev_end_offset = cur_offset + envelope_size;
2156
2157            Ok(())
2158        }
2159    }
2160
2161    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2162        for PeripheralControllerAdvertiseRequest
2163    {
2164        #[inline(always)]
2165        fn new_empty() -> Self {
2166            Self::default()
2167        }
2168
2169        unsafe fn decode(
2170            &mut self,
2171            decoder: &mut fidl::encoding::Decoder<'_, D>,
2172            offset: usize,
2173            mut depth: fidl::encoding::Depth,
2174        ) -> fidl::Result<()> {
2175            decoder.debug_check_bounds::<Self>(offset);
2176            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2177                None => return Err(fidl::Error::NotNullable),
2178                Some(len) => len,
2179            };
2180            // Calling decoder.out_of_line_offset(0) is not allowed.
2181            if len == 0 {
2182                return Ok(());
2183            };
2184            depth.increment()?;
2185            let envelope_size = 8;
2186            let bytes_len = len * envelope_size;
2187            let offset = decoder.out_of_line_offset(bytes_len)?;
2188            // Decode the envelope for each type.
2189            let mut _next_ordinal_to_read = 0;
2190            let mut next_offset = offset;
2191            let end_offset = offset + bytes_len;
2192            _next_ordinal_to_read += 1;
2193            if next_offset >= end_offset {
2194                return Ok(());
2195            }
2196
2197            // Decode unknown envelopes for gaps in ordinals.
2198            while _next_ordinal_to_read < 1 {
2199                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2200                _next_ordinal_to_read += 1;
2201                next_offset += envelope_size;
2202            }
2203
2204            let next_out_of_line = decoder.next_out_of_line();
2205            let handles_before = decoder.remaining_handles();
2206            if let Some((inlined, num_bytes, num_handles)) =
2207                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2208            {
2209                let member_inline_size = <fidl_fuchsia_bluetooth_le_common::AdvertisingParameters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2210                if inlined != (member_inline_size <= 4) {
2211                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2212                }
2213                let inner_offset;
2214                let mut inner_depth = depth.clone();
2215                if inlined {
2216                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2217                    inner_offset = next_offset;
2218                } else {
2219                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2220                    inner_depth.increment()?;
2221                }
2222                let val_ref = self.parameters.get_or_insert_with(|| {
2223                    fidl::new_empty!(fidl_fuchsia_bluetooth_le_common::AdvertisingParameters, D)
2224                });
2225                fidl::decode!(
2226                    fidl_fuchsia_bluetooth_le_common::AdvertisingParameters,
2227                    D,
2228                    val_ref,
2229                    decoder,
2230                    inner_offset,
2231                    inner_depth
2232                )?;
2233                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2234                {
2235                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2236                }
2237                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2238                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2239                }
2240            }
2241
2242            next_offset += envelope_size;
2243            _next_ordinal_to_read += 1;
2244            if next_offset >= end_offset {
2245                return Ok(());
2246            }
2247
2248            // Decode unknown envelopes for gaps in ordinals.
2249            while _next_ordinal_to_read < 2 {
2250                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2251                _next_ordinal_to_read += 1;
2252                next_offset += envelope_size;
2253            }
2254
2255            let next_out_of_line = decoder.next_out_of_line();
2256            let handles_before = decoder.remaining_handles();
2257            if let Some((inlined, num_bytes, num_handles)) =
2258                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2259            {
2260                let member_inline_size =
2261                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2262                if inlined != (member_inline_size <= 4) {
2263                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2264                }
2265                let inner_offset;
2266                let mut inner_depth = depth.clone();
2267                if inlined {
2268                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2269                    inner_offset = next_offset;
2270                } else {
2271                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2272                    inner_depth.increment()?;
2273                }
2274                let val_ref = self.timeout.get_or_insert_with(|| fidl::new_empty!(u64, D));
2275                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2276                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2277                {
2278                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2279                }
2280                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2281                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2282                }
2283            }
2284
2285            next_offset += envelope_size;
2286
2287            // Decode the remaining unknown envelopes.
2288            while next_offset < end_offset {
2289                _next_ordinal_to_read += 1;
2290                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2291                next_offset += envelope_size;
2292            }
2293
2294            Ok(())
2295        }
2296    }
2297
2298    impl PeripheralControllerAdvertiseResponse {
2299        #[inline(always)]
2300        fn max_ordinal_present(&self) -> u64 {
2301            if let Some(_) = self.peer_id {
2302                return 1;
2303            }
2304            0
2305        }
2306    }
2307
2308    impl fidl::encoding::ValueTypeMarker for PeripheralControllerAdvertiseResponse {
2309        type Borrowed<'a> = &'a Self;
2310        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2311            value
2312        }
2313    }
2314
2315    unsafe impl fidl::encoding::TypeMarker for PeripheralControllerAdvertiseResponse {
2316        type Owned = Self;
2317
2318        #[inline(always)]
2319        fn inline_align(_context: fidl::encoding::Context) -> usize {
2320            8
2321        }
2322
2323        #[inline(always)]
2324        fn inline_size(_context: fidl::encoding::Context) -> usize {
2325            16
2326        }
2327    }
2328
2329    unsafe impl<D: fidl::encoding::ResourceDialect>
2330        fidl::encoding::Encode<PeripheralControllerAdvertiseResponse, D>
2331        for &PeripheralControllerAdvertiseResponse
2332    {
2333        unsafe fn encode(
2334            self,
2335            encoder: &mut fidl::encoding::Encoder<'_, D>,
2336            offset: usize,
2337            mut depth: fidl::encoding::Depth,
2338        ) -> fidl::Result<()> {
2339            encoder.debug_check_bounds::<PeripheralControllerAdvertiseResponse>(offset);
2340            // Vector header
2341            let max_ordinal: u64 = self.max_ordinal_present();
2342            encoder.write_num(max_ordinal, offset);
2343            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2344            // Calling encoder.out_of_line_offset(0) is not allowed.
2345            if max_ordinal == 0 {
2346                return Ok(());
2347            }
2348            depth.increment()?;
2349            let envelope_size = 8;
2350            let bytes_len = max_ordinal as usize * envelope_size;
2351            #[allow(unused_variables)]
2352            let offset = encoder.out_of_line_offset(bytes_len);
2353            let mut _prev_end_offset: usize = 0;
2354            if 1 > max_ordinal {
2355                return Ok(());
2356            }
2357
2358            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2359            // are envelope_size bytes.
2360            let cur_offset: usize = (1 - 1) * envelope_size;
2361
2362            // Zero reserved fields.
2363            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2364
2365            // Safety:
2366            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2367            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2368            //   envelope_size bytes, there is always sufficient room.
2369            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth_common::PeerId, D>(
2370            self.peer_id.as_ref().map(<fidl_fuchsia_bluetooth_common::PeerId as fidl::encoding::ValueTypeMarker>::borrow),
2371            encoder, offset + cur_offset, depth
2372        )?;
2373
2374            _prev_end_offset = cur_offset + envelope_size;
2375
2376            Ok(())
2377        }
2378    }
2379
2380    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2381        for PeripheralControllerAdvertiseResponse
2382    {
2383        #[inline(always)]
2384        fn new_empty() -> Self {
2385            Self::default()
2386        }
2387
2388        unsafe fn decode(
2389            &mut self,
2390            decoder: &mut fidl::encoding::Decoder<'_, D>,
2391            offset: usize,
2392            mut depth: fidl::encoding::Depth,
2393        ) -> fidl::Result<()> {
2394            decoder.debug_check_bounds::<Self>(offset);
2395            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2396                None => return Err(fidl::Error::NotNullable),
2397                Some(len) => len,
2398            };
2399            // Calling decoder.out_of_line_offset(0) is not allowed.
2400            if len == 0 {
2401                return Ok(());
2402            };
2403            depth.increment()?;
2404            let envelope_size = 8;
2405            let bytes_len = len * envelope_size;
2406            let offset = decoder.out_of_line_offset(bytes_len)?;
2407            // Decode the envelope for each type.
2408            let mut _next_ordinal_to_read = 0;
2409            let mut next_offset = offset;
2410            let end_offset = offset + bytes_len;
2411            _next_ordinal_to_read += 1;
2412            if next_offset >= end_offset {
2413                return Ok(());
2414            }
2415
2416            // Decode unknown envelopes for gaps in ordinals.
2417            while _next_ordinal_to_read < 1 {
2418                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2419                _next_ordinal_to_read += 1;
2420                next_offset += envelope_size;
2421            }
2422
2423            let next_out_of_line = decoder.next_out_of_line();
2424            let handles_before = decoder.remaining_handles();
2425            if let Some((inlined, num_bytes, num_handles)) =
2426                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2427            {
2428                let member_inline_size = <fidl_fuchsia_bluetooth_common::PeerId as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2429                if inlined != (member_inline_size <= 4) {
2430                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2431                }
2432                let inner_offset;
2433                let mut inner_depth = depth.clone();
2434                if inlined {
2435                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2436                    inner_offset = next_offset;
2437                } else {
2438                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2439                    inner_depth.increment()?;
2440                }
2441                let val_ref = self.peer_id.get_or_insert_with(|| {
2442                    fidl::new_empty!(fidl_fuchsia_bluetooth_common::PeerId, D)
2443                });
2444                fidl::decode!(
2445                    fidl_fuchsia_bluetooth_common::PeerId,
2446                    D,
2447                    val_ref,
2448                    decoder,
2449                    inner_offset,
2450                    inner_depth
2451                )?;
2452                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2453                {
2454                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2455                }
2456                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2457                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2458                }
2459            }
2460
2461            next_offset += envelope_size;
2462
2463            // Decode the remaining unknown envelopes.
2464            while next_offset < end_offset {
2465                _next_ordinal_to_read += 1;
2466                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2467                next_offset += envelope_size;
2468            }
2469
2470            Ok(())
2471        }
2472    }
2473
2474    impl ScanResultListenerOnPeersDiscoveredRequest {
2475        #[inline(always)]
2476        fn max_ordinal_present(&self) -> u64 {
2477            if let Some(_) = self.peers {
2478                return 1;
2479            }
2480            0
2481        }
2482    }
2483
2484    impl fidl::encoding::ValueTypeMarker for ScanResultListenerOnPeersDiscoveredRequest {
2485        type Borrowed<'a> = &'a Self;
2486        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2487            value
2488        }
2489    }
2490
2491    unsafe impl fidl::encoding::TypeMarker for ScanResultListenerOnPeersDiscoveredRequest {
2492        type Owned = Self;
2493
2494        #[inline(always)]
2495        fn inline_align(_context: fidl::encoding::Context) -> usize {
2496            8
2497        }
2498
2499        #[inline(always)]
2500        fn inline_size(_context: fidl::encoding::Context) -> usize {
2501            16
2502        }
2503    }
2504
2505    unsafe impl<D: fidl::encoding::ResourceDialect>
2506        fidl::encoding::Encode<ScanResultListenerOnPeersDiscoveredRequest, D>
2507        for &ScanResultListenerOnPeersDiscoveredRequest
2508    {
2509        unsafe fn encode(
2510            self,
2511            encoder: &mut fidl::encoding::Encoder<'_, D>,
2512            offset: usize,
2513            mut depth: fidl::encoding::Depth,
2514        ) -> fidl::Result<()> {
2515            encoder.debug_check_bounds::<ScanResultListenerOnPeersDiscoveredRequest>(offset);
2516            // Vector header
2517            let max_ordinal: u64 = self.max_ordinal_present();
2518            encoder.write_num(max_ordinal, offset);
2519            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2520            // Calling encoder.out_of_line_offset(0) is not allowed.
2521            if max_ordinal == 0 {
2522                return Ok(());
2523            }
2524            depth.increment()?;
2525            let envelope_size = 8;
2526            let bytes_len = max_ordinal as usize * envelope_size;
2527            #[allow(unused_variables)]
2528            let offset = encoder.out_of_line_offset(bytes_len);
2529            let mut _prev_end_offset: usize = 0;
2530            if 1 > max_ordinal {
2531                return Ok(());
2532            }
2533
2534            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2535            // are envelope_size bytes.
2536            let cur_offset: usize = (1 - 1) * envelope_size;
2537
2538            // Zero reserved fields.
2539            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2540
2541            // Safety:
2542            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2543            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2544            //   envelope_size bytes, there is always sufficient room.
2545            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ScannedPeer>, D>(
2546            self.peers.as_ref().map(<fidl::encoding::UnboundedVector<ScannedPeer> as fidl::encoding::ValueTypeMarker>::borrow),
2547            encoder, offset + cur_offset, depth
2548        )?;
2549
2550            _prev_end_offset = cur_offset + envelope_size;
2551
2552            Ok(())
2553        }
2554    }
2555
2556    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2557        for ScanResultListenerOnPeersDiscoveredRequest
2558    {
2559        #[inline(always)]
2560        fn new_empty() -> Self {
2561            Self::default()
2562        }
2563
2564        unsafe fn decode(
2565            &mut self,
2566            decoder: &mut fidl::encoding::Decoder<'_, D>,
2567            offset: usize,
2568            mut depth: fidl::encoding::Depth,
2569        ) -> fidl::Result<()> {
2570            decoder.debug_check_bounds::<Self>(offset);
2571            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2572                None => return Err(fidl::Error::NotNullable),
2573                Some(len) => len,
2574            };
2575            // Calling decoder.out_of_line_offset(0) is not allowed.
2576            if len == 0 {
2577                return Ok(());
2578            };
2579            depth.increment()?;
2580            let envelope_size = 8;
2581            let bytes_len = len * envelope_size;
2582            let offset = decoder.out_of_line_offset(bytes_len)?;
2583            // Decode the envelope for each type.
2584            let mut _next_ordinal_to_read = 0;
2585            let mut next_offset = offset;
2586            let end_offset = offset + bytes_len;
2587            _next_ordinal_to_read += 1;
2588            if next_offset >= end_offset {
2589                return Ok(());
2590            }
2591
2592            // Decode unknown envelopes for gaps in ordinals.
2593            while _next_ordinal_to_read < 1 {
2594                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2595                _next_ordinal_to_read += 1;
2596                next_offset += envelope_size;
2597            }
2598
2599            let next_out_of_line = decoder.next_out_of_line();
2600            let handles_before = decoder.remaining_handles();
2601            if let Some((inlined, num_bytes, num_handles)) =
2602                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2603            {
2604                let member_inline_size = <fidl::encoding::UnboundedVector<ScannedPeer> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2605                if inlined != (member_inline_size <= 4) {
2606                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2607                }
2608                let inner_offset;
2609                let mut inner_depth = depth.clone();
2610                if inlined {
2611                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2612                    inner_offset = next_offset;
2613                } else {
2614                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2615                    inner_depth.increment()?;
2616                }
2617                let val_ref = self.peers.get_or_insert_with(|| {
2618                    fidl::new_empty!(fidl::encoding::UnboundedVector<ScannedPeer>, D)
2619                });
2620                fidl::decode!(
2621                    fidl::encoding::UnboundedVector<ScannedPeer>,
2622                    D,
2623                    val_ref,
2624                    decoder,
2625                    inner_offset,
2626                    inner_depth
2627                )?;
2628                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2629                {
2630                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2631                }
2632                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2633                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2634                }
2635            }
2636
2637            next_offset += envelope_size;
2638
2639            // Decode the remaining unknown envelopes.
2640            while next_offset < end_offset {
2641                _next_ordinal_to_read += 1;
2642                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2643                next_offset += envelope_size;
2644            }
2645
2646            Ok(())
2647        }
2648    }
2649
2650    impl ScannedPeer {
2651        #[inline(always)]
2652        fn max_ordinal_present(&self) -> u64 {
2653            if let Some(_) = self.address {
2654                return 2;
2655            }
2656            if let Some(_) = self.peer {
2657                return 1;
2658            }
2659            0
2660        }
2661    }
2662
2663    impl fidl::encoding::ValueTypeMarker for ScannedPeer {
2664        type Borrowed<'a> = &'a Self;
2665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2666            value
2667        }
2668    }
2669
2670    unsafe impl fidl::encoding::TypeMarker for ScannedPeer {
2671        type Owned = Self;
2672
2673        #[inline(always)]
2674        fn inline_align(_context: fidl::encoding::Context) -> usize {
2675            8
2676        }
2677
2678        #[inline(always)]
2679        fn inline_size(_context: fidl::encoding::Context) -> usize {
2680            16
2681        }
2682    }
2683
2684    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ScannedPeer, D>
2685        for &ScannedPeer
2686    {
2687        unsafe fn encode(
2688            self,
2689            encoder: &mut fidl::encoding::Encoder<'_, D>,
2690            offset: usize,
2691            mut depth: fidl::encoding::Depth,
2692        ) -> fidl::Result<()> {
2693            encoder.debug_check_bounds::<ScannedPeer>(offset);
2694            // Vector header
2695            let max_ordinal: u64 = self.max_ordinal_present();
2696            encoder.write_num(max_ordinal, offset);
2697            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2698            // Calling encoder.out_of_line_offset(0) is not allowed.
2699            if max_ordinal == 0 {
2700                return Ok(());
2701            }
2702            depth.increment()?;
2703            let envelope_size = 8;
2704            let bytes_len = max_ordinal as usize * envelope_size;
2705            #[allow(unused_variables)]
2706            let offset = encoder.out_of_line_offset(bytes_len);
2707            let mut _prev_end_offset: usize = 0;
2708            if 1 > max_ordinal {
2709                return Ok(());
2710            }
2711
2712            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2713            // are envelope_size bytes.
2714            let cur_offset: usize = (1 - 1) * envelope_size;
2715
2716            // Zero reserved fields.
2717            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2718
2719            // Safety:
2720            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2721            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2722            //   envelope_size bytes, there is always sufficient room.
2723            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth_le_common::Peer, D>(
2724            self.peer.as_ref().map(<fidl_fuchsia_bluetooth_le_common::Peer as fidl::encoding::ValueTypeMarker>::borrow),
2725            encoder, offset + cur_offset, depth
2726        )?;
2727
2728            _prev_end_offset = cur_offset + envelope_size;
2729            if 2 > max_ordinal {
2730                return Ok(());
2731            }
2732
2733            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2734            // are envelope_size bytes.
2735            let cur_offset: usize = (2 - 1) * envelope_size;
2736
2737            // Zero reserved fields.
2738            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2739
2740            // Safety:
2741            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2742            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2743            //   envelope_size bytes, there is always sufficient room.
2744            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth_common::Address, D>(
2745            self.address.as_ref().map(<fidl_fuchsia_bluetooth_common::Address as fidl::encoding::ValueTypeMarker>::borrow),
2746            encoder, offset + cur_offset, depth
2747        )?;
2748
2749            _prev_end_offset = cur_offset + envelope_size;
2750
2751            Ok(())
2752        }
2753    }
2754
2755    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScannedPeer {
2756        #[inline(always)]
2757        fn new_empty() -> Self {
2758            Self::default()
2759        }
2760
2761        unsafe fn decode(
2762            &mut self,
2763            decoder: &mut fidl::encoding::Decoder<'_, D>,
2764            offset: usize,
2765            mut depth: fidl::encoding::Depth,
2766        ) -> fidl::Result<()> {
2767            decoder.debug_check_bounds::<Self>(offset);
2768            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2769                None => return Err(fidl::Error::NotNullable),
2770                Some(len) => len,
2771            };
2772            // Calling decoder.out_of_line_offset(0) is not allowed.
2773            if len == 0 {
2774                return Ok(());
2775            };
2776            depth.increment()?;
2777            let envelope_size = 8;
2778            let bytes_len = len * envelope_size;
2779            let offset = decoder.out_of_line_offset(bytes_len)?;
2780            // Decode the envelope for each type.
2781            let mut _next_ordinal_to_read = 0;
2782            let mut next_offset = offset;
2783            let end_offset = offset + bytes_len;
2784            _next_ordinal_to_read += 1;
2785            if next_offset >= end_offset {
2786                return Ok(());
2787            }
2788
2789            // Decode unknown envelopes for gaps in ordinals.
2790            while _next_ordinal_to_read < 1 {
2791                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2792                _next_ordinal_to_read += 1;
2793                next_offset += envelope_size;
2794            }
2795
2796            let next_out_of_line = decoder.next_out_of_line();
2797            let handles_before = decoder.remaining_handles();
2798            if let Some((inlined, num_bytes, num_handles)) =
2799                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2800            {
2801                let member_inline_size = <fidl_fuchsia_bluetooth_le_common::Peer as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2802                if inlined != (member_inline_size <= 4) {
2803                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2804                }
2805                let inner_offset;
2806                let mut inner_depth = depth.clone();
2807                if inlined {
2808                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2809                    inner_offset = next_offset;
2810                } else {
2811                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2812                    inner_depth.increment()?;
2813                }
2814                let val_ref = self.peer.get_or_insert_with(|| {
2815                    fidl::new_empty!(fidl_fuchsia_bluetooth_le_common::Peer, D)
2816                });
2817                fidl::decode!(
2818                    fidl_fuchsia_bluetooth_le_common::Peer,
2819                    D,
2820                    val_ref,
2821                    decoder,
2822                    inner_offset,
2823                    inner_depth
2824                )?;
2825                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2826                {
2827                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2828                }
2829                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2830                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2831                }
2832            }
2833
2834            next_offset += envelope_size;
2835            _next_ordinal_to_read += 1;
2836            if next_offset >= end_offset {
2837                return Ok(());
2838            }
2839
2840            // Decode unknown envelopes for gaps in ordinals.
2841            while _next_ordinal_to_read < 2 {
2842                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2843                _next_ordinal_to_read += 1;
2844                next_offset += envelope_size;
2845            }
2846
2847            let next_out_of_line = decoder.next_out_of_line();
2848            let handles_before = decoder.remaining_handles();
2849            if let Some((inlined, num_bytes, num_handles)) =
2850                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2851            {
2852                let member_inline_size = <fidl_fuchsia_bluetooth_common::Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2853                if inlined != (member_inline_size <= 4) {
2854                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2855                }
2856                let inner_offset;
2857                let mut inner_depth = depth.clone();
2858                if inlined {
2859                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2860                    inner_offset = next_offset;
2861                } else {
2862                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2863                    inner_depth.increment()?;
2864                }
2865                let val_ref = self.address.get_or_insert_with(|| {
2866                    fidl::new_empty!(fidl_fuchsia_bluetooth_common::Address, D)
2867                });
2868                fidl::decode!(
2869                    fidl_fuchsia_bluetooth_common::Address,
2870                    D,
2871                    val_ref,
2872                    decoder,
2873                    inner_offset,
2874                    inner_depth
2875                )?;
2876                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2877                {
2878                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2879                }
2880                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2881                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2882                }
2883            }
2884
2885            next_offset += envelope_size;
2886
2887            // Decode the remaining unknown envelopes.
2888            while next_offset < end_offset {
2889                _next_ordinal_to_read += 1;
2890                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2891                next_offset += envelope_size;
2892            }
2893
2894            Ok(())
2895        }
2896    }
2897}