fidl_fuchsia_pkg_internal__common/
fidl_fuchsia_pkg_internal__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11#[derive(Clone, Debug, PartialEq)]
12pub struct OtaDownloaderFetchBlobRequest {
13    pub hash: fidl_fuchsia_pkg__common::BlobId,
14    pub base_url: String,
15}
16
17impl fidl::Persistable for OtaDownloaderFetchBlobRequest {}
18
19#[derive(Clone, Debug, Default, PartialEq)]
20pub struct PersistentEagerPackage {
21    pub url: Option<fidl_fuchsia_pkg__common::PackageUrl>,
22    pub cup: Option<fidl_fuchsia_pkg__common::CupData>,
23    #[doc(hidden)]
24    pub __source_breaking: fidl::marker::SourceBreaking,
25}
26
27impl fidl::Persistable for PersistentEagerPackage {}
28
29/// Type used for persisting eager package data in pkg-resolver.
30#[derive(Clone, Debug, Default, PartialEq)]
31pub struct PersistentEagerPackages {
32    pub packages: Option<Vec<PersistentEagerPackage>>,
33    #[doc(hidden)]
34    pub __source_breaking: fidl::marker::SourceBreaking,
35}
36
37impl fidl::Persistable for PersistentEagerPackages {}
38
39pub mod ota_downloader_ordinals {
40    pub const FETCH_BLOB: u64 = 0x56ce7896f8487c82;
41}
42
43mod internal {
44    use super::*;
45
46    impl fidl::encoding::ValueTypeMarker for OtaDownloaderFetchBlobRequest {
47        type Borrowed<'a> = &'a Self;
48        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
49            value
50        }
51    }
52
53    unsafe impl fidl::encoding::TypeMarker for OtaDownloaderFetchBlobRequest {
54        type Owned = Self;
55
56        #[inline(always)]
57        fn inline_align(_context: fidl::encoding::Context) -> usize {
58            8
59        }
60
61        #[inline(always)]
62        fn inline_size(_context: fidl::encoding::Context) -> usize {
63            48
64        }
65    }
66
67    unsafe impl<D: fidl::encoding::ResourceDialect>
68        fidl::encoding::Encode<OtaDownloaderFetchBlobRequest, D>
69        for &OtaDownloaderFetchBlobRequest
70    {
71        #[inline]
72        unsafe fn encode(
73            self,
74            encoder: &mut fidl::encoding::Encoder<'_, D>,
75            offset: usize,
76            _depth: fidl::encoding::Depth,
77        ) -> fidl::Result<()> {
78            encoder.debug_check_bounds::<OtaDownloaderFetchBlobRequest>(offset);
79            // Delegate to tuple encoding.
80            fidl::encoding::Encode::<OtaDownloaderFetchBlobRequest, D>::encode(
81                (
82                    <fidl_fuchsia_pkg__common::BlobId as fidl::encoding::ValueTypeMarker>::borrow(&self.hash),
83                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(&self.base_url),
84                ),
85                encoder, offset, _depth
86            )
87        }
88    }
89    unsafe impl<
90            D: fidl::encoding::ResourceDialect,
91            T0: fidl::encoding::Encode<fidl_fuchsia_pkg__common::BlobId, D>,
92            T1: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
93        > fidl::encoding::Encode<OtaDownloaderFetchBlobRequest, D> for (T0, T1)
94    {
95        #[inline]
96        unsafe fn encode(
97            self,
98            encoder: &mut fidl::encoding::Encoder<'_, D>,
99            offset: usize,
100            depth: fidl::encoding::Depth,
101        ) -> fidl::Result<()> {
102            encoder.debug_check_bounds::<OtaDownloaderFetchBlobRequest>(offset);
103            // Zero out padding regions. There's no need to apply masks
104            // because the unmasked parts will be overwritten by fields.
105            // Write the fields.
106            self.0.encode(encoder, offset + 0, depth)?;
107            self.1.encode(encoder, offset + 32, depth)?;
108            Ok(())
109        }
110    }
111
112    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
113        for OtaDownloaderFetchBlobRequest
114    {
115        #[inline(always)]
116        fn new_empty() -> Self {
117            Self {
118                hash: fidl::new_empty!(fidl_fuchsia_pkg__common::BlobId, D),
119                base_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D),
120            }
121        }
122
123        #[inline]
124        unsafe fn decode(
125            &mut self,
126            decoder: &mut fidl::encoding::Decoder<'_, D>,
127            offset: usize,
128            _depth: fidl::encoding::Depth,
129        ) -> fidl::Result<()> {
130            decoder.debug_check_bounds::<Self>(offset);
131            // Verify that padding bytes are zero.
132            fidl::decode!(
133                fidl_fuchsia_pkg__common::BlobId,
134                D,
135                &mut self.hash,
136                decoder,
137                offset + 0,
138                _depth
139            )?;
140            fidl::decode!(
141                fidl::encoding::BoundedString<4096>,
142                D,
143                &mut self.base_url,
144                decoder,
145                offset + 32,
146                _depth
147            )?;
148            Ok(())
149        }
150    }
151
152    impl PersistentEagerPackage {
153        #[inline(always)]
154        fn max_ordinal_present(&self) -> u64 {
155            if let Some(_) = self.cup {
156                return 2;
157            }
158            if let Some(_) = self.url {
159                return 1;
160            }
161            0
162        }
163    }
164
165    impl fidl::encoding::ValueTypeMarker for PersistentEagerPackage {
166        type Borrowed<'a> = &'a Self;
167        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
168            value
169        }
170    }
171
172    unsafe impl fidl::encoding::TypeMarker for PersistentEagerPackage {
173        type Owned = Self;
174
175        #[inline(always)]
176        fn inline_align(_context: fidl::encoding::Context) -> usize {
177            8
178        }
179
180        #[inline(always)]
181        fn inline_size(_context: fidl::encoding::Context) -> usize {
182            16
183        }
184    }
185
186    unsafe impl<D: fidl::encoding::ResourceDialect>
187        fidl::encoding::Encode<PersistentEagerPackage, D> for &PersistentEagerPackage
188    {
189        unsafe fn encode(
190            self,
191            encoder: &mut fidl::encoding::Encoder<'_, D>,
192            offset: usize,
193            mut depth: fidl::encoding::Depth,
194        ) -> fidl::Result<()> {
195            encoder.debug_check_bounds::<PersistentEagerPackage>(offset);
196            // Vector header
197            let max_ordinal: u64 = self.max_ordinal_present();
198            encoder.write_num(max_ordinal, offset);
199            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
200            // Calling encoder.out_of_line_offset(0) is not allowed.
201            if max_ordinal == 0 {
202                return Ok(());
203            }
204            depth.increment()?;
205            let envelope_size = 8;
206            let bytes_len = max_ordinal as usize * envelope_size;
207            #[allow(unused_variables)]
208            let offset = encoder.out_of_line_offset(bytes_len);
209            let mut _prev_end_offset: usize = 0;
210            if 1 > max_ordinal {
211                return Ok(());
212            }
213
214            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
215            // are envelope_size bytes.
216            let cur_offset: usize = (1 - 1) * envelope_size;
217
218            // Zero reserved fields.
219            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
220
221            // Safety:
222            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
223            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
224            //   envelope_size bytes, there is always sufficient room.
225            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_pkg__common::PackageUrl, D>(
226            self.url.as_ref().map(<fidl_fuchsia_pkg__common::PackageUrl as fidl::encoding::ValueTypeMarker>::borrow),
227            encoder, offset + cur_offset, depth
228        )?;
229
230            _prev_end_offset = cur_offset + envelope_size;
231            if 2 > max_ordinal {
232                return Ok(());
233            }
234
235            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
236            // are envelope_size bytes.
237            let cur_offset: usize = (2 - 1) * envelope_size;
238
239            // Zero reserved fields.
240            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
241
242            // Safety:
243            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
244            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
245            //   envelope_size bytes, there is always sufficient room.
246            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_pkg__common::CupData, D>(
247                self.cup.as_ref().map(
248                    <fidl_fuchsia_pkg__common::CupData as fidl::encoding::ValueTypeMarker>::borrow,
249                ),
250                encoder,
251                offset + cur_offset,
252                depth,
253            )?;
254
255            _prev_end_offset = cur_offset + envelope_size;
256
257            Ok(())
258        }
259    }
260
261    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
262        for PersistentEagerPackage
263    {
264        #[inline(always)]
265        fn new_empty() -> Self {
266            Self::default()
267        }
268
269        unsafe fn decode(
270            &mut self,
271            decoder: &mut fidl::encoding::Decoder<'_, D>,
272            offset: usize,
273            mut depth: fidl::encoding::Depth,
274        ) -> fidl::Result<()> {
275            decoder.debug_check_bounds::<Self>(offset);
276            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
277                None => return Err(fidl::Error::NotNullable),
278                Some(len) => len,
279            };
280            // Calling decoder.out_of_line_offset(0) is not allowed.
281            if len == 0 {
282                return Ok(());
283            };
284            depth.increment()?;
285            let envelope_size = 8;
286            let bytes_len = len * envelope_size;
287            let offset = decoder.out_of_line_offset(bytes_len)?;
288            // Decode the envelope for each type.
289            let mut _next_ordinal_to_read = 0;
290            let mut next_offset = offset;
291            let end_offset = offset + bytes_len;
292            _next_ordinal_to_read += 1;
293            if next_offset >= end_offset {
294                return Ok(());
295            }
296
297            // Decode unknown envelopes for gaps in ordinals.
298            while _next_ordinal_to_read < 1 {
299                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
300                _next_ordinal_to_read += 1;
301                next_offset += envelope_size;
302            }
303
304            let next_out_of_line = decoder.next_out_of_line();
305            let handles_before = decoder.remaining_handles();
306            if let Some((inlined, num_bytes, num_handles)) =
307                fidl::encoding::decode_envelope_header(decoder, next_offset)?
308            {
309                let member_inline_size = <fidl_fuchsia_pkg__common::PackageUrl as fidl::encoding::TypeMarker>::inline_size(decoder.context);
310                if inlined != (member_inline_size <= 4) {
311                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
312                }
313                let inner_offset;
314                let mut inner_depth = depth.clone();
315                if inlined {
316                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
317                    inner_offset = next_offset;
318                } else {
319                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
320                    inner_depth.increment()?;
321                }
322                let val_ref = self.url.get_or_insert_with(|| {
323                    fidl::new_empty!(fidl_fuchsia_pkg__common::PackageUrl, D)
324                });
325                fidl::decode!(
326                    fidl_fuchsia_pkg__common::PackageUrl,
327                    D,
328                    val_ref,
329                    decoder,
330                    inner_offset,
331                    inner_depth
332                )?;
333                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
334                {
335                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
336                }
337                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
338                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
339                }
340            }
341
342            next_offset += envelope_size;
343            _next_ordinal_to_read += 1;
344            if next_offset >= end_offset {
345                return Ok(());
346            }
347
348            // Decode unknown envelopes for gaps in ordinals.
349            while _next_ordinal_to_read < 2 {
350                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
351                _next_ordinal_to_read += 1;
352                next_offset += envelope_size;
353            }
354
355            let next_out_of_line = decoder.next_out_of_line();
356            let handles_before = decoder.remaining_handles();
357            if let Some((inlined, num_bytes, num_handles)) =
358                fidl::encoding::decode_envelope_header(decoder, next_offset)?
359            {
360                let member_inline_size =
361                    <fidl_fuchsia_pkg__common::CupData as fidl::encoding::TypeMarker>::inline_size(
362                        decoder.context,
363                    );
364                if inlined != (member_inline_size <= 4) {
365                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
366                }
367                let inner_offset;
368                let mut inner_depth = depth.clone();
369                if inlined {
370                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
371                    inner_offset = next_offset;
372                } else {
373                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
374                    inner_depth.increment()?;
375                }
376                let val_ref = self
377                    .cup
378                    .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_pkg__common::CupData, D));
379                fidl::decode!(
380                    fidl_fuchsia_pkg__common::CupData,
381                    D,
382                    val_ref,
383                    decoder,
384                    inner_offset,
385                    inner_depth
386                )?;
387                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
388                {
389                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
390                }
391                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
392                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
393                }
394            }
395
396            next_offset += envelope_size;
397
398            // Decode the remaining unknown envelopes.
399            while next_offset < end_offset {
400                _next_ordinal_to_read += 1;
401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
402                next_offset += envelope_size;
403            }
404
405            Ok(())
406        }
407    }
408
409    impl PersistentEagerPackages {
410        #[inline(always)]
411        fn max_ordinal_present(&self) -> u64 {
412            if let Some(_) = self.packages {
413                return 1;
414            }
415            0
416        }
417    }
418
419    impl fidl::encoding::ValueTypeMarker for PersistentEagerPackages {
420        type Borrowed<'a> = &'a Self;
421        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
422            value
423        }
424    }
425
426    unsafe impl fidl::encoding::TypeMarker for PersistentEagerPackages {
427        type Owned = Self;
428
429        #[inline(always)]
430        fn inline_align(_context: fidl::encoding::Context) -> usize {
431            8
432        }
433
434        #[inline(always)]
435        fn inline_size(_context: fidl::encoding::Context) -> usize {
436            16
437        }
438    }
439
440    unsafe impl<D: fidl::encoding::ResourceDialect>
441        fidl::encoding::Encode<PersistentEagerPackages, D> for &PersistentEagerPackages
442    {
443        unsafe fn encode(
444            self,
445            encoder: &mut fidl::encoding::Encoder<'_, D>,
446            offset: usize,
447            mut depth: fidl::encoding::Depth,
448        ) -> fidl::Result<()> {
449            encoder.debug_check_bounds::<PersistentEagerPackages>(offset);
450            // Vector header
451            let max_ordinal: u64 = self.max_ordinal_present();
452            encoder.write_num(max_ordinal, offset);
453            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
454            // Calling encoder.out_of_line_offset(0) is not allowed.
455            if max_ordinal == 0 {
456                return Ok(());
457            }
458            depth.increment()?;
459            let envelope_size = 8;
460            let bytes_len = max_ordinal as usize * envelope_size;
461            #[allow(unused_variables)]
462            let offset = encoder.out_of_line_offset(bytes_len);
463            let mut _prev_end_offset: usize = 0;
464            if 1 > max_ordinal {
465                return Ok(());
466            }
467
468            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
469            // are envelope_size bytes.
470            let cur_offset: usize = (1 - 1) * envelope_size;
471
472            // Zero reserved fields.
473            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
474
475            // Safety:
476            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
477            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
478            //   envelope_size bytes, there is always sufficient room.
479            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<PersistentEagerPackage, 128>, D>(
480            self.packages.as_ref().map(<fidl::encoding::Vector<PersistentEagerPackage, 128> as fidl::encoding::ValueTypeMarker>::borrow),
481            encoder, offset + cur_offset, depth
482        )?;
483
484            _prev_end_offset = cur_offset + envelope_size;
485
486            Ok(())
487        }
488    }
489
490    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
491        for PersistentEagerPackages
492    {
493        #[inline(always)]
494        fn new_empty() -> Self {
495            Self::default()
496        }
497
498        unsafe fn decode(
499            &mut self,
500            decoder: &mut fidl::encoding::Decoder<'_, D>,
501            offset: usize,
502            mut depth: fidl::encoding::Depth,
503        ) -> fidl::Result<()> {
504            decoder.debug_check_bounds::<Self>(offset);
505            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
506                None => return Err(fidl::Error::NotNullable),
507                Some(len) => len,
508            };
509            // Calling decoder.out_of_line_offset(0) is not allowed.
510            if len == 0 {
511                return Ok(());
512            };
513            depth.increment()?;
514            let envelope_size = 8;
515            let bytes_len = len * envelope_size;
516            let offset = decoder.out_of_line_offset(bytes_len)?;
517            // Decode the envelope for each type.
518            let mut _next_ordinal_to_read = 0;
519            let mut next_offset = offset;
520            let end_offset = offset + bytes_len;
521            _next_ordinal_to_read += 1;
522            if next_offset >= end_offset {
523                return Ok(());
524            }
525
526            // Decode unknown envelopes for gaps in ordinals.
527            while _next_ordinal_to_read < 1 {
528                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
529                _next_ordinal_to_read += 1;
530                next_offset += envelope_size;
531            }
532
533            let next_out_of_line = decoder.next_out_of_line();
534            let handles_before = decoder.remaining_handles();
535            if let Some((inlined, num_bytes, num_handles)) =
536                fidl::encoding::decode_envelope_header(decoder, next_offset)?
537            {
538                let member_inline_size = <fidl::encoding::Vector<PersistentEagerPackage, 128> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
539                if inlined != (member_inline_size <= 4) {
540                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
541                }
542                let inner_offset;
543                let mut inner_depth = depth.clone();
544                if inlined {
545                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
546                    inner_offset = next_offset;
547                } else {
548                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
549                    inner_depth.increment()?;
550                }
551                let val_ref = self.packages.get_or_insert_with(
552                    || fidl::new_empty!(fidl::encoding::Vector<PersistentEagerPackage, 128>, D),
553                );
554                fidl::decode!(fidl::encoding::Vector<PersistentEagerPackage, 128>, D, val_ref, decoder, inner_offset, inner_depth)?;
555                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
556                {
557                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
558                }
559                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
560                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
561                }
562            }
563
564            next_offset += envelope_size;
565
566            // Decode the remaining unknown envelopes.
567            while next_offset < end_offset {
568                _next_ordinal_to_read += 1;
569                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
570                next_offset += envelope_size;
571            }
572
573            Ok(())
574        }
575    }
576}