idl 0.1.1

Library used for the idl language.
Documentation
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())
}