diff --git a/src/packagemanager.rs b/src/packagemanager.rs index d7c81c4..ff8f5bd 100644 --- a/src/packagemanager.rs +++ b/src/packagemanager.rs @@ -6,90 +6,83 @@ use super::*; /// Creates a `PackageManager` struct to hold in the needed data /// to run our commands. -// TODO: figure out a better way to store and access the data. -// Maybe a Vec? -// Currently actions that require multiple inputs will not work -// such as `apt-get update && apt-get upgrade` -// Option> used to handle package managers that don't support -// that type of action at all, user will be notified. #[derive(Debug, Clone, Default)] -pub struct PackageManager { - pub name: String, - pub search: Option>, - pub install: Option>, - pub uninstall: Option>, - pub sup: Option>, - pub purge: Option>, - pub update: Option>, - pub upgrade: Option>, - pub cache_clear: Option>, - pub complete_cache_clear: Option>, +pub struct PackageManager<'a> { + pub name: &'a str, + pub search: Option>, + pub install: Option>, + pub uninstall: Option>, + pub sup: Option>, + pub purge: Option>, + pub update: Option>, + pub upgrade: Option>, + pub cache_clear: Option>, + pub complete_cache_clear: Option>, pub exe: PathBuf, } /// This holds the various implementations of `PackageManagers` so far. -impl PackageManager { - pub fn pacmatic() -> PackageManager { +impl<'a> PackageManager<'a> { + pub fn pacmatic() -> PackageManager<'a> { PackageManager { - name: "pacmatic".to_string(), - search: Some(vec!["pacmatic".to_string(), "-Ss".to_string()]), - install: Some(vec!["pacmatic".to_string(), "-S".to_string()]), - uninstall: Some(vec!["pacmatic".to_string(), "-R".to_string()]), - sup: Some(vec!["pacmatic".to_string(), "-Syu".to_string()]), - //sup: Some(vec!["pacmatic".to_string(), "-Sy".to_string(), "-Su".to_string()]), - purge: Some(vec!["pacmatic".to_string(), "-Rdns".to_string()]), - upgrade: Some(vec!["pacmatic".to_string(), "-Su".to_string()]), - update: Some(vec!["pacmatic".to_string(), "-Sy".to_string()]), - cache_clear: Some(vec!["pacmatic".to_string(), "-Sc".to_string()]), - complete_cache_clear: Some(vec!["pacmatic".to_string(), "-Scc".to_string()]), + name: "pacmatic", + search: Some(vec!["pacmatic", "-Ss"]), + install: Some(vec!["pacmatic", "-S"]), + uninstall: Some(vec!["pacmatic", "-R"]), + //sup: Some(vec!["pacmatic", "-Syu"]), + sup: Some(vec!["pacmatic", "-Sy", "-Su"]), + purge: Some(vec!["pacmatic", "-Rdns"]), + upgrade: Some(vec!["pacmatic", "-Su"]), + update: Some(vec!["pacmatic", "-Sy"]), + cache_clear: Some(vec!["pacmatic", "-Sc"]), + complete_cache_clear: Some(vec!["pacmatic", "-Scc"]), exe: PathBuf::from("/bin/pacmatic"), } } - - pub fn pacman() -> PackageManager { + pub fn pacman() -> PackageManager<'a> { PackageManager { - name: "pacman".to_string(), - search: Some(vec!["pacman".to_string(), "-Ss".to_string()]), - install: Some(vec!["pacman".to_string(), "-S".to_string()]), - uninstall: Some(vec!["pacman".to_string(), "-R".to_string()]), - sup: Some(vec!["pacman".to_string(), "-Syu".to_string()]), - purge: Some(vec!["pacman".to_string(), "-Rdns".to_string()]), - upgrade: Some(vec!["pacman".to_string(), "-Su".to_string()]), - update: Some(vec!["pacman".to_string(), "-Sy".to_string()]), - cache_clear: Some(vec!["pacman".to_string(), "-Sc".to_string()]), - complete_cache_clear: Some(vec!["pacman".to_string(), "-Scc".to_string()]), + name: "pacman", + search: Some(vec!["pacman", "-Ss"]), + install: Some(vec!["pacman", "-S"]), + uninstall: Some(vec!["pacman", "-R"]), + sup: Some(vec!["pacman", "-Syu"]), + purge: Some(vec!["pacman", "-Rdns"]), + upgrade: Some(vec!["pacman", "-Su"]), + update: Some(vec!["pacman", "-Sy"]), + cache_clear: Some(vec!["pacman", "-Sc"]), + complete_cache_clear: Some(vec!["pacman", "-Scc"]), exe: PathBuf::from("/bin/pacman"), } } - pub fn apt() -> PackageManager { + pub fn apt() -> PackageManager<'a> { PackageManager { - name: "apt".to_string(), - search: Some(vec!["apt".to_string(), "search".to_string()]), - install: Some(vec!["apt".to_string(), "install".to_string()]), - uninstall:Some(vec!["apt".to_string(), "remove".to_string()]), - sup: Some(vec!["apt".to_string(), "update".to_string(), "upgrade".to_string()]), - purge: Some(vec!["apt".to_string(), "purge".to_string()]), - upgrade: Some(vec!["apt".to_string(), "upgrade".to_string()]), - update: Some(vec!["apt".to_string(), "update".to_string()]), - cache_clear: Some(vec!["apt".to_string(), "clean".to_string()]), - complete_cache_clear: Some(vec!["apt-get".to_string(), "autoclean".to_string()]), + name: "apt", + search: Some(vec!["apt", "search"]), + install: Some(vec!["apt", "install"]), + uninstall:Some(vec!["apt", "remove"]), + sup: Some(vec!["apt", "update", "upgrade"]), + purge: Some(vec!["apt", "purge"]), + upgrade: Some(vec!["apt", "upgrade"]), + update: Some(vec!["apt", "update"]), + cache_clear: Some(vec!["apt", "clean"]), + complete_cache_clear: Some(vec!["apt-get", "autoclean"]), exe: PathBuf::from("/usr/bin/apt"), } } - pub fn xbps() -> PackageManager { + pub fn xbps() -> PackageManager<'a> { PackageManager { - name: "xbps".to_string(), - search: Some(vec!["xbps-query".to_string(), "-Rs".to_string()]), - install: Some(vec!["xbps-install".to_string(), "-S".to_string()]), - uninstall: Some(vec!["xbps-remove".to_string()]), - sup: Some(vec!["xbps-install".to_string(), "-Su".to_string()]), - purge: Some(vec!["xbps-remove".to_string(), "-R".to_string()]), - upgrade: Some(vec!["xbps-install".to_string(), "-Su".to_string()]), - update: Some(vec!["xbps-install".to_string()]), - cache_clear: Some(vec!["xbps-remove".to_string(), "-0".to_string()]), - complete_cache_clear: Some(vec!["xbps-remove".to_string(), "-0".to_string()]), + name: "xbps", + search: Some(vec!["xbps-query", "-Rs"]), + install: Some(vec!["xbps-install", "-S"]), + uninstall: Some(vec!["xbps-remove"]), + sup: Some(vec!["xbps-install", "-Su"]), + purge: Some(vec!["xbps-remove", "-R"]), + upgrade: Some(vec!["xbps-install", "-Su"]), + update: Some(vec!["xbps-install"]), + cache_clear: Some(vec!["xbps-remove", "-0"]), + complete_cache_clear: Some(vec!["xbps-remove", "-0"]), exe: PathBuf::from("bin/xbps-install"), } } @@ -107,17 +100,15 @@ impl PackageManager { /// Pulls the first line out of the default.conf and loads that. /// If it doesn't recognize the file it will tell the user that there's an /// issue before exiting. -pub fn read_default() -> PackageManager { +pub fn read_default<'a>() -> PackageManager<'a> { let file = File::open("default.conf").unwrap(); let buffered = BufReader::new(file); for line in buffered.lines() { match &*line.unwrap() { "pacmatic" => return PackageManager::pacmatic(), - /* "pacman" => return PackageManager::pacman(), "apt" => return PackageManager::apt(), "xbps" => return PackageManager::xbps(), - */ _ => { println!("Default either not set or has been changed"); std::process::exit(1)