1use proc_macro::TokenStream;
2use quote::quote;
3use syn::{parse_macro_input, ItemFn, ItemImpl, LitStr};
4
5#[proc_macro_attribute]
6pub fn brdd_use_case(attr: TokenStream, item: TokenStream) -> TokenStream {
7 let id = parse_macro_input!(attr as LitStr);
8 let input = parse_macro_input!(item as ItemImpl);
9 let self_ty = &input.self_ty;
10
11 let expanded = quote! {
12 #input
13
14 impl #self_ty {
15 pub fn get_use_case_id(&self) -> &'static str {
16 #id
17 }
18 }
19 };
20
21 TokenStream::from(expanded)
22}
23
24#[proc_macro_attribute]
25pub fn brdd_rule(_attr: TokenStream, item: TokenStream) -> TokenStream {
26 let input = parse_macro_input!(item as ItemFn);
27 let expanded = quote! {
29 #input
30 };
31 TokenStream::from(expanded)
32}