exocore_apps_macros/
lib.rs

1use 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}