use eyre::eyre;
use crate::vendors::Vendor;
use Vendor::*;
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct VendorData(pub Vendor, pub [&'static str; 10]);
static VENDORS: &[VendorData] = &[
VendorData(Vendor::Unknown, [
"false",
"",
"false",
"false",
"false",
"false",
"false",
"false",
"false",
"false",
]),
#[cfg(target_os = "linux")]
VendorData(Apk, [
"apk",
"",
"apk add $args",
"apk del $args",
"apk upgrade $args",
"apk search $args",
"apk info $args",
"apk update",
"apk upgrade",
"apk list --installed",
]),
#[cfg(target_os = "linux")]
VendorData(Apt, [
"apt",
"--yes",
"apt install $yes $args",
"apt remove $yes $args",
"apt install --only-upgrade $yes $args",
"apt search $args",
"apt show $args",
"apt update $yes",
"apt upgrade $yes",
"apt list --installed",
]),
#[cfg(target_os = "macos")]
VendorData(Brew, [
"brew",
"",
"brew install $args",
"brew uninstall $args",
"brew upgrade $args",
"brew search $args",
"brew info $args",
"brew update",
"brew upgrade",
"brew list",
]),
#[cfg(target_os = "linux")]
VendorData(Cards, [
"cards",
"",
"cards install $args",
"cards remove $args",
"cards install --upgrade $args",
"cards search $args",
"cards info $args",
"cards sync",
"cards upgrade",
"cards list",
]),
VendorData(Cargo, [
"cargo",
"",
"cargo install $args",
"cargo unistall $args",
"cargo upgrade $args",
"cargo search $args",
"cargo info $args",
"false",
"cargo upgrade",
"cargo list",
]),
#[cfg(target_os = "windows")]
VendorData(Choco, [
"choco",
"--yes",
"choco install $yes $args",
"choco uninstall $yes $args",
"choco upgrade $yes $args",
"choco search $args",
"choco info $args",
"false",
"choco upgrade all $yes",
"choco list",
]),
#[cfg(target_os = "linux")]
VendorData(Dnf, [
"dnf",
"--assumeyes",
"dnf install $yes $args",
"dnf remove $yes $args",
"dnf upgrade $yes $args",
"dnf search $args",
"dnf info $args",
"dnf check-update $yes",
"dnf update $yes",
"dnf list --installed",
]),
#[cfg(target_os = "linux")]
VendorData(Emerge, [
"emerge",
"",
"emerge $args",
"emerge --depclean $args",
"emerge --update $args",
"emerge --search $args",
"emerge --info $args",
"emerge --sync",
"emerge -vuDN @world",
"qlist -Iv",
]),
#[cfg(target_os = "linux")]
VendorData(Eopkg, [
"eopkg",
"--yes-all",
"eopkg install $yes $args",
"eopkg remove $yes $args",
"eopkg upgrade $yes $args",
"eopkg search $args",
"eopkg info $args",
"eopkg update-repo $yes",
"eopkg upgrade $yes",
"eopkg list-installed",
]),
#[cfg(target_os = "linux")]
VendorData(Flatpak, [
"flatpak",
"--assumeyes",
"flatpak --user install $yes $args",
"flatpak --user uninstall $yes $args",
"flatpak --user update $yes $args",
"flatpak --user search $args",
"flatpak --user info $args",
"false",
"flatpak --user update $yes",
"flatpak --user list",
]),
VendorData(Go, [
"go",
"",
"go install $args",
"go uninstall $args",
"go install $args",
"go search $args",
"ls $GOPATH/bin/$args",
"false",
"false",
"false",
]),
#[cfg(target_os = "linux")]
VendorData(Guix, [
"guix",
"",
"guix install $yes $args",
"guix remove $yes $args",
"guix upgrade $yes $args",
"guix search $args",
"guix show $args",
"guix refresh $yes",
"guix upgrade $yes",
"guix package --list-installed",
]),
#[cfg(target_os = "linux")]
VendorData(NixEnv, [
"nix-env",
"",
"nix-env --install $args",
"nix-env --uninstall $args",
"nix-env --upgrade $args",
"nix-env -qaP $args",
"nix-env -qa --description $args",
"nix-channel --update",
"nix-env --upgrade",
"nix-env --query --installed",
]),
VendorData(Npm, [
"npm",
"",
"npm install -g $args",
"npm uninstall -g $args",
"npm unstall -g $args",
"false",
"npm help $args",
"false",
"npm install -g",
"false",
]),
#[cfg(target_os = "linux")]
VendorData(Opkg, [
"opkg",
"",
"opkg install $args",
"opkg remove $args",
"opkg upgrade $args",
"opkg find $args",
"opkg info $args",
"opkg update",
"opkg upgrade",
"opkg list-installed",
]),
#[cfg(target_os = "linux")]
VendorData(Pacman, [
"pacman",
"--noconfirm",
"pacman -S $yes $args",
"pacman -Rs $yes $args",
"pacman -S $yes $args",
"pacman -Ss $args",
"pacman -Si $args",
"pacman -Sy $yes",
"pacman -Syu $yes",
"pacman -Q",
]),
#[cfg(any(target_os = "freebsd", target_os = "openbsd", target_os = "dragonfly", target_os = "netbsd"))]
VendorData(Pkg, [
"pkg",
"--yes",
"pkg install $yes $args",
"pkg remove $yes $args",
"pkg install $yes $args",
"pkg search $args",
"pkg info $args",
"pkg update $yes",
"pkg upgrade $yes",
"pkg info --all",
]),
#[cfg(target_os = "haiku")]
VendorData(Pkgman, [
"pkgman",
"-y",
"pkgman install $yes $args",
"pkgman uninstall $yes $args",
"pkgman update $yes $args",
"pkgman search $args",
"false",
"pkgman refresh $yes",
"pkgman update $yes",
"pkgman search --installed-only --all",
]),
#[cfg(not(target_os = "windows"))]
VendorData(Pkgx, [
"pkgx",
"",
"pkgx install $args",
"pkgx uninstall $args",
"pkgx install $args",
"pkgx search $args",
"false",
"false",
"false",
"false",
]),
#[cfg(target_os = "macos")]
VendorData(Ports, [
"prt-get",
"",
"prt-get install $args",
"prt-get remove $args",
"prt-get update $args",
"prt-get search $args",
"prt-get info $args",
"ports -u",
"prt-get sysup",
"prt-get listinst",
]),
#[cfg(target_os = "linux")]
VendorData(Rua, [
"rua",
"",
"rua install $args",
"rua uninstall $args",
"rua install $args",
"rua search $args",
"rua show $args",
"rua update",
"rua upgrade",
"pacman -Q",
]),
#[cfg(target_os = "windows")]
VendorData(Scoop, [
"scoop",
"",
"scoop install $args",
"scoop uninstall $args",
"scoop update $args",
"scoop search $args",
"scoop info $args",
"scoop update",
"scoop update *",
"scoop list",
]),
#[cfg(target_os = "linux")]
VendorData(Slackpkg, [
"slackpkg",
"",
"slackpkg install $args",
"slackpkg remove $args",
"slackpkg upgrade $args",
"slackpkg search $args",
"slackpkg info $args",
"slackpkg update",
"slackpkg upgrade-all",
"ls -1 /var/log/packages",
]),
#[cfg(target_os = "linux")]
VendorData(Snap, [
"snap",
"",
"snap install --classic $args",
"snap remove $args",
"snap refresh $args",
"snap find $args",
"snap info $args",
"false",
"snap refresh",
"snap list",
]),
#[cfg(target_os = "android")]
VendorData(Termux, [
"termux",
"--yes",
"pkg install $yes $args",
"pkg uninstall $yes $args",
"pkg install $yes $args",
"pkg search $args",
"pkg show $args",
"pkg update $yes",
"pkg upgrade $yes",
"pkg list-installed",
]),
VendorData(Upt, [
"upt",
"--yes",
"upt install $yes $args",
"upt uninstall $yes $args",
"upt install $yes $args",
"upt search $args",
"upt show $args",
"upt update $yes",
"upt upgrade $yes",
"upt list",
]),
#[cfg(target_os = "linux")]
VendorData(Urpm, [
"urpm",
"",
"urpmi $args",
"urpme $args",
"urpmi $args",
"urpmq --fuzzy $args",
"urpmq -i $args",
"urpmi.update -a",
"urpmi --auto-update",
"rpm --query --all",
]),
VendorData(Uv, [
"uv",
"",
"uv pip install $yes $args",
"uv pip uninstall $yes $args",
"uv pip install -U $yes $args",
"uv pip search $args",
"uv pip show $args",
"false",
"false",
"false",
]),
#[cfg(target_os = "windows")]
VendorData(Winget, [
"winget",
"",
"winget install $args",
"winget uninstall $args",
"winget upgrade $args",
"winget search $args",
"winget show $args",
"false",
"winget upgrade --all",
"winget list",
]),
#[cfg(target_os = "linux")]
VendorData(Xbps, [
"xbps",
"--yes",
"xbps-install $yes $args",
"xbps-remove $yes $args",
"xbps-install --update $yes $args",
"xbps-query -Rs $args",
"xbps-query -RS $args",
"xbps-install --sync $yes",
"xbps-install --update $yes",
"xbps-query --list-pkgs",
]),
#[cfg(target_os = "linux")]
VendorData(Yay, [
"yay",
"--noconfirm",
"yay --topdown --cleanafter -S $yes $args",
"pacman -Rs $yes $args",
"yay --topdown --cleanafter -S $yes $args",
"yay --topdown -Ss $args",
"yay --topdown -Si $args",
"yay --topdown -Sy $yes",
"yay --topdown -Syu $yes",
"pacman -Q",
]),
#[cfg(target_os = "linux")]
VendorData(Yum, [
"yum",
"--assumeyes",
"yum install $yes $args",
"yum remove $yes $args",
"yum update $yes $args",
"yum search $args",
"yum info $args",
"yum check-update $yes",
"yum update $yes",
"yum list --installed",
]),
#[cfg(target_os = "linux")]
VendorData(Zypper, [
"zypper",
"--no-confirm",
"zypper install $yes $args",
"zypper remove $yes $args",
"zypper update $yes $args",
"zypper search $args",
"zypper info $args",
"zypper refresh $yes",
"zypper update $yes",
"zypper search --installed-only",
]),
];
impl TryFrom<Vendor> for VendorData {
type Error = eyre::Error;
fn try_from(value: Vendor) -> std::result::Result<Self, Self::Error> {
for vendor in VENDORS.iter() {
if vendor.0 == value {
return Ok(*vendor);
}
}
Err(eyre!("unreachable code reached for vendor {:?}", value))
}
}