#generate #client #abi #near #macro #contract #smart

unc-abi-client-macros

用于生成NEAR智能合约Rust客户端的库

3个不稳定版本

0.10.1 2024年5月23日
0.10.0 2024年5月22日
0.1.0 2024年3月7日

#136#smart

每月下载量 44
3 个crate中使用(通过 unc-abi-client

MIT/Apache

6KB

unc-abi-client-rs

用于从NEAR的ABI模式生成Rust客户端代码的库 workspaces-rs

Github CI Build Crates.io version Downloads

发布说明

发布说明和未发布变更可以在 CHANGELOG 中找到。

使用说明

此crate支持两套API,以满足不同用户的需求。

  • 宏驱动。通过单次宏调用为您提供客户端。
  • 基于生成。为您提供更多控制,并对您最终使用的代码透明,但需要更多设置。

宏API

查看 delegator-macro 示例,以了解如何使用宏API获取客户端并使用它。

基于位于 path/to/abi.json(相对于当前文件目录)的ABI生成名为 ClientName 的结构体

mod mymod {
    unc_abi_client::generate!(ClientName for "path/to/abi.json");
}

将宏调用放在 mod 部分是可选的,但有助于减少意外行为,例如名称冲突。

现在,假设您已部署 contract: utility_workspaces::Contract,您可以执行如下调用

let contract = mymod::ClientName { contract };
let res = contract
    .my_method_name(arg1, arg2)
    .await?;

生成API

查看 delegator-generation 示例,了解如何使用生成API生成客户端并使用它。

首先,我们需要我们的包有一个 build.rs 文件,该文件执行生成步骤。以下片段将在 path/to/out/dir 下的 abi.rs 中生成客户端

fn main() -> anyhow::Result<()> {
    unc_abi_client::Generator::new("path/to/out/dir".into())
        .file("path/to/abi.json")
        .generate()?;
    Ok(())
}

然而,生成的文件本身不包括在您的源集中。您必须手动包含它;推荐的方法是创建一个具有自定义路径的mod

#[path = "path/to/out/dir/abi.rs"]
mod mymod;

现在,假设您已部署 contract: utility_workspaces::Contract,您可以执行如下调用

let contract = mymod::AbiClient { contract };
let res = contract
    .my_method_name(arg1, arg2)
    .await?;

您可以自由探索 Generator 提供的其他方法来自定义生成的代码(例如,客户端结构体名称)。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交用于工作内容中的任何贡献,将按照以下方式双重许可,不附加任何额外条款或条件。

许可证

许可如下之一:

任您选择。

依赖项

~3–4MB
~80K SLoC