libtigen/
package_manager.rs

1pub trait PackageManager {
2    fn install<'a>(&'a self, packages: impl Iterator<Item = &'a str>) -> Vec<&'a str>;
3    fn update(&self) -> Vec<&str>;
4    fn upgrade(&self) -> Vec<&str>;
5}
6
7#[derive(Default, Debug, Clone)]
8pub struct Apt {}
9
10impl PackageManager for Apt {
11    fn install<'a>(&'a self, packages: impl Iterator<Item = &'a str>) -> Vec<&'a str> {
12        let install_command = vec!["apt", "install", "-y"];
13        install_command.into_iter().chain(packages).collect()
14    }
15
16    fn update(&self) -> Vec<&str> {
17        vec!["apt", "update", "-y"]
18    }
19
20    fn upgrade(&self) -> Vec<&str> {
21        vec!["apt", "upgrade", "-y"]
22    }
23}
24
25#[derive(Default, Debug, Clone)]
26pub struct Pacman {}
27
28impl PackageManager for Pacman {
29    fn install<'a>(&self, packages: impl Iterator<Item = &'a str>) -> Vec<&'a str> {
30        let install_command = vec!["pacman", "-S", "--noconfirm"];
31        install_command.into_iter().chain(packages).collect()
32    }
33
34    fn update(&self) -> Vec<&str> {
35        vec!["pacman", "-Syy", "--noconfirm"]
36    }
37
38    fn upgrade(&self) -> Vec<&str> {
39        vec!["pacman", "-Su", "--noconfirm"]
40    }
41}
42
43#[derive(Default, Debug, Clone)]
44pub struct Zypper {}
45
46impl PackageManager for Zypper {
47    fn install<'a>(&self, packages: impl Iterator<Item = &'a str>) -> Vec<&'a str> {
48        let install_command = vec!["zypper", "install", "--non-interactive"];
49        install_command.into_iter().chain(packages).collect()
50    }
51
52    fn update(&self) -> Vec<&str> {
53        vec!["zypper", "refresh", "--non-interactive"]
54    }
55
56    fn upgrade(&self) -> Vec<&str> {
57        vec!["zypper", "update", "--non-interactive"]
58    }
59}
60
61#[derive(Default, Debug, Clone)]
62pub struct Dnf {}
63
64impl PackageManager for Dnf {
65    fn install<'a>(&self, packages: impl Iterator<Item = &'a str>) -> Vec<&'a str> {
66        let install_command = vec!["dnf", "install", "-y"];
67        install_command.into_iter().chain(packages).collect()
68    }
69
70    fn update(&self) -> Vec<&str> {
71        vec!["dnf", "check-update", "-y"]
72    }
73
74    fn upgrade(&self) -> Vec<&str> {
75        vec!["dnf", "upgrade", "-y"]
76    }
77}