use std::path::PathBuf; use anyhow::Result; use taskchampion::{storage::AccessMode, Replica, StorageConfig}; pub struct State { replica: Replica, } impl std::fmt::Debug for State { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "State") } } impl State { fn taskdb_dir() -> PathBuf { dirs::data_local_dir().expect("Should exist").join("task") } fn new(taskdb_dir: PathBuf, access_mode: AccessMode) -> Result { let storage = StorageConfig::OnDisk { taskdb_dir, create_if_missing: false, access_mode, } .into_storage()?; let replica = Replica::new(storage); Ok(Self { replica }) } pub fn new_ro() -> Result { Self::new(Self::taskdb_dir(), AccessMode::ReadOnly) } pub fn new_rw() -> Result { Self::new(Self::taskdb_dir(), AccessMode::ReadWrite) } #[must_use] pub fn replica(&mut self) -> &mut Replica { &mut self.replica } }