unc_abi_client_macros/
lib.rs

1use 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    /// Resulting client struct name.
15    name: syn::Ident,
16    /// Path to the ABI file.
17    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}