hw_linux/environment/
packages.rs1use 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}