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, #[structopt(help = "Format to parse data as")] format: String, #[structopt(help = "Raw data")] data: Vec, } 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()) } } }