3个不稳定版本
0.10.1 | 2024年5月23日 |
---|---|
0.10.0 | 2024年5月22日 |
0.1.0 | 2024年3月7日 |
#104 在 #smart
每月下载 25 次
用于 4 个crate(2 个直接使用)
11KB
135 行
发布说明
发布说明和未发布更改可以在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许可证定义),将按以下方式双许可,不附加任何其他条款或条件。
许可证
以下任一许可证下授权:
- Apache许可证版本2.0(《LICENSE-APACHE》或http://www.apache.org/licenses/LICENSE-2.0》)
- MIT许可证(《LICENSE-MIT》或http://opensource.org/licenses/MIT》)
任您选择。
依赖项
约3-4MB
约80K SLoC