7个版本

0.1.7 2022年1月24日
0.1.6 2021年12月20日
0.1.3 2021年11月19日
0.1.0 2021年7月17日

#6 in #ocaml

每月38次下载
用于timens

MIT/Apache

38KB
988 代码行

binprot-rs

在Rust中的Bin_prot二进制协议

Build Status Latest version Documentation License

这个crate提供了bin_prot序列化,并尝试与OCaml版本兼容相同类型。

examples目录中包括了一个与OCaml Async_rpc兼容的微小RPC实现。在OCaml中定义的Query消息如下,可以在实现中找到。

module Query = struct
  type 'a needs_length =
    { tag     : Rpc_tag.t
    ; version : int
    ; id      : Query_id.t
    ; data    : 'a
    }
  [@@deriving bin_io]
  type 'a t = 'a needs_length [@@deriving bin_read]
end

使用Rust的等效类型

#[derive(BinProtRead, BinProtWrite)]
struct Query<T> {
    rpc_tag: String,
    version: i64,
    id: i64,
    data: binprot::WithLen<T>,
}

这并不使用serde(见serde-binprot),而是独立实现derive宏,以便更好地控制序列化。特别是可以通过这种方式支持多态变体。

依赖

~1.3–2.8MB
~57K SLoC