please_install/
pls_command.rs1use crate::package::Package;
2use crate::vendor_data::VendorData;
3use crate::Vendor;
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub enum PlsCommand {
7 Install,
8 ReinstallAll,
9 Remove,
10 Upgrade,
11 Search,
12 Info,
13 Update,
14 UpgradeAll,
15 List,
16 Move {
17 origin: Vendor,
18 destination: Vendor,
19 },
20 #[cfg(target_os = "linux")]
21 Enable {
22 user: bool,
23 service: String,
24 },
25 #[cfg(target_os = "linux")]
26 Disable {
27 user: bool,
28 service: String,
29 },
30 #[cfg(target_os = "linux")]
31 Start {
32 user: bool,
33 service: String,
34 },
35 #[cfg(target_os = "linux")]
36 Stop {
37 user: bool,
38 service: String,
39 },
40 #[cfg(target_os = "linux")]
41 Restart {
42 user: bool,
43 service: String,
44 },
45 #[cfg(target_os = "linux")]
46 Status {
47 user: bool,
48 service: String,
49 },
50 #[cfg(target_os = "linux")]
51 Reload { user: bool },
52}
53
54impl PlsCommand {
55 pub fn format(&self, vendor: VendorData, args: &Vec<Package>, yes: bool, pager: &Option<String>) -> String {
56 let args = match self {
57 PlsCommand::Remove |
58 PlsCommand::Info => args.iter()
59 .map(|arg| arg.name.clone())
60 .collect::<Vec<String>>()
61 .join(" "),
62
63 _ => args.iter()
64 .map(|arg| arg.to_string())
65 .collect::<Vec<String>>()
66 .join(" "),
67 };
68
69 match self {
70 PlsCommand::Install => vendor.1[2].to_owned(),
71 PlsCommand::ReinstallAll => vendor.1[4].to_owned(),
72 PlsCommand::Remove => vendor.1[3].to_owned(),
73 PlsCommand::Upgrade => vendor.1[4].to_owned(),
74 PlsCommand::Info => if let Some(pager) = pager {
75 format!("{} | {}", vendor.1[6], pager)
76 } else {
77 vendor.1[6].to_owned()
78 },
79 PlsCommand::Update => vendor.1[7].to_owned(),
80 PlsCommand::UpgradeAll => vendor.1[8].to_owned(),
81 PlsCommand::Move { origin, destination } =>
82 format!("move from {} to {}", origin, destination),
83 PlsCommand::Search => {
84 if let Some(pager) = pager {
85 format!("{} | {}", vendor.1[5], pager)
86 } else {
87 vendor.1[5].to_owned()
88 }
89 }
90 PlsCommand::List => {
91 if let Some(pager) = pager {
92 format!("{} | {}", vendor.1[9], pager)
93 } else {
94 vendor.1[9].to_owned()
95 }
96 }
97 #[cfg(target_os = "linux")]
98 PlsCommand::Enable { user, service } => {
99 if *user {
100 format!("systemctl --user enable {}", service)
101 } else {
102 format!("systemctl enable {}", service)
103 }
104 }
105 #[cfg(target_os = "linux")]
106 PlsCommand::Disable { user, service } => {
107 if *user {
108 format!("systemctl --user disable {}", service)
109 } else {
110 format!("systemctl disable {}", service)
111 }
112 }
113 #[cfg(target_os = "linux")]
114 PlsCommand::Start { user, service } => {
115 if *user {
116 format!("systemctl --user start {}", service)
117 } else {
118 format!("systemctl start {}", service)
119 }
120 }
121 #[cfg(target_os = "linux")]
122 PlsCommand::Stop { user, service } => {
123 if *user {
124 format!("systemctl --user stop {}", service)
125 } else {
126 format!("systemctl stop {}", service)
127 }
128 }
129 #[cfg(target_os = "linux")]
130 PlsCommand::Restart { user, service } => {
131 if *user {
132 format!("systemctl --user restart {}", service)
133 } else {
134 format!("systemctl restart {}", service)
135 }
136 }
137 #[cfg(target_os = "linux")]
138 PlsCommand::Status { user, service } => {
139 if *user {
140 format!("systemctl --user status {}", service)
141 } else {
142 format!("systemctl status {}", service)
143 }
144 }
145 #[cfg(target_os = "linux")]
146 PlsCommand::Reload { user } => {
147 if *user {
148 format!("systemctl --user daemon-reload")
149 } else {
150 format!("systemctl daemon-reload")
151 }
152 }
153 }
154 .replace("$yes", if yes {vendor.1[1]} else {""})
155 .replace("$args", &args)
156 }
157
158 pub fn support_pager(&self) -> bool {
159 match self {
160 PlsCommand::Info |
161 PlsCommand::Move { .. } |
162 PlsCommand::Search |
163 PlsCommand::List => true,
164 _ => false,
165 }
166 }
167}