Expand description
§Nimble
Async friendly, simple and fast binary encoding/decoding in Rust.
§Binary encoding scheme
This crate uses a minimal binary encoding scheme. For example, consider the following struct
:
struct MyStruct {
a: u8,
b: u16,
}
encode()
will serialize this into Vec
of size 3
(which is the sum of sizes of u8
and u16
).
Similarly, for types which can have dynamic size (Vec
, String
, etc.), encode()
prepends the size of encoded value
as u64
.
§Usage
Add nimble
in your Cargo.toml
’s dependencies
section:
[dependencies]
nimble = { version = "0.2", features = ["derive"] }
Or, if you are in an environment based on tokio
, use:
[dependencies]
nimble = { version = "0.2", features = ["derive", "tokio"] }
For encoding and decoding, any type must implement two traits provided by this crate, i.e., Encode
and Decode
. For
convenience, nimble
provides derive
macros (only when "derive"
feature is enabled) to implement these traits.
use nimble::{Encode, Decode};
#[derive(Encode, Decode)]
struct MyStruct {
a: u8,
b: u16,
}
Now you can use encode()
and decode()
functions to encode and decode values of MyStruct
. In addition to this, you
can also use MyStruct::encode_to()
function to encode values directly to a type implementing AsyncWrite
and
MyStruct::decode_from()
function to decode values directly from a type implementing AsyncRead
.
Note: Most of the functions exposed by this crate are
async
functions and returnsFuture
values. So, you’ll need an executor to drive theFuture
returned from these functions.async-std
andtokio
are two popular options.
§Features
tokio
: Select this feature when you are usingtokio
’s executor to driveFuture
values returned by functions in this crate. This implementsEncode
andDecode
usingtokio
’sAsyncRead
/AsyncWrite
traits.- Disabled by default.
derive
: Enables derive macros for implementingEncode
andDecode
traits.- Disabled by default.
Derive Macros§
- Derive macro to implement
Decode
trait - Derive macro to implement
Encode
trait