cuendillar 0.1.0

Embedded persistent key–value storage engine (LSM-tree based)
Documentation
use std::{collections::VecDeque, sync::Arc};

use crate::database::{
    config::memtable_config::{MemtableConfig, MemtableMangerVariant, MemtableVariant},
    memtable::{
        Memtable,
        btree_memtable::BTreeMemtable,
        errors::MemtableError,
        hash_memtable::HashMetable,
        manager::{MemtableManager, default_manager::DefaultManger},
        vector_memtable::VectorMemtable,
    },
};

pub fn build_memtable_manager(
    memtable_config: &MemtableConfig,
    memtable_id: Option<uuid::Uuid>,
) -> Result<Box<dyn MemtableManager>, MemtableError> {
    let memtable_generator: Arc<dyn Fn(Option<uuid::Uuid>) -> Box<dyn Memtable> + Send + Sync> =
        match memtable_config.variant {
            MemtableVariant::Vector => Arc::new(|id| Box::new(VectorMemtable::new(id))),
            MemtableVariant::BTree => Arc::new(|id| Box::new(BTreeMemtable::new(id))),
            MemtableVariant::Hash => Arc::new(|id| Box::new(HashMetable::new(id))),
        };
    let active_memtable = memtable_generator(memtable_id);
    match memtable_config.manager_variant {
        MemtableMangerVariant::Default => {
            let manager = DefaultManger::intialize(
                active_memtable,
                VecDeque::default(),
                memtable_config.max_memtable_size_in_mega_bytes as u64,
                memtable_generator,
            );
            return Ok(Box::new(manager));
        }
    };
}