pub fn encode_frame(frame: &Frame) -> Result<Vec<u8>, CodecError>Examples found in repository?
examples/control_seeds.rs (line 182)
167fn verify(directory: &Path) {
168 let mut kinds = Vec::new();
169 for entry in fs::read_dir(directory)
170 .expect("read corpus")
171 .map(Result::unwrap)
172 {
173 let path = entry.path();
174 if path.extension().and_then(|value| value.to_str()) != Some("bin") {
175 continue;
176 }
177 let bytes = fs::read(&path).expect("read seed");
178 let DecodedFrame::Known(frame) = decode_frame(&bytes).expect("seed must decode") else {
179 panic!("{} decoded as Unknown", path.display());
180 };
181 assert_eq!(
182 encode_frame(&frame).expect("re-encode seed"),
183 bytes,
184 "{}",
185 path.display()
186 );
187 kinds.push(frame.message.kind());
188 }
189 kinds.sort_unstable();
190 assert_eq!(kinds, (1_u16..=32).collect::<Vec<_>>());
191 println!(
192 "verified {} Known control seeds (kinds 1..=32)",
193 kinds.len()
194 );
195}
196
197fn main() {
198 let mut args = env::args_os().skip(1);
199 let mode = args.next().expect("mode");
200 let directory = args.next().expect("directory");
201 assert!(args.next().is_none(), "unexpected argument");
202 let directory = Path::new(&directory);
203 if mode == "generate" {
204 fs::create_dir_all(directory).expect("create output");
205 let messages = messages();
206 assert_eq!(messages.len(), 32);
207 for (expected_kind, (name, message)) in (1_u16..=32).zip(messages) {
208 assert_eq!(message.kind(), expected_kind, "{name}");
209 let bytes = encode_frame(&Frame {
210 flags: 0,
211 request: u32::from(expected_kind),
212 message,
213 })
214 .expect("encode seed");
215 assert!(
216 matches!(decode_frame(&bytes), Ok(DecodedFrame::Known(_))),
217 "{name}"
218 );
219 fs::write(
220 directory.join(format!("known-{expected_kind:02}-{name}.bin")),
221 bytes,
222 )
223 .expect("write seed");
224 }
225 } else if mode != "verify" {
226 panic!("mode must be generate or verify");
227 }
228 verify(directory);
229}