#serialization #serde #sorting #order #human-readable #values #preserve

strkey

将值序列化成可读编码并保留字典序排序

1 个不稳定版本

0.1.0 2021年5月9日

#1271编码


grebedb 中使用

MPL-2.0 许可协议

54KB
1.5K SLoC

strkey

strkey 是一个 Rust 库,用于将值序列化成可读编码,并保留字典序排序。编码格式对于维护排序键的键值存储/数据库非常有用。

Crates.io docs.rs

此包与 bytekey/bytekey-fix/bytekey2 类似,但此包将编码为可读的、UTF-8 编码的字符串。

支持 Serde 数据模型 中的大多数数据类型。编码由分隔符(默认为冒号 :)分隔的每个编码值组成。整数、浮点数和字节数组以十六进制编码,字符串保持为 UTF-8。完整详情请参阅 ser 模块中的文档。请注意,编码不是自我描述的,也就是说,类型不会编码在格式中。

快速开始

请记住,首先将 strkey 添加到您的 Cargo.toml 中。

let serialized = strkey::to_vec(&("account", 1234u32))?;

assert_eq!(&serialized, b"account:000004d2");

let deserialized = strkey::from_slice::<(&str, u32)>(&serialized)?;

assert_eq!(deserialized.0, "account");
assert_eq!(deserialized.1, 1234);

更复杂的架构可以建模: (如果需要,在 serde 中启用 derive 功能)

use serde::{Serialize, Deserialize};

#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
struct AccountId {
    domain: String,
    user_id: u32,
}

let serialized = strkey::to_vec(&(
    "account",
    AccountId {
        domain: "abc".to_string(),
        user_id: 1234,
    },
))?;

assert_eq!(&serialized, b"account:abc:000004d2");

let deserialized = strkey::from_slice::<(String, AccountId)>(&serialized)?;

assert_eq!(&deserialized.0, "account");
assert_eq!(
    &deserialized.1,
    &AccountId {
        domain: "abc".to_string(),
        user_id: 1234
    }
);

贡献

如果您有任何问题或功能,请使用 GitHub Issues 和 Pull Request 部分。

许可协议

版权 2021 Christopher Foo。许可协议:MPL-2.0。

依赖

~0.4–1MB
~23K SLoC