formaty/src/main.rs

56 lines
1.3 KiB
Rust
Raw Normal View History

2022-04-09 18:40:37 +00:00
use crate::error::FormatyError;
use crate::formatter::format::Format;
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 init() -> Result<(Vec<u8>, Format), FormatyError> {
let args: Args = Args::from_args();
let config = FormatConfig::new(&args.config)?;
let format = config.get_format(&args.format)?;
let data = parse_bytes_from_input_arg(args.data)?;
Ok((data, format))
}
fn main() {
let (data, format) = match init() {
Ok((data, format)) => (data, format),
Err(e) => {
println!("Error initializing: {}", e);
return;
}
};
match format.format_data(&data) {
Ok(data) => println!("{}", data),
Err(_) => print!("Unable to parse data"),
}
}