use super::traits::{StorageDriver, StorageTree};
use super::types::{StorageDriverError, StorageResult, StorageType};
use std::path::Path;
pub fn create_storage_driver<P: AsRef<Path>>(
storage_type: StorageType,
path: P,
) -> StorageResult<Box<dyn StorageDriver<Tree = Box<dyn StorageTree>>>> {
match storage_type {
StorageType::Sled => {
use crate::storage::persistent::sled::SledDriver;
let driver = SledDriver::open(path)?;
Ok(Box::new(driver) as Box<dyn StorageDriver<Tree = Box<dyn StorageTree>>>)
}
StorageType::RocksDB => Err(StorageDriverError::BackendSpecific(
"RocksDB storage backend not yet implemented".to_string(),
)),
StorageType::Memory => {
use crate::storage::persistent::memory::MemoryStorageDriver;
let driver = MemoryStorageDriver::open(path)?;
Ok(Box::new(driver) as Box<dyn StorageDriver<Tree = Box<dyn StorageTree>>>)
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use tempfile::TempDir;
#[test]
fn test_create_sled_driver() {
let temp_dir = TempDir::new().unwrap();
let driver = create_storage_driver(StorageType::Sled, temp_dir.path()).unwrap();
assert_eq!(driver.storage_type(), StorageType::Sled);
}
}