hid-decode 0.2.0

HID report descriptor decoding utilities
Documentation
use std::fs::{self, read_dir};

use hid_decode::TextDecoder;

#[test]
fn scan_corpus() {
    for entry_maybe in read_dir("corpus").expect("read_dir failed") {
        let entry = entry_maybe.expect("read_dir failed");
        let name = entry
            .file_name()
            .into_string()
            .expect("non UTF-8 corpus path");

        let descriptor_path = entry.path();
        let descriptor = fs::read(&descriptor_path).unwrap_or_else(|e| {
            panic!(
                "failed to read descriptor at {}: {e}",
                descriptor_path.display()
            )
        });

        check_descriptor(&name, descriptor);
    }
}

fn check_descriptor(name: &str, descriptor: Vec<u8>) {
    let mut decoded = Vec::new();
    let decoder = TextDecoder::new(&mut decoded)
        .display_tag_type()
        .display_raw_bytes();

    let Ok(()) = decoder.decode(&descriptor) else {
        panic!("error writing decoded descriptor");
    };
    let decoded = String::from_utf8(decoded).expect("decoded non-utf8");

    insta::assert_snapshot!(name, decoded);
}