fidl_fuchsia_camera_test_virtualcamera_common/
fidl_fuchsia_camera_test_virtualcamera_common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
12#[repr(u32)]
13pub enum Error {
14    AlreadyAddedToDeviceWatcher = 1,
15}
16
17impl Error {
18    #[inline]
19    pub fn from_primitive(prim: u32) -> Option<Self> {
20        match prim {
21            1 => Some(Self::AlreadyAddedToDeviceWatcher),
22            _ => None,
23        }
24    }
25
26    #[inline]
27    pub const fn into_primitive(self) -> u32 {
28        self as u32
29    }
30}
31
32#[derive(Clone, Debug, PartialEq)]
33pub struct VirtualCameraDeviceAddStreamConfigRequest {
34    pub index: u64,
35    pub config: StreamConfig,
36}
37
38impl fidl::Persistable for VirtualCameraDeviceAddStreamConfigRequest {}
39
40#[derive(Clone, Debug, Default, PartialEq)]
41pub struct StreamConfig {
42    pub width: Option<u32>,
43    pub height: Option<u32>,
44    #[doc(hidden)]
45    pub __source_breaking: fidl::marker::SourceBreaking,
46}
47
48impl fidl::Persistable for StreamConfig {}
49
50mod internal {
51    use super::*;
52    unsafe impl fidl::encoding::TypeMarker for Error {
53        type Owned = Self;
54
55        #[inline(always)]
56        fn inline_align(_context: fidl::encoding::Context) -> usize {
57            std::mem::align_of::<u32>()
58        }
59
60        #[inline(always)]
61        fn inline_size(_context: fidl::encoding::Context) -> usize {
62            std::mem::size_of::<u32>()
63        }
64
65        #[inline(always)]
66        fn encode_is_copy() -> bool {
67            true
68        }
69
70        #[inline(always)]
71        fn decode_is_copy() -> bool {
72            false
73        }
74    }
75
76    impl fidl::encoding::ValueTypeMarker for Error {
77        type Borrowed<'a> = Self;
78        #[inline(always)]
79        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
80            *value
81        }
82    }
83
84    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Error {
85        #[inline]
86        unsafe fn encode(
87            self,
88            encoder: &mut fidl::encoding::Encoder<'_, D>,
89            offset: usize,
90            _depth: fidl::encoding::Depth,
91        ) -> fidl::Result<()> {
92            encoder.debug_check_bounds::<Self>(offset);
93            encoder.write_num(self.into_primitive(), offset);
94            Ok(())
95        }
96    }
97
98    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Error {
99        #[inline(always)]
100        fn new_empty() -> Self {
101            Self::AlreadyAddedToDeviceWatcher
102        }
103
104        #[inline]
105        unsafe fn decode(
106            &mut self,
107            decoder: &mut fidl::encoding::Decoder<'_, D>,
108            offset: usize,
109            _depth: fidl::encoding::Depth,
110        ) -> fidl::Result<()> {
111            decoder.debug_check_bounds::<Self>(offset);
112            let prim = decoder.read_num::<u32>(offset);
113
114            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
115            Ok(())
116        }
117    }
118
119    impl fidl::encoding::ValueTypeMarker for VirtualCameraDeviceAddStreamConfigRequest {
120        type Borrowed<'a> = &'a Self;
121        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
122            value
123        }
124    }
125
126    unsafe impl fidl::encoding::TypeMarker for VirtualCameraDeviceAddStreamConfigRequest {
127        type Owned = Self;
128
129        #[inline(always)]
130        fn inline_align(_context: fidl::encoding::Context) -> usize {
131            8
132        }
133
134        #[inline(always)]
135        fn inline_size(_context: fidl::encoding::Context) -> usize {
136            24
137        }
138    }
139
140    unsafe impl<D: fidl::encoding::ResourceDialect>
141        fidl::encoding::Encode<VirtualCameraDeviceAddStreamConfigRequest, D>
142        for &VirtualCameraDeviceAddStreamConfigRequest
143    {
144        #[inline]
145        unsafe fn encode(
146            self,
147            encoder: &mut fidl::encoding::Encoder<'_, D>,
148            offset: usize,
149            _depth: fidl::encoding::Depth,
150        ) -> fidl::Result<()> {
151            encoder.debug_check_bounds::<VirtualCameraDeviceAddStreamConfigRequest>(offset);
152            // Delegate to tuple encoding.
153            fidl::encoding::Encode::<VirtualCameraDeviceAddStreamConfigRequest, D>::encode(
154                (
155                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.index),
156                    <StreamConfig as fidl::encoding::ValueTypeMarker>::borrow(&self.config),
157                ),
158                encoder,
159                offset,
160                _depth,
161            )
162        }
163    }
164    unsafe impl<
165            D: fidl::encoding::ResourceDialect,
166            T0: fidl::encoding::Encode<u64, D>,
167            T1: fidl::encoding::Encode<StreamConfig, D>,
168        > fidl::encoding::Encode<VirtualCameraDeviceAddStreamConfigRequest, D> for (T0, T1)
169    {
170        #[inline]
171        unsafe fn encode(
172            self,
173            encoder: &mut fidl::encoding::Encoder<'_, D>,
174            offset: usize,
175            depth: fidl::encoding::Depth,
176        ) -> fidl::Result<()> {
177            encoder.debug_check_bounds::<VirtualCameraDeviceAddStreamConfigRequest>(offset);
178            // Zero out padding regions. There's no need to apply masks
179            // because the unmasked parts will be overwritten by fields.
180            // Write the fields.
181            self.0.encode(encoder, offset + 0, depth)?;
182            self.1.encode(encoder, offset + 8, depth)?;
183            Ok(())
184        }
185    }
186
187    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
188        for VirtualCameraDeviceAddStreamConfigRequest
189    {
190        #[inline(always)]
191        fn new_empty() -> Self {
192            Self { index: fidl::new_empty!(u64, D), config: fidl::new_empty!(StreamConfig, D) }
193        }
194
195        #[inline]
196        unsafe fn decode(
197            &mut self,
198            decoder: &mut fidl::encoding::Decoder<'_, D>,
199            offset: usize,
200            _depth: fidl::encoding::Depth,
201        ) -> fidl::Result<()> {
202            decoder.debug_check_bounds::<Self>(offset);
203            // Verify that padding bytes are zero.
204            fidl::decode!(u64, D, &mut self.index, decoder, offset + 0, _depth)?;
205            fidl::decode!(StreamConfig, D, &mut self.config, decoder, offset + 8, _depth)?;
206            Ok(())
207        }
208    }
209
210    impl StreamConfig {
211        #[inline(always)]
212        fn max_ordinal_present(&self) -> u64 {
213            if let Some(_) = self.height {
214                return 2;
215            }
216            if let Some(_) = self.width {
217                return 1;
218            }
219            0
220        }
221    }
222
223    impl fidl::encoding::ValueTypeMarker for StreamConfig {
224        type Borrowed<'a> = &'a Self;
225        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
226            value
227        }
228    }
229
230    unsafe impl fidl::encoding::TypeMarker for StreamConfig {
231        type Owned = Self;
232
233        #[inline(always)]
234        fn inline_align(_context: fidl::encoding::Context) -> usize {
235            8
236        }
237
238        #[inline(always)]
239        fn inline_size(_context: fidl::encoding::Context) -> usize {
240            16
241        }
242    }
243
244    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamConfig, D>
245        for &StreamConfig
246    {
247        unsafe fn encode(
248            self,
249            encoder: &mut fidl::encoding::Encoder<'_, D>,
250            offset: usize,
251            mut depth: fidl::encoding::Depth,
252        ) -> fidl::Result<()> {
253            encoder.debug_check_bounds::<StreamConfig>(offset);
254            // Vector header
255            let max_ordinal: u64 = self.max_ordinal_present();
256            encoder.write_num(max_ordinal, offset);
257            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
258            // Calling encoder.out_of_line_offset(0) is not allowed.
259            if max_ordinal == 0 {
260                return Ok(());
261            }
262            depth.increment()?;
263            let envelope_size = 8;
264            let bytes_len = max_ordinal as usize * envelope_size;
265            #[allow(unused_variables)]
266            let offset = encoder.out_of_line_offset(bytes_len);
267            let mut _prev_end_offset: usize = 0;
268            if 1 > max_ordinal {
269                return Ok(());
270            }
271
272            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
273            // are envelope_size bytes.
274            let cur_offset: usize = (1 - 1) * envelope_size;
275
276            // Zero reserved fields.
277            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
278
279            // Safety:
280            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
281            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
282            //   envelope_size bytes, there is always sufficient room.
283            fidl::encoding::encode_in_envelope_optional::<u32, D>(
284                self.width.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
285                encoder,
286                offset + cur_offset,
287                depth,
288            )?;
289
290            _prev_end_offset = cur_offset + envelope_size;
291            if 2 > max_ordinal {
292                return Ok(());
293            }
294
295            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
296            // are envelope_size bytes.
297            let cur_offset: usize = (2 - 1) * envelope_size;
298
299            // Zero reserved fields.
300            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
301
302            // Safety:
303            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
304            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
305            //   envelope_size bytes, there is always sufficient room.
306            fidl::encoding::encode_in_envelope_optional::<u32, D>(
307                self.height.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
308                encoder,
309                offset + cur_offset,
310                depth,
311            )?;
312
313            _prev_end_offset = cur_offset + envelope_size;
314
315            Ok(())
316        }
317    }
318
319    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamConfig {
320        #[inline(always)]
321        fn new_empty() -> Self {
322            Self::default()
323        }
324
325        unsafe fn decode(
326            &mut self,
327            decoder: &mut fidl::encoding::Decoder<'_, D>,
328            offset: usize,
329            mut depth: fidl::encoding::Depth,
330        ) -> fidl::Result<()> {
331            decoder.debug_check_bounds::<Self>(offset);
332            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
333                None => return Err(fidl::Error::NotNullable),
334                Some(len) => len,
335            };
336            // Calling decoder.out_of_line_offset(0) is not allowed.
337            if len == 0 {
338                return Ok(());
339            };
340            depth.increment()?;
341            let envelope_size = 8;
342            let bytes_len = len * envelope_size;
343            let offset = decoder.out_of_line_offset(bytes_len)?;
344            // Decode the envelope for each type.
345            let mut _next_ordinal_to_read = 0;
346            let mut next_offset = offset;
347            let end_offset = offset + bytes_len;
348            _next_ordinal_to_read += 1;
349            if next_offset >= end_offset {
350                return Ok(());
351            }
352
353            // Decode unknown envelopes for gaps in ordinals.
354            while _next_ordinal_to_read < 1 {
355                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
356                _next_ordinal_to_read += 1;
357                next_offset += envelope_size;
358            }
359
360            let next_out_of_line = decoder.next_out_of_line();
361            let handles_before = decoder.remaining_handles();
362            if let Some((inlined, num_bytes, num_handles)) =
363                fidl::encoding::decode_envelope_header(decoder, next_offset)?
364            {
365                let member_inline_size =
366                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
367                if inlined != (member_inline_size <= 4) {
368                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
369                }
370                let inner_offset;
371                let mut inner_depth = depth.clone();
372                if inlined {
373                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
374                    inner_offset = next_offset;
375                } else {
376                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
377                    inner_depth.increment()?;
378                }
379                let val_ref = self.width.get_or_insert_with(|| fidl::new_empty!(u32, D));
380                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
381                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
382                {
383                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
384                }
385                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
386                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
387                }
388            }
389
390            next_offset += envelope_size;
391            _next_ordinal_to_read += 1;
392            if next_offset >= end_offset {
393                return Ok(());
394            }
395
396            // Decode unknown envelopes for gaps in ordinals.
397            while _next_ordinal_to_read < 2 {
398                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
399                _next_ordinal_to_read += 1;
400                next_offset += envelope_size;
401            }
402
403            let next_out_of_line = decoder.next_out_of_line();
404            let handles_before = decoder.remaining_handles();
405            if let Some((inlined, num_bytes, num_handles)) =
406                fidl::encoding::decode_envelope_header(decoder, next_offset)?
407            {
408                let member_inline_size =
409                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
410                if inlined != (member_inline_size <= 4) {
411                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
412                }
413                let inner_offset;
414                let mut inner_depth = depth.clone();
415                if inlined {
416                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
417                    inner_offset = next_offset;
418                } else {
419                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
420                    inner_depth.increment()?;
421                }
422                let val_ref = self.height.get_or_insert_with(|| fidl::new_empty!(u32, D));
423                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
424                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
425                {
426                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
427                }
428                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
429                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
430                }
431            }
432
433            next_offset += envelope_size;
434
435            // Decode the remaining unknown envelopes.
436            while next_offset < end_offset {
437                _next_ordinal_to_read += 1;
438                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
439                next_offset += envelope_size;
440            }
441
442            Ok(())
443        }
444    }
445}