receiver_config/
config_lib_rust_config_lib_source.rs

1use fidl::unpersist;
2use fidl_cf_sc_internal_receiverconfig::Config as FidlConfig;
3use fuchsia_component_config::{Config as ComponentConfig, Error};
4use fuchsia_inspect::{ArithmeticArrayProperty, ArrayProperty, Node};
5use std::convert::TryInto;
6const EXPECTED_CHECKSUM: &[u8] = &[
7    0xcd, 0x57, 0xb2, 0xa2, 0x89, 0xbb, 0xb6, 0x11, 0xcf, 0x81, 0x50, 0xec, 0x06, 0xc5, 0x06, 0x4c,
8    0x7c, 0xae, 0x79, 0x0f, 0xaa, 0x73, 0x0b, 0x6f, 0xa1, 0x02, 0xc3, 0x53, 0x7b, 0x94, 0xee, 0x1a,
9];
10#[derive(Debug)]
11pub struct Config {
12    pub my_flag: bool,
13    pub my_int16: i16,
14    pub my_int32: i32,
15    pub my_int64: i64,
16    pub my_int8: i8,
17    pub my_string: String,
18    pub my_uint16: u16,
19    pub my_uint32: u32,
20    pub my_uint64: u64,
21    pub my_uint8: u8,
22    pub my_vector_of_flag: Vec<bool>,
23    pub my_vector_of_int16: Vec<i16>,
24    pub my_vector_of_int32: Vec<i32>,
25    pub my_vector_of_int64: Vec<i64>,
26    pub my_vector_of_int8: Vec<i8>,
27    pub my_vector_of_string: Vec<String>,
28    pub my_vector_of_uint16: Vec<u16>,
29    pub my_vector_of_uint32: Vec<u32>,
30    pub my_vector_of_uint64: Vec<u64>,
31    pub my_vector_of_uint8: Vec<u8>,
32}
33impl Config {
34    #[doc = r" Take the config startup handle and parse its contents."]
35    #[doc = r""]
36    #[doc = r" # Panics"]
37    #[doc = r""]
38    #[doc = r" If the config startup handle was already taken or if it is not valid."]
39    pub fn take_from_startup_handle() -> Self {
40        <Self as ComponentConfig>::take_from_startup_handle()
41    }
42    #[doc = r" Parse `Self` from `vmo`."]
43    pub fn from_vmo(vmo: &zx::Vmo) -> Result<Self, Error> {
44        <Self as ComponentConfig>::from_vmo(vmo)
45    }
46    #[doc = r" Parse `Self` from `bytes`."]
47    pub fn from_bytes(bytes: &[u8]) -> Result<Self, Error> {
48        <Self as ComponentConfig>::from_bytes(bytes)
49    }
50    pub fn record_inspect(&self, inspector_node: &Node) {
51        <Self as ComponentConfig>::record_inspect(self, inspector_node)
52    }
53}
54impl ComponentConfig for Config {
55    #[doc = r" Parse `Self` from `bytes`."]
56    fn from_bytes(bytes: &[u8]) -> Result<Self, Error> {
57        let (checksum_len_bytes, bytes) = bytes.split_at_checked(2).ok_or(Error::TooFewBytes)?;
58        let checksum_len_bytes: [u8; 2] =
59            checksum_len_bytes.try_into().expect("previous call guaranteed 2 element slice");
60        let checksum_length = u16::from_le_bytes(checksum_len_bytes) as usize;
61        let (observed_checksum, bytes) =
62            bytes.split_at_checked(checksum_length).ok_or(Error::TooFewBytes)?;
63        if observed_checksum != EXPECTED_CHECKSUM {
64            return Err(Error::ChecksumMismatch {
65                expected_checksum: EXPECTED_CHECKSUM.to_vec(),
66                observed_checksum: observed_checksum.to_vec(),
67            });
68        }
69        let fidl_config: FidlConfig = unpersist(bytes).map_err(Error::Unpersist)?;
70        Ok(Self {
71            my_flag: fidl_config.my_flag,
72            my_int16: fidl_config.my_int16,
73            my_int32: fidl_config.my_int32,
74            my_int64: fidl_config.my_int64,
75            my_int8: fidl_config.my_int8,
76            my_string: fidl_config.my_string,
77            my_uint16: fidl_config.my_uint16,
78            my_uint32: fidl_config.my_uint32,
79            my_uint64: fidl_config.my_uint64,
80            my_uint8: fidl_config.my_uint8,
81            my_vector_of_flag: fidl_config.my_vector_of_flag,
82            my_vector_of_int16: fidl_config.my_vector_of_int16,
83            my_vector_of_int32: fidl_config.my_vector_of_int32,
84            my_vector_of_int64: fidl_config.my_vector_of_int64,
85            my_vector_of_int8: fidl_config.my_vector_of_int8,
86            my_vector_of_string: fidl_config.my_vector_of_string,
87            my_vector_of_uint16: fidl_config.my_vector_of_uint16,
88            my_vector_of_uint32: fidl_config.my_vector_of_uint32,
89            my_vector_of_uint64: fidl_config.my_vector_of_uint64,
90            my_vector_of_uint8: fidl_config.my_vector_of_uint8,
91        })
92    }
93    fn record_inspect(&self, inspector_node: &Node) {
94        inspector_node.record_bool("my_flag", self.my_flag);
95        inspector_node.record_int("my_int16", self.my_int16 as i64);
96        inspector_node.record_int("my_int32", self.my_int32 as i64);
97        inspector_node.record_int("my_int64", self.my_int64);
98        inspector_node.record_int("my_int8", self.my_int8 as i64);
99        inspector_node.record_string("my_string", &self.my_string);
100        inspector_node.record_uint("my_uint16", self.my_uint16 as u64);
101        inspector_node.record_uint("my_uint32", self.my_uint32 as u64);
102        inspector_node.record_uint("my_uint64", self.my_uint64);
103        inspector_node.record_uint("my_uint8", self.my_uint8 as u64);
104        let arr =
105            inspector_node.create_uint_array("my_vector_of_flag", self.my_vector_of_flag.len());
106        for i in 0..self.my_vector_of_flag.len() {
107            arr.add(i, self.my_vector_of_flag[i] as u64);
108        }
109        inspector_node.record(arr);
110        let arr =
111            inspector_node.create_int_array("my_vector_of_int16", self.my_vector_of_int16.len());
112        for i in 0..self.my_vector_of_int16.len() {
113            arr.add(i, self.my_vector_of_int16[i] as i64);
114        }
115        inspector_node.record(arr);
116        let arr =
117            inspector_node.create_int_array("my_vector_of_int32", self.my_vector_of_int32.len());
118        for i in 0..self.my_vector_of_int32.len() {
119            arr.add(i, self.my_vector_of_int32[i] as i64);
120        }
121        inspector_node.record(arr);
122        let arr =
123            inspector_node.create_int_array("my_vector_of_int64", self.my_vector_of_int64.len());
124        for i in 0..self.my_vector_of_int64.len() {
125            arr.add(i, self.my_vector_of_int64[i]);
126        }
127        inspector_node.record(arr);
128        let arr =
129            inspector_node.create_int_array("my_vector_of_int8", self.my_vector_of_int8.len());
130        for i in 0..self.my_vector_of_int8.len() {
131            arr.add(i, self.my_vector_of_int8[i] as i64);
132        }
133        inspector_node.record(arr);
134        let arr = inspector_node
135            .create_string_array("my_vector_of_string", self.my_vector_of_string.len());
136        for i in 0..self.my_vector_of_string.len() {
137            arr.set(i, &self.my_vector_of_string[i]);
138        }
139        inspector_node.record(arr);
140        let arr =
141            inspector_node.create_uint_array("my_vector_of_uint16", self.my_vector_of_uint16.len());
142        for i in 0..self.my_vector_of_uint16.len() {
143            arr.add(i, self.my_vector_of_uint16[i] as u64);
144        }
145        inspector_node.record(arr);
146        let arr =
147            inspector_node.create_uint_array("my_vector_of_uint32", self.my_vector_of_uint32.len());
148        for i in 0..self.my_vector_of_uint32.len() {
149            arr.add(i, self.my_vector_of_uint32[i] as u64);
150        }
151        inspector_node.record(arr);
152        let arr =
153            inspector_node.create_uint_array("my_vector_of_uint64", self.my_vector_of_uint64.len());
154        for i in 0..self.my_vector_of_uint64.len() {
155            arr.add(i, self.my_vector_of_uint64[i]);
156        }
157        inspector_node.record(arr);
158        let arr =
159            inspector_node.create_uint_array("my_vector_of_uint8", self.my_vector_of_uint8.len());
160        for i in 0..self.my_vector_of_uint8.len() {
161            arr.add(i, self.my_vector_of_uint8[i] as u64);
162        }
163        inspector_node.record(arr);
164    }
165}