为什么 BitVec 缺少序列化特征?

leo*_*hma 5 traits rust serde bitvec

为了熟悉 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
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

我的相关Cargo.toml依赖:

[dependencies]
bitvec = "1.0.1"
serde = { version = "1.0.196", features = ["derive"] }
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很奇怪,因为bitvec 1.0.1 的文档提到Serialize( 和Deserialize) 作为实现的特征之一。我在这里犯了一些明显的错误吗?

dre*_*ato 8

crates 的常见做法是将Cargo 功能Serialize放在Deserialize后面。这里列出了 Bitvec 的功能,您可以使用以下命令启用该功能:serde

cargo add bitvec -F serde
Run Code Online (Sandbox Code Playgroud)

或者您可以手动编辑 Cargo.toml:

[dependencies]
bitvec = { version = "1.0.1", features = ["serde"] }
Run Code Online (Sandbox Code Playgroud)

目前,文档不会让您知道功能背后的某些内容,除非包手动指示它,但希望将来这将被自动记录。