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}