Crate bytekey [−] [src]

Binary encoding for Rust values which preserves lexicographic sort order. Order-preserving encoding is useful for creating keys for sorted key-value stores with byte string typed keys, such as leveldb. bytekey attempts to encode values into the fewest number of bytes possible while preserving ordering. Type information is not serialized alongside values, and thus the type of serialized data must be known in order to perform decoding (bytekey does not implement a self-describing format).

Supported Data Types

bytekey encoding currently supports all Rust primitives, strings, options, structs, enums, and tuples. isize and usize types are variable-length encoded. Sequence (Vec) and map types are not currently supported (but could be in the future). See Encoder for details on the serialization format.

Usage

extern crate rustc_serialize;
extern crate bytekey;
use bytekey::{encode, decode};

#[derive(RustcEncodable, RustcDecodable, Show, PartialEq)]
struct MyKey { a: u32, b: String }

let a = MyKey { a: 1, b: "foo".to_string() };
let b = MyKey { a: 2, b: "foo".to_string() };
let c = MyKey { a: 2, b: "fooz".to_string() };

assert!(encode(&a).unwrap() < encode(&b).unwrap());
assert!(encode(&b).unwrap() < encode(&c).unwrap());
assert_eq!(a, decode(encode(&a).unwrap()).unwrap());

Type Evolution

In general, the exact type of a serialized value must be known in order to correctly deserialize it. For structs and enums, the type is effectively frozen once any values of the type have been serialized: changes to the struct or enum will cause deserialization of already encoded values to fail or return incorrect values. The only exception is adding adding new variants to the end of an existing enum. Enum variants may not change type, be removed, or be reordered. All changes to structs, including adding, removing, reordering, or changing the type of a field are forbidden.

These restrictions lead to a few best-practices when using bytekey encoding:

Structs

Decoder

A decoder for deserializing bytes in an order preserving format to a value.

Encoder

An encoder for serializing data to a byte format that preserves lexicographic sort order.

Enums

Error

An error type for bytekey decoding and encoding.

Functions

decode

Decode data from a byte vector.

encode

Encode data into a byte vector.

Type Definitions

Result

A short-hand for result::Result<T, bytekey::decoder::Error>.