use std::{fmt::Display, str::FromStr}; use crate::{colors::*, template::Template}; #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[non_exhaustive] pub enum PackageManager { Cargo, Unknown, } impl Default for PackageManager { fn default() -> Self { PackageManager::Cargo } } impl<'a> PackageManager { pub const ALL: &'a [PackageManager] = &[ PackageManager::Cargo ]; } impl PackageManager { /// Returns templates without flavors pub const fn templates_no_flavors(&self) -> &[Template] { match self { PackageManager::Cargo => &[ Template::MakepadCounter, Template::MakepadStackNavigation, Template::MakepadLogin, ], PackageManager::Unknown => &[], } } pub const fn templates(&self) -> &[Template] { match self { PackageManager::Cargo => &[ Template::MakepadCounter, Template::MakepadStackNavigation, Template::MakepadLogin, ], PackageManager::Unknown => &[], } } pub const fn install_cmd(&self) -> Option<&str> { match self { _ => None, } } pub const fn run_cmd(&self) -> &str { match self { PackageManager::Cargo => "cargo", PackageManager::Unknown => "unknown", } } } impl Display for PackageManager { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { PackageManager::Cargo => write!(f, "cargo"), PackageManager::Unknown => write!(f, "unknown"), } } } impl FromStr for PackageManager { type Err = String; fn from_str(s: &str) -> Result { match s { "cargo" => Ok(PackageManager::Cargo), _ => Err(format!( "{YELLOW}{s}{RESET} is not a valid package manager. Valid package mangers are [{}]", PackageManager::ALL .iter() .map(|e| format!("{GREEN}{e}{RESET}")) .collect::>() .join(", ") )), } } }