7 releases

0.1.7 Jan 24, 2022
0.1.6 Dec 20, 2021
0.1.3 Nov 19, 2021
0.1.0 Jul 17, 2021

#9 in #ocaml

Download history 5/week @ 2024-10-01 37/week @ 2024-10-08 2/week @ 2024-10-15 4/week @ 2024-10-29 7/week @ 2024-11-05 11/week @ 2024-11-26 9/week @ 2024-12-03 26/week @ 2024-12-10 6/week @ 2024-12-17 5/week @ 2024-12-24 41/week @ 2024-12-31 153/week @ 2025-01-07 280/week @ 2025-01-14

479 downloads per month
Used in timens

MIT/Apache

38KB
988 lines

binprot-rs

Bin_prot binary protocols in Rust

Build Status Latest version Documentation License

This crates provides bin_prot serialization and tries to be compatible with the OCaml version for similar types.

The examples directory includes a tiny RPC implementation compatible with OCaml Async_rpc. The Query message is defined as follows in OCaml as can be found in the implementation.

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

The equivalent type using Rust would be:

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

This does not use serde (see serde-binprot) but instead implements the derive macro independently so as to provide better control on serialization. In particular polymorphic variants can be supported thanks to this.

Dependencies

~1.4–7.5MB
~60K SLoC