suborbital_macro/
lib.rs

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}