Para me familiarizar com Rust, decidi escrever um filtro bloom que é apoiado por um arquivo BitVec
. Parte disso incluirá um save
método que serializa toda a estrutura usando serde e a grava em um arquivo. Infelizmente, recebo um erro do compilador ao derivar a Serialize
característica:
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
Minhas Cargo.toml
dependências relevantes:
[dependencies]
bitvec = "1.0.1"
serde = { version = "1.0.196", features = ["derive"] }
Isso me parece estranho, já que os documentos do bitvec 1.0.1 mencionam Serialize
(e Deserialize
) como uma das características implementadas. Estou cometendo algum erro óbvio aqui?
Uma prática comum para caixas é colocar
Serialize
eDeserialize
atrás de um recurso Cargo . Os recursos do Bitvec estão listados aqui e você pode habilitar oserde
recurso com este comando:Ou você pode editar Cargo.toml manualmente:
No momento, a documentação não permite que você saiba quando algo está por trás de um recurso, a menos que a caixa o indique manualmente , mas esperamos que no futuro isso seja documentado automaticamente.