1#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub const FORMAT_MODIFIER_ARM_BCH_BIT: u64 = 2048;
12
13pub const FORMAT_MODIFIER_ARM_SPARSE_BIT: u64 = 64;
14
15pub const FORMAT_MODIFIER_ARM_SPLIT_BLOCK_BIT: u64 = 32;
16
17pub const FORMAT_MODIFIER_ARM_TE_BIT: u64 = 4096;
18
19pub const FORMAT_MODIFIER_ARM_TILED_HEADER_BIT: u64 = 8192;
20
21pub const FORMAT_MODIFIER_ARM_YUV_BIT: u64 = 16;
22
23pub const FORMAT_MODIFIER_INTEL_CCS_BIT: u64 = 16777216;
25
26pub const FORMAT_MODIFIER_VENDOR_ALLWINNER: u64 = 648518346341351424;
27
28pub const FORMAT_MODIFIER_VENDOR_AMD: u64 = 144115188075855872;
29
30pub const FORMAT_MODIFIER_VENDOR_AMLOGIC: u64 = 720575940379279360;
31
32pub const FORMAT_MODIFIER_VENDOR_ARM: u64 = 576460752303423488;
33
34pub const FORMAT_MODIFIER_VENDOR_BROADCOM: u64 = 504403158265495552;
35
36pub const FORMAT_MODIFIER_VENDOR_GOOGLE: u64 = 7421932185906577408;
37
38pub const FORMAT_MODIFIER_VENDOR_INTEL: u64 = 72057594037927936;
39
40pub const FORMAT_MODIFIER_VENDOR_NVIDIA: u64 = 216172782113783808;
41
42pub const FORMAT_MODIFIER_VENDOR_QCOM: u64 = 360287970189639680;
43
44pub const FORMAT_MODIFIER_VENDOR_SAMSUNG: u64 = 288230376151711744;
45
46pub const FORMAT_MODIFIER_VENDOR_VIVANTE: u64 = 432345564227567616;
47
48#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
72pub enum ColorSpace {
73 Invalid,
75 Srgb,
77 Rec601Ntsc,
79 Rec601NtscFullRange,
81 Rec601Pal,
83 Rec601PalFullRange,
85 Rec709,
87 Rec2020,
91 Rec2100,
97 Passthrough,
101 DoNotCare,
104 #[doc(hidden)]
105 __SourceBreaking { unknown_ordinal: u32 },
106}
107
108#[macro_export]
110macro_rules! ColorSpaceUnknown {
111 () => {
112 _
113 };
114}
115
116impl ColorSpace {
117 #[inline]
118 pub fn from_primitive(prim: u32) -> Option<Self> {
119 match prim {
120 0 => Some(Self::Invalid),
121 1 => Some(Self::Srgb),
122 2 => Some(Self::Rec601Ntsc),
123 3 => Some(Self::Rec601NtscFullRange),
124 4 => Some(Self::Rec601Pal),
125 5 => Some(Self::Rec601PalFullRange),
126 6 => Some(Self::Rec709),
127 7 => Some(Self::Rec2020),
128 8 => Some(Self::Rec2100),
129 9 => Some(Self::Passthrough),
130 4294967294 => Some(Self::DoNotCare),
131 _ => None,
132 }
133 }
134
135 #[inline]
136 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
137 match prim {
138 0 => Self::Invalid,
139 1 => Self::Srgb,
140 2 => Self::Rec601Ntsc,
141 3 => Self::Rec601NtscFullRange,
142 4 => Self::Rec601Pal,
143 5 => Self::Rec601PalFullRange,
144 6 => Self::Rec709,
145 7 => Self::Rec2020,
146 8 => Self::Rec2100,
147 9 => Self::Passthrough,
148 4294967294 => Self::DoNotCare,
149 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
150 }
151 }
152
153 #[inline]
154 pub fn unknown() -> Self {
155 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
156 }
157
158 #[inline]
159 pub const fn into_primitive(self) -> u32 {
160 match self {
161 Self::Invalid => 0,
162 Self::Srgb => 1,
163 Self::Rec601Ntsc => 2,
164 Self::Rec601NtscFullRange => 3,
165 Self::Rec601Pal => 4,
166 Self::Rec601PalFullRange => 5,
167 Self::Rec709 => 6,
168 Self::Rec2020 => 7,
169 Self::Rec2100 => 8,
170 Self::Passthrough => 9,
171 Self::DoNotCare => 4294967294,
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#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
193pub enum PixelFormat {
194 Invalid,
195 R8G8B8A8,
207 R8G8B8X8,
215 B8G8R8A8,
229 B8G8R8X8,
237 I420,
241 M420,
245 Nv12,
249 Yuy2,
253 Mjpeg,
255 Yv12,
262 B8G8R8,
268 R5G6B5,
274 R3G3B2,
280 R2G2B2X2,
294 L8,
300 R8,
304 R8G8,
308 A2R10G10B10,
320 A2B10G10R10,
332 P010,
341 R8G8B8,
345 DoNotCare,
349 #[doc(hidden)]
350 __SourceBreaking {
351 unknown_ordinal: u32,
352 },
353}
354
355#[macro_export]
357macro_rules! PixelFormatUnknown {
358 () => {
359 _
360 };
361}
362
363impl PixelFormat {
364 #[inline]
365 pub fn from_primitive(prim: u32) -> Option<Self> {
366 match prim {
367 0 => Some(Self::Invalid),
368 1 => Some(Self::R8G8B8A8),
369 119 => Some(Self::R8G8B8X8),
370 101 => Some(Self::B8G8R8A8),
371 120 => Some(Self::B8G8R8X8),
372 102 => Some(Self::I420),
373 103 => Some(Self::M420),
374 104 => Some(Self::Nv12),
375 105 => Some(Self::Yuy2),
376 106 => Some(Self::Mjpeg),
377 107 => Some(Self::Yv12),
378 108 => Some(Self::B8G8R8),
379 109 => Some(Self::R5G6B5),
380 110 => Some(Self::R3G3B2),
381 111 => Some(Self::R2G2B2X2),
382 112 => Some(Self::L8),
383 113 => Some(Self::R8),
384 114 => Some(Self::R8G8),
385 115 => Some(Self::A2R10G10B10),
386 116 => Some(Self::A2B10G10R10),
387 117 => Some(Self::P010),
388 118 => Some(Self::R8G8B8),
389 4294967294 => Some(Self::DoNotCare),
390 _ => None,
391 }
392 }
393
394 #[inline]
395 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
396 match prim {
397 0 => Self::Invalid,
398 1 => Self::R8G8B8A8,
399 119 => Self::R8G8B8X8,
400 101 => Self::B8G8R8A8,
401 120 => Self::B8G8R8X8,
402 102 => Self::I420,
403 103 => Self::M420,
404 104 => Self::Nv12,
405 105 => Self::Yuy2,
406 106 => Self::Mjpeg,
407 107 => Self::Yv12,
408 108 => Self::B8G8R8,
409 109 => Self::R5G6B5,
410 110 => Self::R3G3B2,
411 111 => Self::R2G2B2X2,
412 112 => Self::L8,
413 113 => Self::R8,
414 114 => Self::R8G8,
415 115 => Self::A2R10G10B10,
416 116 => Self::A2B10G10R10,
417 117 => Self::P010,
418 118 => Self::R8G8B8,
419 4294967294 => Self::DoNotCare,
420 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
421 }
422 }
423
424 #[inline]
425 pub fn unknown() -> Self {
426 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
427 }
428
429 #[inline]
430 pub const fn into_primitive(self) -> u32 {
431 match self {
432 Self::Invalid => 0,
433 Self::R8G8B8A8 => 1,
434 Self::R8G8B8X8 => 119,
435 Self::B8G8R8A8 => 101,
436 Self::B8G8R8X8 => 120,
437 Self::I420 => 102,
438 Self::M420 => 103,
439 Self::Nv12 => 104,
440 Self::Yuy2 => 105,
441 Self::Mjpeg => 106,
442 Self::Yv12 => 107,
443 Self::B8G8R8 => 108,
444 Self::R5G6B5 => 109,
445 Self::R3G3B2 => 110,
446 Self::R2G2B2X2 => 111,
447 Self::L8 => 112,
448 Self::R8 => 113,
449 Self::R8G8 => 114,
450 Self::A2R10G10B10 => 115,
451 Self::A2B10G10R10 => 116,
452 Self::P010 => 117,
453 Self::R8G8B8 => 118,
454 Self::DoNotCare => 4294967294,
455 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
456 }
457 }
458
459 #[inline]
460 pub fn is_unknown(&self) -> bool {
461 match self {
462 Self::__SourceBreaking { unknown_ordinal: _ } => true,
463 _ => false,
464 }
465 }
466}
467
468#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
503pub enum PixelFormatModifier {
504 DoNotCare,
505 Invalid,
506 Linear,
507 IntelI915XTiled,
508 IntelI915YTiled,
509 IntelI915YfTiled,
510 IntelI915YTiledCcs,
511 IntelI915YfTiledCcs,
512 ArmAfbc16X16,
513 ArmAfbc32X8,
514 ArmLinearTe,
515 ArmAfbc16X16Te,
516 ArmAfbc32X8Te,
517 ArmAfbc16X16YuvTiledHeader,
518 ArmAfbc16X16SplitBlockSparseYuv,
519 ArmAfbc16X16SplitBlockSparseYuvTe,
520 ArmAfbc16X16SplitBlockSparseYuvTiledHeader,
521 ArmAfbc16X16SplitBlockSparseYuvTeTiledHeader,
522 GoogleGoldfishOptimal,
523 #[doc(hidden)]
524 __SourceBreaking {
525 unknown_ordinal: u64,
526 },
527}
528
529#[macro_export]
531macro_rules! PixelFormatModifierUnknown {
532 () => {
533 _
534 };
535}
536
537impl PixelFormatModifier {
538 #[inline]
539 pub fn from_primitive(prim: u64) -> Option<Self> {
540 match prim {
541 72057594037927934 => Some(Self::DoNotCare),
542 72057594037927935 => Some(Self::Invalid),
543 0 => Some(Self::Linear),
544 72057594037927937 => Some(Self::IntelI915XTiled),
545 72057594037927938 => Some(Self::IntelI915YTiled),
546 72057594037927939 => Some(Self::IntelI915YfTiled),
547 72057594054705154 => Some(Self::IntelI915YTiledCcs),
548 72057594054705155 => Some(Self::IntelI915YfTiledCcs),
549 576460752303423489 => Some(Self::ArmAfbc16X16),
550 576460752303423490 => Some(Self::ArmAfbc32X8),
551 576460752303427584 => Some(Self::ArmLinearTe),
552 576460752303427585 => Some(Self::ArmAfbc16X16Te),
553 576460752303427586 => Some(Self::ArmAfbc32X8Te),
554 576460752303431697 => Some(Self::ArmAfbc16X16YuvTiledHeader),
555 576460752303423601 => Some(Self::ArmAfbc16X16SplitBlockSparseYuv),
556 576460752303427697 => Some(Self::ArmAfbc16X16SplitBlockSparseYuvTe),
557 576460752303431793 => Some(Self::ArmAfbc16X16SplitBlockSparseYuvTiledHeader),
558 576460752303435889 => Some(Self::ArmAfbc16X16SplitBlockSparseYuvTeTiledHeader),
559 7421932185906577409 => Some(Self::GoogleGoldfishOptimal),
560 _ => None,
561 }
562 }
563
564 #[inline]
565 pub fn from_primitive_allow_unknown(prim: u64) -> Self {
566 match prim {
567 72057594037927934 => Self::DoNotCare,
568 72057594037927935 => Self::Invalid,
569 0 => Self::Linear,
570 72057594037927937 => Self::IntelI915XTiled,
571 72057594037927938 => Self::IntelI915YTiled,
572 72057594037927939 => Self::IntelI915YfTiled,
573 72057594054705154 => Self::IntelI915YTiledCcs,
574 72057594054705155 => Self::IntelI915YfTiledCcs,
575 576460752303423489 => Self::ArmAfbc16X16,
576 576460752303423490 => Self::ArmAfbc32X8,
577 576460752303427584 => Self::ArmLinearTe,
578 576460752303427585 => Self::ArmAfbc16X16Te,
579 576460752303427586 => Self::ArmAfbc32X8Te,
580 576460752303431697 => Self::ArmAfbc16X16YuvTiledHeader,
581 576460752303423601 => Self::ArmAfbc16X16SplitBlockSparseYuv,
582 576460752303427697 => Self::ArmAfbc16X16SplitBlockSparseYuvTe,
583 576460752303431793 => Self::ArmAfbc16X16SplitBlockSparseYuvTiledHeader,
584 576460752303435889 => Self::ArmAfbc16X16SplitBlockSparseYuvTeTiledHeader,
585 7421932185906577409 => Self::GoogleGoldfishOptimal,
586 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
587 }
588 }
589
590 #[inline]
591 pub fn unknown() -> Self {
592 Self::__SourceBreaking { unknown_ordinal: 0xffffffffffffffff }
593 }
594
595 #[inline]
596 pub const fn into_primitive(self) -> u64 {
597 match self {
598 Self::DoNotCare => 72057594037927934,
599 Self::Invalid => 72057594037927935,
600 Self::Linear => 0,
601 Self::IntelI915XTiled => 72057594037927937,
602 Self::IntelI915YTiled => 72057594037927938,
603 Self::IntelI915YfTiled => 72057594037927939,
604 Self::IntelI915YTiledCcs => 72057594054705154,
605 Self::IntelI915YfTiledCcs => 72057594054705155,
606 Self::ArmAfbc16X16 => 576460752303423489,
607 Self::ArmAfbc32X8 => 576460752303423490,
608 Self::ArmLinearTe => 576460752303427584,
609 Self::ArmAfbc16X16Te => 576460752303427585,
610 Self::ArmAfbc32X8Te => 576460752303427586,
611 Self::ArmAfbc16X16YuvTiledHeader => 576460752303431697,
612 Self::ArmAfbc16X16SplitBlockSparseYuv => 576460752303423601,
613 Self::ArmAfbc16X16SplitBlockSparseYuvTe => 576460752303427697,
614 Self::ArmAfbc16X16SplitBlockSparseYuvTiledHeader => 576460752303431793,
615 Self::ArmAfbc16X16SplitBlockSparseYuvTeTiledHeader => 576460752303435889,
616 Self::GoogleGoldfishOptimal => 7421932185906577409,
617 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
618 }
619 }
620
621 #[inline]
622 pub fn is_unknown(&self) -> bool {
623 match self {
624 Self::__SourceBreaking { unknown_ordinal: _ } => true,
625 _ => false,
626 }
627 }
628}
629
630#[derive(Clone, Debug, Default, PartialEq)]
632pub struct ImageFormat {
633 pub pixel_format: Option<PixelFormat>,
635 pub pixel_format_modifier: Option<PixelFormatModifier>,
637 pub color_space: Option<ColorSpace>,
639 pub size: Option<fidl_fuchsia_math__common::SizeU>,
651 pub bytes_per_row: Option<u32>,
693 pub display_rect: Option<fidl_fuchsia_math__common::RectU>,
729 pub valid_size: Option<fidl_fuchsia_math__common::SizeU>,
750 pub pixel_aspect_ratio: Option<fidl_fuchsia_math__common::SizeU>,
762 #[doc(hidden)]
763 pub __source_breaking: fidl::marker::SourceBreaking,
764}
765
766impl fidl::Persistable for ImageFormat {}
767
768mod internal {
769 use super::*;
770 unsafe impl fidl::encoding::TypeMarker for ColorSpace {
771 type Owned = Self;
772
773 #[inline(always)]
774 fn inline_align(_context: fidl::encoding::Context) -> usize {
775 std::mem::align_of::<u32>()
776 }
777
778 #[inline(always)]
779 fn inline_size(_context: fidl::encoding::Context) -> usize {
780 std::mem::size_of::<u32>()
781 }
782
783 #[inline(always)]
784 fn encode_is_copy() -> bool {
785 false
786 }
787
788 #[inline(always)]
789 fn decode_is_copy() -> bool {
790 false
791 }
792 }
793
794 impl fidl::encoding::ValueTypeMarker for ColorSpace {
795 type Borrowed<'a> = Self;
796 #[inline(always)]
797 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
798 *value
799 }
800 }
801
802 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ColorSpace {
803 #[inline]
804 unsafe fn encode(
805 self,
806 encoder: &mut fidl::encoding::Encoder<'_, D>,
807 offset: usize,
808 _depth: fidl::encoding::Depth,
809 ) -> fidl::Result<()> {
810 encoder.debug_check_bounds::<Self>(offset);
811 encoder.write_num(self.into_primitive(), offset);
812 Ok(())
813 }
814 }
815
816 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ColorSpace {
817 #[inline(always)]
818 fn new_empty() -> Self {
819 Self::unknown()
820 }
821
822 #[inline]
823 unsafe fn decode(
824 &mut self,
825 decoder: &mut fidl::encoding::Decoder<'_, D>,
826 offset: usize,
827 _depth: fidl::encoding::Depth,
828 ) -> fidl::Result<()> {
829 decoder.debug_check_bounds::<Self>(offset);
830 let prim = decoder.read_num::<u32>(offset);
831
832 *self = Self::from_primitive_allow_unknown(prim);
833 Ok(())
834 }
835 }
836 unsafe impl fidl::encoding::TypeMarker for PixelFormat {
837 type Owned = Self;
838
839 #[inline(always)]
840 fn inline_align(_context: fidl::encoding::Context) -> usize {
841 std::mem::align_of::<u32>()
842 }
843
844 #[inline(always)]
845 fn inline_size(_context: fidl::encoding::Context) -> usize {
846 std::mem::size_of::<u32>()
847 }
848
849 #[inline(always)]
850 fn encode_is_copy() -> bool {
851 false
852 }
853
854 #[inline(always)]
855 fn decode_is_copy() -> bool {
856 false
857 }
858 }
859
860 impl fidl::encoding::ValueTypeMarker for PixelFormat {
861 type Borrowed<'a> = Self;
862 #[inline(always)]
863 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
864 *value
865 }
866 }
867
868 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for PixelFormat {
869 #[inline]
870 unsafe fn encode(
871 self,
872 encoder: &mut fidl::encoding::Encoder<'_, D>,
873 offset: usize,
874 _depth: fidl::encoding::Depth,
875 ) -> fidl::Result<()> {
876 encoder.debug_check_bounds::<Self>(offset);
877 encoder.write_num(self.into_primitive(), offset);
878 Ok(())
879 }
880 }
881
882 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PixelFormat {
883 #[inline(always)]
884 fn new_empty() -> Self {
885 Self::unknown()
886 }
887
888 #[inline]
889 unsafe fn decode(
890 &mut self,
891 decoder: &mut fidl::encoding::Decoder<'_, D>,
892 offset: usize,
893 _depth: fidl::encoding::Depth,
894 ) -> fidl::Result<()> {
895 decoder.debug_check_bounds::<Self>(offset);
896 let prim = decoder.read_num::<u32>(offset);
897
898 *self = Self::from_primitive_allow_unknown(prim);
899 Ok(())
900 }
901 }
902 unsafe impl fidl::encoding::TypeMarker for PixelFormatModifier {
903 type Owned = Self;
904
905 #[inline(always)]
906 fn inline_align(_context: fidl::encoding::Context) -> usize {
907 std::mem::align_of::<u64>()
908 }
909
910 #[inline(always)]
911 fn inline_size(_context: fidl::encoding::Context) -> usize {
912 std::mem::size_of::<u64>()
913 }
914
915 #[inline(always)]
916 fn encode_is_copy() -> bool {
917 false
918 }
919
920 #[inline(always)]
921 fn decode_is_copy() -> bool {
922 false
923 }
924 }
925
926 impl fidl::encoding::ValueTypeMarker for PixelFormatModifier {
927 type Borrowed<'a> = Self;
928 #[inline(always)]
929 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
930 *value
931 }
932 }
933
934 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
935 for PixelFormatModifier
936 {
937 #[inline]
938 unsafe fn encode(
939 self,
940 encoder: &mut fidl::encoding::Encoder<'_, D>,
941 offset: usize,
942 _depth: fidl::encoding::Depth,
943 ) -> fidl::Result<()> {
944 encoder.debug_check_bounds::<Self>(offset);
945 encoder.write_num(self.into_primitive(), offset);
946 Ok(())
947 }
948 }
949
950 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PixelFormatModifier {
951 #[inline(always)]
952 fn new_empty() -> Self {
953 Self::unknown()
954 }
955
956 #[inline]
957 unsafe fn decode(
958 &mut self,
959 decoder: &mut fidl::encoding::Decoder<'_, D>,
960 offset: usize,
961 _depth: fidl::encoding::Depth,
962 ) -> fidl::Result<()> {
963 decoder.debug_check_bounds::<Self>(offset);
964 let prim = decoder.read_num::<u64>(offset);
965
966 *self = Self::from_primitive_allow_unknown(prim);
967 Ok(())
968 }
969 }
970
971 impl ImageFormat {
972 #[inline(always)]
973 fn max_ordinal_present(&self) -> u64 {
974 if let Some(_) = self.pixel_aspect_ratio {
975 return 8;
976 }
977 if let Some(_) = self.valid_size {
978 return 7;
979 }
980 if let Some(_) = self.display_rect {
981 return 6;
982 }
983 if let Some(_) = self.bytes_per_row {
984 return 5;
985 }
986 if let Some(_) = self.size {
987 return 4;
988 }
989 if let Some(_) = self.color_space {
990 return 3;
991 }
992 if let Some(_) = self.pixel_format_modifier {
993 return 2;
994 }
995 if let Some(_) = self.pixel_format {
996 return 1;
997 }
998 0
999 }
1000 }
1001
1002 impl fidl::encoding::ValueTypeMarker for ImageFormat {
1003 type Borrowed<'a> = &'a Self;
1004 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1005 value
1006 }
1007 }
1008
1009 unsafe impl fidl::encoding::TypeMarker for ImageFormat {
1010 type Owned = Self;
1011
1012 #[inline(always)]
1013 fn inline_align(_context: fidl::encoding::Context) -> usize {
1014 8
1015 }
1016
1017 #[inline(always)]
1018 fn inline_size(_context: fidl::encoding::Context) -> usize {
1019 16
1020 }
1021 }
1022
1023 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ImageFormat, D>
1024 for &ImageFormat
1025 {
1026 unsafe fn encode(
1027 self,
1028 encoder: &mut fidl::encoding::Encoder<'_, D>,
1029 offset: usize,
1030 mut depth: fidl::encoding::Depth,
1031 ) -> fidl::Result<()> {
1032 encoder.debug_check_bounds::<ImageFormat>(offset);
1033 let max_ordinal: u64 = self.max_ordinal_present();
1035 encoder.write_num(max_ordinal, offset);
1036 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1037 if max_ordinal == 0 {
1039 return Ok(());
1040 }
1041 depth.increment()?;
1042 let envelope_size = 8;
1043 let bytes_len = max_ordinal as usize * envelope_size;
1044 #[allow(unused_variables)]
1045 let offset = encoder.out_of_line_offset(bytes_len);
1046 let mut _prev_end_offset: usize = 0;
1047 if 1 > max_ordinal {
1048 return Ok(());
1049 }
1050
1051 let cur_offset: usize = (1 - 1) * envelope_size;
1054
1055 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1057
1058 fidl::encoding::encode_in_envelope_optional::<PixelFormat, D>(
1063 self.pixel_format
1064 .as_ref()
1065 .map(<PixelFormat as fidl::encoding::ValueTypeMarker>::borrow),
1066 encoder,
1067 offset + cur_offset,
1068 depth,
1069 )?;
1070
1071 _prev_end_offset = cur_offset + envelope_size;
1072 if 2 > max_ordinal {
1073 return Ok(());
1074 }
1075
1076 let cur_offset: usize = (2 - 1) * envelope_size;
1079
1080 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1082
1083 fidl::encoding::encode_in_envelope_optional::<PixelFormatModifier, D>(
1088 self.pixel_format_modifier
1089 .as_ref()
1090 .map(<PixelFormatModifier as fidl::encoding::ValueTypeMarker>::borrow),
1091 encoder,
1092 offset + cur_offset,
1093 depth,
1094 )?;
1095
1096 _prev_end_offset = cur_offset + envelope_size;
1097 if 3 > max_ordinal {
1098 return Ok(());
1099 }
1100
1101 let cur_offset: usize = (3 - 1) * envelope_size;
1104
1105 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1107
1108 fidl::encoding::encode_in_envelope_optional::<ColorSpace, D>(
1113 self.color_space
1114 .as_ref()
1115 .map(<ColorSpace as fidl::encoding::ValueTypeMarker>::borrow),
1116 encoder,
1117 offset + cur_offset,
1118 depth,
1119 )?;
1120
1121 _prev_end_offset = cur_offset + envelope_size;
1122 if 4 > max_ordinal {
1123 return Ok(());
1124 }
1125
1126 let cur_offset: usize = (4 - 1) * envelope_size;
1129
1130 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1132
1133 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_math__common::SizeU, D>(
1138 self.size.as_ref().map(
1139 <fidl_fuchsia_math__common::SizeU as fidl::encoding::ValueTypeMarker>::borrow,
1140 ),
1141 encoder,
1142 offset + cur_offset,
1143 depth,
1144 )?;
1145
1146 _prev_end_offset = cur_offset + envelope_size;
1147 if 5 > max_ordinal {
1148 return Ok(());
1149 }
1150
1151 let cur_offset: usize = (5 - 1) * envelope_size;
1154
1155 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1157
1158 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1163 self.bytes_per_row.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1164 encoder,
1165 offset + cur_offset,
1166 depth,
1167 )?;
1168
1169 _prev_end_offset = cur_offset + envelope_size;
1170 if 6 > max_ordinal {
1171 return Ok(());
1172 }
1173
1174 let cur_offset: usize = (6 - 1) * envelope_size;
1177
1178 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1180
1181 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_math__common::RectU, D>(
1186 self.display_rect.as_ref().map(
1187 <fidl_fuchsia_math__common::RectU as fidl::encoding::ValueTypeMarker>::borrow,
1188 ),
1189 encoder,
1190 offset + cur_offset,
1191 depth,
1192 )?;
1193
1194 _prev_end_offset = cur_offset + envelope_size;
1195 if 7 > max_ordinal {
1196 return Ok(());
1197 }
1198
1199 let cur_offset: usize = (7 - 1) * envelope_size;
1202
1203 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1205
1206 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_math__common::SizeU, D>(
1211 self.valid_size.as_ref().map(
1212 <fidl_fuchsia_math__common::SizeU as fidl::encoding::ValueTypeMarker>::borrow,
1213 ),
1214 encoder,
1215 offset + cur_offset,
1216 depth,
1217 )?;
1218
1219 _prev_end_offset = cur_offset + envelope_size;
1220 if 8 > max_ordinal {
1221 return Ok(());
1222 }
1223
1224 let cur_offset: usize = (8 - 1) * envelope_size;
1227
1228 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1230
1231 fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_math__common::SizeU, D>(
1236 self.pixel_aspect_ratio.as_ref().map(
1237 <fidl_fuchsia_math__common::SizeU as fidl::encoding::ValueTypeMarker>::borrow,
1238 ),
1239 encoder,
1240 offset + cur_offset,
1241 depth,
1242 )?;
1243
1244 _prev_end_offset = cur_offset + envelope_size;
1245
1246 Ok(())
1247 }
1248 }
1249
1250 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ImageFormat {
1251 #[inline(always)]
1252 fn new_empty() -> Self {
1253 Self::default()
1254 }
1255
1256 unsafe fn decode(
1257 &mut self,
1258 decoder: &mut fidl::encoding::Decoder<'_, D>,
1259 offset: usize,
1260 mut depth: fidl::encoding::Depth,
1261 ) -> fidl::Result<()> {
1262 decoder.debug_check_bounds::<Self>(offset);
1263 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1264 None => return Err(fidl::Error::NotNullable),
1265 Some(len) => len,
1266 };
1267 if len == 0 {
1269 return Ok(());
1270 };
1271 depth.increment()?;
1272 let envelope_size = 8;
1273 let bytes_len = len * envelope_size;
1274 let offset = decoder.out_of_line_offset(bytes_len)?;
1275 let mut _next_ordinal_to_read = 0;
1277 let mut next_offset = offset;
1278 let end_offset = offset + bytes_len;
1279 _next_ordinal_to_read += 1;
1280 if next_offset >= end_offset {
1281 return Ok(());
1282 }
1283
1284 while _next_ordinal_to_read < 1 {
1286 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1287 _next_ordinal_to_read += 1;
1288 next_offset += envelope_size;
1289 }
1290
1291 let next_out_of_line = decoder.next_out_of_line();
1292 let handles_before = decoder.remaining_handles();
1293 if let Some((inlined, num_bytes, num_handles)) =
1294 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1295 {
1296 let member_inline_size =
1297 <PixelFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1298 if inlined != (member_inline_size <= 4) {
1299 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1300 }
1301 let inner_offset;
1302 let mut inner_depth = depth.clone();
1303 if inlined {
1304 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1305 inner_offset = next_offset;
1306 } else {
1307 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1308 inner_depth.increment()?;
1309 }
1310 let val_ref =
1311 self.pixel_format.get_or_insert_with(|| fidl::new_empty!(PixelFormat, D));
1312 fidl::decode!(PixelFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
1313 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1314 {
1315 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1316 }
1317 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1318 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1319 }
1320 }
1321
1322 next_offset += envelope_size;
1323 _next_ordinal_to_read += 1;
1324 if next_offset >= end_offset {
1325 return Ok(());
1326 }
1327
1328 while _next_ordinal_to_read < 2 {
1330 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1331 _next_ordinal_to_read += 1;
1332 next_offset += envelope_size;
1333 }
1334
1335 let next_out_of_line = decoder.next_out_of_line();
1336 let handles_before = decoder.remaining_handles();
1337 if let Some((inlined, num_bytes, num_handles)) =
1338 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1339 {
1340 let member_inline_size =
1341 <PixelFormatModifier as fidl::encoding::TypeMarker>::inline_size(
1342 decoder.context,
1343 );
1344 if inlined != (member_inline_size <= 4) {
1345 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1346 }
1347 let inner_offset;
1348 let mut inner_depth = depth.clone();
1349 if inlined {
1350 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1351 inner_offset = next_offset;
1352 } else {
1353 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1354 inner_depth.increment()?;
1355 }
1356 let val_ref = self
1357 .pixel_format_modifier
1358 .get_or_insert_with(|| fidl::new_empty!(PixelFormatModifier, D));
1359 fidl::decode!(PixelFormatModifier, D, val_ref, decoder, inner_offset, inner_depth)?;
1360 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1361 {
1362 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1363 }
1364 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1365 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1366 }
1367 }
1368
1369 next_offset += envelope_size;
1370 _next_ordinal_to_read += 1;
1371 if next_offset >= end_offset {
1372 return Ok(());
1373 }
1374
1375 while _next_ordinal_to_read < 3 {
1377 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1378 _next_ordinal_to_read += 1;
1379 next_offset += envelope_size;
1380 }
1381
1382 let next_out_of_line = decoder.next_out_of_line();
1383 let handles_before = decoder.remaining_handles();
1384 if let Some((inlined, num_bytes, num_handles)) =
1385 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1386 {
1387 let member_inline_size =
1388 <ColorSpace as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1389 if inlined != (member_inline_size <= 4) {
1390 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1391 }
1392 let inner_offset;
1393 let mut inner_depth = depth.clone();
1394 if inlined {
1395 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1396 inner_offset = next_offset;
1397 } else {
1398 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1399 inner_depth.increment()?;
1400 }
1401 let val_ref =
1402 self.color_space.get_or_insert_with(|| fidl::new_empty!(ColorSpace, D));
1403 fidl::decode!(ColorSpace, D, val_ref, decoder, inner_offset, inner_depth)?;
1404 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1405 {
1406 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1407 }
1408 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1409 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1410 }
1411 }
1412
1413 next_offset += envelope_size;
1414 _next_ordinal_to_read += 1;
1415 if next_offset >= end_offset {
1416 return Ok(());
1417 }
1418
1419 while _next_ordinal_to_read < 4 {
1421 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1422 _next_ordinal_to_read += 1;
1423 next_offset += envelope_size;
1424 }
1425
1426 let next_out_of_line = decoder.next_out_of_line();
1427 let handles_before = decoder.remaining_handles();
1428 if let Some((inlined, num_bytes, num_handles)) =
1429 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1430 {
1431 let member_inline_size =
1432 <fidl_fuchsia_math__common::SizeU as fidl::encoding::TypeMarker>::inline_size(
1433 decoder.context,
1434 );
1435 if inlined != (member_inline_size <= 4) {
1436 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1437 }
1438 let inner_offset;
1439 let mut inner_depth = depth.clone();
1440 if inlined {
1441 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1442 inner_offset = next_offset;
1443 } else {
1444 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1445 inner_depth.increment()?;
1446 }
1447 let val_ref = self
1448 .size
1449 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_math__common::SizeU, D));
1450 fidl::decode!(
1451 fidl_fuchsia_math__common::SizeU,
1452 D,
1453 val_ref,
1454 decoder,
1455 inner_offset,
1456 inner_depth
1457 )?;
1458 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1459 {
1460 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1461 }
1462 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1463 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1464 }
1465 }
1466
1467 next_offset += envelope_size;
1468 _next_ordinal_to_read += 1;
1469 if next_offset >= end_offset {
1470 return Ok(());
1471 }
1472
1473 while _next_ordinal_to_read < 5 {
1475 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1476 _next_ordinal_to_read += 1;
1477 next_offset += envelope_size;
1478 }
1479
1480 let next_out_of_line = decoder.next_out_of_line();
1481 let handles_before = decoder.remaining_handles();
1482 if let Some((inlined, num_bytes, num_handles)) =
1483 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1484 {
1485 let member_inline_size =
1486 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1487 if inlined != (member_inline_size <= 4) {
1488 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1489 }
1490 let inner_offset;
1491 let mut inner_depth = depth.clone();
1492 if inlined {
1493 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1494 inner_offset = next_offset;
1495 } else {
1496 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1497 inner_depth.increment()?;
1498 }
1499 let val_ref = self.bytes_per_row.get_or_insert_with(|| fidl::new_empty!(u32, D));
1500 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1501 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1502 {
1503 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1504 }
1505 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1506 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1507 }
1508 }
1509
1510 next_offset += envelope_size;
1511 _next_ordinal_to_read += 1;
1512 if next_offset >= end_offset {
1513 return Ok(());
1514 }
1515
1516 while _next_ordinal_to_read < 6 {
1518 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1519 _next_ordinal_to_read += 1;
1520 next_offset += envelope_size;
1521 }
1522
1523 let next_out_of_line = decoder.next_out_of_line();
1524 let handles_before = decoder.remaining_handles();
1525 if let Some((inlined, num_bytes, num_handles)) =
1526 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1527 {
1528 let member_inline_size =
1529 <fidl_fuchsia_math__common::RectU as fidl::encoding::TypeMarker>::inline_size(
1530 decoder.context,
1531 );
1532 if inlined != (member_inline_size <= 4) {
1533 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1534 }
1535 let inner_offset;
1536 let mut inner_depth = depth.clone();
1537 if inlined {
1538 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1539 inner_offset = next_offset;
1540 } else {
1541 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1542 inner_depth.increment()?;
1543 }
1544 let val_ref = self
1545 .display_rect
1546 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_math__common::RectU, D));
1547 fidl::decode!(
1548 fidl_fuchsia_math__common::RectU,
1549 D,
1550 val_ref,
1551 decoder,
1552 inner_offset,
1553 inner_depth
1554 )?;
1555 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1556 {
1557 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1558 }
1559 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1560 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1561 }
1562 }
1563
1564 next_offset += envelope_size;
1565 _next_ordinal_to_read += 1;
1566 if next_offset >= end_offset {
1567 return Ok(());
1568 }
1569
1570 while _next_ordinal_to_read < 7 {
1572 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1573 _next_ordinal_to_read += 1;
1574 next_offset += envelope_size;
1575 }
1576
1577 let next_out_of_line = decoder.next_out_of_line();
1578 let handles_before = decoder.remaining_handles();
1579 if let Some((inlined, num_bytes, num_handles)) =
1580 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1581 {
1582 let member_inline_size =
1583 <fidl_fuchsia_math__common::SizeU as fidl::encoding::TypeMarker>::inline_size(
1584 decoder.context,
1585 );
1586 if inlined != (member_inline_size <= 4) {
1587 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1588 }
1589 let inner_offset;
1590 let mut inner_depth = depth.clone();
1591 if inlined {
1592 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1593 inner_offset = next_offset;
1594 } else {
1595 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1596 inner_depth.increment()?;
1597 }
1598 let val_ref = self
1599 .valid_size
1600 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_math__common::SizeU, D));
1601 fidl::decode!(
1602 fidl_fuchsia_math__common::SizeU,
1603 D,
1604 val_ref,
1605 decoder,
1606 inner_offset,
1607 inner_depth
1608 )?;
1609 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1610 {
1611 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1612 }
1613 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1614 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1615 }
1616 }
1617
1618 next_offset += envelope_size;
1619 _next_ordinal_to_read += 1;
1620 if next_offset >= end_offset {
1621 return Ok(());
1622 }
1623
1624 while _next_ordinal_to_read < 8 {
1626 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1627 _next_ordinal_to_read += 1;
1628 next_offset += envelope_size;
1629 }
1630
1631 let next_out_of_line = decoder.next_out_of_line();
1632 let handles_before = decoder.remaining_handles();
1633 if let Some((inlined, num_bytes, num_handles)) =
1634 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1635 {
1636 let member_inline_size =
1637 <fidl_fuchsia_math__common::SizeU as fidl::encoding::TypeMarker>::inline_size(
1638 decoder.context,
1639 );
1640 if inlined != (member_inline_size <= 4) {
1641 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1642 }
1643 let inner_offset;
1644 let mut inner_depth = depth.clone();
1645 if inlined {
1646 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1647 inner_offset = next_offset;
1648 } else {
1649 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1650 inner_depth.increment()?;
1651 }
1652 let val_ref = self
1653 .pixel_aspect_ratio
1654 .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_math__common::SizeU, D));
1655 fidl::decode!(
1656 fidl_fuchsia_math__common::SizeU,
1657 D,
1658 val_ref,
1659 decoder,
1660 inner_offset,
1661 inner_depth
1662 )?;
1663 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1664 {
1665 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1666 }
1667 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1668 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1669 }
1670 }
1671
1672 next_offset += envelope_size;
1673
1674 while next_offset < end_offset {
1676 _next_ordinal_to_read += 1;
1677 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1678 next_offset += envelope_size;
1679 }
1680
1681 Ok(())
1682 }
1683 }
1684}