fidl_fuchsia_developer_ffx_speedtest__common/
fidl_fuchsia_developer_ffx_speedtest__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 DEFAULT_BUFFER_SIZE: u32 = 262144;
13
14pub const DEFAULT_TRANSFER_SIZE: u32 = 1000000;
16
17#[derive(Clone, Debug, Default, PartialEq)]
19pub struct TransferParams {
20 pub len_bytes: Option<u32>,
25 pub buffer_bytes: Option<u32>,
30 #[doc(hidden)]
31 pub __source_breaking: fidl::marker::SourceBreaking,
32}
33
34impl fidl::Persistable for TransferParams {}
35
36#[derive(Clone, Debug, Default, PartialEq)]
38pub struct TransferReport {
39 pub duration_nsec: Option<u64>,
44 #[doc(hidden)]
45 pub __source_breaking: fidl::marker::SourceBreaking,
46}
47
48impl fidl::Persistable for TransferReport {}
49
50pub mod speedtest_ordinals {
51 pub const PING: u64 = 0x1511ccb237874689;
52 pub const SOCKET_UP: u64 = 0x7c530a369209ae87;
53 pub const SOCKET_DOWN: u64 = 0x426e13de44070751;
54}
55
56mod internal {
57 use super::*;
58
59 impl TransferParams {
60 #[inline(always)]
61 fn max_ordinal_present(&self) -> u64 {
62 if let Some(_) = self.buffer_bytes {
63 return 2;
64 }
65 if let Some(_) = self.len_bytes {
66 return 1;
67 }
68 0
69 }
70 }
71
72 impl fidl::encoding::ValueTypeMarker for TransferParams {
73 type Borrowed<'a> = &'a Self;
74 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
75 value
76 }
77 }
78
79 unsafe impl fidl::encoding::TypeMarker for TransferParams {
80 type Owned = Self;
81
82 #[inline(always)]
83 fn inline_align(_context: fidl::encoding::Context) -> usize {
84 8
85 }
86
87 #[inline(always)]
88 fn inline_size(_context: fidl::encoding::Context) -> usize {
89 16
90 }
91 }
92
93 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TransferParams, D>
94 for &TransferParams
95 {
96 unsafe fn encode(
97 self,
98 encoder: &mut fidl::encoding::Encoder<'_, D>,
99 offset: usize,
100 mut depth: fidl::encoding::Depth,
101 ) -> fidl::Result<()> {
102 encoder.debug_check_bounds::<TransferParams>(offset);
103 let max_ordinal: u64 = self.max_ordinal_present();
105 encoder.write_num(max_ordinal, offset);
106 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
107 if max_ordinal == 0 {
109 return Ok(());
110 }
111 depth.increment()?;
112 let envelope_size = 8;
113 let bytes_len = max_ordinal as usize * envelope_size;
114 #[allow(unused_variables)]
115 let offset = encoder.out_of_line_offset(bytes_len);
116 let mut _prev_end_offset: usize = 0;
117 if 1 > max_ordinal {
118 return Ok(());
119 }
120
121 let cur_offset: usize = (1 - 1) * envelope_size;
124
125 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
127
128 fidl::encoding::encode_in_envelope_optional::<u32, D>(
133 self.len_bytes.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
134 encoder,
135 offset + cur_offset,
136 depth,
137 )?;
138
139 _prev_end_offset = cur_offset + envelope_size;
140 if 2 > max_ordinal {
141 return Ok(());
142 }
143
144 let cur_offset: usize = (2 - 1) * envelope_size;
147
148 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
150
151 fidl::encoding::encode_in_envelope_optional::<u32, D>(
156 self.buffer_bytes.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
157 encoder,
158 offset + cur_offset,
159 depth,
160 )?;
161
162 _prev_end_offset = cur_offset + envelope_size;
163
164 Ok(())
165 }
166 }
167
168 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TransferParams {
169 #[inline(always)]
170 fn new_empty() -> Self {
171 Self::default()
172 }
173
174 unsafe fn decode(
175 &mut self,
176 decoder: &mut fidl::encoding::Decoder<'_, D>,
177 offset: usize,
178 mut depth: fidl::encoding::Depth,
179 ) -> fidl::Result<()> {
180 decoder.debug_check_bounds::<Self>(offset);
181 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
182 None => return Err(fidl::Error::NotNullable),
183 Some(len) => len,
184 };
185 if len == 0 {
187 return Ok(());
188 };
189 depth.increment()?;
190 let envelope_size = 8;
191 let bytes_len = len * envelope_size;
192 let offset = decoder.out_of_line_offset(bytes_len)?;
193 let mut _next_ordinal_to_read = 0;
195 let mut next_offset = offset;
196 let end_offset = offset + bytes_len;
197 _next_ordinal_to_read += 1;
198 if next_offset >= end_offset {
199 return Ok(());
200 }
201
202 while _next_ordinal_to_read < 1 {
204 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
205 _next_ordinal_to_read += 1;
206 next_offset += envelope_size;
207 }
208
209 let next_out_of_line = decoder.next_out_of_line();
210 let handles_before = decoder.remaining_handles();
211 if let Some((inlined, num_bytes, num_handles)) =
212 fidl::encoding::decode_envelope_header(decoder, next_offset)?
213 {
214 let member_inline_size =
215 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
216 if inlined != (member_inline_size <= 4) {
217 return Err(fidl::Error::InvalidInlineBitInEnvelope);
218 }
219 let inner_offset;
220 let mut inner_depth = depth.clone();
221 if inlined {
222 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
223 inner_offset = next_offset;
224 } else {
225 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
226 inner_depth.increment()?;
227 }
228 let val_ref = self.len_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
229 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
230 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
231 {
232 return Err(fidl::Error::InvalidNumBytesInEnvelope);
233 }
234 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
235 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
236 }
237 }
238
239 next_offset += envelope_size;
240 _next_ordinal_to_read += 1;
241 if next_offset >= end_offset {
242 return Ok(());
243 }
244
245 while _next_ordinal_to_read < 2 {
247 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
248 _next_ordinal_to_read += 1;
249 next_offset += envelope_size;
250 }
251
252 let next_out_of_line = decoder.next_out_of_line();
253 let handles_before = decoder.remaining_handles();
254 if let Some((inlined, num_bytes, num_handles)) =
255 fidl::encoding::decode_envelope_header(decoder, next_offset)?
256 {
257 let member_inline_size =
258 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
259 if inlined != (member_inline_size <= 4) {
260 return Err(fidl::Error::InvalidInlineBitInEnvelope);
261 }
262 let inner_offset;
263 let mut inner_depth = depth.clone();
264 if inlined {
265 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
266 inner_offset = next_offset;
267 } else {
268 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
269 inner_depth.increment()?;
270 }
271 let val_ref = self.buffer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
272 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
273 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
274 {
275 return Err(fidl::Error::InvalidNumBytesInEnvelope);
276 }
277 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
278 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
279 }
280 }
281
282 next_offset += envelope_size;
283
284 while next_offset < end_offset {
286 _next_ordinal_to_read += 1;
287 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
288 next_offset += envelope_size;
289 }
290
291 Ok(())
292 }
293 }
294
295 impl TransferReport {
296 #[inline(always)]
297 fn max_ordinal_present(&self) -> u64 {
298 if let Some(_) = self.duration_nsec {
299 return 1;
300 }
301 0
302 }
303 }
304
305 impl fidl::encoding::ValueTypeMarker for TransferReport {
306 type Borrowed<'a> = &'a Self;
307 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
308 value
309 }
310 }
311
312 unsafe impl fidl::encoding::TypeMarker for TransferReport {
313 type Owned = Self;
314
315 #[inline(always)]
316 fn inline_align(_context: fidl::encoding::Context) -> usize {
317 8
318 }
319
320 #[inline(always)]
321 fn inline_size(_context: fidl::encoding::Context) -> usize {
322 16
323 }
324 }
325
326 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TransferReport, D>
327 for &TransferReport
328 {
329 unsafe fn encode(
330 self,
331 encoder: &mut fidl::encoding::Encoder<'_, D>,
332 offset: usize,
333 mut depth: fidl::encoding::Depth,
334 ) -> fidl::Result<()> {
335 encoder.debug_check_bounds::<TransferReport>(offset);
336 let max_ordinal: u64 = self.max_ordinal_present();
338 encoder.write_num(max_ordinal, offset);
339 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
340 if max_ordinal == 0 {
342 return Ok(());
343 }
344 depth.increment()?;
345 let envelope_size = 8;
346 let bytes_len = max_ordinal as usize * envelope_size;
347 #[allow(unused_variables)]
348 let offset = encoder.out_of_line_offset(bytes_len);
349 let mut _prev_end_offset: usize = 0;
350 if 1 > max_ordinal {
351 return Ok(());
352 }
353
354 let cur_offset: usize = (1 - 1) * envelope_size;
357
358 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
360
361 fidl::encoding::encode_in_envelope_optional::<u64, D>(
366 self.duration_nsec.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
367 encoder,
368 offset + cur_offset,
369 depth,
370 )?;
371
372 _prev_end_offset = cur_offset + envelope_size;
373
374 Ok(())
375 }
376 }
377
378 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TransferReport {
379 #[inline(always)]
380 fn new_empty() -> Self {
381 Self::default()
382 }
383
384 unsafe fn decode(
385 &mut self,
386 decoder: &mut fidl::encoding::Decoder<'_, D>,
387 offset: usize,
388 mut depth: fidl::encoding::Depth,
389 ) -> fidl::Result<()> {
390 decoder.debug_check_bounds::<Self>(offset);
391 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
392 None => return Err(fidl::Error::NotNullable),
393 Some(len) => len,
394 };
395 if len == 0 {
397 return Ok(());
398 };
399 depth.increment()?;
400 let envelope_size = 8;
401 let bytes_len = len * envelope_size;
402 let offset = decoder.out_of_line_offset(bytes_len)?;
403 let mut _next_ordinal_to_read = 0;
405 let mut next_offset = offset;
406 let end_offset = offset + bytes_len;
407 _next_ordinal_to_read += 1;
408 if next_offset >= end_offset {
409 return Ok(());
410 }
411
412 while _next_ordinal_to_read < 1 {
414 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
415 _next_ordinal_to_read += 1;
416 next_offset += envelope_size;
417 }
418
419 let next_out_of_line = decoder.next_out_of_line();
420 let handles_before = decoder.remaining_handles();
421 if let Some((inlined, num_bytes, num_handles)) =
422 fidl::encoding::decode_envelope_header(decoder, next_offset)?
423 {
424 let member_inline_size =
425 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
426 if inlined != (member_inline_size <= 4) {
427 return Err(fidl::Error::InvalidInlineBitInEnvelope);
428 }
429 let inner_offset;
430 let mut inner_depth = depth.clone();
431 if inlined {
432 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
433 inner_offset = next_offset;
434 } else {
435 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
436 inner_depth.increment()?;
437 }
438 let val_ref = self.duration_nsec.get_or_insert_with(|| fidl::new_empty!(u64, D));
439 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
440 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
441 {
442 return Err(fidl::Error::InvalidNumBytesInEnvelope);
443 }
444 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
445 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
446 }
447 }
448
449 next_offset += envelope_size;
450
451 while next_offset < end_offset {
453 _next_ordinal_to_read += 1;
454 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
455 next_offset += envelope_size;
456 }
457
458 Ok(())
459 }
460 }
461}