diff --git a/keyvalues-parser/src/text/parse/escaped.rs b/keyvalues-parser/src/text/parse/escaped.rs index fdee820..492e7c1 100644 --- a/keyvalues-parser/src/text/parse/escaped.rs +++ b/keyvalues-parser/src/text/parse/escaped.rs @@ -1,14 +1,10 @@ use super::*; -use pest::Parser as _; - pub type PestError = pest::error::Error; type BoxedState<'a> = Box>; type ParseResult<'a> = pest::ParseResult>; -struct Parser; - -common_parsing!(Parser, Rule, true); +common_parsing!(pest_parse, Rule, true); #[expect(non_camel_case_types, clippy::upper_case_acronyms)] #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] @@ -192,29 +188,6 @@ mod rules { } } -impl pest::Parser for Parser { - fn parse<'i>( - rule: Rule, - input: &'i str, - ) -> std::result::Result, PestError> { - pest::state(input, |s| match rule { - Rule::WHITESPACE => super::whitespace(s), - Rule::COMMENT => super::comment(s), - Rule::vdf => rules::vdf(s), - Rule::base_macro => rules::base_macro(s), - Rule::quoted_raw_string => rules::quoted_raw_string(s), - Rule::quoted_raw_inner => rules::quoted_raw_inner(s), - Rule::pairs => rules::pairs(s), - Rule::pair => rules::pair(s), - Rule::key => rules::key(s), - Rule::value => rules::value(s), - Rule::obj => rules::obj(s), - Rule::quoted_string => rules::quoted_string(s), - Rule::quoted_inner => rules::quoted_inner(s), - Rule::char => rules::char(s), - Rule::unquoted_string => rules::unquoted_string(s), - Rule::unquoted_char => rules::unquoted_char(s), - Rule::EOI => rules::EOI(s), - }) - } +pub fn pest_parse(input: &str) -> std::result::Result, PestError> { + pest::state(input, rules::vdf) } diff --git a/keyvalues-parser/src/text/parse/mod.rs b/keyvalues-parser/src/text/parse/mod.rs index a9c541d..0d3137b 100644 --- a/keyvalues-parser/src/text/parse/mod.rs +++ b/keyvalues-parser/src/text/parse/mod.rs @@ -63,10 +63,10 @@ fn skip(s: BoxedState<'_, R>) -> ParseResult<'_, R> { // unfortunate hack to re-use most of the code that consumes the pest parser produced by our two // separate grammars :/ macro_rules! common_parsing { - ($parser:ty, $rule:ty, $parse_escaped:expr) => { + ($parse_fn:ident, $rule:ty, $parse_escaped:expr) => { /// Attempts to parse VDF text to a [`Vdf`] pub fn parse(s: &str) -> Result> { - let mut full_grammar = <$parser>::parse(<$rule>::vdf, s)?; + let mut full_grammar = $parse_fn(s)?; // There can be multiple base macros before the initial pair let mut bases = Vec::new(); diff --git a/keyvalues-parser/src/text/parse/raw.rs b/keyvalues-parser/src/text/parse/raw.rs index ffd852a..8e30c1a 100644 --- a/keyvalues-parser/src/text/parse/raw.rs +++ b/keyvalues-parser/src/text/parse/raw.rs @@ -1,14 +1,10 @@ use super::*; -use pest::Parser as _; - pub type PestError = pest::error::Error; type BoxedState<'a> = Box>; type ParseResult<'a> = pest::ParseResult>; -struct Parser; - -common_parsing!(Parser, Rule, false); +common_parsing!(pest_parse, Rule, false); #[expect(non_camel_case_types, clippy::upper_case_acronyms)] #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] @@ -161,27 +157,6 @@ mod rules { } } -impl pest::Parser for Parser { - fn parse<'i>( - rule: Rule, - input: &'i str, - ) -> std::result::Result, PestError> { - pest::state(input, |s| match rule { - Rule::WHITESPACE => super::whitespace(s), - Rule::COMMENT => super::comment(s), - Rule::vdf => rules::vdf(s), - Rule::base_macro => rules::base_macro(s), - Rule::quoted_raw_string => rules::quoted_raw_string(s), - Rule::pairs => rules::pairs(s), - Rule::pair => rules::pair(s), - Rule::key => rules::key(s), - Rule::value => rules::value(s), - Rule::obj => rules::obj(s), - Rule::quoted_string => rules::quoted_string(s), - Rule::quoted_inner => rules::quoted_inner(s), - Rule::unquoted_string => rules::unquoted_string(s), - Rule::unquoted_char => rules::unquoted_char(s), - Rule::EOI => rules::EOI(s), - }) - } +pub fn pest_parse(input: &str) -> std::result::Result, PestError> { + pest::state(input, rules::vdf) }