pub mod fs; use crate::domain; #[derive(Debug)] pub enum Error { NotFound, InvalidData, InsertData, } impl std::fmt::Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Error::NotFound => f.write_str("Cannot find data"), Error::InvalidData => f.write_str("Invalid data format"), Error::InsertData => f.write_str("Cannot insert data"), } } } impl std::error::Error for Error {} pub struct InsertTaskData { pub name: String, pub link: Option, pub group: Option, pub index: Option, } pub struct UpdateTaskData { pub name: Option, pub link: Option>, pub group: Option>, } pub trait Repository { fn get_current_task_opt(&self) -> Result, Error>; fn get_task_opt(&self, id: domain::TaskId) -> Result, Error>; fn get_tasks(&self) -> Result, Error>; fn remove_task(&self, id: domain::TaskId) -> Result; fn update_task( &self, id: domain::TaskId, update_data: UpdateTaskData, ) -> Result; fn insert_task(&self, insert_data: InsertTaskData) -> Result; fn start_task(&self, id: domain::TaskId) -> Result; fn stop_task(&self) -> Result; fn finish_task(&self) -> Result; }