use super::{inmemory::InMemoryStorage, sqlite::SqliteStorage, Storage};
use crate::errors::Result;
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AccessMode {
ReadOnly,
ReadWrite,
}
#[non_exhaustive]
pub enum StorageConfig {
OnDisk {
taskdb_dir: PathBuf,
create_if_missing: bool,
access_mode: AccessMode,
},
InMemory,
}
impl StorageConfig {
pub fn into_storage(self) -> Result<Box<dyn Storage>> {
Ok(match self {
StorageConfig::OnDisk {
taskdb_dir,
create_if_missing,
access_mode,
} => Box::new(SqliteStorage::new(
taskdb_dir,
access_mode,
create_if_missing,
)?),
StorageConfig::InMemory => Box::new(InMemoryStorage::new()),
})
}
}