fidl_fuchsia_power__common/
fidl_fuchsia_power__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#[derive(Clone, Debug, Default, PartialEq)]
12pub struct CollaborativeRebootInitiatorPerformPendingRebootResponse {
13    pub rebooting: Option<bool>,
14    #[doc(hidden)]
15    pub __source_breaking: fidl::marker::SourceBreaking,
16}
17
18impl fidl::Persistable for CollaborativeRebootInitiatorPerformPendingRebootResponse {}
19
20pub mod collaborative_reboot_initiator_ordinals {
21    pub const PERFORM_PENDING_REBOOT: u64 = 0x6114c8f94a98f492;
22}
23
24mod internal {
25    use super::*;
26
27    impl CollaborativeRebootInitiatorPerformPendingRebootResponse {
28        #[inline(always)]
29        fn max_ordinal_present(&self) -> u64 {
30            if let Some(_) = self.rebooting {
31                return 1;
32            }
33            0
34        }
35    }
36
37    impl fidl::encoding::ValueTypeMarker for CollaborativeRebootInitiatorPerformPendingRebootResponse {
38        type Borrowed<'a> = &'a Self;
39        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
40            value
41        }
42    }
43
44    unsafe impl fidl::encoding::TypeMarker
45        for CollaborativeRebootInitiatorPerformPendingRebootResponse
46    {
47        type Owned = Self;
48
49        #[inline(always)]
50        fn inline_align(_context: fidl::encoding::Context) -> usize {
51            8
52        }
53
54        #[inline(always)]
55        fn inline_size(_context: fidl::encoding::Context) -> usize {
56            16
57        }
58    }
59
60    unsafe impl<D: fidl::encoding::ResourceDialect>
61        fidl::encoding::Encode<CollaborativeRebootInitiatorPerformPendingRebootResponse, D>
62        for &CollaborativeRebootInitiatorPerformPendingRebootResponse
63    {
64        unsafe fn encode(
65            self,
66            encoder: &mut fidl::encoding::Encoder<'_, D>,
67            offset: usize,
68            mut depth: fidl::encoding::Depth,
69        ) -> fidl::Result<()> {
70            encoder.debug_check_bounds::<CollaborativeRebootInitiatorPerformPendingRebootResponse>(
71                offset,
72            );
73            // Vector header
74            let max_ordinal: u64 = self.max_ordinal_present();
75            encoder.write_num(max_ordinal, offset);
76            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
77            // Calling encoder.out_of_line_offset(0) is not allowed.
78            if max_ordinal == 0 {
79                return Ok(());
80            }
81            depth.increment()?;
82            let envelope_size = 8;
83            let bytes_len = max_ordinal as usize * envelope_size;
84            #[allow(unused_variables)]
85            let offset = encoder.out_of_line_offset(bytes_len);
86            let mut _prev_end_offset: usize = 0;
87            if 1 > max_ordinal {
88                return Ok(());
89            }
90
91            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
92            // are envelope_size bytes.
93            let cur_offset: usize = (1 - 1) * envelope_size;
94
95            // Zero reserved fields.
96            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
97
98            // Safety:
99            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
100            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
101            //   envelope_size bytes, there is always sufficient room.
102            fidl::encoding::encode_in_envelope_optional::<bool, D>(
103                self.rebooting.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
104                encoder,
105                offset + cur_offset,
106                depth,
107            )?;
108
109            _prev_end_offset = cur_offset + envelope_size;
110
111            Ok(())
112        }
113    }
114
115    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
116        for CollaborativeRebootInitiatorPerformPendingRebootResponse
117    {
118        #[inline(always)]
119        fn new_empty() -> Self {
120            Self::default()
121        }
122
123        unsafe fn decode(
124            &mut self,
125            decoder: &mut fidl::encoding::Decoder<'_, D>,
126            offset: usize,
127            mut depth: fidl::encoding::Depth,
128        ) -> fidl::Result<()> {
129            decoder.debug_check_bounds::<Self>(offset);
130            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
131                None => return Err(fidl::Error::NotNullable),
132                Some(len) => len,
133            };
134            // Calling decoder.out_of_line_offset(0) is not allowed.
135            if len == 0 {
136                return Ok(());
137            };
138            depth.increment()?;
139            let envelope_size = 8;
140            let bytes_len = len * envelope_size;
141            let offset = decoder.out_of_line_offset(bytes_len)?;
142            // Decode the envelope for each type.
143            let mut _next_ordinal_to_read = 0;
144            let mut next_offset = offset;
145            let end_offset = offset + bytes_len;
146            _next_ordinal_to_read += 1;
147            if next_offset >= end_offset {
148                return Ok(());
149            }
150
151            // Decode unknown envelopes for gaps in ordinals.
152            while _next_ordinal_to_read < 1 {
153                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
154                _next_ordinal_to_read += 1;
155                next_offset += envelope_size;
156            }
157
158            let next_out_of_line = decoder.next_out_of_line();
159            let handles_before = decoder.remaining_handles();
160            if let Some((inlined, num_bytes, num_handles)) =
161                fidl::encoding::decode_envelope_header(decoder, next_offset)?
162            {
163                let member_inline_size =
164                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
165                if inlined != (member_inline_size <= 4) {
166                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
167                }
168                let inner_offset;
169                let mut inner_depth = depth.clone();
170                if inlined {
171                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
172                    inner_offset = next_offset;
173                } else {
174                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
175                    inner_depth.increment()?;
176                }
177                let val_ref = self.rebooting.get_or_insert_with(|| fidl::new_empty!(bool, D));
178                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
179                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
180                {
181                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
182                }
183                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
184                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
185                }
186            }
187
188            next_offset += envelope_size;
189
190            // Decode the remaining unknown envelopes.
191            while next_offset < end_offset {
192                _next_ordinal_to_read += 1;
193                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
194                next_offset += envelope_size;
195            }
196
197            Ok(())
198        }
199    }
200}