use std::fmt;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct GrammarSourceName {
pub source: String,
pub name: String,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct GrammarKind {
pub name: String,
pub source_names: Vec<GrammarSourceName>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum GrammarFormat {
MetaLanguage,
Bnf,
Ebnf,
Abnf,
Peg,
Antlr,
Lark,
Gbnf,
TreeSitter,
Inferred,
}
impl GrammarFormat {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::MetaLanguage => "meta-language",
Self::Bnf => "bnf",
Self::Ebnf => "ebnf",
Self::Abnf => "abnf",
Self::Peg => "peg",
Self::Antlr => "antlr",
Self::Lark => "lark",
Self::Gbnf => "gbnf",
Self::TreeSitter => "tree-sitter",
Self::Inferred => "inferred",
}
}
pub(crate) fn from_tag(value: &str) -> Option<Self> {
match value {
"meta-language" => Some(Self::MetaLanguage),
"bnf" => Some(Self::Bnf),
"ebnf" => Some(Self::Ebnf),
"abnf" => Some(Self::Abnf),
"peg" => Some(Self::Peg),
"antlr" => Some(Self::Antlr),
"lark" => Some(Self::Lark),
"gbnf" => Some(Self::Gbnf),
"tree-sitter" => Some(Self::TreeSitter),
"inferred" => Some(Self::Inferred),
_ => None,
}
}
}
impl fmt::Display for GrammarFormat {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_str(self.as_str())
}
}