#serde #serialization #key-value-store #hashing #cache #floating-point #injection

serde-hashkey

空间高效、支持散列的内存中 serde 序列化

11 个版本

0.4.5 2023 年 1 月 2 日
0.4.4 2022 年 11 月 24 日
0.4.3 2022 年 10 月 11 日
0.4.0 2020 年 12 月 29 日
0.2.2 2019 年 10 月 4 日

#275 in 编码

Download history 653/week @ 2024-04-22 688/week @ 2024-04-29 499/week @ 2024-05-06 281/week @ 2024-05-13 415/week @ 2024-05-20 405/week @ 2024-05-27 365/week @ 2024-06-03 714/week @ 2024-06-10 607/week @ 2024-06-17 562/week @ 2024-06-24 403/week @ 2024-07-01 313/week @ 2024-07-08 541/week @ 2024-07-15 1997/week @ 2024-07-22 1339/week @ 2024-07-29 810/week @ 2024-08-05

4,711 个月的下载量
用于 9 个 crate(6 个直接使用)

MIT/Apache

60KB
1.5K SLoC

serde-hashkey

github crates.io docs.rs build status

基于 Serde 的内存键序列化,支持散列。

这允许任何 serde-serializable 类型被转换为实现了 PartialEqEqParialOrdOrdHash 的值。

Key 有用,因为它允许一种类型擦除的形式。假设你想构建一个通用的内存键值存储,其中你想存储任意的 serde-serializable 键。这对于缓存或依赖注入框架等事物很有用。


用法

将以下内容添加到你的 Cargo.toml

[dependencies]
serde-hashkey = "0.4.5"

浮点策略

默认情况下,Key 不能包含浮点类型,如 f32f64。这两个都不是完全有序或可散列的

要启用 Key 类型使用 f32f64,它可以用特定的浮点策略来构建。

可用的浮点策略有


特性

  • ordered-float - 通过从 ordered-float 衍生的行为启用浮点数的序列化

示例

您可以使用以下命令运行此示例:cargo run --example book

use std::collections::HashMap;

use serde_derive::{Deserialize, Serialize};
use serde_hashkey::{from_key, to_key, Error, Key};

#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
struct Author {
    name: String,
    age: u32,
}

#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
struct Book {
    title: String,
    author: Author,
}

let book = Book {
    title: String::from("Birds of a feather"),
    author: Author {
        name: String::from("Noah"),
        age: 42,
    },
};

let key = to_key(&book)?;

let mut ratings = HashMap::new();
ratings.insert(key.clone(), 5);

println!("ratings: {:?}", ratings);

println!(
    "book as json (through key): {}",
    serde_json::to_string_pretty(&key)?
);

println!(
    "book as json (through original object): {}",
    serde_json::to_string_pretty(&book)?
);

依赖项

~110–405KB