unc-abi-client-macros 0.10.1

Library to generate Rust clients for NEAR smart contracts.
Documentation
use std::path::PathBuf;

use unc_abi_client_impl::{generate_abi_client, read_abi};

#[proc_macro]
pub fn generate(tokens: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let abi_def = syn::parse_macro_input!(tokens as AbiDef);
    let unc_abi = read_abi(PathBuf::from(&abi_def.path.value()));

    generate_abi_client(unc_abi, abi_def.name).into()
}

struct AbiDef {
    /// Resulting client struct name.
    name: syn::Ident,
    /// Path to the ABI file.
    path: syn::LitStr,
}

impl syn::parse::Parse for AbiDef {
    fn parse(input: syn::parse::ParseStream<'_>) -> syn::Result<Self> {
        let name = input.parse::<syn::Ident>()?;
        input.parse::<syn::Token![for]>()?;
        let path = input.parse()?;
        Ok(AbiDef { name, path })
    }
}