please_install/
pls_command.rs

1use 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}