11 个不稳定版本 (3 个破坏性更新)

0.4.0 2024年7月21日
0.3.4 2024年2月26日
0.3.3 2024年1月18日
0.3.2 2023年12月15日
0.1.3 2023年10月18日

#2 in #candid

Download history 3/week @ 2024-05-19 2/week @ 2024-05-26 7/week @ 2024-06-02 3/week @ 2024-06-09 7/week @ 2024-06-16 1/week @ 2024-06-23 140/week @ 2024-07-21 14/week @ 2024-07-28

154 下载/月

MIT 许可证

185KB
3.5K SLoC

ic-websocket-cdk-rs

此仓库包含 IC WebSocket CDK 的 Rust 实现。有关 IC WebSockets 的更多信息,请参阅 IC WebSocket Gateway

安装

您可以通过运行以下命令安装库:

cargo add ic-websocket-cdk

使用方法

有关如何使用库的示例,请参阅 ic_websocket_example 仓库。

Candid 接口

为了使前端客户端和网关正常工作,canister 必须在其 Candid 接口中暴露一些特定方法,这些方法位于您为您的逻辑实现的自定义方法之间。canister 的有效 Candid 接口如下所示

import "./ws_types.did";

// define here your message type
type MyMessageType = {
  some_field : text;
};

service : {
  "ws_open" : (CanisterWsOpenArguments) -> (CanisterWsOpenResult);
  "ws_close" : (CanisterWsCloseArguments) -> (CanisterWsCloseResult);
  "ws_message" : (CanisterWsMessageArguments, opt MyMessageType) -> (CanisterWsMessageResult);
  "ws_get_messages" : (CanisterWsGetMessagesArguments) -> (CanisterWsGetMessagesResult) query;
};

此片段是从 service.example.did 文件复制的,而导入的类型定义在 ws_types.did 文件中。

要定义您的消息类型,您可以使用 Candid 参考文档。我们建议您使用 variant 定义您的消息类型,这样您就可以在同一个 WebSocket 实例上支持不同的消息,并确保您类型的未来更新是安全的。

要自动为您的问题生成 Candid 接口,请参阅 这篇文章

开发

可以在 src/ic-websocket-cdk 文件夹中找到 ic-websocket-cdk 库的实现。

测试

有两种类型的测试可用

  • 单元测试:CDK 函数的测试,用 Rust 编写,可在 unit_tests 文件夹中找到。
  • 集成测试:对于这些测试,CDK被部署到测试canister。这些测试是用Rust编写的,并在底层使用PocketIC。它们位于integration_tests文件夹中。

有一个脚本可以一起运行所有测试,负责设置环境(仅限Linux)和部署canister。要运行脚本,请执行以下命令

./scripts/test.sh

许可证

MIT许可证。请参阅LICENSE

贡献

欢迎提交问题和拉取请求。

依赖

~3–4.5MB
~88K SLoC