#serialization #data #store #able #scheme #default #toml

freeform

一个小型库,能够存储自由形式数据

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编码

Download history 286/week @ 2024-04-07 8/week @ 2024-04-14 3/week @ 2024-05-19 107/week @ 2024-06-30 13/week @ 2024-07-07 1/week @ 2024-07-14

每月121次下载

MIT许可证

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备用类型。

FreeformSord 都有一个 SerdeScheme 类型参数,用于确定如何序列化/反序列化存储的值,但 Freeform 默认使用 Jsonserde_json)。此crate还提供了 TomlRon 实现。

Freeform 实现为在相应方案中序列化时看起来很自然。如果使用不同的方案序列化,则不保证行为,因此 Freeform 还提供了使用相同方案序列化/反序列化自身的辅助方法。

    let freeform: Freeform<Ron> = ... ;
    serde_json::to_string(freeform) // What would this look like? Use freeform.serialize() instead

未来计划

在未来,我想要实施许多优化。

  • FreeformData: 'staticFreeformData<'a>
  • Svord<S: SerdeScheme>(同时存储S::Value

依赖关系

~4.5–6.5MB
~115K SLoC