1use quote::quote;
2use syn::{AttributeArgs, ItemImpl};
3
4pub(crate) mod common;
5mod component_impl;
6mod contract_impl;
7
8#[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 proc_macro::TokenStream::from(quote! {
20 #input
21 #output
22 })
23}
24
25#[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 proc_macro::TokenStream::from(quote! {
37 #input
38 #output
39 })
40}