wasmesh_macros/
lib.rs

1use proc_macro::TokenStream;
2
3use quote::quote;
4
5/// Entry pointer of function, take function handler as argument.
6///
7/// `target fn type: Fn(wasmesh::Request) -> Option<wasmesh::Response>`
8/// command to check expanded code: `cargo +nightly rustc -- -Zunstable-options --pretty=expanded`
9#[proc_macro_attribute]
10#[cfg(not(test))] // Work around for rust-lang/rust#62127
11pub fn handler(_args: TokenStream, item: TokenStream) -> TokenStream {
12    let mut handler_block = item.clone();
13    let input = syn::parse_macro_input!(item as syn::ItemFn);
14    let handler_ident = input.sig.ident;
15    let expanded = quote! {
16        #[no_mangle]
17        pub extern "C" fn _wasmesh_guest_handler(ctx_id: i64, size: i32) {
18            wasmesh::guest::handle_request(ctx_id, size, #handler_ident)
19        }
20    };
21    handler_block.extend(TokenStream::from(expanded));
22    handler_block
23}