formaty/src/main.rs

58 lines
1.2 KiB
Rust
Raw Normal View History

2022-04-09 18:40:37 +00:00
use crate::error::FormatyError;
use crate::parser::parse_bytes_from_input_arg;
use formatter::FormatConfig;
use std::path::PathBuf;
use structopt::StructOpt;
mod byte_stream;
2022-04-09 18:40:37 +00:00
mod error;
mod formatter;
mod parser;
#[derive(Debug, StructOpt)]
#[structopt(name = "Formaty", about = "Arbitrary Binary Data Formatting")]
pub struct Args {
2022-04-09 18:40:37 +00:00
#[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)?;
2022-04-09 18:40:37 +00:00
let format = config
.formats
.iter()
.find(|f| f.name == args.format)
.ok_or_else(|| 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())
}
}
}