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