rs_dbc 0.10.3

A library for CAN DBC parsing and handling
Documentation
use clap::{Arg, command};
use rs_dbc::{self};
use std::fs::File;
use std::io::{self, Read};

fn main() -> io::Result<()> {
    let matches = command!()
        .version("1.0")
        .arg(
            Arg::new("input")
                .short('i')
                .long("input")
                .value_name("FILE")
                .help("DBC file path")
                .default_value("./examples/sample.dbc")
                .num_args(1),
        )
        .get_matches();
    let path = matches.get_one::<String>("input").unwrap();

    let mut f = File::open(path)?;
    let mut buffer = Vec::new();
    f.read_to_end(&mut buffer)?;
    let dbc_in = std::str::from_utf8(&buffer).unwrap();

    let dbc = rs_dbc::Dbc::try_from(dbc_in);
    for msg in dbc.unwrap().messages {
        println!("Message Name: {}", msg.message_name);
        println!("Message ID: 0x{:X}", msg.message_id.raw());
        println!("Size: {}", msg.message_size);
        println!("Cycle Time: {}", msg.cycle_time);
        println!("Transmitter: {}", msg.transmitter);
        println!("ID-Format: {}", msg.message_id.kind());
        println!("Send Type: {}", msg.tx_method);
        println!("");
        for sig in msg.signals {
            println!("Signal Name: {}", sig.name);
            println!("Receivers: {}", sig.receivers.join(", "));
            println!("Start Bit: {}", sig.start_bit);
            println!("Vector Bit: {}", sig.vector_start_bit());
            println!(
                "Vector Value Descriptions: {}",
                sig.vector_value_descriptions()
                    .iter()
                    .map(|(k, v)| format!("{}: {}", k, v))
                    .collect::<Vec<String>>()
                    .join(", ")
            );
            println!("Vector Initial Value: {}", sig.vector_initial_value());
            println!("");
        }
    }
    Ok(())
}