use acorn_core::{
prelude::{String, ToString},
util::SemanticVersion,
};
use core::fmt;
pub const SOFTWARE: [Software; 10] = [
Software::Acorn,
Software::Chromium,
Software::Git,
Software::Node,
Software::Npm,
Software::Npx,
Software::OpenCode,
Software::Oras,
Software::Pandoc,
Software::Vale,
];
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Software {
Acorn,
Chromium,
Git,
Node,
Npm,
Npx,
OpenCode,
Oras,
Pandoc,
Unknown,
Vale,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct SoftwareSnapshot {
pub name: String,
pub path: Option<String>,
pub version: Option<SemanticVersion>,
}
impl From<&str> for Software {
fn from(value: &str) -> Self {
match value {
| "ACORN" => Self::Acorn,
| "Chromium" => Self::Chromium,
| "Git" => Self::Git,
| "Node.js" => Self::Node,
| "npm" => Self::Npm,
| "npx" => Self::Npx,
| "OpenCode" => Self::OpenCode,
| "ORAS" => Self::Oras,
| "Pandoc" => Self::Pandoc,
| "Vale" => Self::Vale,
| _ => Self::Unknown,
}
}
}
impl fmt::Display for Software {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_str(match self {
| Self::Acorn => "ACORN",
| Self::Chromium => "Chromium",
| Self::Git => "Git",
| Self::Node => "Node.js",
| Self::Npm => "npm",
| Self::Npx => "npx",
| Self::OpenCode => "OpenCode",
| Self::Oras => "ORAS",
| Self::Pandoc => "Pandoc",
| Self::Unknown => "unknown",
| Self::Vale => "Vale",
})
}
}
impl SoftwareSnapshot {
pub fn new(software: Software, path: Option<String>, version: Option<SemanticVersion>) -> Self {
Self {
name: software.to_string(),
path,
version,
}
}
}