Bin_prot binary protocols in Rust
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.