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>
189 for (T0, T1)
190 {
191 #[inline]
192 unsafe fn encode(
193 self,
194 encoder: &mut fidl::encoding::Encoder<
195 '_,
196 fidl::encoding::DefaultFuchsiaResourceDialect,
197 >,
198 offset: usize,
199 depth: fidl::encoding::Depth,
200 ) -> fidl::Result<()> {
201 encoder.debug_check_bounds::<Buffer>(offset);
202 unsafe {
205 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
206 (ptr as *mut u64).write_unaligned(0);
207 }
208 self.0.encode(encoder, offset + 0, depth)?;
210 self.1.encode(encoder, offset + 8, depth)?;
211 Ok(())
212 }
213 }
214
215 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Buffer {
216 #[inline(always)]
217 fn new_empty() -> Self {
218 Self {
219 vmo: fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
220 size: fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect),
221 }
222 }
223
224 #[inline]
225 unsafe fn decode(
226 &mut self,
227 decoder: &mut fidl::encoding::Decoder<
228 '_,
229 fidl::encoding::DefaultFuchsiaResourceDialect,
230 >,
231 offset: usize,
232 _depth: fidl::encoding::Depth,
233 ) -> fidl::Result<()> {
234 decoder.debug_check_bounds::<Self>(offset);
235 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
237 let padval = unsafe { (ptr as *const u64).read_unaligned() };
238 let mask = 0xffffffff00000000u64;
239 let maskedval = padval & mask;
240 if maskedval != 0 {
241 return Err(fidl::Error::NonZeroPadding {
242 padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
243 });
244 }
245 fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.vmo, decoder, offset + 0, _depth)?;
246 fidl::decode!(
247 u64,
248 fidl::encoding::DefaultFuchsiaResourceDialect,
249 &mut self.size,
250 decoder,
251 offset + 8,
252 _depth
253 )?;
254 Ok(())
255 }
256 }
257
258 impl fidl::encoding::ResourceTypeMarker for Range {
259 type Borrowed<'a> = &'a mut Self;
260 fn take_or_borrow<'a>(
261 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
262 ) -> Self::Borrowed<'a> {
263 value
264 }
265 }
266
267 unsafe impl fidl::encoding::TypeMarker for Range {
268 type Owned = Self;
269
270 #[inline(always)]
271 fn inline_align(_context: fidl::encoding::Context) -> usize {
272 8
273 }
274
275 #[inline(always)]
276 fn inline_size(_context: fidl::encoding::Context) -> usize {
277 24
278 }
279 }
280
281 unsafe impl fidl::encoding::Encode<Range, fidl::encoding::DefaultFuchsiaResourceDialect>
282 for &mut Range
283 {
284 #[inline]
285 unsafe fn encode(
286 self,
287 encoder: &mut fidl::encoding::Encoder<
288 '_,
289 fidl::encoding::DefaultFuchsiaResourceDialect,
290 >,
291 offset: usize,
292 _depth: fidl::encoding::Depth,
293 ) -> fidl::Result<()> {
294 encoder.debug_check_bounds::<Range>(offset);
295 fidl::encoding::Encode::<Range, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
297 (
298 <fidl::encoding::HandleType<
299 fidl::Vmo,
300 { fidl::ObjectType::VMO.into_raw() },
301 2147483648,
302 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
303 &mut self.vmo
304 ),
305 <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.offset),
306 <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.size),
307 ),
308 encoder,
309 offset,
310 _depth,
311 )
312 }
313 }
314 unsafe impl<
315 T0: fidl::encoding::Encode<
316 fidl::encoding::HandleType<
317 fidl::Vmo,
318 { fidl::ObjectType::VMO.into_raw() },
319 2147483648,
320 >,
321 fidl::encoding::DefaultFuchsiaResourceDialect,
322 >,
323 T1: fidl::encoding::Encode<u64, fidl::encoding::DefaultFuchsiaResourceDialect>,
324 T2: fidl::encoding::Encode<u64, fidl::encoding::DefaultFuchsiaResourceDialect>,
325 > fidl::encoding::Encode<Range, fidl::encoding::DefaultFuchsiaResourceDialect>
326 for (T0, T1, T2)
327 {
328 #[inline]
329 unsafe fn encode(
330 self,
331 encoder: &mut fidl::encoding::Encoder<
332 '_,
333 fidl::encoding::DefaultFuchsiaResourceDialect,
334 >,
335 offset: usize,
336 depth: fidl::encoding::Depth,
337 ) -> fidl::Result<()> {
338 encoder.debug_check_bounds::<Range>(offset);
339 unsafe {
342 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
343 (ptr as *mut u64).write_unaligned(0);
344 }
345 self.0.encode(encoder, offset + 0, depth)?;
347 self.1.encode(encoder, offset + 8, depth)?;
348 self.2.encode(encoder, offset + 16, depth)?;
349 Ok(())
350 }
351 }
352
353 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Range {
354 #[inline(always)]
355 fn new_empty() -> Self {
356 Self {
357 vmo: fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect),
358 offset: fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect),
359 size: fidl::new_empty!(u64, fidl::encoding::DefaultFuchsiaResourceDialect),
360 }
361 }
362
363 #[inline]
364 unsafe fn decode(
365 &mut self,
366 decoder: &mut fidl::encoding::Decoder<
367 '_,
368 fidl::encoding::DefaultFuchsiaResourceDialect,
369 >,
370 offset: usize,
371 _depth: fidl::encoding::Depth,
372 ) -> fidl::Result<()> {
373 decoder.debug_check_bounds::<Self>(offset);
374 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
376 let padval = unsafe { (ptr as *const u64).read_unaligned() };
377 let mask = 0xffffffff00000000u64;
378 let maskedval = padval & mask;
379 if maskedval != 0 {
380 return Err(fidl::Error::NonZeroPadding {
381 padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
382 });
383 }
384 fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, &mut self.vmo, decoder, offset + 0, _depth)?;
385 fidl::decode!(
386 u64,
387 fidl::encoding::DefaultFuchsiaResourceDialect,
388 &mut self.offset,
389 decoder,
390 offset + 8,
391 _depth
392 )?;
393 fidl::decode!(
394 u64,
395 fidl::encoding::DefaultFuchsiaResourceDialect,
396 &mut self.size,
397 decoder,
398 offset + 16,
399 _depth
400 )?;
401 Ok(())
402 }
403 }
404
405 impl fidl::encoding::ResourceTypeMarker for Data {
406 type Borrowed<'a> = &'a mut Self;
407 fn take_or_borrow<'a>(
408 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
409 ) -> Self::Borrowed<'a> {
410 value
411 }
412 }
413
414 unsafe impl fidl::encoding::TypeMarker for Data {
415 type Owned = Self;
416
417 #[inline(always)]
418 fn inline_align(_context: fidl::encoding::Context) -> usize {
419 8
420 }
421
422 #[inline(always)]
423 fn inline_size(_context: fidl::encoding::Context) -> usize {
424 16
425 }
426 }
427
428 unsafe impl fidl::encoding::Encode<Data, fidl::encoding::DefaultFuchsiaResourceDialect>
429 for &mut Data
430 {
431 #[inline]
432 unsafe fn encode(
433 self,
434 encoder: &mut fidl::encoding::Encoder<
435 '_,
436 fidl::encoding::DefaultFuchsiaResourceDialect,
437 >,
438 offset: usize,
439 _depth: fidl::encoding::Depth,
440 ) -> fidl::Result<()> {
441 encoder.debug_check_bounds::<Data>(offset);
442 encoder.write_num::<u64>(self.ordinal(), offset);
443 match self {
444 Data::Bytes(ref val) => {
445 fidl::encoding::encode_in_envelope::<fidl::encoding::UnboundedVector<u8>, fidl::encoding::DefaultFuchsiaResourceDialect>(
446 <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(val),
447 encoder, offset + 8, _depth
448 )
449 }
450 Data::Buffer(ref mut val) => {
451 fidl::encoding::encode_in_envelope::<Buffer, fidl::encoding::DefaultFuchsiaResourceDialect>(
452 <Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(val),
453 encoder, offset + 8, _depth
454 )
455 }
456 Data::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
457 }
458 }
459 }
460
461 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Data {
462 #[inline(always)]
463 fn new_empty() -> Self {
464 Self::__SourceBreaking { unknown_ordinal: 0 }
465 }
466
467 #[inline]
468 unsafe fn decode(
469 &mut self,
470 decoder: &mut fidl::encoding::Decoder<
471 '_,
472 fidl::encoding::DefaultFuchsiaResourceDialect,
473 >,
474 offset: usize,
475 mut depth: fidl::encoding::Depth,
476 ) -> fidl::Result<()> {
477 decoder.debug_check_bounds::<Self>(offset);
478 #[allow(unused_variables)]
479 let next_out_of_line = decoder.next_out_of_line();
480 let handles_before = decoder.remaining_handles();
481 let (ordinal, inlined, num_bytes, num_handles) =
482 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
483
484 let member_inline_size = match ordinal {
485 1 => {
486 <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(
487 decoder.context,
488 )
489 }
490 2 => <Buffer as fidl::encoding::TypeMarker>::inline_size(decoder.context),
491 0 => return Err(fidl::Error::UnknownUnionTag),
492 _ => num_bytes as usize,
493 };
494
495 if inlined != (member_inline_size <= 4) {
496 return Err(fidl::Error::InvalidInlineBitInEnvelope);
497 }
498 let _inner_offset;
499 if inlined {
500 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
501 _inner_offset = offset + 8;
502 } else {
503 depth.increment()?;
504 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
505 }
506 match ordinal {
507 1 => {
508 #[allow(irrefutable_let_patterns)]
509 if let Data::Bytes(_) = self {
510 } else {
512 *self = Data::Bytes(fidl::new_empty!(
514 fidl::encoding::UnboundedVector<u8>,
515 fidl::encoding::DefaultFuchsiaResourceDialect
516 ));
517 }
518 #[allow(irrefutable_let_patterns)]
519 if let Data::Bytes(ref mut val) = self {
520 fidl::decode!(
521 fidl::encoding::UnboundedVector<u8>,
522 fidl::encoding::DefaultFuchsiaResourceDialect,
523 val,
524 decoder,
525 _inner_offset,
526 depth
527 )?;
528 } else {
529 unreachable!()
530 }
531 }
532 2 => {
533 #[allow(irrefutable_let_patterns)]
534 if let Data::Buffer(_) = self {
535 } else {
537 *self = Data::Buffer(fidl::new_empty!(
539 Buffer,
540 fidl::encoding::DefaultFuchsiaResourceDialect
541 ));
542 }
543 #[allow(irrefutable_let_patterns)]
544 if let Data::Buffer(ref mut val) = self {
545 fidl::decode!(
546 Buffer,
547 fidl::encoding::DefaultFuchsiaResourceDialect,
548 val,
549 decoder,
550 _inner_offset,
551 depth
552 )?;
553 } else {
554 unreachable!()
555 }
556 }
557 #[allow(deprecated)]
558 ordinal => {
559 for _ in 0..num_handles {
560 decoder.drop_next_handle()?;
561 }
562 *self = Data::__SourceBreaking { unknown_ordinal: ordinal };
563 }
564 }
565 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
566 return Err(fidl::Error::InvalidNumBytesInEnvelope);
567 }
568 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
569 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
570 }
571 Ok(())
572 }
573 }
574}