#二进制编码 #序列化 #异步 #RPC #异步流 #网络 #RPC 框架

nightly 接线

一个支持通道的异步二进制序列化框架

10 个版本

0.2.2 2024 年 7 月 8 日
0.2.1 2024 年 4 月 26 日
0.1.6 2024 年 4 月 10 日
0.1.2 2024 年 2 月 18 日

#497解析器实现

自定义许可证

190KB
5K SLoC

接线

欢迎使用接线,这是一个为 Rust 设计的高级异步序列化框架。接线旨在通过允许在异步流中传输类型和通道,以实现高效通信模式,从而在并发应用程序中启用高效通信。

主要特性

  • 异步序列化:以最小的开销异步序列化和反序列化数据结构。
  • 通道支持:在网络中无缝发送和接收 Rust 通道,充分利用 Rust 强大的并发模型。
  • 流兼容性:与任何异步流一起工作,包括 TcpStream,以便灵活集成不同的传输层。
  • 嵌套通道:支持嵌套通道,启用如通道-通道通信等复杂的通信结构。
  • WIP:WebAssembly (WASM) 支持:使用完整的 WASM 支持在浏览器中运行 Rust 代码,为 Web 应用程序带来高性能。
  • 过程宏:使用 WiringUnwiring 宏来自动推导反序列化,可选的自定义数字类型标签用于较大的枚举。

过程宏使用

接线提供过程宏 WiringUnwiring 以方便自动实现,枚举变体的标记。该宏可以使用如下方式

#[derive(Wiring, Unwiring)]
#[tag(u8)]
enum MyEnum {
    VariantOne { reply: tokio::sync::oneshot::Sender<()>, request: String, },
    VariantN,
}

tag 属性是可选的。默认情况下,使用 u16 用于标记,这确保了未来的兼容性。然而,为了更好的空间和带宽效率,建议使用 u8

注意

  • 标记类型范围:默认选择 u16 支持多达 u16::MAX 个变体。如果您的枚举具有更少或更多的变体,请考虑使用标记属性指定自定义标记类型。
  • 未来扩展:虽然建议使用 u8 以提高空间和带宽效率,但提前指定较大的标记类型是明智的,以防止未来的破坏性更改。
  • 互操作性:确保所选的标记类型与与序列化数据交互的任何系统的预期相匹配,以保持兼容性。

入门

要将Wiring包含到您的Rust项目中,请将以下内容添加到您的Cargo.toml文件中:

[dependencies]
wiring = "0.2"

请检查https://github.com/louaykamel/wiring/tree/master/examples文件夹。

贡献

欢迎对Wiring做出贡献!请阅读我们的贡献指南,开始帮助改进项目。

许可

Wiring遵循Apache 2.0许可协议 - 请参阅https://github.com/louaykamel/wiring/blob/master/LICENSE文件以获取详细信息。

致谢

  • 向所有Wiring的贡献者和用户表示衷心的感谢!

依赖项

~12–25MB
~384K SLoC