1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use proc_macro::TokenStream; use quote::quote; use syn::{parse_macro_input, ItemStruct}; #[proc_macro_attribute] pub fn exocore_app(_metadata: TokenStream, input: TokenStream) -> TokenStream { let input_struct = parse_macro_input!(input as ItemStruct); let struct_ident = input_struct.ident.clone(); TokenStream::from(quote! { #input_struct #[no_mangle] pub extern "C" fn __exocore_app_init() { let instance = <#struct_ident>::new(); ::exocore::apps::sdk::app::__exocore_app_register(Box::new(instance)); } }) }