hw_linux/environment/
packages.rs

1use crate::InfoTrait;
2use std::error::Error;
3use std::process::Command;
4
5#[derive(Clone, Debug, Default)]
6pub struct PackageManager {
7    pub name: String,
8    pub packages: usize,
9}
10
11impl PackageManager {
12    pub fn new(name: &str, packages: usize) -> Self {
13        PackageManager {
14            name: String::from(name),
15            packages: packages,
16        }
17    }
18}
19
20#[derive(Clone, Debug, Default)]
21pub struct PackageManagers(pub Vec<PackageManager>);
22
23impl InfoTrait for PackageManagers {
24    fn get() -> Result<Self, Box<dyn Error>> {
25        let mut to_return = Vec::new();
26
27        let mut add = |package_manager: &str, command: &str| {
28            if let Ok(output) = Command::new(package_manager).arg(command).output() {
29                to_return.push(PackageManager::new(package_manager, {
30                    let stdout_string = String::from_utf8(output.stdout).unwrap();
31                    let stdout_lines: Vec<&str> = stdout_string.split("\n").collect();
32                    stdout_lines.len() - 1
33                }));
34            }
35        };
36
37        add("kiss", "l");
38        add("pacman", "-Qq --color never");
39        add("dpkg", "-f '.\n' -W");
40        add("rpm", "-qa");
41        add("xbps-query", "-l");
42        add("apk", "info");
43        add("opkg", "list-installed");
44        add("pacman-g2", "-Q");
45        add("lvu", "installed");
46        add("tce-status", "-i");
47        add("pkg-info", "");
48        add("tazpkg", "list");
49        add("sorcery", "installed");
50        add("alps", "showinstalled");
51        add("butch", "list");
52        add("mine", "-q");
53        add("dnf", "list installed");
54        add("apt", "list --installed");
55        add("flatpak", "list");
56        add("cargo", "install --list");
57        add("pip", "list");
58        add("snap", "list");
59        add("winget", "list");
60
61        Ok(PackageManagers(to_return))
62    }
63}