Skip to main content

encode_frame

Function encode_frame 

Source
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}