4个版本 (2个重大更新)
0.3.1 | 2024年7月5日 |
---|---|
0.3.0 | 2024年4月7日 |
0.2.0 | 2024年4月7日 |
0.1.0 | 2024年4月6日 |
#632 在 编码
每月121次下载
27KB
610 行
Freeform是一个小型库,能够存储自由形式的序列化/反序列化数据,类似于专门为常见序列化/反序列化数据类型设计的 HashMap<String, Box<dyn Any>>
。
当前实现
这个crate的主要菜品是 Freeform
类型。您可以使用来自 typed_key
crate 的 Key<T>
来存储和检索值,只要 T
实现 FreeformData
(当类型实现 Sync + Send + 'static + DeserializeOwned + Serialize
时会自动实现)。这些trait界限对于主要用于存储数据的对象来说应该是足够容易的。
数据存储在 Sord
(序列化或反序列化)类型中,该类型保留类型的缓存值,可以是序列化字符串、反序列化值或两者都是,并在请求时使用 OnceLocks
只生成se/de备用类型。
Freeform
和 Sord
都有一个 SerdeScheme
类型参数,用于确定如何序列化/反序列化存储的值,但 Freeform
默认使用 Json
(serde_json
)。此crate还提供了 Toml
和 Ron
实现。
Freeform
实现为在相应方案中序列化时看起来很自然。如果使用不同的方案序列化,则不保证行为,因此 Freeform
还提供了使用相同方案序列化/反序列化自身的辅助方法。
let freeform: Freeform<Ron> = ... ;
serde_json::to_string(freeform) // What would this look like? Use freeform.serialize() instead
未来计划
在未来,我想要实施许多优化。
FreeformData: 'static
到FreeformData<'a>
Svord<S: SerdeScheme>
(同时存储S::Value
)
依赖关系
~4.5–6.5MB
~115K SLoC