1use proc_macro::TokenStream;
2use quote::quote;
3use syn::parse_macro_input;
4use syn::DeriveInput;
5
6#[proc_macro_derive(Plugin)]
7pub fn derive_plugin(token_stream: TokenStream) -> TokenStream {
8 let input = parse_macro_input!(token_stream as DeriveInput);
9
10 let plugin_name = input.ident;
11
12 let expanded = quote! {
13 static PLUGIN: &#plugin_name = &#plugin_name{};
14
15 #[no_mangle]
16 pub extern fn init() {
17 suborbital::plugin::use_plugin(PLUGIN);
18 }
19 };
20
21 TokenStream::from(expanded)
22}