Skip to main content

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