为了熟悉 Rust,我自己编写了一个由
BitVec
支持的布隆过滤器。其中一部分将包括一个 save
方法,该方法使用 serde 序列化整个结构并将其写入文件。不幸的是,我在派生 Serialize
特征时遇到编译器错误:
use bitvec::vec::BitVec;
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
pub struct BloomFilter {
n: u64, // items added
m: u32, // slice size
k: u32, // number of slices
buf: BitVec, // buffer
state: [u8; 8], // random state
}
error[E0277]: the trait bound `BitVec: Serialize` is not satisfied
--> src/bloom.rs:12:10
|
12 | #[derive(Serialize, Deserialize)]
| ^^^^^^^^^ the trait `Serialize` is not implemented for `BitVec`
...
17 | buf: BitVec, // buffer
| --- required by a bound introduced by this call
我的相关
Cargo.toml
依赖项:
[dependencies]
bitvec = "1.0.1"
serde = { version = "1.0.196", features = ["derive"] }
这对我来说似乎很奇怪,因为 bitvec 1.0.1 的 文档提到
Serialize
(和 Deserialize
)作为实现的特征之一。我在这里犯了一些明显的错误吗?
板条箱的常见做法是将
Serialize
和 Deserialize
放在 Cargo feature 后面。 here列出了 Bitvec 的功能,您可以使用以下命令启用 serde
功能:
cargo add bitvec -F serde
或者您可以手动编辑 Cargo.toml:
[dependencies]
bitvec = { version = "1.0.1", features = ["serde"] }
目前,文档不会让您知道某个功能背后有什么东西,除非 板条箱手动指示它,但希望将来这将被自动记录。