1#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10use futures::future::{self, MaybeDone, TryFutureExt};
11use zx_status;
12
13pub type EncryptionInitVector = Vec<u8>;
14
15pub type EncryptionKeyId = Vec<u8>;
16
17pub type EncryptionScheme = String;
19
20pub const ENCRYPTION_SCHEME_CBC1: &str = "cbc1";
21
22pub const ENCRYPTION_SCHEME_CBCS: &str = "cbcs";
23
24pub const ENCRYPTION_SCHEME_CENC: &str = "cenc";
25
26pub const ENCRYPTION_SCHEME_CENS: &str = "cens";
27
28pub const MAX_ENCRYPTION_SCHEME_SIZE: u32 = 4;
30
31pub const MAX_INIT_VECTOR_SIZE: u32 = 16;
33
34pub const MAX_KEY_ID_SIZE: u32 = 16;
36
37pub const MAX_SUBSAMPLE_ENTRIES: u32 = 16;
39
40#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
45#[repr(C)]
46pub struct EncryptionPattern {
47 pub clear_blocks: u32,
48 pub encrypted_blocks: u32,
49}
50
51impl fidl::Persistable for EncryptionPattern {}
52
53#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
57#[repr(C)]
58pub struct EncryptionSubsampleEntry {
59 pub clear_bytes: u32,
60 pub encrypted_bytes: u32,
61}
62
63impl fidl::Persistable for EncryptionSubsampleEntry {}
64
65#[derive(Clone, Debug, Default, PartialEq)]
70pub struct Encryption {
71 pub scheme: Option<String>,
80 pub default_key_id: Option<Vec<u8>>,
86 pub default_init_vector: Option<Vec<u8>>,
94 pub default_pattern: Option<EncryptionPattern>,
101 #[doc(hidden)]
102 pub __source_breaking: fidl::marker::SourceBreaking,
103}
104
105impl fidl::Persistable for Encryption {}
106
107#[derive(Clone, Debug, Default, PartialEq)]
109pub struct PacketEncryptionProperties {
110 pub is_encrypted: Option<bool>,
112 pub key_id: Option<Vec<u8>>,
114 pub init_vector: Option<Vec<u8>>,
116 pub pattern: Option<EncryptionPattern>,
118 pub subsamples: Option<Vec<EncryptionSubsampleEntry>>,
121 #[doc(hidden)]
122 pub __source_breaking: fidl::marker::SourceBreaking,
123}
124
125impl fidl::Persistable for PacketEncryptionProperties {}
126
127mod internal {
128 use super::*;
129
130 impl fidl::encoding::ValueTypeMarker for EncryptionPattern {
131 type Borrowed<'a> = &'a Self;
132 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
133 value
134 }
135 }
136
137 unsafe impl fidl::encoding::TypeMarker for EncryptionPattern {
138 type Owned = Self;
139
140 #[inline(always)]
141 fn inline_align(_context: fidl::encoding::Context) -> usize {
142 4
143 }
144
145 #[inline(always)]
146 fn inline_size(_context: fidl::encoding::Context) -> usize {
147 8
148 }
149 #[inline(always)]
150 fn encode_is_copy() -> bool {
151 true
152 }
153
154 #[inline(always)]
155 fn decode_is_copy() -> bool {
156 true
157 }
158 }
159
160 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EncryptionPattern, D>
161 for &EncryptionPattern
162 {
163 #[inline]
164 unsafe fn encode(
165 self,
166 encoder: &mut fidl::encoding::Encoder<'_, D>,
167 offset: usize,
168 _depth: fidl::encoding::Depth,
169 ) -> fidl::Result<()> {
170 encoder.debug_check_bounds::<EncryptionPattern>(offset);
171 unsafe {
172 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
174 (buf_ptr as *mut EncryptionPattern)
175 .write_unaligned((self as *const EncryptionPattern).read());
176 }
179 Ok(())
180 }
181 }
182 unsafe impl<
183 D: fidl::encoding::ResourceDialect,
184 T0: fidl::encoding::Encode<u32, D>,
185 T1: fidl::encoding::Encode<u32, D>,
186 > fidl::encoding::Encode<EncryptionPattern, D> for (T0, T1)
187 {
188 #[inline]
189 unsafe fn encode(
190 self,
191 encoder: &mut fidl::encoding::Encoder<'_, D>,
192 offset: usize,
193 depth: fidl::encoding::Depth,
194 ) -> fidl::Result<()> {
195 encoder.debug_check_bounds::<EncryptionPattern>(offset);
196 self.0.encode(encoder, offset + 0, depth)?;
200 self.1.encode(encoder, offset + 4, depth)?;
201 Ok(())
202 }
203 }
204
205 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncryptionPattern {
206 #[inline(always)]
207 fn new_empty() -> Self {
208 Self {
209 clear_blocks: fidl::new_empty!(u32, D),
210 encrypted_blocks: fidl::new_empty!(u32, D),
211 }
212 }
213
214 #[inline]
215 unsafe fn decode(
216 &mut self,
217 decoder: &mut fidl::encoding::Decoder<'_, D>,
218 offset: usize,
219 _depth: fidl::encoding::Depth,
220 ) -> fidl::Result<()> {
221 decoder.debug_check_bounds::<Self>(offset);
222 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
223 unsafe {
226 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
227 }
228 Ok(())
229 }
230 }
231
232 impl fidl::encoding::ValueTypeMarker for EncryptionSubsampleEntry {
233 type Borrowed<'a> = &'a Self;
234 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
235 value
236 }
237 }
238
239 unsafe impl fidl::encoding::TypeMarker for EncryptionSubsampleEntry {
240 type Owned = Self;
241
242 #[inline(always)]
243 fn inline_align(_context: fidl::encoding::Context) -> usize {
244 4
245 }
246
247 #[inline(always)]
248 fn inline_size(_context: fidl::encoding::Context) -> usize {
249 8
250 }
251 #[inline(always)]
252 fn encode_is_copy() -> bool {
253 true
254 }
255
256 #[inline(always)]
257 fn decode_is_copy() -> bool {
258 true
259 }
260 }
261
262 unsafe impl<D: fidl::encoding::ResourceDialect>
263 fidl::encoding::Encode<EncryptionSubsampleEntry, D> for &EncryptionSubsampleEntry
264 {
265 #[inline]
266 unsafe fn encode(
267 self,
268 encoder: &mut fidl::encoding::Encoder<'_, D>,
269 offset: usize,
270 _depth: fidl::encoding::Depth,
271 ) -> fidl::Result<()> {
272 encoder.debug_check_bounds::<EncryptionSubsampleEntry>(offset);
273 unsafe {
274 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
276 (buf_ptr as *mut EncryptionSubsampleEntry)
277 .write_unaligned((self as *const EncryptionSubsampleEntry).read());
278 }
281 Ok(())
282 }
283 }
284 unsafe impl<
285 D: fidl::encoding::ResourceDialect,
286 T0: fidl::encoding::Encode<u32, D>,
287 T1: fidl::encoding::Encode<u32, D>,
288 > fidl::encoding::Encode<EncryptionSubsampleEntry, D> for (T0, T1)
289 {
290 #[inline]
291 unsafe fn encode(
292 self,
293 encoder: &mut fidl::encoding::Encoder<'_, D>,
294 offset: usize,
295 depth: fidl::encoding::Depth,
296 ) -> fidl::Result<()> {
297 encoder.debug_check_bounds::<EncryptionSubsampleEntry>(offset);
298 self.0.encode(encoder, offset + 0, depth)?;
302 self.1.encode(encoder, offset + 4, depth)?;
303 Ok(())
304 }
305 }
306
307 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
308 for EncryptionSubsampleEntry
309 {
310 #[inline(always)]
311 fn new_empty() -> Self {
312 Self {
313 clear_bytes: fidl::new_empty!(u32, D),
314 encrypted_bytes: fidl::new_empty!(u32, D),
315 }
316 }
317
318 #[inline]
319 unsafe fn decode(
320 &mut self,
321 decoder: &mut fidl::encoding::Decoder<'_, D>,
322 offset: usize,
323 _depth: fidl::encoding::Depth,
324 ) -> fidl::Result<()> {
325 decoder.debug_check_bounds::<Self>(offset);
326 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
327 unsafe {
330 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
331 }
332 Ok(())
333 }
334 }
335
336 impl Encryption {
337 #[inline(always)]
338 fn max_ordinal_present(&self) -> u64 {
339 if let Some(_) = self.default_pattern {
340 return 4;
341 }
342 if let Some(_) = self.default_init_vector {
343 return 3;
344 }
345 if let Some(_) = self.default_key_id {
346 return 2;
347 }
348 if let Some(_) = self.scheme {
349 return 1;
350 }
351 0
352 }
353 }
354
355 impl fidl::encoding::ValueTypeMarker for Encryption {
356 type Borrowed<'a> = &'a Self;
357 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
358 value
359 }
360 }
361
362 unsafe impl fidl::encoding::TypeMarker for Encryption {
363 type Owned = Self;
364
365 #[inline(always)]
366 fn inline_align(_context: fidl::encoding::Context) -> usize {
367 8
368 }
369
370 #[inline(always)]
371 fn inline_size(_context: fidl::encoding::Context) -> usize {
372 16
373 }
374 }
375
376 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Encryption, D>
377 for &Encryption
378 {
379 unsafe fn encode(
380 self,
381 encoder: &mut fidl::encoding::Encoder<'_, D>,
382 offset: usize,
383 mut depth: fidl::encoding::Depth,
384 ) -> fidl::Result<()> {
385 encoder.debug_check_bounds::<Encryption>(offset);
386 let max_ordinal: u64 = self.max_ordinal_present();
388 encoder.write_num(max_ordinal, offset);
389 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
390 if max_ordinal == 0 {
392 return Ok(());
393 }
394 depth.increment()?;
395 let envelope_size = 8;
396 let bytes_len = max_ordinal as usize * envelope_size;
397 #[allow(unused_variables)]
398 let offset = encoder.out_of_line_offset(bytes_len);
399 let mut _prev_end_offset: usize = 0;
400 if 1 > max_ordinal {
401 return Ok(());
402 }
403
404 let cur_offset: usize = (1 - 1) * envelope_size;
407
408 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
410
411 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4>, D>(
416 self.scheme.as_ref().map(
417 <fidl::encoding::BoundedString<4> as fidl::encoding::ValueTypeMarker>::borrow,
418 ),
419 encoder,
420 offset + cur_offset,
421 depth,
422 )?;
423
424 _prev_end_offset = cur_offset + envelope_size;
425 if 2 > max_ordinal {
426 return Ok(());
427 }
428
429 let cur_offset: usize = (2 - 1) * envelope_size;
432
433 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
435
436 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
441 self.default_key_id.as_ref().map(
442 <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
443 ),
444 encoder,
445 offset + cur_offset,
446 depth,
447 )?;
448
449 _prev_end_offset = cur_offset + envelope_size;
450 if 3 > max_ordinal {
451 return Ok(());
452 }
453
454 let cur_offset: usize = (3 - 1) * envelope_size;
457
458 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
460
461 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
466 self.default_init_vector.as_ref().map(
467 <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
468 ),
469 encoder,
470 offset + cur_offset,
471 depth,
472 )?;
473
474 _prev_end_offset = cur_offset + envelope_size;
475 if 4 > max_ordinal {
476 return Ok(());
477 }
478
479 let cur_offset: usize = (4 - 1) * envelope_size;
482
483 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
485
486 fidl::encoding::encode_in_envelope_optional::<EncryptionPattern, D>(
491 self.default_pattern
492 .as_ref()
493 .map(<EncryptionPattern as fidl::encoding::ValueTypeMarker>::borrow),
494 encoder,
495 offset + cur_offset,
496 depth,
497 )?;
498
499 _prev_end_offset = cur_offset + envelope_size;
500
501 Ok(())
502 }
503 }
504
505 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Encryption {
506 #[inline(always)]
507 fn new_empty() -> Self {
508 Self::default()
509 }
510
511 unsafe fn decode(
512 &mut self,
513 decoder: &mut fidl::encoding::Decoder<'_, D>,
514 offset: usize,
515 mut depth: fidl::encoding::Depth,
516 ) -> fidl::Result<()> {
517 decoder.debug_check_bounds::<Self>(offset);
518 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
519 None => return Err(fidl::Error::NotNullable),
520 Some(len) => len,
521 };
522 if len == 0 {
524 return Ok(());
525 };
526 depth.increment()?;
527 let envelope_size = 8;
528 let bytes_len = len * envelope_size;
529 let offset = decoder.out_of_line_offset(bytes_len)?;
530 let mut _next_ordinal_to_read = 0;
532 let mut next_offset = offset;
533 let end_offset = offset + bytes_len;
534 _next_ordinal_to_read += 1;
535 if next_offset >= end_offset {
536 return Ok(());
537 }
538
539 while _next_ordinal_to_read < 1 {
541 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
542 _next_ordinal_to_read += 1;
543 next_offset += envelope_size;
544 }
545
546 let next_out_of_line = decoder.next_out_of_line();
547 let handles_before = decoder.remaining_handles();
548 if let Some((inlined, num_bytes, num_handles)) =
549 fidl::encoding::decode_envelope_header(decoder, next_offset)?
550 {
551 let member_inline_size =
552 <fidl::encoding::BoundedString<4> as fidl::encoding::TypeMarker>::inline_size(
553 decoder.context,
554 );
555 if inlined != (member_inline_size <= 4) {
556 return Err(fidl::Error::InvalidInlineBitInEnvelope);
557 }
558 let inner_offset;
559 let mut inner_depth = depth.clone();
560 if inlined {
561 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
562 inner_offset = next_offset;
563 } else {
564 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
565 inner_depth.increment()?;
566 }
567 let val_ref = self
568 .scheme
569 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<4>, D));
570 fidl::decode!(
571 fidl::encoding::BoundedString<4>,
572 D,
573 val_ref,
574 decoder,
575 inner_offset,
576 inner_depth
577 )?;
578 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
579 {
580 return Err(fidl::Error::InvalidNumBytesInEnvelope);
581 }
582 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
583 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
584 }
585 }
586
587 next_offset += envelope_size;
588 _next_ordinal_to_read += 1;
589 if next_offset >= end_offset {
590 return Ok(());
591 }
592
593 while _next_ordinal_to_read < 2 {
595 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
596 _next_ordinal_to_read += 1;
597 next_offset += envelope_size;
598 }
599
600 let next_out_of_line = decoder.next_out_of_line();
601 let handles_before = decoder.remaining_handles();
602 if let Some((inlined, num_bytes, num_handles)) =
603 fidl::encoding::decode_envelope_header(decoder, next_offset)?
604 {
605 let member_inline_size =
606 <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
607 decoder.context,
608 );
609 if inlined != (member_inline_size <= 4) {
610 return Err(fidl::Error::InvalidInlineBitInEnvelope);
611 }
612 let inner_offset;
613 let mut inner_depth = depth.clone();
614 if inlined {
615 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
616 inner_offset = next_offset;
617 } else {
618 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
619 inner_depth.increment()?;
620 }
621 let val_ref = self
622 .default_key_id
623 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
624 fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
625 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
626 {
627 return Err(fidl::Error::InvalidNumBytesInEnvelope);
628 }
629 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
630 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
631 }
632 }
633
634 next_offset += envelope_size;
635 _next_ordinal_to_read += 1;
636 if next_offset >= end_offset {
637 return Ok(());
638 }
639
640 while _next_ordinal_to_read < 3 {
642 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
643 _next_ordinal_to_read += 1;
644 next_offset += envelope_size;
645 }
646
647 let next_out_of_line = decoder.next_out_of_line();
648 let handles_before = decoder.remaining_handles();
649 if let Some((inlined, num_bytes, num_handles)) =
650 fidl::encoding::decode_envelope_header(decoder, next_offset)?
651 {
652 let member_inline_size =
653 <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
654 decoder.context,
655 );
656 if inlined != (member_inline_size <= 4) {
657 return Err(fidl::Error::InvalidInlineBitInEnvelope);
658 }
659 let inner_offset;
660 let mut inner_depth = depth.clone();
661 if inlined {
662 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
663 inner_offset = next_offset;
664 } else {
665 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
666 inner_depth.increment()?;
667 }
668 let val_ref = self
669 .default_init_vector
670 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
671 fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
672 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
673 {
674 return Err(fidl::Error::InvalidNumBytesInEnvelope);
675 }
676 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
677 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
678 }
679 }
680
681 next_offset += envelope_size;
682 _next_ordinal_to_read += 1;
683 if next_offset >= end_offset {
684 return Ok(());
685 }
686
687 while _next_ordinal_to_read < 4 {
689 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
690 _next_ordinal_to_read += 1;
691 next_offset += envelope_size;
692 }
693
694 let next_out_of_line = decoder.next_out_of_line();
695 let handles_before = decoder.remaining_handles();
696 if let Some((inlined, num_bytes, num_handles)) =
697 fidl::encoding::decode_envelope_header(decoder, next_offset)?
698 {
699 let member_inline_size =
700 <EncryptionPattern as fidl::encoding::TypeMarker>::inline_size(decoder.context);
701 if inlined != (member_inline_size <= 4) {
702 return Err(fidl::Error::InvalidInlineBitInEnvelope);
703 }
704 let inner_offset;
705 let mut inner_depth = depth.clone();
706 if inlined {
707 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
708 inner_offset = next_offset;
709 } else {
710 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
711 inner_depth.increment()?;
712 }
713 let val_ref = self
714 .default_pattern
715 .get_or_insert_with(|| fidl::new_empty!(EncryptionPattern, D));
716 fidl::decode!(EncryptionPattern, D, val_ref, decoder, inner_offset, inner_depth)?;
717 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
718 {
719 return Err(fidl::Error::InvalidNumBytesInEnvelope);
720 }
721 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
722 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
723 }
724 }
725
726 next_offset += envelope_size;
727
728 while next_offset < end_offset {
730 _next_ordinal_to_read += 1;
731 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
732 next_offset += envelope_size;
733 }
734
735 Ok(())
736 }
737 }
738
739 impl PacketEncryptionProperties {
740 #[inline(always)]
741 fn max_ordinal_present(&self) -> u64 {
742 if let Some(_) = self.subsamples {
743 return 5;
744 }
745 if let Some(_) = self.pattern {
746 return 4;
747 }
748 if let Some(_) = self.init_vector {
749 return 3;
750 }
751 if let Some(_) = self.key_id {
752 return 2;
753 }
754 if let Some(_) = self.is_encrypted {
755 return 1;
756 }
757 0
758 }
759 }
760
761 impl fidl::encoding::ValueTypeMarker for PacketEncryptionProperties {
762 type Borrowed<'a> = &'a Self;
763 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
764 value
765 }
766 }
767
768 unsafe impl fidl::encoding::TypeMarker for PacketEncryptionProperties {
769 type Owned = Self;
770
771 #[inline(always)]
772 fn inline_align(_context: fidl::encoding::Context) -> usize {
773 8
774 }
775
776 #[inline(always)]
777 fn inline_size(_context: fidl::encoding::Context) -> usize {
778 16
779 }
780 }
781
782 unsafe impl<D: fidl::encoding::ResourceDialect>
783 fidl::encoding::Encode<PacketEncryptionProperties, D> for &PacketEncryptionProperties
784 {
785 unsafe fn encode(
786 self,
787 encoder: &mut fidl::encoding::Encoder<'_, D>,
788 offset: usize,
789 mut depth: fidl::encoding::Depth,
790 ) -> fidl::Result<()> {
791 encoder.debug_check_bounds::<PacketEncryptionProperties>(offset);
792 let max_ordinal: u64 = self.max_ordinal_present();
794 encoder.write_num(max_ordinal, offset);
795 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
796 if max_ordinal == 0 {
798 return Ok(());
799 }
800 depth.increment()?;
801 let envelope_size = 8;
802 let bytes_len = max_ordinal as usize * envelope_size;
803 #[allow(unused_variables)]
804 let offset = encoder.out_of_line_offset(bytes_len);
805 let mut _prev_end_offset: usize = 0;
806 if 1 > max_ordinal {
807 return Ok(());
808 }
809
810 let cur_offset: usize = (1 - 1) * envelope_size;
813
814 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
816
817 fidl::encoding::encode_in_envelope_optional::<bool, D>(
822 self.is_encrypted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
823 encoder,
824 offset + cur_offset,
825 depth,
826 )?;
827
828 _prev_end_offset = cur_offset + envelope_size;
829 if 2 > max_ordinal {
830 return Ok(());
831 }
832
833 let cur_offset: usize = (2 - 1) * envelope_size;
836
837 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
839
840 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
845 self.key_id.as_ref().map(
846 <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
847 ),
848 encoder,
849 offset + cur_offset,
850 depth,
851 )?;
852
853 _prev_end_offset = cur_offset + envelope_size;
854 if 3 > max_ordinal {
855 return Ok(());
856 }
857
858 let cur_offset: usize = (3 - 1) * envelope_size;
861
862 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
864
865 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 16>, D>(
870 self.init_vector.as_ref().map(
871 <fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
872 ),
873 encoder,
874 offset + cur_offset,
875 depth,
876 )?;
877
878 _prev_end_offset = cur_offset + envelope_size;
879 if 4 > max_ordinal {
880 return Ok(());
881 }
882
883 let cur_offset: usize = (4 - 1) * envelope_size;
886
887 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
889
890 fidl::encoding::encode_in_envelope_optional::<EncryptionPattern, D>(
895 self.pattern
896 .as_ref()
897 .map(<EncryptionPattern as fidl::encoding::ValueTypeMarker>::borrow),
898 encoder,
899 offset + cur_offset,
900 depth,
901 )?;
902
903 _prev_end_offset = cur_offset + envelope_size;
904 if 5 > max_ordinal {
905 return Ok(());
906 }
907
908 let cur_offset: usize = (5 - 1) * envelope_size;
911
912 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
914
915 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<EncryptionSubsampleEntry, 16>, D>(
920 self.subsamples.as_ref().map(<fidl::encoding::Vector<EncryptionSubsampleEntry, 16> as fidl::encoding::ValueTypeMarker>::borrow),
921 encoder, offset + cur_offset, depth
922 )?;
923
924 _prev_end_offset = cur_offset + envelope_size;
925
926 Ok(())
927 }
928 }
929
930 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
931 for PacketEncryptionProperties
932 {
933 #[inline(always)]
934 fn new_empty() -> Self {
935 Self::default()
936 }
937
938 unsafe fn decode(
939 &mut self,
940 decoder: &mut fidl::encoding::Decoder<'_, D>,
941 offset: usize,
942 mut depth: fidl::encoding::Depth,
943 ) -> fidl::Result<()> {
944 decoder.debug_check_bounds::<Self>(offset);
945 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
946 None => return Err(fidl::Error::NotNullable),
947 Some(len) => len,
948 };
949 if len == 0 {
951 return Ok(());
952 };
953 depth.increment()?;
954 let envelope_size = 8;
955 let bytes_len = len * envelope_size;
956 let offset = decoder.out_of_line_offset(bytes_len)?;
957 let mut _next_ordinal_to_read = 0;
959 let mut next_offset = offset;
960 let end_offset = offset + bytes_len;
961 _next_ordinal_to_read += 1;
962 if next_offset >= end_offset {
963 return Ok(());
964 }
965
966 while _next_ordinal_to_read < 1 {
968 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
969 _next_ordinal_to_read += 1;
970 next_offset += envelope_size;
971 }
972
973 let next_out_of_line = decoder.next_out_of_line();
974 let handles_before = decoder.remaining_handles();
975 if let Some((inlined, num_bytes, num_handles)) =
976 fidl::encoding::decode_envelope_header(decoder, next_offset)?
977 {
978 let member_inline_size =
979 <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
980 if inlined != (member_inline_size <= 4) {
981 return Err(fidl::Error::InvalidInlineBitInEnvelope);
982 }
983 let inner_offset;
984 let mut inner_depth = depth.clone();
985 if inlined {
986 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
987 inner_offset = next_offset;
988 } else {
989 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
990 inner_depth.increment()?;
991 }
992 let val_ref = self.is_encrypted.get_or_insert_with(|| fidl::new_empty!(bool, D));
993 fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
994 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
995 {
996 return Err(fidl::Error::InvalidNumBytesInEnvelope);
997 }
998 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
999 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1000 }
1001 }
1002
1003 next_offset += envelope_size;
1004 _next_ordinal_to_read += 1;
1005 if next_offset >= end_offset {
1006 return Ok(());
1007 }
1008
1009 while _next_ordinal_to_read < 2 {
1011 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1012 _next_ordinal_to_read += 1;
1013 next_offset += envelope_size;
1014 }
1015
1016 let next_out_of_line = decoder.next_out_of_line();
1017 let handles_before = decoder.remaining_handles();
1018 if let Some((inlined, num_bytes, num_handles)) =
1019 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1020 {
1021 let member_inline_size =
1022 <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
1023 decoder.context,
1024 );
1025 if inlined != (member_inline_size <= 4) {
1026 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1027 }
1028 let inner_offset;
1029 let mut inner_depth = depth.clone();
1030 if inlined {
1031 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1032 inner_offset = next_offset;
1033 } else {
1034 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1035 inner_depth.increment()?;
1036 }
1037 let val_ref = self
1038 .key_id
1039 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
1040 fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
1041 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1042 {
1043 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1044 }
1045 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1046 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1047 }
1048 }
1049
1050 next_offset += envelope_size;
1051 _next_ordinal_to_read += 1;
1052 if next_offset >= end_offset {
1053 return Ok(());
1054 }
1055
1056 while _next_ordinal_to_read < 3 {
1058 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1059 _next_ordinal_to_read += 1;
1060 next_offset += envelope_size;
1061 }
1062
1063 let next_out_of_line = decoder.next_out_of_line();
1064 let handles_before = decoder.remaining_handles();
1065 if let Some((inlined, num_bytes, num_handles)) =
1066 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1067 {
1068 let member_inline_size =
1069 <fidl::encoding::Vector<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
1070 decoder.context,
1071 );
1072 if inlined != (member_inline_size <= 4) {
1073 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1074 }
1075 let inner_offset;
1076 let mut inner_depth = depth.clone();
1077 if inlined {
1078 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1079 inner_offset = next_offset;
1080 } else {
1081 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1082 inner_depth.increment()?;
1083 }
1084 let val_ref = self
1085 .init_vector
1086 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D));
1087 fidl::decode!(fidl::encoding::Vector<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
1088 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1089 {
1090 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1091 }
1092 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1093 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1094 }
1095 }
1096
1097 next_offset += envelope_size;
1098 _next_ordinal_to_read += 1;
1099 if next_offset >= end_offset {
1100 return Ok(());
1101 }
1102
1103 while _next_ordinal_to_read < 4 {
1105 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1106 _next_ordinal_to_read += 1;
1107 next_offset += envelope_size;
1108 }
1109
1110 let next_out_of_line = decoder.next_out_of_line();
1111 let handles_before = decoder.remaining_handles();
1112 if let Some((inlined, num_bytes, num_handles)) =
1113 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1114 {
1115 let member_inline_size =
1116 <EncryptionPattern as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1117 if inlined != (member_inline_size <= 4) {
1118 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1119 }
1120 let inner_offset;
1121 let mut inner_depth = depth.clone();
1122 if inlined {
1123 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1124 inner_offset = next_offset;
1125 } else {
1126 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1127 inner_depth.increment()?;
1128 }
1129 let val_ref =
1130 self.pattern.get_or_insert_with(|| fidl::new_empty!(EncryptionPattern, D));
1131 fidl::decode!(EncryptionPattern, D, val_ref, decoder, inner_offset, inner_depth)?;
1132 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1133 {
1134 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1135 }
1136 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1137 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1138 }
1139 }
1140
1141 next_offset += envelope_size;
1142 _next_ordinal_to_read += 1;
1143 if next_offset >= end_offset {
1144 return Ok(());
1145 }
1146
1147 while _next_ordinal_to_read < 5 {
1149 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1150 _next_ordinal_to_read += 1;
1151 next_offset += envelope_size;
1152 }
1153
1154 let next_out_of_line = decoder.next_out_of_line();
1155 let handles_before = decoder.remaining_handles();
1156 if let Some((inlined, num_bytes, num_handles)) =
1157 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1158 {
1159 let member_inline_size = <fidl::encoding::Vector<EncryptionSubsampleEntry, 16> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1160 if inlined != (member_inline_size <= 4) {
1161 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1162 }
1163 let inner_offset;
1164 let mut inner_depth = depth.clone();
1165 if inlined {
1166 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1167 inner_offset = next_offset;
1168 } else {
1169 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1170 inner_depth.increment()?;
1171 }
1172 let val_ref = self.subsamples.get_or_insert_with(
1173 || fidl::new_empty!(fidl::encoding::Vector<EncryptionSubsampleEntry, 16>, D),
1174 );
1175 fidl::decode!(fidl::encoding::Vector<EncryptionSubsampleEntry, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
1176 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1177 {
1178 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1179 }
1180 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1181 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1182 }
1183 }
1184
1185 next_offset += envelope_size;
1186
1187 while next_offset < end_offset {
1189 _next_ordinal_to_read += 1;
1190 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1191 next_offset += envelope_size;
1192 }
1193
1194 Ok(())
1195 }
1196 }
1197}