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