knott 0.0.1

Fast Rust package manager helper for Arch Linux repos and the AUR
Documentation
mod aur;
mod cli;
mod dep;
mod download;
mod info;
mod install;
mod localdb;
mod menu;
mod pacman;
mod resolver;
mod search;
mod upgrade;
mod version;

use anyhow::Result;

pub async fn run(args: Vec<String>) -> Result<i32> {
    let parsed = cli::parse(args)?;

    match &parsed.command {
        cli::Command::Help => {
            cli::print_help();
            return Ok(0);
        }
        cli::Command::Version => {
            println!("knott {}", env!("CARGO_PKG_VERSION"));
            return Ok(0);
        }
        _ => {}
    }

    let tools = pacman::Toolchain::from_env();
    let aur = aur::AurClient::from_env()?;

    match parsed.command {
        cli::Command::DefaultUpgrade => {
            install::sync(&parsed.options, &tools, &aur, &[], true, true).await
        }
        cli::Command::Search { terms } => {
            search::print_search(&parsed.options, &tools, &aur, &terms).await
        }
        cli::Command::Info { targets } => {
            info::print_info(&parsed.options, &tools, &aur, &targets).await
        }
        cli::Command::Install {
            targets,
            refresh,
            sysupgrade,
        } => install::sync(&parsed.options, &tools, &aur, &targets, refresh, sysupgrade).await,
        cli::Command::Get { targets, print } => {
            download::get_pkgbuilds(&parsed.options, &tools, &aur, &targets, print).await
        }
        cli::Command::QueryForeign => upgrade::print_foreign(&parsed.options, &tools).await,
        cli::Command::QueryAurUpdates => {
            upgrade::print_aur_updates(&parsed.options, &tools, &aur).await
        }
        cli::Command::Forward(args) => tools.forward(&args).await,
        cli::Command::Interactive { terms } => {
            let selected =
                search::interactive_select(&parsed.options, &tools, &aur, &terms).await?;
            if selected.is_empty() {
                return Ok(0);
            }
            install::sync(&parsed.options, &tools, &aur, &selected, false, false).await
        }
        cli::Command::Help | cli::Command::Version => unreachable!(),
    }
}