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 HeaderName = Vec<u8>;
13
14pub type HeaderValue = Vec<u8>;
16
17pub type Method = String;
18
19#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
21#[repr(u32)]
22pub enum Error {
23 Internal = 1,
26 UnableToParse = 2,
28 ChannelClosed = 3,
30 Connect = 4,
32 DeadlineExceeded = 5,
34}
35
36impl Error {
37 #[inline]
38 pub fn from_primitive(prim: u32) -> Option<Self> {
39 match prim {
40 1 => Some(Self::Internal),
41 2 => Some(Self::UnableToParse),
42 3 => Some(Self::ChannelClosed),
43 4 => Some(Self::Connect),
44 5 => Some(Self::DeadlineExceeded),
45 _ => None,
46 }
47 }
48
49 #[inline]
50 pub const fn into_primitive(self) -> u32 {
51 self as u32
52 }
53}
54
55#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
57pub struct Header {
58 pub name: Vec<u8>,
60 pub value: Vec<u8>,
62}
63
64impl fidl::Persistable for Header {}
65
66#[derive(Clone, Debug, Default, PartialEq)]
72pub struct RedirectTarget {
73 pub method: Option<String>,
75 pub url: Option<String>,
77 pub referrer: Option<String>,
79 #[doc(hidden)]
80 pub __source_breaking: fidl::marker::SourceBreaking,
81}
82
83impl fidl::Persistable for RedirectTarget {}
84
85mod internal {
86 use super::*;
87 unsafe impl fidl::encoding::TypeMarker for Error {
88 type Owned = Self;
89
90 #[inline(always)]
91 fn inline_align(_context: fidl::encoding::Context) -> usize {
92 std::mem::align_of::<u32>()
93 }
94
95 #[inline(always)]
96 fn inline_size(_context: fidl::encoding::Context) -> usize {
97 std::mem::size_of::<u32>()
98 }
99
100 #[inline(always)]
101 fn encode_is_copy() -> bool {
102 true
103 }
104
105 #[inline(always)]
106 fn decode_is_copy() -> bool {
107 false
108 }
109 }
110
111 impl fidl::encoding::ValueTypeMarker for Error {
112 type Borrowed<'a> = Self;
113 #[inline(always)]
114 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
115 *value
116 }
117 }
118
119 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Error {
120 #[inline]
121 unsafe fn encode(
122 self,
123 encoder: &mut fidl::encoding::Encoder<'_, D>,
124 offset: usize,
125 _depth: fidl::encoding::Depth,
126 ) -> fidl::Result<()> {
127 encoder.debug_check_bounds::<Self>(offset);
128 encoder.write_num(self.into_primitive(), offset);
129 Ok(())
130 }
131 }
132
133 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Error {
134 #[inline(always)]
135 fn new_empty() -> Self {
136 Self::Internal
137 }
138
139 #[inline]
140 unsafe fn decode(
141 &mut self,
142 decoder: &mut fidl::encoding::Decoder<'_, D>,
143 offset: usize,
144 _depth: fidl::encoding::Depth,
145 ) -> fidl::Result<()> {
146 decoder.debug_check_bounds::<Self>(offset);
147 let prim = decoder.read_num::<u32>(offset);
148
149 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
150 Ok(())
151 }
152 }
153
154 impl fidl::encoding::ValueTypeMarker for Header {
155 type Borrowed<'a> = &'a Self;
156 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
157 value
158 }
159 }
160
161 unsafe impl fidl::encoding::TypeMarker for Header {
162 type Owned = Self;
163
164 #[inline(always)]
165 fn inline_align(_context: fidl::encoding::Context) -> usize {
166 8
167 }
168
169 #[inline(always)]
170 fn inline_size(_context: fidl::encoding::Context) -> usize {
171 32
172 }
173 }
174
175 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Header, D> for &Header {
176 #[inline]
177 unsafe fn encode(
178 self,
179 encoder: &mut fidl::encoding::Encoder<'_, D>,
180 offset: usize,
181 _depth: fidl::encoding::Depth,
182 ) -> fidl::Result<()> {
183 encoder.debug_check_bounds::<Header>(offset);
184 fidl::encoding::Encode::<Header, D>::encode(
186 (
187 <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
188 <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
189 ),
190 encoder, offset, _depth
191 )
192 }
193 }
194 unsafe impl<
195 D: fidl::encoding::ResourceDialect,
196 T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u8>, D>,
197 T1: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u8>, D>,
198 > fidl::encoding::Encode<Header, D> for (T0, T1)
199 {
200 #[inline]
201 unsafe fn encode(
202 self,
203 encoder: &mut fidl::encoding::Encoder<'_, D>,
204 offset: usize,
205 depth: fidl::encoding::Depth,
206 ) -> fidl::Result<()> {
207 encoder.debug_check_bounds::<Header>(offset);
208 self.0.encode(encoder, offset + 0, depth)?;
212 self.1.encode(encoder, offset + 16, depth)?;
213 Ok(())
214 }
215 }
216
217 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Header {
218 #[inline(always)]
219 fn new_empty() -> Self {
220 Self {
221 name: fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D),
222 value: fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D),
223 }
224 }
225
226 #[inline]
227 unsafe fn decode(
228 &mut self,
229 decoder: &mut fidl::encoding::Decoder<'_, D>,
230 offset: usize,
231 _depth: fidl::encoding::Depth,
232 ) -> fidl::Result<()> {
233 decoder.debug_check_bounds::<Self>(offset);
234 fidl::decode!(
236 fidl::encoding::UnboundedVector<u8>,
237 D,
238 &mut self.name,
239 decoder,
240 offset + 0,
241 _depth
242 )?;
243 fidl::decode!(
244 fidl::encoding::UnboundedVector<u8>,
245 D,
246 &mut self.value,
247 decoder,
248 offset + 16,
249 _depth
250 )?;
251 Ok(())
252 }
253 }
254
255 impl RedirectTarget {
256 #[inline(always)]
257 fn max_ordinal_present(&self) -> u64 {
258 if let Some(_) = self.referrer {
259 return 3;
260 }
261 if let Some(_) = self.url {
262 return 2;
263 }
264 if let Some(_) = self.method {
265 return 1;
266 }
267 0
268 }
269 }
270
271 impl fidl::encoding::ValueTypeMarker for RedirectTarget {
272 type Borrowed<'a> = &'a Self;
273 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
274 value
275 }
276 }
277
278 unsafe impl fidl::encoding::TypeMarker for RedirectTarget {
279 type Owned = Self;
280
281 #[inline(always)]
282 fn inline_align(_context: fidl::encoding::Context) -> usize {
283 8
284 }
285
286 #[inline(always)]
287 fn inline_size(_context: fidl::encoding::Context) -> usize {
288 16
289 }
290 }
291
292 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RedirectTarget, D>
293 for &RedirectTarget
294 {
295 unsafe fn encode(
296 self,
297 encoder: &mut fidl::encoding::Encoder<'_, D>,
298 offset: usize,
299 mut depth: fidl::encoding::Depth,
300 ) -> fidl::Result<()> {
301 encoder.debug_check_bounds::<RedirectTarget>(offset);
302 let max_ordinal: u64 = self.max_ordinal_present();
304 encoder.write_num(max_ordinal, offset);
305 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
306 if max_ordinal == 0 {
308 return Ok(());
309 }
310 depth.increment()?;
311 let envelope_size = 8;
312 let bytes_len = max_ordinal as usize * envelope_size;
313 #[allow(unused_variables)]
314 let offset = encoder.out_of_line_offset(bytes_len);
315 let mut _prev_end_offset: usize = 0;
316 if 1 > max_ordinal {
317 return Ok(());
318 }
319
320 let cur_offset: usize = (1 - 1) * envelope_size;
323
324 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
326
327 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
332 self.method.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
333 encoder, offset + cur_offset, depth
334 )?;
335
336 _prev_end_offset = cur_offset + envelope_size;
337 if 2 > max_ordinal {
338 return Ok(());
339 }
340
341 let cur_offset: usize = (2 - 1) * envelope_size;
344
345 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
347
348 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
353 self.url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
354 encoder, offset + cur_offset, depth
355 )?;
356
357 _prev_end_offset = cur_offset + envelope_size;
358 if 3 > max_ordinal {
359 return Ok(());
360 }
361
362 let cur_offset: usize = (3 - 1) * envelope_size;
365
366 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
368
369 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
374 self.referrer.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
375 encoder, offset + cur_offset, depth
376 )?;
377
378 _prev_end_offset = cur_offset + envelope_size;
379
380 Ok(())
381 }
382 }
383
384 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RedirectTarget {
385 #[inline(always)]
386 fn new_empty() -> Self {
387 Self::default()
388 }
389
390 unsafe fn decode(
391 &mut self,
392 decoder: &mut fidl::encoding::Decoder<'_, D>,
393 offset: usize,
394 mut depth: fidl::encoding::Depth,
395 ) -> fidl::Result<()> {
396 decoder.debug_check_bounds::<Self>(offset);
397 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
398 None => return Err(fidl::Error::NotNullable),
399 Some(len) => len,
400 };
401 if len == 0 {
403 return Ok(());
404 };
405 depth.increment()?;
406 let envelope_size = 8;
407 let bytes_len = len * envelope_size;
408 let offset = decoder.out_of_line_offset(bytes_len)?;
409 let mut _next_ordinal_to_read = 0;
411 let mut next_offset = offset;
412 let end_offset = offset + bytes_len;
413 _next_ordinal_to_read += 1;
414 if next_offset >= end_offset {
415 return Ok(());
416 }
417
418 while _next_ordinal_to_read < 1 {
420 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
421 _next_ordinal_to_read += 1;
422 next_offset += envelope_size;
423 }
424
425 let next_out_of_line = decoder.next_out_of_line();
426 let handles_before = decoder.remaining_handles();
427 if let Some((inlined, num_bytes, num_handles)) =
428 fidl::encoding::decode_envelope_header(decoder, next_offset)?
429 {
430 let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
431 if inlined != (member_inline_size <= 4) {
432 return Err(fidl::Error::InvalidInlineBitInEnvelope);
433 }
434 let inner_offset;
435 let mut inner_depth = depth.clone();
436 if inlined {
437 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
438 inner_offset = next_offset;
439 } else {
440 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
441 inner_depth.increment()?;
442 }
443 let val_ref = self.method.get_or_insert_with(|| {
444 fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
445 });
446 fidl::decode!(
447 fidl::encoding::BoundedString<1024>,
448 D,
449 val_ref,
450 decoder,
451 inner_offset,
452 inner_depth
453 )?;
454 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
455 {
456 return Err(fidl::Error::InvalidNumBytesInEnvelope);
457 }
458 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
459 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
460 }
461 }
462
463 next_offset += envelope_size;
464 _next_ordinal_to_read += 1;
465 if next_offset >= end_offset {
466 return Ok(());
467 }
468
469 while _next_ordinal_to_read < 2 {
471 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
472 _next_ordinal_to_read += 1;
473 next_offset += envelope_size;
474 }
475
476 let next_out_of_line = decoder.next_out_of_line();
477 let handles_before = decoder.remaining_handles();
478 if let Some((inlined, num_bytes, num_handles)) =
479 fidl::encoding::decode_envelope_header(decoder, next_offset)?
480 {
481 let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
482 if inlined != (member_inline_size <= 4) {
483 return Err(fidl::Error::InvalidInlineBitInEnvelope);
484 }
485 let inner_offset;
486 let mut inner_depth = depth.clone();
487 if inlined {
488 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
489 inner_offset = next_offset;
490 } else {
491 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
492 inner_depth.increment()?;
493 }
494 let val_ref = self.url.get_or_insert_with(|| {
495 fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
496 });
497 fidl::decode!(
498 fidl::encoding::BoundedString<4096>,
499 D,
500 val_ref,
501 decoder,
502 inner_offset,
503 inner_depth
504 )?;
505 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
506 {
507 return Err(fidl::Error::InvalidNumBytesInEnvelope);
508 }
509 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
510 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
511 }
512 }
513
514 next_offset += envelope_size;
515 _next_ordinal_to_read += 1;
516 if next_offset >= end_offset {
517 return Ok(());
518 }
519
520 while _next_ordinal_to_read < 3 {
522 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
523 _next_ordinal_to_read += 1;
524 next_offset += envelope_size;
525 }
526
527 let next_out_of_line = decoder.next_out_of_line();
528 let handles_before = decoder.remaining_handles();
529 if let Some((inlined, num_bytes, num_handles)) =
530 fidl::encoding::decode_envelope_header(decoder, next_offset)?
531 {
532 let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
533 if inlined != (member_inline_size <= 4) {
534 return Err(fidl::Error::InvalidInlineBitInEnvelope);
535 }
536 let inner_offset;
537 let mut inner_depth = depth.clone();
538 if inlined {
539 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
540 inner_offset = next_offset;
541 } else {
542 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
543 inner_depth.increment()?;
544 }
545 let val_ref = self.referrer.get_or_insert_with(|| {
546 fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
547 });
548 fidl::decode!(
549 fidl::encoding::BoundedString<4096>,
550 D,
551 val_ref,
552 decoder,
553 inner_offset,
554 inner_depth
555 )?;
556 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
557 {
558 return Err(fidl::Error::InvalidNumBytesInEnvelope);
559 }
560 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
561 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
562 }
563 }
564
565 next_offset += envelope_size;
566
567 while next_offset < end_offset {
569 _next_ordinal_to_read += 1;
570 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
571 next_offset += envelope_size;
572 }
573
574 Ok(())
575 }
576 }
577}