use std::error::Error;
use std::fmt;
use crate::grammar::GrammarFormat;
mod abnf;
mod antlr;
mod bnf;
mod ebnf;
mod gbnf;
mod lark;
mod pest;
mod tree_sitter_json;
pub use abnf::import_abnf;
pub use antlr::import_antlr;
pub use bnf::import_bnf;
pub use ebnf::import_ebnf;
pub use gbnf::import_gbnf;
pub use lark::import_lark;
pub use pest::import_pest;
pub use tree_sitter_json::import_tree_sitter_json;
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum GrammarImportError {
Parse {
format: GrammarFormat,
message: String,
},
Unsupported {
format: GrammarFormat,
construct: String,
},
}
impl fmt::Display for GrammarImportError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Parse { format, message } => {
write!(formatter, "{format} import parse error: {message}")
}
Self::Unsupported { format, construct } => {
write!(
formatter,
"{format} import unsupported construct: {construct}"
)
}
}
}
}
impl Error for GrammarImportError {}
pub(super) fn parse_error(format: GrammarFormat, message: impl Into<String>) -> GrammarImportError {
GrammarImportError::Parse {
format,
message: message.into(),
}
}
pub(super) fn unsupported_error(
format: GrammarFormat,
construct: impl Into<String>,
) -> GrammarImportError {
GrammarImportError::Unsupported {
format,
construct: construct.into(),
}
}