hid-decode 0.1.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::{Verbosity, decode_with_options};

#[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 verbosity = Verbosity::default();
    if args.verbose {
        verbosity.display_tag_type = true;
    }

    let Ok(()) = decode_with_options(stdout(), descriptor_bytes, verbosity) else {
        eprintln!("error writing decoded descriptor");
        return ExitCode::FAILURE;
    };

    ExitCode::SUCCESS
}