85 lines
2.2 KiB
Rust
85 lines
2.2 KiB
Rust
|
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<Self, Self::Err> {
|
||
|
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::<Vec<_>>()
|
||
|
.join(", ")
|
||
|
)),
|
||
|
}
|
||
|
}
|
||
|
}
|