#generate #client #abi #utility #schema #contract #smart

unc-abi-client-impl

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

3个不稳定版本

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

#104#smart

每月下载 25
用于 4crate(2 个直接使用)

MIT/Apache

11KB
135

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下生成客户端

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