From 27d5e9b522932723ab349aca83f080e044d3bd45 Mon Sep 17 00:00:00 2001 From: Dirkjan Ochtman Date: Tue, 12 Jan 2021 14:33:31 +0100 Subject: [PATCH] Fix serde support for larger ZeroNodes --- Cargo.toml | 4 ++++ src/lib.rs | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index eb568e8..91ad47e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,9 @@ license = "MIT OR Apache-2.0" authors = ["Dirkjan Ochtman "] edition = "2018" +[features] +with-serde = ["serde", "serde-big-array"] + [dependencies] ahash = "0.6.1" indicatif = { version = "0.15", optional = true } @@ -13,3 +16,4 @@ ordered-float = "2.0" rand = { version = "0.8", features = ["small_rng"] } rayon = "1.5" serde = { version = "1.0.118", features = ["derive"], optional = true } +serde-big-array = { version = "0.3.1", optional = true } diff --git a/src/lib.rs b/src/lib.rs index 5b7bd01..d90ce04 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,8 @@ use rand::{Rng, SeedableRng}; use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator}; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; +#[cfg(feature = "serde")] +use serde_big_array::big_array; /// Parameters for building the `Hnsw` #[derive(Default)] @@ -622,9 +624,12 @@ struct ZeroNode { /// The nearest neighbors on this layer /// /// This is always kept in sorted order (near to far). + #[serde(with = "BigArray")] nearest: [PointId; M * 2], } +big_array! { BigArray; } + impl Default for ZeroNode { fn default() -> ZeroNode { ZeroNode { nearest: [PointId::invalid(); M * 2] }