macro for common parser functions signatures

This commit is contained in:
Andrew Golovashevich 2025-11-15 20:55:47 +03:00
parent 1d152cd78f
commit 5604434de5
2 changed files with 81 additions and 0 deletions

View File

@ -1,4 +1,5 @@
mod _keyword_impls;
mod parser_func;
pub trait Predicate<C> {
fn check(&mut self, chr: C) -> bool;

80
src/parser_func.rs Normal file
View File

@ -0,0 +1,80 @@
#[macro_export]
macro_rules! parser_func {
(
$name:ident
$(<
$generic0Name:ident : $generic0Bound:path $(, $genericNName:ident : $genericNBound:path)*
>)?
($srcName:ident : $srcType:ty $(, $argNName:ident : $argNType:ty)*)
$(-> $ret:ty)?
$body:block
) => {
fn $name
<
'source, 'pos, 'builder, C, P:Pos<'pos>, CS:CollectedSubstring<'source, C>
$(, $generic0Name : $generic0Bound $(, $genericNName : $genericNBound)* )?
>
($srcName: $srcType $(, $argNName : $argNType)*)
$(-> $ret)?
$body
};
(
$name:ident
<
$lifetime0Name:lifetime $(, $lifetimeNName:lifetime)*
$(, $genericNName:ident : $genericNBound:path)*
>
($srcName:ident : $srcType:ty $(, $argNName:ident : $argNType:ty)*)
$(-> $ret:ty)?
$body:block
) => {
fn $name
<
'source, 'pos, 'builder, $lifetime0Name $(, $lifetimeNName)*,
C, P: Pos<'pos>, CS: CollectedSubstring<'source, C>
$(, $genericNName : $genericNBound)*
>
($srcName: $srcType $(, $argNName : $argNType)*)
$(-> $ret)?
$body
};
(
$name:ident
$(<
$generic0Name:ident : $generic0Bound:path $(, $genericNName:ident : $genericNBound:path)*
>)?
($srcName:ident $(, $argNName:ident : $argNType:ty)*)
$(-> $ret:ty)?
$body:block
) => {
fn $name
<
'source, 'pos, 'builder, C, P:Pos<'pos>, CS:CollectedSubstring<'source, C>
$(, $generic0Name : $generic0Bound $(, $genericNName : $genericNBound)* )?
>
($srcName: &'source mut impl SourceStream<'source, 'pos, C, P, CS> $(, $argNName : $argNType)*)
$(-> $ret)?
$body
};
(
$name:ident
<
$lifetime0Name:lifetime $(, $lifetimeNName:lifetime)*
$(, $genericNName:ident : $genericNBound:path)*
>
($srcName:ident $(, $argNName:ident : $argNType:ty)*)
$(-> $ret:ty)?
$body:block
) => {
fn $name
<
'source, 'pos, 'builder, $lifetime0Name $(, $lifetimeNName)*,
C, P: Pos<'pos>, CS: CollectedSubstring<'source, C>
$(, $genericNName : $genericNBound)*
>
($srcName: &'source mut impl SourceStream<'source, 'pos, C, P, CS> $(, $argNName : $argNType)*)
$(-> $ret)?
$body
};
}