use std::fs::File;
use std::path;
use json_carver::{Carver, Reader, Writer, DEFAULT_MIN_JSON_SIZE};
use clap::Parser;
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
#[arg(short, long)]
input: Option<path::PathBuf>,
#[arg(short, long)]
output: Option<path::PathBuf>,
#[arg(short, long)]
report: Option<path::PathBuf>,
#[arg(long, default_value_t = false)]
replace_newlines: bool,
#[arg(long, default_value_t = DEFAULT_MIN_JSON_SIZE)]
min_size: usize,
#[arg(long, default_value_t = false)]
fix_incomplete: bool,
#[arg(long, default_value_t = false)]
report_all: bool,
}
fn main() {
let args = Args::parse();
let reader = match args.input {
None => Reader::from_stdin(),
Some(p) => Reader::from_file(File::open(&p).unwrap(), None),
};
let json_writer = match args.output {
None => Writer::to_stdout(),
Some(p) => Writer::to_file(File::create(&p).unwrap(), None),
};
let report_writer = match args.report {
None => Writer::to_stderr(),
Some(p) => Writer::to_file(File::create(&p).unwrap(), None),
};
let mut carver = Carver::new(reader, json_writer, report_writer, None, None);
carver.min_size = args.min_size;
carver.fix_incomplete = args.fix_incomplete;
carver.report_all = args.report_all;
carver.replace_newlines(args.replace_newlines);
match carver.parse() {
Ok(_) => std::process::exit(0),
Err(e) => {
eprintln!("Encountered an error: {:?}", e);
std::process::exit(1)
}
}
}