Making generic constraints in macros optional and added visibility parameter

This commit is contained in:
Andrew Golovashevich 2025-11-15 23:04:19 +03:00
parent 87bf378b69
commit 9720309976
3 changed files with 34 additions and 27 deletions

View File

@ -1,35 +1,36 @@
#[macro_export] #[macro_export]
macro_rules! builder_trait_decl { macro_rules! builder_trait_decl {
( (
$name:ident $scope:vis $name:ident
$(< $(<
$generic0Name:ident : $generic0Bound:path $(, $genericNName:ident : $genericNBound:path)* $generic0Name:ident $(: $generic0Bound:path)? $(, $genericNName:ident $(: $genericNBound:path)?)*
>)? >)?
$(: $base0:path $(, $baseN:path)*)? $(: $base0:path $(, $baseN:path)*)?
{ $($body:tt)* } { $($body:tt)* }
) => { ) => {
trait $name $scope trait $name
< <
'source, 'pos, 'builder, C, P:Pos<'pos>, CS:CollectedSubstring<'source, C> 'source, 'pos, 'builder, C, P:Pos<'pos>, CS:CollectedSubstring<'source, C>
$(, $generic0Name : $generic0Bound $(, $genericNName : $genericNBound)* )? $(, $generic0Name $(: $generic0Bound)? $(, $genericNName $(: $genericNBound)?)* )?
> >
$(: $base0 $(, $baseN)*)? $(: $base0 $(, $baseN)*)?
{ $($body)* } { $($body)* }
}; };
( (
$name:ident $scope:vis $name:ident
< <
$lifetime0Name:lifetime $(, $lifetimeNName:lifetime)* $lifetime0Name:lifetime $(, $lifetimeNName:lifetime)*
$(, $genericNName:ident : $genericNBound:path)* $(, $genericNName:ident $(: $genericNBound:path)?)*
> >
$(: $base0:path $(, $baseN:path)*)? $(: $base0:path $(, $baseN:path)*)?
{ $($body:tt)* } { $($body:tt)* }
) => { ) => {
fn $name $scope trait $name
< <
'source, 'pos, 'builder, $lifetime0Name $(, $lifetimeNName)*, 'source, 'pos, 'builder, $lifetime0Name $(, $lifetimeNName)*,
C, P: Pos<'pos>, CS: CollectedSubstring<'source, C> C, P: Pos<'pos>, CS: CollectedSubstring<'source, C>
$(, $genericNName : $genericNBound)* $(, $genericNName $(: $genericNBound)?)*
> >
$(: $base0 $(, $baseN)*)? $(: $base0 $(, $baseN)*)?
{ $($body)* } { $($body)* }

View File

@ -1,3 +1,3 @@
mod builder_type_t; mod builder_type_t;
mod parser_func; mod parser_func_decl;
mod builder_trait_decl; mod builder_trait_decl;

View File

@ -1,77 +1,83 @@
#[macro_export] #[macro_export]
macro_rules! parser_func { macro_rules! parser_func_decl {
// only type generics | default src type -------------------------------------------------------
( (
$name:ident $scope:vis $name:ident
$(< $(<
$generic0Name:ident : $generic0Bound:path $(, $genericNName:ident : $genericNBound:path)* $generic0Name:ident $(: $generic0Bound:path)? $(, $genericNName:ident $(: $genericNBound:path)?)*
>)? >)?
($srcName:ident : $srcType:ty $(, $argNName:ident : $argNType:ty)*) ($srcName:ident : $srcType:ty $(, $argNName:ident : $argNType:ty)*)
$(-> $ret:ty)? $(-> $ret:ty)?
$body:block $body:block
) => { ) => {
fn $name $scope fn $name
< <
'source, 'pos, 'builder, C, P:Pos<'pos>, CS:CollectedSubstring<'source, C> 'source, 'pos, 'builder, C, P:Pos<'pos>, CS:CollectedSubstring<'source, C>
$(, $generic0Name : $generic0Bound $(, $genericNName : $genericNBound)* )? $(, $generic0Name $(: $generic0Bound)? $(, $genericNName $(: $genericNBound)?)* )?
> >
($srcName: $srcType $(, $argNName : $argNType)*) ($srcName: $srcType $(, $argNName : $argNType)*)
$(-> $ret)? $(-> $ret)?
$body $body
}; };
// lifetime + type generics | default src type --------------------------------------------------
( (
$name:ident $scope:vis $name:ident
< <
$lifetime0Name:lifetime $(, $lifetimeNName:lifetime)* $lifetime0Name:lifetime $(, $lifetimeNName:lifetime)*
$(, $genericNName:ident : $genericNBound:path)* $(, $genericNName:ident $(: $genericNBound:path)?)*
> >
($srcName:ident : $srcType:ty $(, $argNName:ident : $argNType:ty)*) ($srcName:ident : $srcType:ty $(, $argNName:ident : $argNType:ty)*)
$(-> $ret:ty)? $(-> $ret:ty)?
$body:block $body:block
) => { ) => {
fn $name $scope fn $name
< <
'source, 'pos, 'builder, $lifetime0Name $(, $lifetimeNName)*, 'source, 'pos, 'builder, $lifetime0Name $(, $lifetimeNName)*,
C, P: Pos<'pos>, CS: CollectedSubstring<'source, C> C, P: Pos<'pos>, CS: CollectedSubstring<'source, C>
$(, $genericNName : $genericNBound)* $(, $genericNName $(: $genericNBound)?)*
> >
($srcName: $srcType $(, $argNName : $argNType)*) ($srcName: $srcType $(, $argNName : $argNType)*)
$(-> $ret)? $(-> $ret)?
$body $body
}; };
// only type generics | custom src type --------------------------------------------------------
( (
$name:ident $scope:vis $name:ident
$(< $(<
$generic0Name:ident : $generic0Bound:path $(, $genericNName:ident : $genericNBound:path)* $generic0Name:ident $(: $generic0Bound:path)? $(, $genericNName:ident $(: $genericNBound:path)?)*
>)? >)?
($srcName:ident $(, $argNName:ident : $argNType:ty)*) ($srcName:ident $(, $argNName:ident : $argNType:ty)*)
$(-> $ret:ty)? $(-> $ret:ty)?
$body:block $body:block
) => { ) => {
fn $name $scope fn $name
< <
'source, 'pos, 'builder, C, P:Pos<'pos>, CS:CollectedSubstring<'source, C> 'source, 'pos, 'builder, C, P:Pos<'pos>, CS:CollectedSubstring<'source, C>
$(, $generic0Name : $generic0Bound $(, $genericNName : $genericNBound)* )? $(, $generic0Name $(: $generic0Bound)? $(, $genericNName $(: $genericNBound)?)* )?
> >
($srcName: &'source mut impl SourceStream<'source, 'pos, C, P, CS> $(, $argNName : $argNType)*) ($srcName: &'source mut impl SourceStream<'source, 'pos, C, P, CS> $(, $argNName : $argNType)*)
$(-> $ret)? $(-> $ret)?
$body $body
}; };
// lifetime + type generics | custom src type --------------------------------------------------
( (
$name:ident $scope:vis $name:ident
< <
$lifetime0Name:lifetime $(, $lifetimeNName:lifetime)* $lifetime0Name:lifetime $(, $lifetimeNName:lifetime)*
$(, $genericNName:ident : $genericNBound:path)* $(, $genericNName:ident $(: $genericNBound:path)?)*
> >
($srcName:ident $(, $argNName:ident : $argNType:ty)*) ($srcName:ident $(, $argNName:ident : $argNType:ty)*)
$(-> $ret:ty)? $(-> $ret:ty)?
$body:block $body:block
) => { ) => {
fn $name $scope fn $name
< <
'source, 'pos, 'builder, $lifetime0Name $(, $lifetimeNName)*, 'source, 'pos, 'builder, $lifetime0Name $(, $lifetimeNName)*,
C, P: Pos<'pos>, CS: CollectedSubstring<'source, C> C, P: Pos<'pos>, CS: CollectedSubstring<'source, C>
$(, $genericNName : $genericNBound)* $(, $genericNName $(: $genericNBound)?)*
> >
($srcName: &'source mut impl SourceStream<'source, 'pos, C, P, CS> $(, $argNName : $argNType)*) ($srcName: &'source mut impl SourceStream<'source, 'pos, C, P, CS> $(, $argNName : $argNType)*)
$(-> $ret)? $(-> $ret)?