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 _};
10pub use fidl_fuchsia_mem__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
21pub struct Buffer {
22 pub vmo: fidl::Vmo,
24 pub size: u64,
32}
33
34impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Buffer {}
35
36#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
38pub struct Range {
39 pub vmo: fidl::Vmo,
41 pub offset: u64,
47 pub size: u64,
55}
56
57impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Range {}
58
59#[derive(Debug)]
66pub enum Data {
67 Bytes(Vec<u8>),
69 Buffer(Buffer),
71 #[doc(hidden)]
72 __SourceBreaking { unknown_ordinal: u64 },
73}
74
75#[macro_export]
77macro_rules! DataUnknown {
78 () => {
79 _
80 };
81}
82
83impl PartialEq for Data {
85 fn eq(&self, other: &Self) -> bool {
86 match (self, other) {
87 (Self::Bytes(x), Self::Bytes(y)) => *x == *y,
88 (Self::Buffer(x), Self::Buffer(y)) => *x == *y,
89 _ => false,
90 }
91 }
92}
93
94impl Data {
95 #[inline]
96 pub fn ordinal(&self) -> u64 {
97 match *self {
98 Self::Bytes(_) => 1,
99 Self::Buffer(_) => 2,
100 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
101 }
102 }
103
104 #[inline]
105 pub fn unknown_variant_for_testing() -> Self {
106 Self::__SourceBreaking { unknown_ordinal: 0 }
107 }
108
109 #[inline]
110 pub fn is_unknown(&self) -> bool {
111 match self {
112 Self::__SourceBreaking { .. } => true,
113 _ => false,
114 }
115 }
116}
117
118impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Data {}
119
120mod internal {
121 use super::*;
122
123 impl fidl::encoding::ResourceTypeMarker for Buffer {
124 type Borrowed<'a> = &'a mut Self;
125 fn take_or_borrow<'a>(
126 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
127 ) -> Self::Borrowed<'a> {
128 value
129 }
130 }
131
132 unsafe impl fidl::encoding::TypeMarker for Buffer {
133 type Owned = Self;
134
135 #[inline(always)]
136 fn inline_align(_context: fidl::encoding::Context) -> usize {
137 8
138 }
139
140 #[inline(always)]
141 fn inline_size(_context: fidl::encoding::Context) -> usize {
142 16
143 }
144 }
145
146 unsafe impl fidl::encoding::Encode<Buffer, fidl::encoding::DefaultFuchsiaResourceDialect>
147 for &mut Buffer
148 {
149 #[inline]
150 unsafe fn encode(
151 self,
152 encoder: &mut fidl::encoding::Encoder<
153 '_,
154 fidl::encoding::DefaultFuchsiaResourceDialect,
155 >,
156 offset: usize,
157 _depth: fidl::encoding::Depth,
158 ) -> fidl::Result<()> {
159 encoder.debug_check_bounds::<Buffer>(offset);
160 fidl::encoding::Encode::<Buffer, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
162 (
163 <fidl::encoding::HandleType<
164 fidl::Vmo,
165 { fidl::ObjectType::VMO.into_raw() },
166 2147483648,
167 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
168 &mut self.vmo
169 ),
170 <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.size),
171 ),
172 encoder,
173 offset,
174 _depth,
175 )
176 }
177 }
178 unsafe impl<
179 T0: fidl::encoding::Encode<
180 fidl::encoding::HandleType<
181 fidl::Vmo,
182 { fidl::ObjectType::VMO.into_raw() },
183 2147483648,
184 >,
185 fidl::encoding::DefaultFuchsiaResourceDialect,
186 >,
187 T1: fidl::encoding::Encode<u64, fidl::encoding::DefaultFuchsiaResourceDialect>,
188 > fidl::encoding::Encode<Buffer, fidl::encoding::DefaultFuchsiaResourceDialect> for (T0, T1)
189 {
190 #[inline]
191 unsafe fn encode(
192 self,
193 encoder: &mut fidl::encoding::Encoder<
194 '_,
195 fidl::encoding::DefaultFuchsiaResourceDialect,
196 >,
197 offset: usize,
198 depth: fidl::encoding::Depth,
199 ) -> fidl::Result<()> {
200 encoder.debug_check_bounds::<Buffer>(offset);
201 unsafe {
204 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
205 (ptr as *mut u64).write_unaligned(0);
206 }
207 self.0.encode(encoder, offset + 0, depth)?;
209 self.1.encode(encoder, offset + 8, depth)?;
210 Ok(())
211 }
212 }
213
214 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Buffer {
215 #[inline(always)]
216 fn new_empty() -> Self {
217 Self {
218 vmo: fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
219 size: fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect),
220 }
221 }
222
223 #[inline]
224 unsafe fn decode(
225 &mut self,
226 decoder: &mut fidl::encoding::Decoder<
227 '_,
228 fidl::encoding::DefaultFuchsiaResourceDialect,
229 >,
230 offset: usize,
231 _depth: fidl::encoding::Depth,
232 ) -> fidl::Result<()> {
233 decoder.debug_check_bounds::<Self>(offset);
234 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
236 let padval = unsafe { (ptr as *const u64).read_unaligned() };
237 let mask = 0xffffffff00000000u64;
238 let maskedval = padval & mask;
239 if maskedval != 0 {
240 return Err(fidl::Error::NonZeroPadding {
241 padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
242 });
243 }
244 fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.vmo, decoder, offset + 0, _depth)?;
245 fidl::decode!(
246 u64,
247 fidl::encoding::DefaultFuchsiaResourceDialect,
248 &mut self.size,
249 decoder,
250 offset + 8,
251 _depth
252 )?;
253 Ok(())
254 }
255 }
256
257 impl fidl::encoding::ResourceTypeMarker for Range {
258 type Borrowed<'a> = &'a mut Self;
259 fn take_or_borrow<'a>(
260 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
261 ) -> Self::Borrowed<'a> {
262 value
263 }
264 }
265
266 unsafe impl fidl::encoding::TypeMarker for Range {
267 type Owned = Self;
268
269 #[inline(always)]
270 fn inline_align(_context: fidl::encoding::Context) -> usize {
271 8
272 }
273
274 #[inline(always)]
275 fn inline_size(_context: fidl::encoding::Context) -> usize {
276 24
277 }
278 }
279
280 unsafe impl fidl::encoding::Encode<Range, fidl::encoding::DefaultFuchsiaResourceDialect>
281 for &mut Range
282 {
283 #[inline]
284 unsafe fn encode(
285 self,
286 encoder: &mut fidl::encoding::Encoder<
287 '_,
288 fidl::encoding::DefaultFuchsiaResourceDialect,
289 >,
290 offset: usize,
291 _depth: fidl::encoding::Depth,
292 ) -> fidl::Result<()> {
293 encoder.debug_check_bounds::<Range>(offset);
294 fidl::encoding::Encode::<Range, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
296 (
297 <fidl::encoding::HandleType<
298 fidl::Vmo,
299 { fidl::ObjectType::VMO.into_raw() },
300 2147483648,
301 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
302 &mut self.vmo
303 ),
304 <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.offset),
305 <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.size),
306 ),
307 encoder,
308 offset,
309 _depth,
310 )
311 }
312 }
313 unsafe impl<
314 T0: fidl::encoding::Encode<
315 fidl::encoding::HandleType<
316 fidl::Vmo,
317 { fidl::ObjectType::VMO.into_raw() },
318 2147483648,
319 >,
320 fidl::encoding::DefaultFuchsiaResourceDialect,
321 >,
322 T1: fidl::encoding::Encode<u64, fidl::encoding::DefaultFuchsiaResourceDialect>,
323 T2: fidl::encoding::Encode<u64, fidl::encoding::DefaultFuchsiaResourceDialect>,
324 > fidl::encoding::Encode<Range, fidl::encoding::DefaultFuchsiaResourceDialect>
325 for (T0, T1, T2)
326 {
327 #[inline]
328 unsafe fn encode(
329 self,
330 encoder: &mut fidl::encoding::Encoder<
331 '_,
332 fidl::encoding::DefaultFuchsiaResourceDialect,
333 >,
334 offset: usize,
335 depth: fidl::encoding::Depth,
336 ) -> fidl::Result<()> {
337 encoder.debug_check_bounds::<Range>(offset);
338 unsafe {
341 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
342 (ptr as *mut u64).write_unaligned(0);
343 }
344 self.0.encode(encoder, offset + 0, depth)?;
346 self.1.encode(encoder, offset + 8, depth)?;
347 self.2.encode(encoder, offset + 16, depth)?;
348 Ok(())
349 }
350 }
351
352 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Range {
353 #[inline(always)]
354 fn new_empty() -> Self {
355 Self {
356 vmo: fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
357 offset: fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect),
358 size: fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect),
359 }
360 }
361
362 #[inline]
363 unsafe fn decode(
364 &mut self,
365 decoder: &mut fidl::encoding::Decoder<
366 '_,
367 fidl::encoding::DefaultFuchsiaResourceDialect,
368 >,
369 offset: usize,
370 _depth: fidl::encoding::Depth,
371 ) -> fidl::Result<()> {
372 decoder.debug_check_bounds::<Self>(offset);
373 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
375 let padval = unsafe { (ptr as *const u64).read_unaligned() };
376 let mask = 0xffffffff00000000u64;
377 let maskedval = padval & mask;
378 if maskedval != 0 {
379 return Err(fidl::Error::NonZeroPadding {
380 padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
381 });
382 }
383 fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.vmo, decoder, offset + 0, _depth)?;
384 fidl::decode!(
385 u64,
386 fidl::encoding::DefaultFuchsiaResourceDialect,
387 &mut self.offset,
388 decoder,
389 offset + 8,
390 _depth
391 )?;
392 fidl::decode!(
393 u64,
394 fidl::encoding::DefaultFuchsiaResourceDialect,
395 &mut self.size,
396 decoder,
397 offset + 16,
398 _depth
399 )?;
400 Ok(())
401 }
402 }
403
404 impl fidl::encoding::ResourceTypeMarker for Data {
405 type Borrowed<'a> = &'a mut Self;
406 fn take_or_borrow<'a>(
407 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
408 ) -> Self::Borrowed<'a> {
409 value
410 }
411 }
412
413 unsafe impl fidl::encoding::TypeMarker for Data {
414 type Owned = Self;
415
416 #[inline(always)]
417 fn inline_align(_context: fidl::encoding::Context) -> usize {
418 8
419 }
420
421 #[inline(always)]
422 fn inline_size(_context: fidl::encoding::Context) -> usize {
423 16
424 }
425 }
426
427 unsafe impl fidl::encoding::Encode<Data, fidl::encoding::DefaultFuchsiaResourceDialect>
428 for &mut Data
429 {
430 #[inline]
431 unsafe fn encode(
432 self,
433 encoder: &mut fidl::encoding::Encoder<
434 '_,
435 fidl::encoding::DefaultFuchsiaResourceDialect,
436 >,
437 offset: usize,
438 _depth: fidl::encoding::Depth,
439 ) -> fidl::Result<()> {
440 encoder.debug_check_bounds::<Data>(offset);
441 encoder.write_num::<u64>(self.ordinal(), offset);
442 match self {
443 Data::Bytes(ref val) => {
444 fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedVector<u8>, fidl::encoding::DefaultFuchsiaResourceDialect>(
445 <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(val),
446 encoder, offset + 8, _depth
447 )
448 }
449 Data::Buffer(ref mut val) => {
450 fidl::encoding::encode_in_envelope::<Buffer, fidl::encoding::DefaultFuchsiaResourceDialect>(
451 <Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(val),
452 encoder, offset + 8, _depth
453 )
454 }
455 Data::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
456 }
457 }
458 }
459
460 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Data {
461 #[inline(always)]
462 fn new_empty() -> Self {
463 Self::__SourceBreaking { unknown_ordinal: 0 }
464 }
465
466 #[inline]
467 unsafe fn decode(
468 &mut self,
469 decoder: &mut fidl::encoding::Decoder<
470 '_,
471 fidl::encoding::DefaultFuchsiaResourceDialect,
472 >,
473 offset: usize,
474 mut depth: fidl::encoding::Depth,
475 ) -> fidl::Result<()> {
476 decoder.debug_check_bounds::<Self>(offset);
477 #[allow(unused_variables)]
478 let next_out_of_line = decoder.next_out_of_line();
479 let handles_before = decoder.remaining_handles();
480 let (ordinal, inlined, num_bytes, num_handles) =
481 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
482
483 let member_inline_size = match ordinal {
484 1 => {
485 <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(
486 decoder.context,
487 )
488 }
489 2 => <Buffer as fidl::encoding::TypeMarker>::inline_size(decoder.context),
490 0 => return Err(fidl::Error::UnknownUnionTag),
491 _ => num_bytes as usize,
492 };
493
494 if inlined != (member_inline_size <= 4) {
495 return Err(fidl::Error::InvalidInlineBitInEnvelope);
496 }
497 let _inner_offset;
498 if inlined {
499 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
500 _inner_offset = offset + 8;
501 } else {
502 depth.increment()?;
503 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
504 }
505 match ordinal {
506 1 => {
507 #[allow(irrefutable_let_patterns)]
508 if let Data::Bytes(_) = self {
509 } else {
511 *self = Data::Bytes(fidl::new_empty!(
513 fidl::encoding::UnboundedVector<u8>,
514 fidl::encoding::DefaultFuchsiaResourceDialect
515 ));
516 }
517 #[allow(irrefutable_let_patterns)]
518 if let Data::Bytes(ref mut val) = self {
519 fidl::decode!(
520 fidl::encoding::UnboundedVector<u8>,
521 fidl::encoding::DefaultFuchsiaResourceDialect,
522 val,
523 decoder,
524 _inner_offset,
525 depth
526 )?;
527 } else {
528 unreachable!()
529 }
530 }
531 2 => {
532 #[allow(irrefutable_let_patterns)]
533 if let Data::Buffer(_) = self {
534 } else {
536 *self = Data::Buffer(fidl::new_empty!(
538 Buffer,
539 fidl::encoding::DefaultFuchsiaResourceDialect
540 ));
541 }
542 #[allow(irrefutable_let_patterns)]
543 if let Data::Buffer(ref mut val) = self {
544 fidl::decode!(
545 Buffer,
546 fidl::encoding::DefaultFuchsiaResourceDialect,
547 val,
548 decoder,
549 _inner_offset,
550 depth
551 )?;
552 } else {
553 unreachable!()
554 }
555 }
556 #[allow(deprecated)]
557 ordinal => {
558 for _ in 0..num_handles {
559 decoder.drop_next_handle()?;
560 }
561 *self = Data::__SourceBreaking { unknown_ordinal: ordinal };
562 }
563 }
564 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
565 return Err(fidl::Error::InvalidNumBytesInEnvelope);
566 }
567 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
568 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
569 }
570 Ok(())
571 }
572 }
573}