Skip to main content

fidl_fuchsia_trf_factory_common/
fidl_fuchsia_trf_factory_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/// A key-value pair used to override a configuration setting in the realm.
12#[derive(Clone, Debug, Default, PartialEq)]
13pub struct ConfigOverride {
14    /// The configuration key to override.
15    pub key: Option<String>,
16    /// The value to set for the configuration key.
17    pub value: Option<ConfigValue>,
18    #[doc(hidden)]
19    pub __source_breaking: fidl::marker::SourceBreaking,
20}
21
22impl fidl::Persistable for ConfigOverride {}
23
24/// A primitive configuration value used to override component configurations.
25#[derive(Clone, Debug)]
26pub enum ConfigValue {
27    /// A boolean configuration value.
28    BoolValue(bool),
29    /// A 64-bit signed integer configuration value.
30    Int64Value(i64),
31    /// A string configuration value.
32    StringValue(String),
33    #[doc(hidden)]
34    __SourceBreaking { unknown_ordinal: u64 },
35}
36
37/// Pattern that matches an unknown `ConfigValue` member.
38#[macro_export]
39macro_rules! ConfigValueUnknown {
40    () => {
41        _
42    };
43}
44
45// Custom PartialEq so that unknown variants are not equal to themselves.
46impl 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            // Vector header
136            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            // Calling encoder.out_of_line_offset(0) is not allowed.
140            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
154            // are envelope_size bytes.
155            let cur_offset: usize = (1 - 1) * envelope_size;
156
157            // Zero reserved fields.
158            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
159
160            // Safety:
161            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
162            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
163            //   envelope_size bytes, there is always sufficient room.
164            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
179            // are envelope_size bytes.
180            let cur_offset: usize = (2 - 1) * envelope_size;
181
182            // Zero reserved fields.
183            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
184
185            // Safety:
186            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
187            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
188            //   envelope_size bytes, there is always sufficient room.
189            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            // Calling decoder.out_of_line_offset(0) is not allowed.
220            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            // Decode the envelope for each type.
228            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            // Decode unknown envelopes for gaps in ordinals.
237            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            // Decode unknown envelopes for gaps in ordinals.
291            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            // Decode the remaining unknown envelopes.
330            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                        // Do nothing, read the value into the object
448                    } else {
449                        // Initialize `self` to the right variant
450                        *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                        // Do nothing, read the value into the object
463                    } else {
464                        // Initialize `self` to the right variant
465                        *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                        // Do nothing, read the value into the object
478                    } else {
479                        // Initialize `self` to the right variant
480                        *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}