strkey is Rust library for serialization of values into an human-readable encoding that preserves lexicographic sort order. The encoded format is useful for key-value stores/databases that maintains keys in sorted order.
This crate is similar to bytekey/bytekey-fix/bytekey2 except those this crate encodes into a human-readable, UTF-8 encoded string.
Most data types in the Serde data model are supported. The encoding consists of each encoded value separated by a deliminator (a colon :
by default). Integers, floats, and byte arrays are encoded in hexadecimal while strings are left as is in UTF-8. Full details are listed in the documentation in the ser
module. Note that the encoding is not self-describing, that is, types are not encoded within the format.
Remember to add strkey
to your Cargo.toml first.
```rust let serialized = strkey::to_vec(&("account", 1234u32))?;
assert_eq!(&serialized, b"account:000004d2");
let deserialized = strkey::from_slice::<(&str, u32)>(&serialized)?;
asserteq!(deserialized.0, "account"); asserteq!(deserialized.1, 1234); ```
More complicated schemas can be modelled: (Enable the derive
feature in serde if needed.)
```rust use serde::{Serialize, Deserialize};
struct AccountId { domain: String, user_id: u32, }
let serialized = strkey::tovec(&( "account", AccountId { domain: "abc".tostring(), user_id: 1234, }, ))?;
assert_eq!(&serialized, b"account:abc:000004d2");
let deserialized = strkey::from_slice::<(String, AccountId)>(&serialized)?;
asserteq!(&deserialized.0, "account"); asserteq!( &deserialized.1, &AccountId { domain: "abc".tostring(), userid: 1234 } ); ```
If you have any issues or features, please use the GitHub Issues and Pull Request sections.
Copyright 2021 Christopher Foo. Licensed under MPL-2.0.