unc_abi_client_macros/
lib.rs1use std::path::PathBuf;
2
3use unc_abi_client_impl::{generate_abi_client, read_abi};
4
5#[proc_macro]
6pub fn generate(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
7 let abi_def = syn::parse_macro_input!(tokens as AbiDef);
8 let unc_abi = read_abi(PathBuf::from(&abi_def.path.value()));
9
10 generate_abi_client(unc_abi, abi_def.name).into()
11}
12
13struct AbiDef {
14 name: syn::Ident,
16 path: syn::LitStr,
18}
19
20impl syn::parse::Parse for AbiDef {
21 fn parse(input: syn::parse::ParseStream<'_>) -> syn::Result<Self> {
22 let name = input.parse::<syn::Ident>()?;
23 input.parse::<syn::Token![for]>()?;
24 let path = input.parse()?;
25 Ok(AbiDef { name, path })
26 }
27}