locutus_macros/
lib.rs

1use quote::quote;
2use syn::{AttributeArgs, ItemImpl};
3
4pub(crate) mod common;
5mod component_impl;
6mod contract_impl;
7
8/// Generate the necessary code for the WASM runtime to interact with your contract ergonomically and safely.
9#[proc_macro_attribute]
10pub fn contract(
11    args: proc_macro::TokenStream,
12    input: proc_macro::TokenStream,
13) -> proc_macro::TokenStream {
14    let _args = syn::parse_macro_input!(args as AttributeArgs);
15    let input = syn::parse_macro_input!(input as ItemImpl);
16    let output = contract_impl::ffi_impl_wrap(&input);
17    // println!("{}", quote!(#input));
18    // println!("{output}");
19    proc_macro::TokenStream::from(quote! {
20        #input
21        #output
22    })
23}
24
25/// Generate the necessary code for the WASM runtime to interact with your contract ergonomically and safely.
26#[proc_macro_attribute]
27pub fn component(
28    args: proc_macro::TokenStream,
29    input: proc_macro::TokenStream,
30) -> proc_macro::TokenStream {
31    let _args = syn::parse_macro_input!(args as AttributeArgs);
32    let input = syn::parse_macro_input!(input as ItemImpl);
33    let output = component_impl::ffi_impl_wrap(&input);
34    // println!("{}", quote!(#input));
35    // println!("{output}");
36    proc_macro::TokenStream::from(quote! {
37        #input
38        #output
39    })
40}