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));
}
})
}