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