1 个不稳定版本
0.1.0 | 2021年5月9日 |
---|
#1271 在 编码
在 grebedb 中使用
54KB
1.5K SLoC
strkey
strkey 是一个 Rust 库,用于将值序列化成可读编码,并保留字典序排序。编码格式对于维护排序键的键值存储/数据库非常有用。
此包与 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