meta_language/grammar/import/
mod.rs1use std::error::Error;
4use std::fmt;
5
6use crate::grammar::GrammarFormat;
7
8mod abnf;
9mod antlr;
10mod bnf;
11mod ebnf;
12mod gbnf;
13mod lark;
14mod pest;
15mod tree_sitter_json;
16
17pub use abnf::import_abnf;
18pub use antlr::import_antlr;
19pub use bnf::import_bnf;
20pub use ebnf::import_ebnf;
21pub use gbnf::import_gbnf;
22pub use lark::import_lark;
23pub use pest::import_pest;
24pub use tree_sitter_json::import_tree_sitter_json;
25
26#[derive(Clone, Debug, PartialEq, Eq)]
28pub enum GrammarImportError {
29 Parse {
31 format: GrammarFormat,
33 message: String,
35 },
36 Unsupported {
38 format: GrammarFormat,
40 construct: String,
42 },
43}
44
45impl fmt::Display for GrammarImportError {
46 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
47 match self {
48 Self::Parse { format, message } => {
49 write!(formatter, "{format} import parse error: {message}")
50 }
51 Self::Unsupported { format, construct } => {
52 write!(
53 formatter,
54 "{format} import unsupported construct: {construct}"
55 )
56 }
57 }
58 }
59}
60
61impl Error for GrammarImportError {}
62
63pub(super) fn parse_error(format: GrammarFormat, message: impl Into<String>) -> GrammarImportError {
64 GrammarImportError::Parse {
65 format,
66 message: message.into(),
67 }
68}
69
70pub(super) fn unsupported_error(
71 format: GrammarFormat,
72 construct: impl Into<String>,
73) -> GrammarImportError {
74 GrammarImportError::Unsupported {
75 format,
76 construct: construct.into(),
77 }
78}