Serialization 使用自定义哈希函数序列化rust HashMap

Serialization 使用自定义哈希函数序列化rust HashMap,serialization,rust,hashmap,Serialization,Rust,Hashmap,我正试图用一个自定义哈希函数将rust哈希映射序列化,该函数将bincode::serialize_应用于(writer,cache)其中,缓存是定义如下的结构对象: use std::hash::{BuildHasherDefault, Hasher}; use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize)] pub(crate) struct Cache<S> where S: Def

我正试图用一个自定义哈希函数将rust哈希映射序列化,该函数将
bincode::serialize_应用于(writer,cache)其中,
缓存
是定义如下的结构对象:

use std::hash::{BuildHasherDefault, Hasher};
use serde::{Deserialize, Serialize};

#[derive(Deserialize, Serialize)]
pub(crate) struct Cache<S>
where
    S: Default + Hasher,
{
    records: HashMap<DNA, Mapping, BuildHasherDefault<S>>,
}
使用std::hash::{BuildHasherDefault,Hasher};
使用serde::{反序列化,序列化};
#[派生(反序列化、序列化)]
发布(板条箱)结构缓存
哪里
S:Default+Hasher,
{
记录:HashMap,
}
编译时,我收到一个错误
引用
缓存
变量时,“S”未实现特征“cli::\u serde::Serialize”

正如本文所述,自定义哈希函数的序列化(在我的例子中)应该存在,只需要实现BuildHasher特性。 该特性已经实现,用于创建
BuildHasher
实例

编辑: 为了说明这个问题,我创建了一个(因为在游乐场中没有bincode,所以我使用了serde_json)。 如示例所示,可以使用自定义哈希函数(在本例中为
FnvHasher
)创建并序列化HashMap
custom\u HashMap
)。
但这不适用于缓存对象
Cache
使用自定义哈希函数包装HashMap。在这种情况下,编译器要求添加
Serialize
特征,该特征对于
FnvHasher

在任何
S
上实现
serde::Serialize
。也不要在结构定义上添加特征边界,但如果出于某种原因必须添加,则将
Serialize
绑定添加到
S
上,以便在尝试创建
缓存时出错,但
S
不是
Serialize
。即使这样,最好将其添加到
impl Cache
,假设您使用
Cache::new
创建结构……然后自己在其上实现序列化,或者以一种不关心使用什么哈希器的方式序列化,考虑到在使用哈希表时,KVP的顺序并不重要。在更具体的情况下,
s
可能是不实现
序列化的。基于此,似乎支持不实现
序列化的自定义哈希函数(例如fnv)。所以应该没有必要实现这个特性,或者我在这里遗漏了什么?你能提供一个可以运行的例子来重现这个问题吗?我试过了,找到了我的代码。请编辑问题,包括更新的示例和您评论中的解释。