use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HnswGraph {
pub entry_point: Option<u64>,
pub max_level: usize,
pub nodes: HashMap<u64, Vec<Vec<u64>>>,
pub m: usize,
pub m_max: usize, pub m_max_0: usize, pub ef_construction: usize,
pub level_mult: f64,
}
impl HnswGraph {
pub fn get_neighbors(&self, doc_id: u64, level: usize) -> Option<&Vec<u64>> {
self.nodes.get(&doc_id).and_then(|layers| layers.get(level))
}
pub fn set_neighbors(&mut self, doc_id: u64, level: usize, neighbors: Vec<u64>) {
if let Some(layers) = self.nodes.get_mut(&doc_id)
&& level < layers.len()
{
layers[level] = neighbors;
}
}
}