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 RailName = String;
13
14pub const MAX_RAIL_NAME_SIZE: u32 = 256;
15
16pub const MIN_POLL_INTERVAL: i64 = 10000000;
18
19#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
20pub enum MeasurementType {
21 Average,
23 Instantaneous,
25 Cumulative,
27 #[doc(hidden)]
28 __SourceBreaking { unknown_ordinal: u32 },
29}
30
31#[macro_export]
33macro_rules! MeasurementTypeUnknown {
34 () => {
35 _
36 };
37}
38
39impl MeasurementType {
40 #[inline]
41 pub fn from_primitive(prim: u32) -> Option<Self> {
42 match prim {
43 1 => Some(Self::Average),
44 2 => Some(Self::Instantaneous),
45 3 => Some(Self::Cumulative),
46 _ => None,
47 }
48 }
49
50 #[inline]
51 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
52 match prim {
53 1 => Self::Average,
54 2 => Self::Instantaneous,
55 3 => Self::Cumulative,
56 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
57 }
58 }
59
60 #[inline]
61 pub fn unknown() -> Self {
62 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
63 }
64
65 #[inline]
66 pub const fn into_primitive(self) -> u32 {
67 match self {
68 Self::Average => 1,
69 Self::Instantaneous => 2,
70 Self::Cumulative => 3,
71 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
72 }
73 }
74
75 #[inline]
76 pub fn is_unknown(&self) -> bool {
77 match self {
78 Self::__SourceBreaking { unknown_ordinal: _ } => true,
79 _ => false,
80 }
81 }
82}
83
84#[derive(Clone, Debug, Default, PartialEq)]
85pub struct CurrentReading {
86 pub current_ua: Option<i32>,
88 pub interval: Option<i64>,
90 pub timestamp: Option<i64>,
92 #[doc(hidden)]
93 pub __source_breaking: fidl::marker::SourceBreaking,
94}
95
96impl fidl::Persistable for CurrentReading {}
97
98#[derive(Clone, Debug, Default, PartialEq)]
99pub struct EnergyReading {
100 pub energy_uj: Option<i64>,
102 pub interval: Option<i64>,
104 pub timestamp: Option<i64>,
106 #[doc(hidden)]
107 pub __source_breaking: fidl::marker::SourceBreaking,
108}
109
110impl fidl::Persistable for EnergyReading {}
111
112#[derive(Clone, Debug, Default, PartialEq)]
113pub struct Options {
114 pub measurement_type: Option<MeasurementType>,
117 #[doc(hidden)]
118 pub __source_breaking: fidl::marker::SourceBreaking,
119}
120
121impl fidl::Persistable for Options {}
122
123#[derive(Clone, Debug, Default, PartialEq)]
125pub struct PollingConfig {
126 pub poll_interval: Option<i64>,
128 pub polls_per_series_entry: Option<u32>,
130 #[doc(hidden)]
131 pub __source_breaking: fidl::marker::SourceBreaking,
132}
133
134impl fidl::Persistable for PollingConfig {}
135
136#[derive(Clone, Debug, Default, PartialEq)]
137pub struct PowerReading {
138 pub power_uw: Option<i32>,
140 pub interval: Option<i64>,
142 pub timestamp: Option<i64>,
144 #[doc(hidden)]
145 pub __source_breaking: fidl::marker::SourceBreaking,
146}
147
148impl fidl::Persistable for PowerReading {}
149
150#[derive(Clone, Debug, Default, PartialEq)]
151pub struct RailMetadata {
152 pub name: Option<String>,
154 pub channel_id: Option<u32>,
156 pub schematic_name: Option<String>,
158 #[doc(hidden)]
159 pub __source_breaking: fidl::marker::SourceBreaking,
160}
161
162impl fidl::Persistable for RailMetadata {}
163
164pub mod device_ordinals {
165 pub const GET_RAIL_METADATA: u64 = 0x10f1af06f7642901;
166 pub const GET_POWER_WATTS: u64 = 0x3f8ada9ce9065924;
167 pub const GET_CURRENT_AMPERES: u64 = 0x22fb9ad39b15d8a5;
168 pub const GET_ENERGY_JOULES: u64 = 0x4bd34b82e636efc9;
169}
170
171pub mod driver_config_ordinals {
172 pub const SET_POLLING_CONFIG: u64 = 0x36ce1193d5909de7;
173 pub const GET_POLLING_CONFIG: u64 = 0x539228d93dd77892;
174 pub const RESET_POLLING_CONFIG: u64 = 0x303419d0841fb28f;
175}
176
177mod internal {
178 use super::*;
179 unsafe impl fidl::encoding::TypeMarker for MeasurementType {
180 type Owned = Self;
181
182 #[inline(always)]
183 fn inline_align(_context: fidl::encoding::Context) -> usize {
184 std::mem::align_of::<u32>()
185 }
186
187 #[inline(always)]
188 fn inline_size(_context: fidl::encoding::Context) -> usize {
189 std::mem::size_of::<u32>()
190 }
191
192 #[inline(always)]
193 fn encode_is_copy() -> bool {
194 false
195 }
196
197 #[inline(always)]
198 fn decode_is_copy() -> bool {
199 false
200 }
201 }
202
203 impl fidl::encoding::ValueTypeMarker for MeasurementType {
204 type Borrowed<'a> = Self;
205 #[inline(always)]
206 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
207 *value
208 }
209 }
210
211 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
212 for MeasurementType
213 {
214 #[inline]
215 unsafe fn encode(
216 self,
217 encoder: &mut fidl::encoding::Encoder<'_, D>,
218 offset: usize,
219 _depth: fidl::encoding::Depth,
220 ) -> fidl::Result<()> {
221 encoder.debug_check_bounds::<Self>(offset);
222 encoder.write_num(self.into_primitive(), offset);
223 Ok(())
224 }
225 }
226
227 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MeasurementType {
228 #[inline(always)]
229 fn new_empty() -> Self {
230 Self::unknown()
231 }
232
233 #[inline]
234 unsafe fn decode(
235 &mut self,
236 decoder: &mut fidl::encoding::Decoder<'_, D>,
237 offset: usize,
238 _depth: fidl::encoding::Depth,
239 ) -> fidl::Result<()> {
240 decoder.debug_check_bounds::<Self>(offset);
241 let prim = decoder.read_num::<u32>(offset);
242
243 *self = Self::from_primitive_allow_unknown(prim);
244 Ok(())
245 }
246 }
247
248 impl CurrentReading {
249 #[inline(always)]
250 fn max_ordinal_present(&self) -> u64 {
251 if let Some(_) = self.timestamp {
252 return 3;
253 }
254 if let Some(_) = self.interval {
255 return 2;
256 }
257 if let Some(_) = self.current_ua {
258 return 1;
259 }
260 0
261 }
262 }
263
264 impl fidl::encoding::ValueTypeMarker for CurrentReading {
265 type Borrowed<'a> = &'a Self;
266 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
267 value
268 }
269 }
270
271 unsafe impl fidl::encoding::TypeMarker for CurrentReading {
272 type Owned = Self;
273
274 #[inline(always)]
275 fn inline_align(_context: fidl::encoding::Context) -> usize {
276 8
277 }
278
279 #[inline(always)]
280 fn inline_size(_context: fidl::encoding::Context) -> usize {
281 16
282 }
283 }
284
285 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CurrentReading, D>
286 for &CurrentReading
287 {
288 unsafe fn encode(
289 self,
290 encoder: &mut fidl::encoding::Encoder<'_, D>,
291 offset: usize,
292 mut depth: fidl::encoding::Depth,
293 ) -> fidl::Result<()> {
294 encoder.debug_check_bounds::<CurrentReading>(offset);
295 let max_ordinal: u64 = self.max_ordinal_present();
297 encoder.write_num(max_ordinal, offset);
298 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
299 if max_ordinal == 0 {
301 return Ok(());
302 }
303 depth.increment()?;
304 let envelope_size = 8;
305 let bytes_len = max_ordinal as usize * envelope_size;
306 #[allow(unused_variables)]
307 let offset = encoder.out_of_line_offset(bytes_len);
308 let mut _prev_end_offset: usize = 0;
309 if 1 > max_ordinal {
310 return Ok(());
311 }
312
313 let cur_offset: usize = (1 - 1) * envelope_size;
316
317 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
319
320 fidl::encoding::encode_in_envelope_optional::<i32, D>(
325 self.current_ua.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
326 encoder,
327 offset + cur_offset,
328 depth,
329 )?;
330
331 _prev_end_offset = cur_offset + envelope_size;
332 if 2 > max_ordinal {
333 return Ok(());
334 }
335
336 let cur_offset: usize = (2 - 1) * envelope_size;
339
340 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
342
343 fidl::encoding::encode_in_envelope_optional::<i64, D>(
348 self.interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
349 encoder,
350 offset + cur_offset,
351 depth,
352 )?;
353
354 _prev_end_offset = cur_offset + envelope_size;
355 if 3 > max_ordinal {
356 return Ok(());
357 }
358
359 let cur_offset: usize = (3 - 1) * envelope_size;
362
363 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
365
366 fidl::encoding::encode_in_envelope_optional::<i64, D>(
371 self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
372 encoder,
373 offset + cur_offset,
374 depth,
375 )?;
376
377 _prev_end_offset = cur_offset + envelope_size;
378
379 Ok(())
380 }
381 }
382
383 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CurrentReading {
384 #[inline(always)]
385 fn new_empty() -> Self {
386 Self::default()
387 }
388
389 unsafe fn decode(
390 &mut self,
391 decoder: &mut fidl::encoding::Decoder<'_, D>,
392 offset: usize,
393 mut depth: fidl::encoding::Depth,
394 ) -> fidl::Result<()> {
395 decoder.debug_check_bounds::<Self>(offset);
396 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
397 None => return Err(fidl::Error::NotNullable),
398 Some(len) => len,
399 };
400 if len == 0 {
402 return Ok(());
403 };
404 depth.increment()?;
405 let envelope_size = 8;
406 let bytes_len = len * envelope_size;
407 let offset = decoder.out_of_line_offset(bytes_len)?;
408 let mut _next_ordinal_to_read = 0;
410 let mut next_offset = offset;
411 let end_offset = offset + bytes_len;
412 _next_ordinal_to_read += 1;
413 if next_offset >= end_offset {
414 return Ok(());
415 }
416
417 while _next_ordinal_to_read < 1 {
419 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
420 _next_ordinal_to_read += 1;
421 next_offset += envelope_size;
422 }
423
424 let next_out_of_line = decoder.next_out_of_line();
425 let handles_before = decoder.remaining_handles();
426 if let Some((inlined, num_bytes, num_handles)) =
427 fidl::encoding::decode_envelope_header(decoder, next_offset)?
428 {
429 let member_inline_size =
430 <i32 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.current_ua.get_or_insert_with(|| fidl::new_empty!(i32, D));
444 fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
445 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
446 {
447 return Err(fidl::Error::InvalidNumBytesInEnvelope);
448 }
449 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
450 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
451 }
452 }
453
454 next_offset += envelope_size;
455 _next_ordinal_to_read += 1;
456 if next_offset >= end_offset {
457 return Ok(());
458 }
459
460 while _next_ordinal_to_read < 2 {
462 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
463 _next_ordinal_to_read += 1;
464 next_offset += envelope_size;
465 }
466
467 let next_out_of_line = decoder.next_out_of_line();
468 let handles_before = decoder.remaining_handles();
469 if let Some((inlined, num_bytes, num_handles)) =
470 fidl::encoding::decode_envelope_header(decoder, next_offset)?
471 {
472 let member_inline_size =
473 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
474 if inlined != (member_inline_size <= 4) {
475 return Err(fidl::Error::InvalidInlineBitInEnvelope);
476 }
477 let inner_offset;
478 let mut inner_depth = depth.clone();
479 if inlined {
480 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
481 inner_offset = next_offset;
482 } else {
483 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
484 inner_depth.increment()?;
485 }
486 let val_ref = self.interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
487 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
488 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
489 {
490 return Err(fidl::Error::InvalidNumBytesInEnvelope);
491 }
492 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
493 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
494 }
495 }
496
497 next_offset += envelope_size;
498 _next_ordinal_to_read += 1;
499 if next_offset >= end_offset {
500 return Ok(());
501 }
502
503 while _next_ordinal_to_read < 3 {
505 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
506 _next_ordinal_to_read += 1;
507 next_offset += envelope_size;
508 }
509
510 let next_out_of_line = decoder.next_out_of_line();
511 let handles_before = decoder.remaining_handles();
512 if let Some((inlined, num_bytes, num_handles)) =
513 fidl::encoding::decode_envelope_header(decoder, next_offset)?
514 {
515 let member_inline_size =
516 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
517 if inlined != (member_inline_size <= 4) {
518 return Err(fidl::Error::InvalidInlineBitInEnvelope);
519 }
520 let inner_offset;
521 let mut inner_depth = depth.clone();
522 if inlined {
523 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
524 inner_offset = next_offset;
525 } else {
526 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
527 inner_depth.increment()?;
528 }
529 let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
530 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
531 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
532 {
533 return Err(fidl::Error::InvalidNumBytesInEnvelope);
534 }
535 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
536 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
537 }
538 }
539
540 next_offset += envelope_size;
541
542 while next_offset < end_offset {
544 _next_ordinal_to_read += 1;
545 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
546 next_offset += envelope_size;
547 }
548
549 Ok(())
550 }
551 }
552
553 impl EnergyReading {
554 #[inline(always)]
555 fn max_ordinal_present(&self) -> u64 {
556 if let Some(_) = self.timestamp {
557 return 3;
558 }
559 if let Some(_) = self.interval {
560 return 2;
561 }
562 if let Some(_) = self.energy_uj {
563 return 1;
564 }
565 0
566 }
567 }
568
569 impl fidl::encoding::ValueTypeMarker for EnergyReading {
570 type Borrowed<'a> = &'a Self;
571 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
572 value
573 }
574 }
575
576 unsafe impl fidl::encoding::TypeMarker for EnergyReading {
577 type Owned = Self;
578
579 #[inline(always)]
580 fn inline_align(_context: fidl::encoding::Context) -> usize {
581 8
582 }
583
584 #[inline(always)]
585 fn inline_size(_context: fidl::encoding::Context) -> usize {
586 16
587 }
588 }
589
590 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EnergyReading, D>
591 for &EnergyReading
592 {
593 unsafe fn encode(
594 self,
595 encoder: &mut fidl::encoding::Encoder<'_, D>,
596 offset: usize,
597 mut depth: fidl::encoding::Depth,
598 ) -> fidl::Result<()> {
599 encoder.debug_check_bounds::<EnergyReading>(offset);
600 let max_ordinal: u64 = self.max_ordinal_present();
602 encoder.write_num(max_ordinal, offset);
603 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
604 if max_ordinal == 0 {
606 return Ok(());
607 }
608 depth.increment()?;
609 let envelope_size = 8;
610 let bytes_len = max_ordinal as usize * envelope_size;
611 #[allow(unused_variables)]
612 let offset = encoder.out_of_line_offset(bytes_len);
613 let mut _prev_end_offset: usize = 0;
614 if 1 > max_ordinal {
615 return Ok(());
616 }
617
618 let cur_offset: usize = (1 - 1) * envelope_size;
621
622 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
624
625 fidl::encoding::encode_in_envelope_optional::<i64, D>(
630 self.energy_uj.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
631 encoder,
632 offset + cur_offset,
633 depth,
634 )?;
635
636 _prev_end_offset = cur_offset + envelope_size;
637 if 2 > max_ordinal {
638 return Ok(());
639 }
640
641 let cur_offset: usize = (2 - 1) * envelope_size;
644
645 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
647
648 fidl::encoding::encode_in_envelope_optional::<i64, D>(
653 self.interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
654 encoder,
655 offset + cur_offset,
656 depth,
657 )?;
658
659 _prev_end_offset = cur_offset + envelope_size;
660 if 3 > max_ordinal {
661 return Ok(());
662 }
663
664 let cur_offset: usize = (3 - 1) * envelope_size;
667
668 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
670
671 fidl::encoding::encode_in_envelope_optional::<i64, D>(
676 self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
677 encoder,
678 offset + cur_offset,
679 depth,
680 )?;
681
682 _prev_end_offset = cur_offset + envelope_size;
683
684 Ok(())
685 }
686 }
687
688 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EnergyReading {
689 #[inline(always)]
690 fn new_empty() -> Self {
691 Self::default()
692 }
693
694 unsafe fn decode(
695 &mut self,
696 decoder: &mut fidl::encoding::Decoder<'_, D>,
697 offset: usize,
698 mut depth: fidl::encoding::Depth,
699 ) -> fidl::Result<()> {
700 decoder.debug_check_bounds::<Self>(offset);
701 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
702 None => return Err(fidl::Error::NotNullable),
703 Some(len) => len,
704 };
705 if len == 0 {
707 return Ok(());
708 };
709 depth.increment()?;
710 let envelope_size = 8;
711 let bytes_len = len * envelope_size;
712 let offset = decoder.out_of_line_offset(bytes_len)?;
713 let mut _next_ordinal_to_read = 0;
715 let mut next_offset = offset;
716 let end_offset = offset + bytes_len;
717 _next_ordinal_to_read += 1;
718 if next_offset >= end_offset {
719 return Ok(());
720 }
721
722 while _next_ordinal_to_read < 1 {
724 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
725 _next_ordinal_to_read += 1;
726 next_offset += envelope_size;
727 }
728
729 let next_out_of_line = decoder.next_out_of_line();
730 let handles_before = decoder.remaining_handles();
731 if let Some((inlined, num_bytes, num_handles)) =
732 fidl::encoding::decode_envelope_header(decoder, next_offset)?
733 {
734 let member_inline_size =
735 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
736 if inlined != (member_inline_size <= 4) {
737 return Err(fidl::Error::InvalidInlineBitInEnvelope);
738 }
739 let inner_offset;
740 let mut inner_depth = depth.clone();
741 if inlined {
742 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
743 inner_offset = next_offset;
744 } else {
745 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
746 inner_depth.increment()?;
747 }
748 let val_ref = self.energy_uj.get_or_insert_with(|| fidl::new_empty!(i64, D));
749 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
750 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
751 {
752 return Err(fidl::Error::InvalidNumBytesInEnvelope);
753 }
754 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
755 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
756 }
757 }
758
759 next_offset += envelope_size;
760 _next_ordinal_to_read += 1;
761 if next_offset >= end_offset {
762 return Ok(());
763 }
764
765 while _next_ordinal_to_read < 2 {
767 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
768 _next_ordinal_to_read += 1;
769 next_offset += envelope_size;
770 }
771
772 let next_out_of_line = decoder.next_out_of_line();
773 let handles_before = decoder.remaining_handles();
774 if let Some((inlined, num_bytes, num_handles)) =
775 fidl::encoding::decode_envelope_header(decoder, next_offset)?
776 {
777 let member_inline_size =
778 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
779 if inlined != (member_inline_size <= 4) {
780 return Err(fidl::Error::InvalidInlineBitInEnvelope);
781 }
782 let inner_offset;
783 let mut inner_depth = depth.clone();
784 if inlined {
785 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
786 inner_offset = next_offset;
787 } else {
788 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
789 inner_depth.increment()?;
790 }
791 let val_ref = self.interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
792 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
793 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
794 {
795 return Err(fidl::Error::InvalidNumBytesInEnvelope);
796 }
797 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
798 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
799 }
800 }
801
802 next_offset += envelope_size;
803 _next_ordinal_to_read += 1;
804 if next_offset >= end_offset {
805 return Ok(());
806 }
807
808 while _next_ordinal_to_read < 3 {
810 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
811 _next_ordinal_to_read += 1;
812 next_offset += envelope_size;
813 }
814
815 let next_out_of_line = decoder.next_out_of_line();
816 let handles_before = decoder.remaining_handles();
817 if let Some((inlined, num_bytes, num_handles)) =
818 fidl::encoding::decode_envelope_header(decoder, next_offset)?
819 {
820 let member_inline_size =
821 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
822 if inlined != (member_inline_size <= 4) {
823 return Err(fidl::Error::InvalidInlineBitInEnvelope);
824 }
825 let inner_offset;
826 let mut inner_depth = depth.clone();
827 if inlined {
828 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
829 inner_offset = next_offset;
830 } else {
831 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
832 inner_depth.increment()?;
833 }
834 let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
835 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
836 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
837 {
838 return Err(fidl::Error::InvalidNumBytesInEnvelope);
839 }
840 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
841 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
842 }
843 }
844
845 next_offset += envelope_size;
846
847 while next_offset < end_offset {
849 _next_ordinal_to_read += 1;
850 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
851 next_offset += envelope_size;
852 }
853
854 Ok(())
855 }
856 }
857
858 impl Options {
859 #[inline(always)]
860 fn max_ordinal_present(&self) -> u64 {
861 if let Some(_) = self.measurement_type {
862 return 1;
863 }
864 0
865 }
866 }
867
868 impl fidl::encoding::ValueTypeMarker for Options {
869 type Borrowed<'a> = &'a Self;
870 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
871 value
872 }
873 }
874
875 unsafe impl fidl::encoding::TypeMarker for Options {
876 type Owned = Self;
877
878 #[inline(always)]
879 fn inline_align(_context: fidl::encoding::Context) -> usize {
880 8
881 }
882
883 #[inline(always)]
884 fn inline_size(_context: fidl::encoding::Context) -> usize {
885 16
886 }
887 }
888
889 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Options, D> for &Options {
890 unsafe fn encode(
891 self,
892 encoder: &mut fidl::encoding::Encoder<'_, D>,
893 offset: usize,
894 mut depth: fidl::encoding::Depth,
895 ) -> fidl::Result<()> {
896 encoder.debug_check_bounds::<Options>(offset);
897 let max_ordinal: u64 = self.max_ordinal_present();
899 encoder.write_num(max_ordinal, offset);
900 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
901 if max_ordinal == 0 {
903 return Ok(());
904 }
905 depth.increment()?;
906 let envelope_size = 8;
907 let bytes_len = max_ordinal as usize * envelope_size;
908 #[allow(unused_variables)]
909 let offset = encoder.out_of_line_offset(bytes_len);
910 let mut _prev_end_offset: usize = 0;
911 if 1 > max_ordinal {
912 return Ok(());
913 }
914
915 let cur_offset: usize = (1 - 1) * envelope_size;
918
919 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
921
922 fidl::encoding::encode_in_envelope_optional::<MeasurementType, D>(
927 self.measurement_type
928 .as_ref()
929 .map(<MeasurementType as fidl::encoding::ValueTypeMarker>::borrow),
930 encoder,
931 offset + cur_offset,
932 depth,
933 )?;
934
935 _prev_end_offset = cur_offset + envelope_size;
936
937 Ok(())
938 }
939 }
940
941 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Options {
942 #[inline(always)]
943 fn new_empty() -> Self {
944 Self::default()
945 }
946
947 unsafe fn decode(
948 &mut self,
949 decoder: &mut fidl::encoding::Decoder<'_, D>,
950 offset: usize,
951 mut depth: fidl::encoding::Depth,
952 ) -> fidl::Result<()> {
953 decoder.debug_check_bounds::<Self>(offset);
954 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
955 None => return Err(fidl::Error::NotNullable),
956 Some(len) => len,
957 };
958 if len == 0 {
960 return Ok(());
961 };
962 depth.increment()?;
963 let envelope_size = 8;
964 let bytes_len = len * envelope_size;
965 let offset = decoder.out_of_line_offset(bytes_len)?;
966 let mut _next_ordinal_to_read = 0;
968 let mut next_offset = offset;
969 let end_offset = offset + bytes_len;
970 _next_ordinal_to_read += 1;
971 if next_offset >= end_offset {
972 return Ok(());
973 }
974
975 while _next_ordinal_to_read < 1 {
977 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
978 _next_ordinal_to_read += 1;
979 next_offset += envelope_size;
980 }
981
982 let next_out_of_line = decoder.next_out_of_line();
983 let handles_before = decoder.remaining_handles();
984 if let Some((inlined, num_bytes, num_handles)) =
985 fidl::encoding::decode_envelope_header(decoder, next_offset)?
986 {
987 let member_inline_size =
988 <MeasurementType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
989 if inlined != (member_inline_size <= 4) {
990 return Err(fidl::Error::InvalidInlineBitInEnvelope);
991 }
992 let inner_offset;
993 let mut inner_depth = depth.clone();
994 if inlined {
995 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
996 inner_offset = next_offset;
997 } else {
998 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
999 inner_depth.increment()?;
1000 }
1001 let val_ref = self
1002 .measurement_type
1003 .get_or_insert_with(|| fidl::new_empty!(MeasurementType, D));
1004 fidl::decode!(MeasurementType, D, val_ref, decoder, inner_offset, inner_depth)?;
1005 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1006 {
1007 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1008 }
1009 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1010 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1011 }
1012 }
1013
1014 next_offset += envelope_size;
1015
1016 while next_offset < end_offset {
1018 _next_ordinal_to_read += 1;
1019 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1020 next_offset += envelope_size;
1021 }
1022
1023 Ok(())
1024 }
1025 }
1026
1027 impl PollingConfig {
1028 #[inline(always)]
1029 fn max_ordinal_present(&self) -> u64 {
1030 if let Some(_) = self.polls_per_series_entry {
1031 return 2;
1032 }
1033 if let Some(_) = self.poll_interval {
1034 return 1;
1035 }
1036 0
1037 }
1038 }
1039
1040 impl fidl::encoding::ValueTypeMarker for PollingConfig {
1041 type Borrowed<'a> = &'a Self;
1042 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1043 value
1044 }
1045 }
1046
1047 unsafe impl fidl::encoding::TypeMarker for PollingConfig {
1048 type Owned = Self;
1049
1050 #[inline(always)]
1051 fn inline_align(_context: fidl::encoding::Context) -> usize {
1052 8
1053 }
1054
1055 #[inline(always)]
1056 fn inline_size(_context: fidl::encoding::Context) -> usize {
1057 16
1058 }
1059 }
1060
1061 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PollingConfig, D>
1062 for &PollingConfig
1063 {
1064 unsafe fn encode(
1065 self,
1066 encoder: &mut fidl::encoding::Encoder<'_, D>,
1067 offset: usize,
1068 mut depth: fidl::encoding::Depth,
1069 ) -> fidl::Result<()> {
1070 encoder.debug_check_bounds::<PollingConfig>(offset);
1071 let max_ordinal: u64 = self.max_ordinal_present();
1073 encoder.write_num(max_ordinal, offset);
1074 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1075 if max_ordinal == 0 {
1077 return Ok(());
1078 }
1079 depth.increment()?;
1080 let envelope_size = 8;
1081 let bytes_len = max_ordinal as usize * envelope_size;
1082 #[allow(unused_variables)]
1083 let offset = encoder.out_of_line_offset(bytes_len);
1084 let mut _prev_end_offset: usize = 0;
1085 if 1 > max_ordinal {
1086 return Ok(());
1087 }
1088
1089 let cur_offset: usize = (1 - 1) * envelope_size;
1092
1093 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1095
1096 fidl::encoding::encode_in_envelope_optional::<i64, D>(
1101 self.poll_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1102 encoder,
1103 offset + cur_offset,
1104 depth,
1105 )?;
1106
1107 _prev_end_offset = cur_offset + envelope_size;
1108 if 2 > max_ordinal {
1109 return Ok(());
1110 }
1111
1112 let cur_offset: usize = (2 - 1) * envelope_size;
1115
1116 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1118
1119 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1124 self.polls_per_series_entry
1125 .as_ref()
1126 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1127 encoder,
1128 offset + cur_offset,
1129 depth,
1130 )?;
1131
1132 _prev_end_offset = cur_offset + envelope_size;
1133
1134 Ok(())
1135 }
1136 }
1137
1138 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PollingConfig {
1139 #[inline(always)]
1140 fn new_empty() -> Self {
1141 Self::default()
1142 }
1143
1144 unsafe fn decode(
1145 &mut self,
1146 decoder: &mut fidl::encoding::Decoder<'_, D>,
1147 offset: usize,
1148 mut depth: fidl::encoding::Depth,
1149 ) -> fidl::Result<()> {
1150 decoder.debug_check_bounds::<Self>(offset);
1151 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1152 None => return Err(fidl::Error::NotNullable),
1153 Some(len) => len,
1154 };
1155 if len == 0 {
1157 return Ok(());
1158 };
1159 depth.increment()?;
1160 let envelope_size = 8;
1161 let bytes_len = len * envelope_size;
1162 let offset = decoder.out_of_line_offset(bytes_len)?;
1163 let mut _next_ordinal_to_read = 0;
1165 let mut next_offset = offset;
1166 let end_offset = offset + bytes_len;
1167 _next_ordinal_to_read += 1;
1168 if next_offset >= end_offset {
1169 return Ok(());
1170 }
1171
1172 while _next_ordinal_to_read < 1 {
1174 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1175 _next_ordinal_to_read += 1;
1176 next_offset += envelope_size;
1177 }
1178
1179 let next_out_of_line = decoder.next_out_of_line();
1180 let handles_before = decoder.remaining_handles();
1181 if let Some((inlined, num_bytes, num_handles)) =
1182 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1183 {
1184 let member_inline_size =
1185 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1186 if inlined != (member_inline_size <= 4) {
1187 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1188 }
1189 let inner_offset;
1190 let mut inner_depth = depth.clone();
1191 if inlined {
1192 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1193 inner_offset = next_offset;
1194 } else {
1195 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1196 inner_depth.increment()?;
1197 }
1198 let val_ref = self.poll_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
1199 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1200 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1201 {
1202 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1203 }
1204 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1205 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1206 }
1207 }
1208
1209 next_offset += envelope_size;
1210 _next_ordinal_to_read += 1;
1211 if next_offset >= end_offset {
1212 return Ok(());
1213 }
1214
1215 while _next_ordinal_to_read < 2 {
1217 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1218 _next_ordinal_to_read += 1;
1219 next_offset += envelope_size;
1220 }
1221
1222 let next_out_of_line = decoder.next_out_of_line();
1223 let handles_before = decoder.remaining_handles();
1224 if let Some((inlined, num_bytes, num_handles)) =
1225 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1226 {
1227 let member_inline_size =
1228 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1229 if inlined != (member_inline_size <= 4) {
1230 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1231 }
1232 let inner_offset;
1233 let mut inner_depth = depth.clone();
1234 if inlined {
1235 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1236 inner_offset = next_offset;
1237 } else {
1238 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1239 inner_depth.increment()?;
1240 }
1241 let val_ref =
1242 self.polls_per_series_entry.get_or_insert_with(|| fidl::new_empty!(u32, D));
1243 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1244 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1245 {
1246 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1247 }
1248 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1249 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1250 }
1251 }
1252
1253 next_offset += envelope_size;
1254
1255 while next_offset < end_offset {
1257 _next_ordinal_to_read += 1;
1258 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1259 next_offset += envelope_size;
1260 }
1261
1262 Ok(())
1263 }
1264 }
1265
1266 impl PowerReading {
1267 #[inline(always)]
1268 fn max_ordinal_present(&self) -> u64 {
1269 if let Some(_) = self.timestamp {
1270 return 3;
1271 }
1272 if let Some(_) = self.interval {
1273 return 2;
1274 }
1275 if let Some(_) = self.power_uw {
1276 return 1;
1277 }
1278 0
1279 }
1280 }
1281
1282 impl fidl::encoding::ValueTypeMarker for PowerReading {
1283 type Borrowed<'a> = &'a Self;
1284 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1285 value
1286 }
1287 }
1288
1289 unsafe impl fidl::encoding::TypeMarker for PowerReading {
1290 type Owned = Self;
1291
1292 #[inline(always)]
1293 fn inline_align(_context: fidl::encoding::Context) -> usize {
1294 8
1295 }
1296
1297 #[inline(always)]
1298 fn inline_size(_context: fidl::encoding::Context) -> usize {
1299 16
1300 }
1301 }
1302
1303 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PowerReading, D>
1304 for &PowerReading
1305 {
1306 unsafe fn encode(
1307 self,
1308 encoder: &mut fidl::encoding::Encoder<'_, D>,
1309 offset: usize,
1310 mut depth: fidl::encoding::Depth,
1311 ) -> fidl::Result<()> {
1312 encoder.debug_check_bounds::<PowerReading>(offset);
1313 let max_ordinal: u64 = self.max_ordinal_present();
1315 encoder.write_num(max_ordinal, offset);
1316 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1317 if max_ordinal == 0 {
1319 return Ok(());
1320 }
1321 depth.increment()?;
1322 let envelope_size = 8;
1323 let bytes_len = max_ordinal as usize * envelope_size;
1324 #[allow(unused_variables)]
1325 let offset = encoder.out_of_line_offset(bytes_len);
1326 let mut _prev_end_offset: usize = 0;
1327 if 1 > max_ordinal {
1328 return Ok(());
1329 }
1330
1331 let cur_offset: usize = (1 - 1) * envelope_size;
1334
1335 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1337
1338 fidl::encoding::encode_in_envelope_optional::<i32, D>(
1343 self.power_uw.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
1344 encoder,
1345 offset + cur_offset,
1346 depth,
1347 )?;
1348
1349 _prev_end_offset = cur_offset + envelope_size;
1350 if 2 > max_ordinal {
1351 return Ok(());
1352 }
1353
1354 let cur_offset: usize = (2 - 1) * envelope_size;
1357
1358 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1360
1361 fidl::encoding::encode_in_envelope_optional::<i64, D>(
1366 self.interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1367 encoder,
1368 offset + cur_offset,
1369 depth,
1370 )?;
1371
1372 _prev_end_offset = cur_offset + envelope_size;
1373 if 3 > max_ordinal {
1374 return Ok(());
1375 }
1376
1377 let cur_offset: usize = (3 - 1) * envelope_size;
1380
1381 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1383
1384 fidl::encoding::encode_in_envelope_optional::<i64, D>(
1389 self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1390 encoder,
1391 offset + cur_offset,
1392 depth,
1393 )?;
1394
1395 _prev_end_offset = cur_offset + envelope_size;
1396
1397 Ok(())
1398 }
1399 }
1400
1401 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PowerReading {
1402 #[inline(always)]
1403 fn new_empty() -> Self {
1404 Self::default()
1405 }
1406
1407 unsafe fn decode(
1408 &mut self,
1409 decoder: &mut fidl::encoding::Decoder<'_, D>,
1410 offset: usize,
1411 mut depth: fidl::encoding::Depth,
1412 ) -> fidl::Result<()> {
1413 decoder.debug_check_bounds::<Self>(offset);
1414 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1415 None => return Err(fidl::Error::NotNullable),
1416 Some(len) => len,
1417 };
1418 if len == 0 {
1420 return Ok(());
1421 };
1422 depth.increment()?;
1423 let envelope_size = 8;
1424 let bytes_len = len * envelope_size;
1425 let offset = decoder.out_of_line_offset(bytes_len)?;
1426 let mut _next_ordinal_to_read = 0;
1428 let mut next_offset = offset;
1429 let end_offset = offset + bytes_len;
1430 _next_ordinal_to_read += 1;
1431 if next_offset >= end_offset {
1432 return Ok(());
1433 }
1434
1435 while _next_ordinal_to_read < 1 {
1437 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1438 _next_ordinal_to_read += 1;
1439 next_offset += envelope_size;
1440 }
1441
1442 let next_out_of_line = decoder.next_out_of_line();
1443 let handles_before = decoder.remaining_handles();
1444 if let Some((inlined, num_bytes, num_handles)) =
1445 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1446 {
1447 let member_inline_size =
1448 <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1449 if inlined != (member_inline_size <= 4) {
1450 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1451 }
1452 let inner_offset;
1453 let mut inner_depth = depth.clone();
1454 if inlined {
1455 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1456 inner_offset = next_offset;
1457 } else {
1458 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1459 inner_depth.increment()?;
1460 }
1461 let val_ref = self.power_uw.get_or_insert_with(|| fidl::new_empty!(i32, D));
1462 fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
1463 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1464 {
1465 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1466 }
1467 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1468 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1469 }
1470 }
1471
1472 next_offset += envelope_size;
1473 _next_ordinal_to_read += 1;
1474 if next_offset >= end_offset {
1475 return Ok(());
1476 }
1477
1478 while _next_ordinal_to_read < 2 {
1480 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1481 _next_ordinal_to_read += 1;
1482 next_offset += envelope_size;
1483 }
1484
1485 let next_out_of_line = decoder.next_out_of_line();
1486 let handles_before = decoder.remaining_handles();
1487 if let Some((inlined, num_bytes, num_handles)) =
1488 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1489 {
1490 let member_inline_size =
1491 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1492 if inlined != (member_inline_size <= 4) {
1493 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1494 }
1495 let inner_offset;
1496 let mut inner_depth = depth.clone();
1497 if inlined {
1498 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1499 inner_offset = next_offset;
1500 } else {
1501 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1502 inner_depth.increment()?;
1503 }
1504 let val_ref = self.interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
1505 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1506 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1507 {
1508 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1509 }
1510 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1511 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1512 }
1513 }
1514
1515 next_offset += envelope_size;
1516 _next_ordinal_to_read += 1;
1517 if next_offset >= end_offset {
1518 return Ok(());
1519 }
1520
1521 while _next_ordinal_to_read < 3 {
1523 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1524 _next_ordinal_to_read += 1;
1525 next_offset += envelope_size;
1526 }
1527
1528 let next_out_of_line = decoder.next_out_of_line();
1529 let handles_before = decoder.remaining_handles();
1530 if let Some((inlined, num_bytes, num_handles)) =
1531 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1532 {
1533 let member_inline_size =
1534 <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1535 if inlined != (member_inline_size <= 4) {
1536 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1537 }
1538 let inner_offset;
1539 let mut inner_depth = depth.clone();
1540 if inlined {
1541 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1542 inner_offset = next_offset;
1543 } else {
1544 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1545 inner_depth.increment()?;
1546 }
1547 let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
1548 fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1549 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1550 {
1551 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1552 }
1553 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1554 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1555 }
1556 }
1557
1558 next_offset += envelope_size;
1559
1560 while next_offset < end_offset {
1562 _next_ordinal_to_read += 1;
1563 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1564 next_offset += envelope_size;
1565 }
1566
1567 Ok(())
1568 }
1569 }
1570
1571 impl RailMetadata {
1572 #[inline(always)]
1573 fn max_ordinal_present(&self) -> u64 {
1574 if let Some(_) = self.schematic_name {
1575 return 3;
1576 }
1577 if let Some(_) = self.channel_id {
1578 return 2;
1579 }
1580 if let Some(_) = self.name {
1581 return 1;
1582 }
1583 0
1584 }
1585 }
1586
1587 impl fidl::encoding::ValueTypeMarker for RailMetadata {
1588 type Borrowed<'a> = &'a Self;
1589 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1590 value
1591 }
1592 }
1593
1594 unsafe impl fidl::encoding::TypeMarker for RailMetadata {
1595 type Owned = Self;
1596
1597 #[inline(always)]
1598 fn inline_align(_context: fidl::encoding::Context) -> usize {
1599 8
1600 }
1601
1602 #[inline(always)]
1603 fn inline_size(_context: fidl::encoding::Context) -> usize {
1604 16
1605 }
1606 }
1607
1608 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RailMetadata, D>
1609 for &RailMetadata
1610 {
1611 unsafe fn encode(
1612 self,
1613 encoder: &mut fidl::encoding::Encoder<'_, D>,
1614 offset: usize,
1615 mut depth: fidl::encoding::Depth,
1616 ) -> fidl::Result<()> {
1617 encoder.debug_check_bounds::<RailMetadata>(offset);
1618 let max_ordinal: u64 = self.max_ordinal_present();
1620 encoder.write_num(max_ordinal, offset);
1621 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1622 if max_ordinal == 0 {
1624 return Ok(());
1625 }
1626 depth.increment()?;
1627 let envelope_size = 8;
1628 let bytes_len = max_ordinal as usize * envelope_size;
1629 #[allow(unused_variables)]
1630 let offset = encoder.out_of_line_offset(bytes_len);
1631 let mut _prev_end_offset: usize = 0;
1632 if 1 > max_ordinal {
1633 return Ok(());
1634 }
1635
1636 let cur_offset: usize = (1 - 1) * envelope_size;
1639
1640 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1642
1643 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
1648 self.name.as_ref().map(
1649 <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
1650 ),
1651 encoder,
1652 offset + cur_offset,
1653 depth,
1654 )?;
1655
1656 _prev_end_offset = cur_offset + envelope_size;
1657 if 2 > max_ordinal {
1658 return Ok(());
1659 }
1660
1661 let cur_offset: usize = (2 - 1) * envelope_size;
1664
1665 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1667
1668 fidl::encoding::encode_in_envelope_optional::<u32, D>(
1673 self.channel_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1674 encoder,
1675 offset + cur_offset,
1676 depth,
1677 )?;
1678
1679 _prev_end_offset = cur_offset + envelope_size;
1680 if 3 > max_ordinal {
1681 return Ok(());
1682 }
1683
1684 let cur_offset: usize = (3 - 1) * envelope_size;
1687
1688 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1690
1691 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
1696 self.schematic_name.as_ref().map(
1697 <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
1698 ),
1699 encoder,
1700 offset + cur_offset,
1701 depth,
1702 )?;
1703
1704 _prev_end_offset = cur_offset + envelope_size;
1705
1706 Ok(())
1707 }
1708 }
1709
1710 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RailMetadata {
1711 #[inline(always)]
1712 fn new_empty() -> Self {
1713 Self::default()
1714 }
1715
1716 unsafe fn decode(
1717 &mut self,
1718 decoder: &mut fidl::encoding::Decoder<'_, D>,
1719 offset: usize,
1720 mut depth: fidl::encoding::Depth,
1721 ) -> fidl::Result<()> {
1722 decoder.debug_check_bounds::<Self>(offset);
1723 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1724 None => return Err(fidl::Error::NotNullable),
1725 Some(len) => len,
1726 };
1727 if len == 0 {
1729 return Ok(());
1730 };
1731 depth.increment()?;
1732 let envelope_size = 8;
1733 let bytes_len = len * envelope_size;
1734 let offset = decoder.out_of_line_offset(bytes_len)?;
1735 let mut _next_ordinal_to_read = 0;
1737 let mut next_offset = offset;
1738 let end_offset = offset + bytes_len;
1739 _next_ordinal_to_read += 1;
1740 if next_offset >= end_offset {
1741 return Ok(());
1742 }
1743
1744 while _next_ordinal_to_read < 1 {
1746 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1747 _next_ordinal_to_read += 1;
1748 next_offset += envelope_size;
1749 }
1750
1751 let next_out_of_line = decoder.next_out_of_line();
1752 let handles_before = decoder.remaining_handles();
1753 if let Some((inlined, num_bytes, num_handles)) =
1754 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1755 {
1756 let member_inline_size =
1757 <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
1758 decoder.context,
1759 );
1760 if inlined != (member_inline_size <= 4) {
1761 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1762 }
1763 let inner_offset;
1764 let mut inner_depth = depth.clone();
1765 if inlined {
1766 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1767 inner_offset = next_offset;
1768 } else {
1769 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1770 inner_depth.increment()?;
1771 }
1772 let val_ref = self
1773 .name
1774 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
1775 fidl::decode!(
1776 fidl::encoding::BoundedString<256>,
1777 D,
1778 val_ref,
1779 decoder,
1780 inner_offset,
1781 inner_depth
1782 )?;
1783 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1784 {
1785 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1786 }
1787 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1788 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1789 }
1790 }
1791
1792 next_offset += envelope_size;
1793 _next_ordinal_to_read += 1;
1794 if next_offset >= end_offset {
1795 return Ok(());
1796 }
1797
1798 while _next_ordinal_to_read < 2 {
1800 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1801 _next_ordinal_to_read += 1;
1802 next_offset += envelope_size;
1803 }
1804
1805 let next_out_of_line = decoder.next_out_of_line();
1806 let handles_before = decoder.remaining_handles();
1807 if let Some((inlined, num_bytes, num_handles)) =
1808 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1809 {
1810 let member_inline_size =
1811 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1812 if inlined != (member_inline_size <= 4) {
1813 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1814 }
1815 let inner_offset;
1816 let mut inner_depth = depth.clone();
1817 if inlined {
1818 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1819 inner_offset = next_offset;
1820 } else {
1821 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1822 inner_depth.increment()?;
1823 }
1824 let val_ref = self.channel_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1825 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1826 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1827 {
1828 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1829 }
1830 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1831 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1832 }
1833 }
1834
1835 next_offset += envelope_size;
1836 _next_ordinal_to_read += 1;
1837 if next_offset >= end_offset {
1838 return Ok(());
1839 }
1840
1841 while _next_ordinal_to_read < 3 {
1843 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1844 _next_ordinal_to_read += 1;
1845 next_offset += envelope_size;
1846 }
1847
1848 let next_out_of_line = decoder.next_out_of_line();
1849 let handles_before = decoder.remaining_handles();
1850 if let Some((inlined, num_bytes, num_handles)) =
1851 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1852 {
1853 let member_inline_size =
1854 <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
1855 decoder.context,
1856 );
1857 if inlined != (member_inline_size <= 4) {
1858 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1859 }
1860 let inner_offset;
1861 let mut inner_depth = depth.clone();
1862 if inlined {
1863 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1864 inner_offset = next_offset;
1865 } else {
1866 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1867 inner_depth.increment()?;
1868 }
1869 let val_ref = self
1870 .schematic_name
1871 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
1872 fidl::decode!(
1873 fidl::encoding::BoundedString<256>,
1874 D,
1875 val_ref,
1876 decoder,
1877 inner_offset,
1878 inner_depth
1879 )?;
1880 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1881 {
1882 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1883 }
1884 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1885 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1886 }
1887 }
1888
1889 next_offset += envelope_size;
1890
1891 while next_offset < end_offset {
1893 _next_ordinal_to_read += 1;
1894 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1895 next_offset += envelope_size;
1896 }
1897
1898 Ok(())
1899 }
1900 }
1901}