eva_sdk_derive/
lib.rs

1use proc_macro::TokenStream;
2use quote::{quote, ToTokens};
3
4/// Service entry-point (main)
5///
6/// # Panics
7///
8/// Will panic if set not on a function
9#[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    //fn_item.block.stmts.insert(
17    //0,
18    //syn::parse(
19    //quote! {
20    //let a = 2;
21    //}
22    //.into(),
23    //)
24    //.unwrap(),
25    //);
26    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}