xzip 0.4.0

ZIP CLI with explicit filename encoding for pack and unpack workflows.
Documentation
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);
    }
}