hid-decode 0.2.0

HID report descriptor decoding utilities
Documentation
use std::io::stdout;
use std::path::PathBuf;
use std::process::ExitCode;

use clap::Parser;
use hid_decode::TextDecoder;

#[derive(Debug, Clone, Parser)]
struct Arguments {
    /// A file containing a binary HID descriptor.
    descriptor_filename: PathBuf,
    /// Increase verbosity.
    #[arg(short)]
    verbose: bool,
}

fn main() -> ExitCode {
    let args = Arguments::parse();

    let descriptor_bytes = match std::fs::read(&args.descriptor_filename) {
        Ok(bytes) => bytes,
        Err(e) => {
            eprintln!("failed to read {}: {e}", args.descriptor_filename.display());
            return ExitCode::FAILURE;
        }
    };

    let mut decoder = TextDecoder::new(stdout());

    if args.verbose {
        decoder = decoder.display_tag_type();
        decoder = decoder.display_raw_bytes();
    }

    let Ok(()) = decoder.decode(&descriptor_bytes) else {
        eprintln!("error writing decoded descriptor");
        return ExitCode::FAILURE;
    };

    ExitCode::SUCCESS
}