From 87bf378b69e28d1c8350a3dd7ec49f0c4622e704 Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Sat, 15 Nov 2025 22:51:39 +0300 Subject: [PATCH] builder_trait_decl --- src/macros/builder_trait_decl.rs | 37 ++++++++++++++++++++++++++++++++ src/macros/mod.rs | 3 ++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/macros/builder_trait_decl.rs diff --git a/src/macros/builder_trait_decl.rs b/src/macros/builder_trait_decl.rs new file mode 100644 index 0000000..209a84f --- /dev/null +++ b/src/macros/builder_trait_decl.rs @@ -0,0 +1,37 @@ +#[macro_export] +macro_rules! builder_trait_decl { + ( + $name:ident + $(< + $generic0Name:ident : $generic0Bound:path $(, $genericNName:ident : $genericNBound:path)* + >)? + $(: $base0:path $(, $baseN:path)*)? + { $($body:tt)* } + ) => { + trait $name + < + 'source, 'pos, 'builder, C, P:Pos<'pos>, CS:CollectedSubstring<'source, C> + $(, $generic0Name : $generic0Bound $(, $genericNName : $genericNBound)* )? + > + $(: $base0 $(, $baseN)*)? + { $($body)* } + }; + ( + $name:ident + < + $lifetime0Name:lifetime $(, $lifetimeNName:lifetime)* + $(, $genericNName:ident : $genericNBound:path)* + > + $(: $base0:path $(, $baseN:path)*)? + { $($body:tt)* } + ) => { + fn $name + < + 'source, 'pos, 'builder, $lifetime0Name $(, $lifetimeNName)*, + C, P: Pos<'pos>, CS: CollectedSubstring<'source, C> + $(, $genericNName : $genericNBound)* + > + $(: $base0 $(, $baseN)*)? + { $($body)* } + }; +} \ No newline at end of file diff --git a/src/macros/mod.rs b/src/macros/mod.rs index 9adc1b6..c69c43d 100644 --- a/src/macros/mod.rs +++ b/src/macros/mod.rs @@ -1,2 +1,3 @@ mod builder_type_t; -mod parser_func; \ No newline at end of file +mod parser_func; +mod builder_trait_decl; \ No newline at end of file