Skip to content
Snippets Groups Projects
Commit 3b5607ec authored by Jason Volk's avatar Jason Volk
Browse files

add macro for out-of-line definitions


Signed-off-by: default avatarJason Volk <jason@zemos.net>
parent 96f6a75b
No related branches found
No related tags found
1 merge request!530de-global services
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()
}
mod admin; mod admin;
mod cargo; mod cargo;
mod debug; mod debug;
mod implement;
mod refutable; mod refutable;
mod rustc; mod rustc;
mod utils; mod utils;
...@@ -23,3 +24,6 @@ pub fn rustc_flags_capture(args: TokenStream) -> TokenStream { rustc::flags_capt ...@@ -23,3 +24,6 @@ pub fn rustc_flags_capture(args: TokenStream) -> TokenStream { rustc::flags_capt
#[proc_macro_attribute] #[proc_macro_attribute]
pub fn refutable(args: TokenStream, input: TokenStream) -> TokenStream { refutable::refutable(args, input) } pub fn refutable(args: TokenStream, input: TokenStream) -> TokenStream { refutable::refutable(args, input) }
#[proc_macro_attribute]
pub fn implement(args: TokenStream, input: TokenStream) -> TokenStream { implement::implement(args, input) }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment