1
0
Fork 0
mirror of https://forgejo.ellis.link/continuwuation/continuwuity.git synced 2025-07-29 03:08:31 +00:00

add macro for out-of-line definitions

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-07-26 06:41:26 +00:00
parent 96f6a75bc8
commit 3b5607ecdc
2 changed files with 27 additions and 0 deletions

23
src/macros/implement.rs Normal file
View file

@ -0,0 +1,23 @@
use proc_macro::TokenStream;
use quote::{quote, ToTokens};
use syn::{parse_macro_input, AttributeArgs, ItemFn, Meta, NestedMeta};
pub(super) fn implement(args: TokenStream, input: TokenStream) -> TokenStream {
let args = parse_macro_input!(args as AttributeArgs);
let item = parse_macro_input!(input as ItemFn);
let NestedMeta::Meta(Meta::Path(receiver)) = args
.first()
.expect("missing path to trait or item to implement")
else {
panic!("invalid path to item for implement");
};
let out = quote! {
impl #receiver {
#item
}
};
out.into_token_stream().into()
}