fidl_fuchsia_camera_test_virtualcamera_common/
fidl_fuchsia_camera_test_virtualcamera_common.rs
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
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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
275
276 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
278
279 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 let cur_offset: usize = (2 - 1) * envelope_size;
298
299 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
301
302 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 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 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 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 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 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}