2个不稳定版本
0.2.0 | 2021年8月4日 |
---|---|
0.1.0 | 2021年7月20日 |
#1178 在 编码
每月222次下载
19KB
351 行
casserole
包提供了一种自定义 derive 和一个 trait,用于对 Rust 类型执行分解序列化和反序列化到存储。
最常见用例是将大对象分解存储到内容可寻址存储中,例如 Git 数据库。因此得名 'CAS-ser-role'。
Casserole 自动 derive 的 trait 生成更小的类型,其中包含键的引用而不是原始数据。例如,HashMap<String, BigValue>
被替换为 HashMap<String, S::Key>
,其中 S
是用户提供的存储引擎的类型参数。此外,具有 store
属性的字段(例如 #[casserole(store)]
,也被替换为 S::Key
。
例如
/// Example Tree to be stored in the database
#[derive(Casserole)]
struct Node {
header: String,
// Tells that 'map' is replaced by a database key in the type returned from
// the 'casserole' trait method. The 'decasserole' trait method will do the
// reverse, restoring it from the database.
#[casserole(store)]
map: BTreeMap<String, Node>,
}
基本使用演示(假设 big_value
是一个要处理的大值)
// Create a our serde-ready type for the root. `stored_root` is our unique
// representation for `big_value`, but it is very small, like a Git hash.
let stored_root = big_value.casserole(&mut store).unwrap();
// <...do other stuff...>
// Restore the origin value from the database
let restored_big_value = Casserole::decasserole(&stored, &mut store).unwrap();
assert_eq!(restored_big_value, big_value);
依赖关系
~1.3–3MB
~56K SLoC