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