fidl_fuchsia_developer_ffx_speedtest__common/
fidl_fuchsia_developer_ffx_speedtest__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![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/// The default value used for buffer size when not provided.
12pub const DEFAULT_BUFFER_SIZE: u32 = 262144;
13
14/// The default value used for transfer length when not provided.
15pub const DEFAULT_TRANSFER_SIZE: u32 = 1000000;
16
17/// Common transfer parameters.
18#[derive(Clone, Debug, Default, PartialEq)]
19pub struct TransferParams {
20    /// The amount of bytes to transfer.
21    ///
22    /// Must be greater than zero. Interpreted as [`DEFAULT_TRANSFER_SIZE`] if
23    /// absent.
24    pub len_bytes: Option<u32>,
25    /// The length of the buffer to use to read or write.
26    ///
27    /// Must be greater than zero. Interpreted as [`DEFAULT_BUFFER_SIZE`] if
28    /// absent.
29    pub buffer_bytes: Option<u32>,
30    #[doc(hidden)]
31    pub __source_breaking: fidl::marker::SourceBreaking,
32}
33
34impl fidl::Persistable for TransferParams {}
35
36/// The result of a transfer.
37#[derive(Clone, Debug, Default, PartialEq)]
38pub struct TransferReport {
39    /// The total transfer time in nanoseconds from the perspective of the
40    /// server.
41    ///
42    /// Required.
43    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            // Vector header
104            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            // Calling encoder.out_of_line_offset(0) is not allowed.
108            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
122            // are envelope_size bytes.
123            let cur_offset: usize = (1 - 1) * envelope_size;
124
125            // Zero reserved fields.
126            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
127
128            // Safety:
129            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
130            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
131            //   envelope_size bytes, there is always sufficient room.
132            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
145            // are envelope_size bytes.
146            let cur_offset: usize = (2 - 1) * envelope_size;
147
148            // Zero reserved fields.
149            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
150
151            // Safety:
152            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
153            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
154            //   envelope_size bytes, there is always sufficient room.
155            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            // Calling decoder.out_of_line_offset(0) is not allowed.
186            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            // Decode the envelope for each type.
194            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            // Decode unknown envelopes for gaps in ordinals.
203            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            // Decode unknown envelopes for gaps in ordinals.
246            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            // Decode the remaining unknown envelopes.
285            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            // Vector header
337            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            // Calling encoder.out_of_line_offset(0) is not allowed.
341            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
355            // are envelope_size bytes.
356            let cur_offset: usize = (1 - 1) * envelope_size;
357
358            // Zero reserved fields.
359            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
360
361            // Safety:
362            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
363            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
364            //   envelope_size bytes, there is always sufficient room.
365            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            // Calling decoder.out_of_line_offset(0) is not allowed.
396            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            // Decode the envelope for each type.
404            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            // Decode unknown envelopes for gaps in ordinals.
413            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            // Decode the remaining unknown envelopes.
452            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}