1use proc_macro::TokenStream;
2use quote::{quote, ToTokens};
3
4#[proc_macro_attribute]
10pub fn svc_main(_args: TokenStream, input: TokenStream) -> TokenStream {
11 let mut item: syn::Item = syn::parse(input).expect("Invalid input");
12 let fn_item = match &mut item {
13 syn::Item::Fn(fn_item) => fn_item,
14 _ => panic!("expected fn"),
15 };
16 let block = &fn_item.block;
27 let f = quote! {
28 fn main() -> eva_common::EResult<()> {
29 eva_sdk::service::svc_launch(eva_service_main)
30 }
31 async fn eva_service_main(mut initial: eva_sdk::prelude::Initial) -> eva_common::EResult<()>
32 #block
33 };
34 f.into_token_stream().into()
35}