fidl_fuchsia_driver_crash__common/
fidl_fuchsia_driver_crash__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
11#[derive(Clone, Debug, PartialEq)]
12pub struct CrashIntrospectFindDriverCrashResponse {
13 pub info: DriverCrashInfo,
14}
15
16impl fidl::Persistable for CrashIntrospectFindDriverCrashResponse {}
17
18#[derive(Clone, Debug, Default, PartialEq)]
20pub struct DriverCrashInfo {
21 pub url: Option<String>,
22 pub node_moniker: Option<String>,
23 #[doc(hidden)]
24 pub __source_breaking: fidl::marker::SourceBreaking,
25}
26
27impl fidl::Persistable for DriverCrashInfo {}
28
29pub mod crash_introspect_ordinals {
30 pub const FIND_DRIVER_CRASH: u64 = 0x41237ffcc46267bc;
31}
32
33mod internal {
34 use super::*;
35
36 impl fidl::encoding::ValueTypeMarker for CrashIntrospectFindDriverCrashResponse {
37 type Borrowed<'a> = &'a Self;
38 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
39 value
40 }
41 }
42
43 unsafe impl fidl::encoding::TypeMarker for CrashIntrospectFindDriverCrashResponse {
44 type Owned = Self;
45
46 #[inline(always)]
47 fn inline_align(_context: fidl::encoding::Context) -> usize {
48 8
49 }
50
51 #[inline(always)]
52 fn inline_size(_context: fidl::encoding::Context) -> usize {
53 16
54 }
55 }
56
57 unsafe impl<D: fidl::encoding::ResourceDialect>
58 fidl::encoding::Encode<CrashIntrospectFindDriverCrashResponse, D>
59 for &CrashIntrospectFindDriverCrashResponse
60 {
61 #[inline]
62 unsafe fn encode(
63 self,
64 encoder: &mut fidl::encoding::Encoder<'_, D>,
65 offset: usize,
66 _depth: fidl::encoding::Depth,
67 ) -> fidl::Result<()> {
68 encoder.debug_check_bounds::<CrashIntrospectFindDriverCrashResponse>(offset);
69 fidl::encoding::Encode::<CrashIntrospectFindDriverCrashResponse, D>::encode(
71 (<DriverCrashInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.info),),
72 encoder,
73 offset,
74 _depth,
75 )
76 }
77 }
78 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DriverCrashInfo, D>>
79 fidl::encoding::Encode<CrashIntrospectFindDriverCrashResponse, D> for (T0,)
80 {
81 #[inline]
82 unsafe fn encode(
83 self,
84 encoder: &mut fidl::encoding::Encoder<'_, D>,
85 offset: usize,
86 depth: fidl::encoding::Depth,
87 ) -> fidl::Result<()> {
88 encoder.debug_check_bounds::<CrashIntrospectFindDriverCrashResponse>(offset);
89 self.0.encode(encoder, offset + 0, depth)?;
93 Ok(())
94 }
95 }
96
97 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
98 for CrashIntrospectFindDriverCrashResponse
99 {
100 #[inline(always)]
101 fn new_empty() -> Self {
102 Self { info: fidl::new_empty!(DriverCrashInfo, D) }
103 }
104
105 #[inline]
106 unsafe fn decode(
107 &mut self,
108 decoder: &mut fidl::encoding::Decoder<'_, D>,
109 offset: usize,
110 _depth: fidl::encoding::Depth,
111 ) -> fidl::Result<()> {
112 decoder.debug_check_bounds::<Self>(offset);
113 fidl::decode!(DriverCrashInfo, D, &mut self.info, decoder, offset + 0, _depth)?;
115 Ok(())
116 }
117 }
118
119 impl DriverCrashInfo {
120 #[inline(always)]
121 fn max_ordinal_present(&self) -> u64 {
122 if let Some(_) = self.node_moniker {
123 return 2;
124 }
125 if let Some(_) = self.url {
126 return 1;
127 }
128 0
129 }
130 }
131
132 impl fidl::encoding::ValueTypeMarker for DriverCrashInfo {
133 type Borrowed<'a> = &'a Self;
134 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
135 value
136 }
137 }
138
139 unsafe impl fidl::encoding::TypeMarker for DriverCrashInfo {
140 type Owned = Self;
141
142 #[inline(always)]
143 fn inline_align(_context: fidl::encoding::Context) -> usize {
144 8
145 }
146
147 #[inline(always)]
148 fn inline_size(_context: fidl::encoding::Context) -> usize {
149 16
150 }
151 }
152
153 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DriverCrashInfo, D>
154 for &DriverCrashInfo
155 {
156 unsafe fn encode(
157 self,
158 encoder: &mut fidl::encoding::Encoder<'_, D>,
159 offset: usize,
160 mut depth: fidl::encoding::Depth,
161 ) -> fidl::Result<()> {
162 encoder.debug_check_bounds::<DriverCrashInfo>(offset);
163 let max_ordinal: u64 = self.max_ordinal_present();
165 encoder.write_num(max_ordinal, offset);
166 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
167 if max_ordinal == 0 {
169 return Ok(());
170 }
171 depth.increment()?;
172 let envelope_size = 8;
173 let bytes_len = max_ordinal as usize * envelope_size;
174 #[allow(unused_variables)]
175 let offset = encoder.out_of_line_offset(bytes_len);
176 let mut _prev_end_offset: usize = 0;
177 if 1 > max_ordinal {
178 return Ok(());
179 }
180
181 let cur_offset: usize = (1 - 1) * envelope_size;
184
185 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
187
188 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
193 self.url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
194 encoder, offset + cur_offset, depth
195 )?;
196
197 _prev_end_offset = cur_offset + envelope_size;
198 if 2 > max_ordinal {
199 return Ok(());
200 }
201
202 let cur_offset: usize = (2 - 1) * envelope_size;
205
206 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
208
209 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
214 self.node_moniker.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
215 encoder, offset + cur_offset, depth
216 )?;
217
218 _prev_end_offset = cur_offset + envelope_size;
219
220 Ok(())
221 }
222 }
223
224 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverCrashInfo {
225 #[inline(always)]
226 fn new_empty() -> Self {
227 Self::default()
228 }
229
230 unsafe fn decode(
231 &mut self,
232 decoder: &mut fidl::encoding::Decoder<'_, D>,
233 offset: usize,
234 mut depth: fidl::encoding::Depth,
235 ) -> fidl::Result<()> {
236 decoder.debug_check_bounds::<Self>(offset);
237 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
238 None => return Err(fidl::Error::NotNullable),
239 Some(len) => len,
240 };
241 if len == 0 {
243 return Ok(());
244 };
245 depth.increment()?;
246 let envelope_size = 8;
247 let bytes_len = len * envelope_size;
248 let offset = decoder.out_of_line_offset(bytes_len)?;
249 let mut _next_ordinal_to_read = 0;
251 let mut next_offset = offset;
252 let end_offset = offset + bytes_len;
253 _next_ordinal_to_read += 1;
254 if next_offset >= end_offset {
255 return Ok(());
256 }
257
258 while _next_ordinal_to_read < 1 {
260 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
261 _next_ordinal_to_read += 1;
262 next_offset += envelope_size;
263 }
264
265 let next_out_of_line = decoder.next_out_of_line();
266 let handles_before = decoder.remaining_handles();
267 if let Some((inlined, num_bytes, num_handles)) =
268 fidl::encoding::decode_envelope_header(decoder, next_offset)?
269 {
270 let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
271 if inlined != (member_inline_size <= 4) {
272 return Err(fidl::Error::InvalidInlineBitInEnvelope);
273 }
274 let inner_offset;
275 let mut inner_depth = depth.clone();
276 if inlined {
277 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
278 inner_offset = next_offset;
279 } else {
280 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
281 inner_depth.increment()?;
282 }
283 let val_ref = self.url.get_or_insert_with(|| {
284 fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
285 });
286 fidl::decode!(
287 fidl::encoding::BoundedString<4096>,
288 D,
289 val_ref,
290 decoder,
291 inner_offset,
292 inner_depth
293 )?;
294 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
295 {
296 return Err(fidl::Error::InvalidNumBytesInEnvelope);
297 }
298 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
299 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
300 }
301 }
302
303 next_offset += envelope_size;
304 _next_ordinal_to_read += 1;
305 if next_offset >= end_offset {
306 return Ok(());
307 }
308
309 while _next_ordinal_to_read < 2 {
311 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
312 _next_ordinal_to_read += 1;
313 next_offset += envelope_size;
314 }
315
316 let next_out_of_line = decoder.next_out_of_line();
317 let handles_before = decoder.remaining_handles();
318 if let Some((inlined, num_bytes, num_handles)) =
319 fidl::encoding::decode_envelope_header(decoder, next_offset)?
320 {
321 let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
322 if inlined != (member_inline_size <= 4) {
323 return Err(fidl::Error::InvalidInlineBitInEnvelope);
324 }
325 let inner_offset;
326 let mut inner_depth = depth.clone();
327 if inlined {
328 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
329 inner_offset = next_offset;
330 } else {
331 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
332 inner_depth.increment()?;
333 }
334 let val_ref = self.node_moniker.get_or_insert_with(|| {
335 fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
336 });
337 fidl::decode!(
338 fidl::encoding::BoundedString<4096>,
339 D,
340 val_ref,
341 decoder,
342 inner_offset,
343 inner_depth
344 )?;
345 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
346 {
347 return Err(fidl::Error::InvalidNumBytesInEnvelope);
348 }
349 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
350 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
351 }
352 }
353
354 next_offset += envelope_size;
355
356 while next_offset < end_offset {
358 _next_ordinal_to_read += 1;
359 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
360 next_offset += envelope_size;
361 }
362
363 Ok(())
364 }
365 }
366}