warcat 0.3.0

Command-line tool and library for handling Web ARChive (WARC) files
Documentation
use std::process::ExitCode;

use clap::Parser;

use self::arg::Args;
use self::arg::Command;

mod arg;
mod common;
mod dump_help;
mod export;
mod extract;
mod filter;
mod format;
mod get;
mod import;
mod io;
mod list;
mod logging;
mod model;
mod progress;
mod self_;
mod verify;

pub fn run() -> ExitCode {
    match run_impl() {
        Ok(exit_code) => exit_code,
        Err(error) => {
            tracing::error!(?error);
            eprintln!("{:#}", error);
            ExitCode::FAILURE
        }
    }
}

fn run_impl() -> anyhow::Result<ExitCode> {
    if self::self_::is_installer() {
        self::self_::install_interactive()?;
        return Ok(ExitCode::SUCCESS);
    }

    let args = Args::parse();

    if args.quiet {
        self::progress::disable_global_progress_bar();
    }

    self::logging::set_up_logging(args.log_level, args.log_file.as_deref(), args.log_json)?;

    let exit_code = match args.command {
        Command::Export(args) => {
            self::export::export(&args)?;
            ExitCode::SUCCESS
        }
        Command::Import(args) => {
            self::import::import(&args)?;
            ExitCode::SUCCESS
        }
        Command::List(args) => {
            self::list::list(&args)?;
            ExitCode::SUCCESS
        }
        Command::Get(args) => {
            self::get::get(&args)?;
            ExitCode::SUCCESS
        }
        Command::Extract(args) => {
            self::extract::extract(&args)?;
            ExitCode::SUCCESS
        }
        Command::Verify(args) => self::verify::verify(&args)?,
        Command::Self_(args) => {
            self::self_::self_(&args)?;
            ExitCode::SUCCESS
        }
        Command::DumpHelp => {
            self::dump_help::dump_help()?;
            ExitCode::SUCCESS
        }
    };

    self::progress::global_progress_bar().println("Done.")?;

    Ok(exit_code)
}