fidl_fuchsia_driver_debug_common/
fidl_fuchsia_driver_debug_common.rs1#![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
11pub const MAX_ARG_COUNT: u32 = 128;
12
13pub const MAX_ARG_LENGTH: u32 = 1024;
14
15pub const MAX_COMMAND_COUNT: u32 = 64;
16
17pub const MAX_COMMAND_NAME_LENGTH: u32 = 256;
18
19pub const MAX_DESCRIPTION_LENGTH: u32 = 1024;
20
21#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
22#[repr(C)]
23pub struct DebugExecuteResponse {
24 pub exit_code: i32,
26}
27
28impl fidl::Persistable for DebugExecuteResponse {}
29
30#[derive(Clone, Debug, PartialEq)]
31pub struct DebugListCommandsResponse {
32 pub commands: Vec<CommandInfo>,
33}
34
35impl fidl::Persistable for DebugListCommandsResponse {}
36
37#[derive(Clone, Debug, Default, PartialEq)]
39pub struct CommandInfo {
40 pub name: Option<String>,
42 pub description: Option<String>,
44 #[doc(hidden)]
45 pub __source_breaking: fidl::marker::SourceBreaking,
46}
47
48impl fidl::Persistable for CommandInfo {}
49
50pub mod debug_ordinals {
51 pub const EXECUTE: u64 = 0x5304f66cffdbed45;
52 pub const LIST_COMMANDS: u64 = 0x64f45f16f35cf381;
53}
54
55mod internal {
56 use super::*;
57
58 impl fidl::encoding::ValueTypeMarker for DebugExecuteResponse {
59 type Borrowed<'a> = &'a Self;
60 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
61 value
62 }
63 }
64
65 unsafe impl fidl::encoding::TypeMarker for DebugExecuteResponse {
66 type Owned = Self;
67
68 #[inline(always)]
69 fn inline_align(_context: fidl::encoding::Context) -> usize {
70 4
71 }
72
73 #[inline(always)]
74 fn inline_size(_context: fidl::encoding::Context) -> usize {
75 4
76 }
77 #[inline(always)]
78 fn encode_is_copy() -> bool {
79 true
80 }
81
82 #[inline(always)]
83 fn decode_is_copy() -> bool {
84 true
85 }
86 }
87
88 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DebugExecuteResponse, D>
89 for &DebugExecuteResponse
90 {
91 #[inline]
92 unsafe fn encode(
93 self,
94 encoder: &mut fidl::encoding::Encoder<'_, D>,
95 offset: usize,
96 _depth: fidl::encoding::Depth,
97 ) -> fidl::Result<()> {
98 encoder.debug_check_bounds::<DebugExecuteResponse>(offset);
99 unsafe {
100 let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
102 (buf_ptr as *mut DebugExecuteResponse)
103 .write_unaligned((self as *const DebugExecuteResponse).read());
104 }
107 Ok(())
108 }
109 }
110 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
111 fidl::encoding::Encode<DebugExecuteResponse, D> for (T0,)
112 {
113 #[inline]
114 unsafe fn encode(
115 self,
116 encoder: &mut fidl::encoding::Encoder<'_, D>,
117 offset: usize,
118 depth: fidl::encoding::Depth,
119 ) -> fidl::Result<()> {
120 encoder.debug_check_bounds::<DebugExecuteResponse>(offset);
121 self.0.encode(encoder, offset + 0, depth)?;
125 Ok(())
126 }
127 }
128
129 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DebugExecuteResponse {
130 #[inline(always)]
131 fn new_empty() -> Self {
132 Self { exit_code: fidl::new_empty!(i32, D) }
133 }
134
135 #[inline]
136 unsafe fn decode(
137 &mut self,
138 decoder: &mut fidl::encoding::Decoder<'_, D>,
139 offset: usize,
140 _depth: fidl::encoding::Depth,
141 ) -> fidl::Result<()> {
142 decoder.debug_check_bounds::<Self>(offset);
143 let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
144 unsafe {
147 std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
148 }
149 Ok(())
150 }
151 }
152
153 impl fidl::encoding::ValueTypeMarker for DebugListCommandsResponse {
154 type Borrowed<'a> = &'a Self;
155 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
156 value
157 }
158 }
159
160 unsafe impl fidl::encoding::TypeMarker for DebugListCommandsResponse {
161 type Owned = Self;
162
163 #[inline(always)]
164 fn inline_align(_context: fidl::encoding::Context) -> usize {
165 8
166 }
167
168 #[inline(always)]
169 fn inline_size(_context: fidl::encoding::Context) -> usize {
170 16
171 }
172 }
173
174 unsafe impl<D: fidl::encoding::ResourceDialect>
175 fidl::encoding::Encode<DebugListCommandsResponse, D> for &DebugListCommandsResponse
176 {
177 #[inline]
178 unsafe fn encode(
179 self,
180 encoder: &mut fidl::encoding::Encoder<'_, D>,
181 offset: usize,
182 _depth: fidl::encoding::Depth,
183 ) -> fidl::Result<()> {
184 encoder.debug_check_bounds::<DebugListCommandsResponse>(offset);
185 fidl::encoding::Encode::<DebugListCommandsResponse, D>::encode(
187 (
188 <fidl::encoding::Vector<CommandInfo, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.commands),
189 ),
190 encoder, offset, _depth
191 )
192 }
193 }
194 unsafe impl<
195 D: fidl::encoding::ResourceDialect,
196 T0: fidl::encoding::Encode<fidl::encoding::Vector<CommandInfo, 64>, D>,
197 > fidl::encoding::Encode<DebugListCommandsResponse, D> for (T0,)
198 {
199 #[inline]
200 unsafe fn encode(
201 self,
202 encoder: &mut fidl::encoding::Encoder<'_, D>,
203 offset: usize,
204 depth: fidl::encoding::Depth,
205 ) -> fidl::Result<()> {
206 encoder.debug_check_bounds::<DebugListCommandsResponse>(offset);
207 self.0.encode(encoder, offset + 0, depth)?;
211 Ok(())
212 }
213 }
214
215 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
216 for DebugListCommandsResponse
217 {
218 #[inline(always)]
219 fn new_empty() -> Self {
220 Self { commands: fidl::new_empty!(fidl::encoding::Vector<CommandInfo, 64>, D) }
221 }
222
223 #[inline]
224 unsafe fn decode(
225 &mut self,
226 decoder: &mut fidl::encoding::Decoder<'_, D>,
227 offset: usize,
228 _depth: fidl::encoding::Depth,
229 ) -> fidl::Result<()> {
230 decoder.debug_check_bounds::<Self>(offset);
231 fidl::decode!(fidl::encoding::Vector<CommandInfo, 64>, D, &mut self.commands, decoder, offset + 0, _depth)?;
233 Ok(())
234 }
235 }
236
237 impl CommandInfo {
238 #[inline(always)]
239 fn max_ordinal_present(&self) -> u64 {
240 if let Some(_) = self.description {
241 return 2;
242 }
243 if let Some(_) = self.name {
244 return 1;
245 }
246 0
247 }
248 }
249
250 impl fidl::encoding::ValueTypeMarker for CommandInfo {
251 type Borrowed<'a> = &'a Self;
252 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
253 value
254 }
255 }
256
257 unsafe impl fidl::encoding::TypeMarker for CommandInfo {
258 type Owned = Self;
259
260 #[inline(always)]
261 fn inline_align(_context: fidl::encoding::Context) -> usize {
262 8
263 }
264
265 #[inline(always)]
266 fn inline_size(_context: fidl::encoding::Context) -> usize {
267 16
268 }
269 }
270
271 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CommandInfo, D>
272 for &CommandInfo
273 {
274 unsafe fn encode(
275 self,
276 encoder: &mut fidl::encoding::Encoder<'_, D>,
277 offset: usize,
278 mut depth: fidl::encoding::Depth,
279 ) -> fidl::Result<()> {
280 encoder.debug_check_bounds::<CommandInfo>(offset);
281 let max_ordinal: u64 = self.max_ordinal_present();
283 encoder.write_num(max_ordinal, offset);
284 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
285 if max_ordinal == 0 {
287 return Ok(());
288 }
289 depth.increment()?;
290 let envelope_size = 8;
291 let bytes_len = max_ordinal as usize * envelope_size;
292 #[allow(unused_variables)]
293 let offset = encoder.out_of_line_offset(bytes_len);
294 let mut _prev_end_offset: usize = 0;
295 if 1 > max_ordinal {
296 return Ok(());
297 }
298
299 let cur_offset: usize = (1 - 1) * envelope_size;
302
303 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
305
306 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
311 self.name.as_ref().map(
312 <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
313 ),
314 encoder,
315 offset + cur_offset,
316 depth,
317 )?;
318
319 _prev_end_offset = cur_offset + envelope_size;
320 if 2 > max_ordinal {
321 return Ok(());
322 }
323
324 let cur_offset: usize = (2 - 1) * envelope_size;
327
328 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
330
331 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
336 self.description.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
337 encoder, offset + cur_offset, depth
338 )?;
339
340 _prev_end_offset = cur_offset + envelope_size;
341
342 Ok(())
343 }
344 }
345
346 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CommandInfo {
347 #[inline(always)]
348 fn new_empty() -> Self {
349 Self::default()
350 }
351
352 unsafe fn decode(
353 &mut self,
354 decoder: &mut fidl::encoding::Decoder<'_, D>,
355 offset: usize,
356 mut depth: fidl::encoding::Depth,
357 ) -> fidl::Result<()> {
358 decoder.debug_check_bounds::<Self>(offset);
359 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
360 None => return Err(fidl::Error::NotNullable),
361 Some(len) => len,
362 };
363 if len == 0 {
365 return Ok(());
366 };
367 depth.increment()?;
368 let envelope_size = 8;
369 let bytes_len = len * envelope_size;
370 let offset = decoder.out_of_line_offset(bytes_len)?;
371 let mut _next_ordinal_to_read = 0;
373 let mut next_offset = offset;
374 let end_offset = offset + bytes_len;
375 _next_ordinal_to_read += 1;
376 if next_offset >= end_offset {
377 return Ok(());
378 }
379
380 while _next_ordinal_to_read < 1 {
382 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
383 _next_ordinal_to_read += 1;
384 next_offset += envelope_size;
385 }
386
387 let next_out_of_line = decoder.next_out_of_line();
388 let handles_before = decoder.remaining_handles();
389 if let Some((inlined, num_bytes, num_handles)) =
390 fidl::encoding::decode_envelope_header(decoder, next_offset)?
391 {
392 let member_inline_size =
393 <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
394 decoder.context,
395 );
396 if inlined != (member_inline_size <= 4) {
397 return Err(fidl::Error::InvalidInlineBitInEnvelope);
398 }
399 let inner_offset;
400 let mut inner_depth = depth.clone();
401 if inlined {
402 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
403 inner_offset = next_offset;
404 } else {
405 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
406 inner_depth.increment()?;
407 }
408 let val_ref = self
409 .name
410 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
411 fidl::decode!(
412 fidl::encoding::BoundedString<256>,
413 D,
414 val_ref,
415 decoder,
416 inner_offset,
417 inner_depth
418 )?;
419 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
420 {
421 return Err(fidl::Error::InvalidNumBytesInEnvelope);
422 }
423 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
424 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
425 }
426 }
427
428 next_offset += envelope_size;
429 _next_ordinal_to_read += 1;
430 if next_offset >= end_offset {
431 return Ok(());
432 }
433
434 while _next_ordinal_to_read < 2 {
436 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
437 _next_ordinal_to_read += 1;
438 next_offset += envelope_size;
439 }
440
441 let next_out_of_line = decoder.next_out_of_line();
442 let handles_before = decoder.remaining_handles();
443 if let Some((inlined, num_bytes, num_handles)) =
444 fidl::encoding::decode_envelope_header(decoder, next_offset)?
445 {
446 let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
447 if inlined != (member_inline_size <= 4) {
448 return Err(fidl::Error::InvalidInlineBitInEnvelope);
449 }
450 let inner_offset;
451 let mut inner_depth = depth.clone();
452 if inlined {
453 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
454 inner_offset = next_offset;
455 } else {
456 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
457 inner_depth.increment()?;
458 }
459 let val_ref = self.description.get_or_insert_with(|| {
460 fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
461 });
462 fidl::decode!(
463 fidl::encoding::BoundedString<1024>,
464 D,
465 val_ref,
466 decoder,
467 inner_offset,
468 inner_depth
469 )?;
470 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
471 {
472 return Err(fidl::Error::InvalidNumBytesInEnvelope);
473 }
474 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
475 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
476 }
477 }
478
479 next_offset += envelope_size;
480
481 while next_offset < end_offset {
483 _next_ordinal_to_read += 1;
484 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
485 next_offset += envelope_size;
486 }
487
488 Ok(())
489 }
490 }
491}