Rust:编译器告诉我 BitVec 缺少序列化特征?

问题描述 投票:0回答:1

您可能会从下面的问题中看出,我对 Rust 作为一门语言还很陌生。作为一种“Hello World”,我承担了用 Rust 编写布隆过滤器的任务 - 是的,另一个布隆过滤器。现在我试图让这个过滤器有一个方法

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
}

我的

cargo.toml

...
[dependencies]
bitvec = "1.0.1"
postcard = { version = "1.0.8", features = ["use-std"]}
rand = "0.8.5"
serde = { version = "1.0.196", features = ["derive"] }

当我执行

cargo run
时,编译器告诉我:

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

这对我来说似乎很奇怪,因为 bitvec 1.0.1 文档提到

Serialize
(和
Deserialize
)作为实现的特征之一。我在这里犯了一些明显的错误吗?

rust traits serde bitvec
1个回答
0
投票

板条箱的常见做法是将

Serialize
Deserialize
放在 Cargo feature 后面。 here列出了 Bitvec 的功能,您可以使用以下命令启用
serde
功能:

cargo add bitvec -F serde

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

[dependencies]
bitvec = { version = "1.0.1", features = ["serde"] }

目前,文档不会让您知道某个功能背后有什么东西,除非 板条箱手动指示它,但希望将来这将被自动记录。

© www.soinside.com 2019 - 2024. All rights reserved.