#[cfg(all(
feature = "archiver",
not(any(
feature = "archive-pdf",
feature = "archive-tar",
feature = "archive-zip"
))
))]
compile_error!("archiver feature requires atleast 1 'archive-*' feature");
#[cfg(feature = "archiver")]
mod archiver;
#[cfg(feature = "search")]
mod search;
mod downloader;
mod parser;
mod resolver;
mod runner;
mod styles;
use std::path::PathBuf;
use anyhow::Result;
use clap::Parser;
use self::parser::ParsedArgumentValue;
#[derive(Debug, Parser)]
#[command(version, about)]
pub struct Cli {
#[arg(value_name = "URL")]
#[cfg_attr(not(feature = "search"), arg(required = true))]
targets: Vec<ParsedArgumentValue>,
#[cfg(feature = "archiver")]
#[arg(short, long, value_name = "ARCHIVE")]
archive: Option<archiver::ArchiveKind>,
#[cfg(feature = "archiver")]
#[arg(short = 'A', long, default_value_t = false)]
keep_archived: bool,
#[arg(short, long, value_name = "PATH")]
directory: Option<PathBuf>,
#[arg(short, long, default_value_t = false)]
flatten_directory: bool,
#[arg(short, long, default_value_t = false)]
no_cache: bool,
#[arg(short = 'j', long, value_name = "COUNT", default_value_t = 4)]
#[arg(value_parser = clap::value_parser!(u8).range(1..=8))]
max_concurrent_request: u8,
#[arg(short = 'k', long, value_name = "COUNT", default_value_t = 4)]
#[arg(value_parser = clap::value_parser!(u8).range(1..=32))]
max_retry: u8,
#[cfg(feature = "search")]
#[command(subcommand)]
commands: Commands,
}
#[cfg(feature = "search")]
#[derive(Debug, Clone, clap::Subcommand)]
pub enum Commands {
Search(search::SearchCommand),
}
#[tokio::main]
async fn main() -> Result<()> {
let cli = Cli::parse();
runner::execute(&cli).await?;
Ok(())
}