libtigen/
package_manager.rs1pub 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}