use crate::common::counter::hardware_counter::HardwareCounterCell;
use crate::common::types::PointOffsetType;
use crate::common::universal_io::UniversalRead;
use serde_json::Value;
use super::mmap_geo_index::StoredGeoMapIndex;
use super::mutable_geo_index::read_only::ReadOnlyAppendableGeoMapIndex;
use super::read_ops::GeoMapIndexRead;
use crate::segment::common::utils::MultiValue;
use crate::segment::index::query_optimization::rescore_formula::value_retriever::VariableRetrieverFn;
mod read_ops;
#[allow(dead_code, clippy::large_enum_variant)]
pub enum ReadOnlyGeoMapIndex<S: UniversalRead> {
Appendable(ReadOnlyAppendableGeoMapIndex<S>),
Immutable(StoredGeoMapIndex<S>),
}
impl<S: UniversalRead> ReadOnlyGeoMapIndex<S> {
pub fn value_retriever<'a>(
&'a self,
_hw_counter: &'a HardwareCounterCell,
) -> VariableRetrieverFn<'a> {
Box::new(move |point_id: PointOffsetType| -> MultiValue<Value> {
GeoMapIndexRead::get_values(self, point_id)
.into_iter()
.flatten()
.filter_map(|v| serde_json::to_value(v).ok())
.collect()
})
}
}