From 02d9c577ab233964c0a578bef77c0a9b85424064 Mon Sep 17 00:00:00 2001 From: "Dustin J. Mitchell" Date: Sun, 10 Jan 2021 21:48:28 -0500 Subject: [PATCH] use StorageConfig instead of ReplicaConfig --- cli/src/invocation/mod.rs | 6 +++--- taskchampion/src/config.rs | 7 ------- taskchampion/src/lib.rs | 3 +-- taskchampion/src/replica.rs | 10 +--------- taskchampion/src/storage/config.rs | 23 +++++++++++++++++++++++ taskchampion/src/storage/mod.rs | 2 ++ 6 files changed, 30 insertions(+), 21 deletions(-) delete mode 100644 taskchampion/src/config.rs create mode 100644 taskchampion/src/storage/config.rs diff --git a/cli/src/invocation/mod.rs b/cli/src/invocation/mod.rs index b8a44759e..32e66a940 100644 --- a/cli/src/invocation/mod.rs +++ b/cli/src/invocation/mod.rs @@ -3,7 +3,7 @@ use crate::argparse::{Command, Subcommand}; use config::Config; use failure::{format_err, Fallible}; -use taskchampion::{Replica, ReplicaConfig, Server, ServerConfig, Uuid}; +use taskchampion::{Replica, Server, ServerConfig, StorageConfig, Uuid}; use termcolor::{ColorChoice, StandardStream}; mod cmd; @@ -104,8 +104,8 @@ pub(crate) fn invoke(command: Command, settings: Config) -> Fallible<()> { fn get_replica(settings: &Config) -> Fallible { let taskdb_dir = settings.get_str("data_dir")?.into(); log::debug!("Replica data_dir: {:?}", taskdb_dir); - let replica_config = ReplicaConfig { taskdb_dir }; - Ok(Replica::from_config(replica_config)?) + let storage_config = StorageConfig::OnDisk { taskdb_dir }; + Ok(Replica::new(storage_config.into_storage()?)) } /// Get the server for this invocation diff --git a/taskchampion/src/config.rs b/taskchampion/src/config.rs deleted file mode 100644 index d8ebe81fb..000000000 --- a/taskchampion/src/config.rs +++ /dev/null @@ -1,7 +0,0 @@ -use std::path::PathBuf; - -/// The configuration required for a replica. Use with [`crate::Replica::from_config`]. -pub struct ReplicaConfig { - /// Path containing the task DB. - pub taskdb_dir: PathBuf, -} diff --git a/taskchampion/src/lib.rs b/taskchampion/src/lib.rs index f7c896dff..9a1cd4635 100644 --- a/taskchampion/src/lib.rs +++ b/taskchampion/src/lib.rs @@ -31,7 +31,6 @@ for more information about the design and usage of the tool. */ -mod config; mod errors; mod replica; pub mod server; @@ -41,9 +40,9 @@ mod taskdb; mod utils; mod workingset; -pub use config::ReplicaConfig; pub use replica::Replica; pub use server::{Server, ServerConfig}; +pub use storage::StorageConfig; pub use task::{Priority, Status, Tag, Task, TaskMut}; pub use workingset::WorkingSet; diff --git a/taskchampion/src/replica.rs b/taskchampion/src/replica.rs index 39faa205a..f13bc19c2 100644 --- a/taskchampion/src/replica.rs +++ b/taskchampion/src/replica.rs @@ -1,9 +1,8 @@ -use crate::config::ReplicaConfig; use crate::errors::Error; use crate::server::Server; +use crate::storage::{Operation, Storage, TaskMap}; use crate::task::{Status, Task}; use crate::taskdb::TaskDB; -use crate::storage::{KVStorage, Operation, TaskMap, Storage}; use crate::workingset::WorkingSet; use chrono::Utc; use failure::Fallible; @@ -36,13 +35,6 @@ impl Replica { } } - /// Construct a new replica from a configuration object. This is the common way - /// to create a new object. - pub fn from_config(config: ReplicaConfig) -> Fallible { - let storage = Box::new(KVStorage::new(config.taskdb_dir)?); - Ok(Replica::new(storage)) - } - #[cfg(test)] pub fn new_inmemory() -> Replica { Replica::new(Box::new(crate::storage::InMemoryStorage::new())) diff --git a/taskchampion/src/storage/config.rs b/taskchampion/src/storage/config.rs new file mode 100644 index 000000000..5ef964575 --- /dev/null +++ b/taskchampion/src/storage/config.rs @@ -0,0 +1,23 @@ +use super::{InMemoryStorage, KVStorage, Storage}; +use failure::Fallible; +use std::path::PathBuf; + +/// The configuration required for a replica's storage. +pub enum StorageConfig { + /// Store the data on disk. This is the common choice. + OnDisk { + /// Path containing the task DB. + taskdb_dir: PathBuf, + }, + /// Store the data in memory. This is only useful for testing. + InMemory, +} + +impl StorageConfig { + pub fn into_storage(self) -> Fallible> { + Ok(match self { + StorageConfig::OnDisk { taskdb_dir } => Box::new(KVStorage::new(taskdb_dir)?), + StorageConfig::InMemory => Box::new(InMemoryStorage::new()), + }) + } +} diff --git a/taskchampion/src/storage/mod.rs b/taskchampion/src/storage/mod.rs index 3184831b4..0932afd3f 100644 --- a/taskchampion/src/storage/mod.rs +++ b/taskchampion/src/storage/mod.rs @@ -2,11 +2,13 @@ use failure::Fallible; use std::collections::HashMap; use uuid::Uuid; +mod config; mod inmemory; mod kv; mod operation; pub use self::kv::KVStorage; +pub use config::StorageConfig; pub use inmemory::InMemoryStorage; pub use operation::Operation;