fidl_fuchsia_driver_loader_common/
fidl_fuchsia_driver_loader_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
11pub type DynamicLinkingPassiveAbi = u64;
14
15#[derive(Clone, Debug, Default, PartialEq)]
16pub struct DriverHostLoadDriverResponse {
17 pub dynamic_linking_abi: Option<u64>,
19 #[doc(hidden)]
20 pub __source_breaking: fidl::marker::SourceBreaking,
21}
22
23impl fidl::Persistable for DriverHostLoadDriverResponse {}
24
25mod internal {
26 use super::*;
27
28 impl DriverHostLoadDriverResponse {
29 #[inline(always)]
30 fn max_ordinal_present(&self) -> u64 {
31 if let Some(_) = self.dynamic_linking_abi {
32 return 1;
33 }
34 0
35 }
36 }
37
38 impl fidl::encoding::ValueTypeMarker for DriverHostLoadDriverResponse {
39 type Borrowed<'a> = &'a Self;
40 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
41 value
42 }
43 }
44
45 unsafe impl fidl::encoding::TypeMarker for DriverHostLoadDriverResponse {
46 type Owned = Self;
47
48 #[inline(always)]
49 fn inline_align(_context: fidl::encoding::Context) -> usize {
50 8
51 }
52
53 #[inline(always)]
54 fn inline_size(_context: fidl::encoding::Context) -> usize {
55 16
56 }
57 }
58
59 unsafe impl<D: fidl::encoding::ResourceDialect>
60 fidl::encoding::Encode<DriverHostLoadDriverResponse, D> for &DriverHostLoadDriverResponse
61 {
62 unsafe fn encode(
63 self,
64 encoder: &mut fidl::encoding::Encoder<'_, D>,
65 offset: usize,
66 mut depth: fidl::encoding::Depth,
67 ) -> fidl::Result<()> {
68 encoder.debug_check_bounds::<DriverHostLoadDriverResponse>(offset);
69 let max_ordinal: u64 = self.max_ordinal_present();
71 encoder.write_num(max_ordinal, offset);
72 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
73 if max_ordinal == 0 {
75 return Ok(());
76 }
77 depth.increment()?;
78 let envelope_size = 8;
79 let bytes_len = max_ordinal as usize * envelope_size;
80 #[allow(unused_variables)]
81 let offset = encoder.out_of_line_offset(bytes_len);
82 let mut _prev_end_offset: usize = 0;
83 if 1 > max_ordinal {
84 return Ok(());
85 }
86
87 let cur_offset: usize = (1 - 1) * envelope_size;
90
91 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
93
94 fidl::encoding::encode_in_envelope_optional::<u64, D>(
99 self.dynamic_linking_abi
100 .as_ref()
101 .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
102 encoder,
103 offset + cur_offset,
104 depth,
105 )?;
106
107 _prev_end_offset = cur_offset + envelope_size;
108
109 Ok(())
110 }
111 }
112
113 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
114 for DriverHostLoadDriverResponse
115 {
116 #[inline(always)]
117 fn new_empty() -> Self {
118 Self::default()
119 }
120
121 unsafe fn decode(
122 &mut self,
123 decoder: &mut fidl::encoding::Decoder<'_, D>,
124 offset: usize,
125 mut depth: fidl::encoding::Depth,
126 ) -> fidl::Result<()> {
127 decoder.debug_check_bounds::<Self>(offset);
128 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
129 None => return Err(fidl::Error::NotNullable),
130 Some(len) => len,
131 };
132 if len == 0 {
134 return Ok(());
135 };
136 depth.increment()?;
137 let envelope_size = 8;
138 let bytes_len = len * envelope_size;
139 let offset = decoder.out_of_line_offset(bytes_len)?;
140 let mut _next_ordinal_to_read = 0;
142 let mut next_offset = offset;
143 let end_offset = offset + bytes_len;
144 _next_ordinal_to_read += 1;
145 if next_offset >= end_offset {
146 return Ok(());
147 }
148
149 while _next_ordinal_to_read < 1 {
151 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
152 _next_ordinal_to_read += 1;
153 next_offset += envelope_size;
154 }
155
156 let next_out_of_line = decoder.next_out_of_line();
157 let handles_before = decoder.remaining_handles();
158 if let Some((inlined, num_bytes, num_handles)) =
159 fidl::encoding::decode_envelope_header(decoder, next_offset)?
160 {
161 let member_inline_size =
162 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
163 if inlined != (member_inline_size <= 4) {
164 return Err(fidl::Error::InvalidInlineBitInEnvelope);
165 }
166 let inner_offset;
167 let mut inner_depth = depth.clone();
168 if inlined {
169 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
170 inner_offset = next_offset;
171 } else {
172 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
173 inner_depth.increment()?;
174 }
175 let val_ref =
176 self.dynamic_linking_abi.get_or_insert_with(|| fidl::new_empty!(u64, D));
177 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
178 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
179 {
180 return Err(fidl::Error::InvalidNumBytesInEnvelope);
181 }
182 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
183 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
184 }
185 }
186
187 next_offset += envelope_size;
188
189 while next_offset < end_offset {
191 _next_ordinal_to_read += 1;
192 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
193 next_offset += envelope_size;
194 }
195
196 Ok(())
197 }
198 }
199}