use core::fmt;
use crate::scanner::WordRange;
static KEYWORDS: &'static [&str] = &["import", "library", "package", "layer", "server", "client"];
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum Keywords {
Import,
Library,
Package,
Layer,
Server,
Client,
}
impl From<&str> for Keywords {
fn from(value: &str) -> Self {
match value {
"import" => Keywords::Import,
"library" => Keywords::Library,
"package" => Keywords::Package,
"layer" => Keywords::Layer,
"server" => Keywords::Server,
"client" => Keywords::Client,
_ => panic!(),
}
}
}
impl fmt::Display for Keywords {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let name = match self {
Keywords::Import => "import",
Keywords::Library => "library",
Keywords::Package => "package",
Keywords::Layer => "layer",
Keywords::Server => "server",
Keywords::Client => "client",
};
write!(f, "{}", name)
}
}
pub(super) fn is_keyword(identifier: &WordRange<String>) -> bool {
KEYWORDS.contains(&identifier.get_word().as_str())
}