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

near-abi-client-macros

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

2次发布

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

#136 in #near

Download history 7/week @ 2024-03-13 17/week @ 2024-03-27 31/week @ 2024-04-03 5/week @ 2024-04-10 2/week @ 2024-05-15 42/week @ 2024-05-22 174/week @ 2024-05-29 142/week @ 2024-06-05 133/week @ 2024-06-12 96/week @ 2024-06-19 210/week @ 2024-06-26

598 每月下载量
6 个crate中使用 (通过 near-abi-client)

MIT/Apache

17KB
154

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(())
}

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

#[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 许可证定义的,您提交给工作内容的任何有意贡献,都将以下列方式进行双重许可,没有其他条款或条件。

许可证

以下任一许可证下授权:

任选其一。

依赖项

约 4.5MB
约 93K SLoC