use clap::Parser;
use xzip::cli::{Cli, Command};
use xzip::codec::EncodingKind;
use xzip::error::XzipError;
use xzip::verbosity::Verbosity;
use xzip::{list, pack, unpack};
fn run(cli: Cli) -> Result<(), XzipError> {
let verbosity = Verbosity(cli.verbose);
match cli.command {
Command::Pack {
input,
output,
encoding,
recursive,
include,
exclude,
} => {
let encoding = EncodingKind::from_label(&encoding)?;
pack::pack_path(
&input, &output, encoding, recursive, &include, &exclude, verbosity,
)
}
Command::Unpack {
input,
output,
encoding,
include,
exclude,
jobs,
profile,
} => {
let encoding = EncodingKind::from_label(&encoding)?;
unpack::unpack_archive(
&input, &output, encoding, &include, &exclude, verbosity, jobs, profile,
)
}
Command::List {
input,
encoding,
include,
exclude,
} => {
let encoding = EncodingKind::from_label(&encoding)?;
list::list_archive(&input, encoding, &include, &exclude, verbosity)
}
}
}
fn main() {
let cli = Cli::parse();
if let Err(err) = run(cli) {
eprintln!("error: {err}");
std::process::exit(1);
}
}