use exocore_chain::block::BlockHeight;
use exocore_protos::generated::exocore_core::EntityIndexConfig as ProtoEntityIndexConfig;
use super::gc::GarbageCollectorConfig;
use crate::local::mutation_index::MutationIndexConfig;
#[derive(Clone, Copy, Debug)]
pub struct EntityIndexConfig {
pub chain_index_min_depth: BlockHeight,
pub chain_index_depth_leeway: BlockHeight,
pub pending_index_config: MutationIndexConfig,
pub pending_index_boost: f32,
pub chain_index_config: MutationIndexConfig,
pub chain_index_in_memory: bool,
pub garbage_collector: GarbageCollectorConfig,
}
impl Default for EntityIndexConfig {
fn default() -> Self {
EntityIndexConfig {
chain_index_min_depth: 3,
chain_index_depth_leeway: 10,
pending_index_config: MutationIndexConfig::default(),
pending_index_boost: 5.0,
chain_index_config: MutationIndexConfig::default(),
chain_index_in_memory: false,
garbage_collector: GarbageCollectorConfig::default(),
}
}
}
impl From<ProtoEntityIndexConfig> for EntityIndexConfig {
fn from(proto: ProtoEntityIndexConfig) -> Self {
let mut config = EntityIndexConfig {
pending_index_config: proto.pending_index.map(|m| m.into()).unwrap_or_default(),
chain_index_config: proto.chain_index.map(|m| m.into()).unwrap_or_default(),
..EntityIndexConfig::default()
};
if let Some(v) = proto.chain_index_min_depth {
config.chain_index_min_depth = v;
}
if let Some(v) = proto.chain_index_depth_leeway {
config.chain_index_depth_leeway = v;
}
if let Some(gc) = proto.garbage_collector {
config.garbage_collector = gc.into();
}
config
}
}