fidl_fuchsia_trf_factory_common/
fidl_fuchsia_trf_factory_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, Default, PartialEq)]
13pub struct ConfigOverride {
14 pub key: Option<String>,
16 pub value: Option<ConfigValue>,
18 #[doc(hidden)]
19 pub __source_breaking: fidl::marker::SourceBreaking,
20}
21
22impl fidl::Persistable for ConfigOverride {}
23
24#[derive(Clone, Debug)]
26pub enum ConfigValue {
27 BoolValue(bool),
29 Int64Value(i64),
31 StringValue(String),
33 #[doc(hidden)]
34 __SourceBreaking { unknown_ordinal: u64 },
35}
36
37#[macro_export]
39macro_rules! ConfigValueUnknown {
40 () => {
41 _
42 };
43}
44
45impl PartialEq for ConfigValue {
47 fn eq(&self, other: &Self) -> bool {
48 match (self, other) {
49 (Self::BoolValue(x), Self::BoolValue(y)) => *x == *y,
50 (Self::Int64Value(x), Self::Int64Value(y)) => *x == *y,
51 (Self::StringValue(x), Self::StringValue(y)) => *x == *y,
52 _ => false,
53 }
54 }
55}
56
57impl ConfigValue {
58 #[inline]
59 pub fn ordinal(&self) -> u64 {
60 match *self {
61 Self::BoolValue(_) => 1,
62 Self::Int64Value(_) => 2,
63 Self::StringValue(_) => 3,
64 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
65 }
66 }
67
68 #[inline]
69 pub fn unknown_variant_for_testing() -> Self {
70 Self::__SourceBreaking { unknown_ordinal: 0 }
71 }
72
73 #[inline]
74 pub fn is_unknown(&self) -> bool {
75 match self {
76 Self::__SourceBreaking { .. } => true,
77 _ => false,
78 }
79 }
80}
81
82impl fidl::Persistable for ConfigValue {}
83
84pub mod factory_ordinals {
85 pub const CREATE_REALM: u64 = 0x6fc9625bf736d437;
86}
87
88mod internal {
89 use super::*;
90
91 impl ConfigOverride {
92 #[inline(always)]
93 fn max_ordinal_present(&self) -> u64 {
94 if let Some(_) = self.value {
95 return 2;
96 }
97 if let Some(_) = self.key {
98 return 1;
99 }
100 0
101 }
102 }
103
104 impl fidl::encoding::ValueTypeMarker for ConfigOverride {
105 type Borrowed<'a> = &'a Self;
106 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
107 value
108 }
109 }
110
111 unsafe impl fidl::encoding::TypeMarker for ConfigOverride {
112 type Owned = Self;
113
114 #[inline(always)]
115 fn inline_align(_context: fidl::encoding::Context) -> usize {
116 8
117 }
118
119 #[inline(always)]
120 fn inline_size(_context: fidl::encoding::Context) -> usize {
121 16
122 }
123 }
124
125 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ConfigOverride, D>
126 for &ConfigOverride
127 {
128 unsafe fn encode(
129 self,
130 encoder: &mut fidl::encoding::Encoder<'_, D>,
131 offset: usize,
132 mut depth: fidl::encoding::Depth,
133 ) -> fidl::Result<()> {
134 encoder.debug_check_bounds::<ConfigOverride>(offset);
135 let max_ordinal: u64 = self.max_ordinal_present();
137 encoder.write_num(max_ordinal, offset);
138 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
139 if max_ordinal == 0 {
141 return Ok(());
142 }
143 depth.increment()?;
144 let envelope_size = 8;
145 let bytes_len = max_ordinal as usize * envelope_size;
146 #[allow(unused_variables)]
147 let offset = encoder.out_of_line_offset(bytes_len);
148 let mut _prev_end_offset: usize = 0;
149 if 1 > max_ordinal {
150 return Ok(());
151 }
152
153 let cur_offset: usize = (1 - 1) * envelope_size;
156
157 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
159
160 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
165 self.key.as_ref().map(
166 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
167 ),
168 encoder,
169 offset + cur_offset,
170 depth,
171 )?;
172
173 _prev_end_offset = cur_offset + envelope_size;
174 if 2 > max_ordinal {
175 return Ok(());
176 }
177
178 let cur_offset: usize = (2 - 1) * envelope_size;
181
182 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
184
185 fidl::encoding::encode_in_envelope_optional::<ConfigValue, D>(
190 self.value.as_ref().map(<ConfigValue as fidl::encoding::ValueTypeMarker>::borrow),
191 encoder,
192 offset + cur_offset,
193 depth,
194 )?;
195
196 _prev_end_offset = cur_offset + envelope_size;
197
198 Ok(())
199 }
200 }
201
202 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConfigOverride {
203 #[inline(always)]
204 fn new_empty() -> Self {
205 Self::default()
206 }
207
208 unsafe fn decode(
209 &mut self,
210 decoder: &mut fidl::encoding::Decoder<'_, D>,
211 offset: usize,
212 mut depth: fidl::encoding::Depth,
213 ) -> fidl::Result<()> {
214 decoder.debug_check_bounds::<Self>(offset);
215 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
216 None => return Err(fidl::Error::NotNullable),
217 Some(len) => len,
218 };
219 if len == 0 {
221 return Ok(());
222 };
223 depth.increment()?;
224 let envelope_size = 8;
225 let bytes_len = len * envelope_size;
226 let offset = decoder.out_of_line_offset(bytes_len)?;
227 let mut _next_ordinal_to_read = 0;
229 let mut next_offset = offset;
230 let end_offset = offset + bytes_len;
231 _next_ordinal_to_read += 1;
232 if next_offset >= end_offset {
233 return Ok(());
234 }
235
236 while _next_ordinal_to_read < 1 {
238 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
239 _next_ordinal_to_read += 1;
240 next_offset += envelope_size;
241 }
242
243 let next_out_of_line = decoder.next_out_of_line();
244 let handles_before = decoder.remaining_handles();
245 if let Some((inlined, num_bytes, num_handles)) =
246 fidl::encoding::decode_envelope_header(decoder, next_offset)?
247 {
248 let member_inline_size =
249 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
250 decoder.context,
251 );
252 if inlined != (member_inline_size <= 4) {
253 return Err(fidl::Error::InvalidInlineBitInEnvelope);
254 }
255 let inner_offset;
256 let mut inner_depth = depth.clone();
257 if inlined {
258 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
259 inner_offset = next_offset;
260 } else {
261 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
262 inner_depth.increment()?;
263 }
264 let val_ref = self
265 .key
266 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
267 fidl::decode!(
268 fidl::encoding::UnboundedString,
269 D,
270 val_ref,
271 decoder,
272 inner_offset,
273 inner_depth
274 )?;
275 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
276 {
277 return Err(fidl::Error::InvalidNumBytesInEnvelope);
278 }
279 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
280 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
281 }
282 }
283
284 next_offset += envelope_size;
285 _next_ordinal_to_read += 1;
286 if next_offset >= end_offset {
287 return Ok(());
288 }
289
290 while _next_ordinal_to_read < 2 {
292 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
293 _next_ordinal_to_read += 1;
294 next_offset += envelope_size;
295 }
296
297 let next_out_of_line = decoder.next_out_of_line();
298 let handles_before = decoder.remaining_handles();
299 if let Some((inlined, num_bytes, num_handles)) =
300 fidl::encoding::decode_envelope_header(decoder, next_offset)?
301 {
302 let member_inline_size =
303 <ConfigValue as fidl::encoding::TypeMarker>::inline_size(decoder.context);
304 if inlined != (member_inline_size <= 4) {
305 return Err(fidl::Error::InvalidInlineBitInEnvelope);
306 }
307 let inner_offset;
308 let mut inner_depth = depth.clone();
309 if inlined {
310 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
311 inner_offset = next_offset;
312 } else {
313 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
314 inner_depth.increment()?;
315 }
316 let val_ref = self.value.get_or_insert_with(|| fidl::new_empty!(ConfigValue, D));
317 fidl::decode!(ConfigValue, D, val_ref, decoder, inner_offset, inner_depth)?;
318 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
319 {
320 return Err(fidl::Error::InvalidNumBytesInEnvelope);
321 }
322 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
323 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
324 }
325 }
326
327 next_offset += envelope_size;
328
329 while next_offset < end_offset {
331 _next_ordinal_to_read += 1;
332 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
333 next_offset += envelope_size;
334 }
335
336 Ok(())
337 }
338 }
339
340 impl fidl::encoding::ValueTypeMarker for ConfigValue {
341 type Borrowed<'a> = &'a Self;
342 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
343 value
344 }
345 }
346
347 unsafe impl fidl::encoding::TypeMarker for ConfigValue {
348 type Owned = Self;
349
350 #[inline(always)]
351 fn inline_align(_context: fidl::encoding::Context) -> usize {
352 8
353 }
354
355 #[inline(always)]
356 fn inline_size(_context: fidl::encoding::Context) -> usize {
357 16
358 }
359 }
360
361 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ConfigValue, D>
362 for &ConfigValue
363 {
364 #[inline]
365 unsafe fn encode(
366 self,
367 encoder: &mut fidl::encoding::Encoder<'_, D>,
368 offset: usize,
369 _depth: fidl::encoding::Depth,
370 ) -> fidl::Result<()> {
371 encoder.debug_check_bounds::<ConfigValue>(offset);
372 encoder.write_num::<u64>(self.ordinal(), offset);
373 match self {
374 ConfigValue::BoolValue(ref val) => fidl::encoding::encode_in_envelope::<bool, D>(
375 <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
376 encoder,
377 offset + 8,
378 _depth,
379 ),
380 ConfigValue::Int64Value(ref val) => fidl::encoding::encode_in_envelope::<i64, D>(
381 <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
382 encoder,
383 offset + 8,
384 _depth,
385 ),
386 ConfigValue::StringValue(ref val) => fidl::encoding::encode_in_envelope::<
387 fidl::encoding::UnboundedString,
388 D,
389 >(
390 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
391 val,
392 ),
393 encoder,
394 offset + 8,
395 _depth,
396 ),
397 ConfigValue::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
398 }
399 }
400 }
401
402 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConfigValue {
403 #[inline(always)]
404 fn new_empty() -> Self {
405 Self::__SourceBreaking { unknown_ordinal: 0 }
406 }
407
408 #[inline]
409 unsafe fn decode(
410 &mut self,
411 decoder: &mut fidl::encoding::Decoder<'_, D>,
412 offset: usize,
413 mut depth: fidl::encoding::Depth,
414 ) -> fidl::Result<()> {
415 decoder.debug_check_bounds::<Self>(offset);
416 #[allow(unused_variables)]
417 let next_out_of_line = decoder.next_out_of_line();
418 let handles_before = decoder.remaining_handles();
419 let (ordinal, inlined, num_bytes, num_handles) =
420 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
421
422 let member_inline_size = match ordinal {
423 1 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
424 2 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
425 3 => <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
426 decoder.context,
427 ),
428 0 => return Err(fidl::Error::UnknownUnionTag),
429 _ => num_bytes as usize,
430 };
431
432 if inlined != (member_inline_size <= 4) {
433 return Err(fidl::Error::InvalidInlineBitInEnvelope);
434 }
435 let _inner_offset;
436 if inlined {
437 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
438 _inner_offset = offset + 8;
439 } else {
440 depth.increment()?;
441 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
442 }
443 match ordinal {
444 1 => {
445 #[allow(irrefutable_let_patterns)]
446 if let ConfigValue::BoolValue(_) = self {
447 } else {
449 *self = ConfigValue::BoolValue(fidl::new_empty!(bool, D));
451 }
452 #[allow(irrefutable_let_patterns)]
453 if let ConfigValue::BoolValue(ref mut val) = self {
454 fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
455 } else {
456 unreachable!()
457 }
458 }
459 2 => {
460 #[allow(irrefutable_let_patterns)]
461 if let ConfigValue::Int64Value(_) = self {
462 } else {
464 *self = ConfigValue::Int64Value(fidl::new_empty!(i64, D));
466 }
467 #[allow(irrefutable_let_patterns)]
468 if let ConfigValue::Int64Value(ref mut val) = self {
469 fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
470 } else {
471 unreachable!()
472 }
473 }
474 3 => {
475 #[allow(irrefutable_let_patterns)]
476 if let ConfigValue::StringValue(_) = self {
477 } else {
479 *self = ConfigValue::StringValue(fidl::new_empty!(
481 fidl::encoding::UnboundedString,
482 D
483 ));
484 }
485 #[allow(irrefutable_let_patterns)]
486 if let ConfigValue::StringValue(ref mut val) = self {
487 fidl::decode!(
488 fidl::encoding::UnboundedString,
489 D,
490 val,
491 decoder,
492 _inner_offset,
493 depth
494 )?;
495 } else {
496 unreachable!()
497 }
498 }
499 #[allow(deprecated)]
500 ordinal => {
501 for _ in 0..num_handles {
502 decoder.drop_next_handle()?;
503 }
504 *self = ConfigValue::__SourceBreaking { unknown_ordinal: ordinal };
505 }
506 }
507 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
508 return Err(fidl::Error::InvalidNumBytesInEnvelope);
509 }
510 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
511 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
512 }
513 Ok(())
514 }
515 }
516}