#near #generate #abi #client #smart-contracts #generation

near-abi-client

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

2个版本

0.1.1 2024年1月25日
0.1.0 2023年1月4日

#67 in #near

Download history 1/week @ 2024-03-13 15/week @ 2024-03-27 31/week @ 2024-04-03 2/week @ 2024-05-15 42/week @ 2024-05-22 170/week @ 2024-05-29 136/week @ 2024-06-05 134/week @ 2024-06-12 95/week @ 2024-06-19 205/week @ 2024-06-26

每月587次下载
5 个crate(2 个直接)中使用

MIT/Apache

20KB
203

near-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生成名为 mod 的结构体 ClientName

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

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

现在,假设您已经部署了一个 contract: near_workspaces::Contract,您可以使用如下方式进行调用

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

生成API

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

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

fn main() -> anyhow::Result<()> {
    near_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: near_workspaces::Contract,您可以使用如下方式进行调用

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

自由探索其他方法来定制生成的代码,例如客户端结构体名称。

贡献

除非您明确声明,否则您提交的任何旨在包含在作品中的贡献,根据Apache-2.0许可证定义,将按照以下方式双重授权,不附带任何额外条款或条件。

许可证

根据以下任一许可证授权:

由您选择。

依赖项

~5MB
~101K SLoC