use crate::package::Package;
use crate::vendor_data::VendorData;
use crate::Vendor;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum PlsCommand {
Install,
ReinstallAll,
Remove,
Upgrade,
Search,
Info,
Update,
UpgradeAll,
List,
Move {
origin: Vendor,
destination: Vendor,
},
#[cfg(target_os = "linux")]
Enable {
user: bool,
service: String,
},
#[cfg(target_os = "linux")]
Disable {
user: bool,
service: String,
},
#[cfg(target_os = "linux")]
Start {
user: bool,
service: String,
},
#[cfg(target_os = "linux")]
Stop {
user: bool,
service: String,
},
#[cfg(target_os = "linux")]
Restart {
user: bool,
service: String,
},
#[cfg(target_os = "linux")]
Status {
user: bool,
service: String,
},
#[cfg(target_os = "linux")]
Reload { user: bool },
}
impl PlsCommand {
pub fn format(&self, vendor: VendorData, args: &Vec<Package>, yes: bool, pager: &Option<String>) -> String {
let args = match self {
PlsCommand::Remove |
PlsCommand::Info => args.iter()
.map(|arg| arg.name.clone())
.collect::<Vec<String>>()
.join(" "),
_ => args.iter()
.map(|arg| arg.to_string())
.collect::<Vec<String>>()
.join(" "),
};
match self {
PlsCommand::Install => vendor.1[2].to_owned(),
PlsCommand::ReinstallAll => vendor.1[4].to_owned(),
PlsCommand::Remove => vendor.1[3].to_owned(),
PlsCommand::Upgrade => vendor.1[4].to_owned(),
PlsCommand::Info => if let Some(pager) = pager {
format!("{} | {}", vendor.1[6], pager)
} else {
vendor.1[6].to_owned()
},
PlsCommand::Update => vendor.1[7].to_owned(),
PlsCommand::UpgradeAll => vendor.1[8].to_owned(),
PlsCommand::Move { origin, destination } =>
format!("move from {} to {}", origin, destination),
PlsCommand::Search => {
if let Some(pager) = pager {
format!("{} | {}", vendor.1[5], pager)
} else {
vendor.1[5].to_owned()
}
}
PlsCommand::List => {
if let Some(pager) = pager {
format!("{} | {}", vendor.1[9], pager)
} else {
vendor.1[9].to_owned()
}
}
#[cfg(target_os = "linux")]
PlsCommand::Enable { user, service } => {
if *user {
format!("systemctl --user enable {}", service)
} else {
format!("systemctl enable {}", service)
}
}
#[cfg(target_os = "linux")]
PlsCommand::Disable { user, service } => {
if *user {
format!("systemctl --user disable {}", service)
} else {
format!("systemctl disable {}", service)
}
}
#[cfg(target_os = "linux")]
PlsCommand::Start { user, service } => {
if *user {
format!("systemctl --user start {}", service)
} else {
format!("systemctl start {}", service)
}
}
#[cfg(target_os = "linux")]
PlsCommand::Stop { user, service } => {
if *user {
format!("systemctl --user stop {}", service)
} else {
format!("systemctl stop {}", service)
}
}
#[cfg(target_os = "linux")]
PlsCommand::Restart { user, service } => {
if *user {
format!("systemctl --user restart {}", service)
} else {
format!("systemctl restart {}", service)
}
}
#[cfg(target_os = "linux")]
PlsCommand::Status { user, service } => {
if *user {
format!("systemctl --user status {}", service)
} else {
format!("systemctl status {}", service)
}
}
#[cfg(target_os = "linux")]
PlsCommand::Reload { user } => {
if *user {
format!("systemctl --user daemon-reload")
} else {
format!("systemctl daemon-reload")
}
}
}
.replace("$yes", if yes {vendor.1[1]} else {""})
.replace("$args", &args)
}
pub fn support_pager(&self) -> bool {
match self {
PlsCommand::Info |
PlsCommand::Move { .. } |
PlsCommand::Search |
PlsCommand::List => true,
_ => false,
}
}
}