formaty/src/main.rs

49 lines
1.2 KiB
Rust
Raw Normal View History

use crate::parser::parse_bytes_from_input_arg;
use formatter::FormatConfig;
use std::path::PathBuf;
use structopt::StructOpt;
use crate::error::FormatyError;
mod byte_stream;
mod formatter;
mod parser;
mod error;
#[derive(Debug, StructOpt)]
#[structopt(name = "Formaty", about = "Arbitrary Binary Data Formatting")]
pub struct Args {
#[structopt(short = "c", long="config", parse(from_os_str), help = "Path to the format config")]
config: Option<PathBuf>,
#[structopt(help = "Format to parse data as")]
format: String,
#[structopt(help = "Raw data")]
data: Vec<String>,
}
fn formaty() -> Result<(), FormatyError> {
let args: Args = Args::from_args();
let config = FormatConfig::new(&args.config)?;
let format = config.formats.iter().find(|f| f.name == args.format).ok_or(FormatyError::FormatNotFound(args.format.to_string()))?;
let data = parse_bytes_from_input_arg(args.data).unwrap();
let data = format.format_data(&data)?;
println!("{}", data);
Ok(())
}
fn main() {
match formaty() {
Ok(_) => {}
Err(e) => {
println!("Error formatting data: {}", e.to_string())
}
}
}