57 lines
1.4 KiB
Rust
Executable file
57 lines
1.4 KiB
Rust
Executable file
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<String>,
|
|
pub index: Option<usize>,
|
|
}
|
|
|
|
pub struct UpdateTaskData {
|
|
pub name: Option<String>,
|
|
pub link: Option<Option<String>>,
|
|
}
|
|
|
|
pub trait Repository {
|
|
fn get_current_task_opt(&self) -> Result<Option<domain::CurrentTaskInfo>, Error>;
|
|
|
|
fn get_task_opt(&self, id: domain::TaskId) -> Result<Option<domain::Task>, Error>;
|
|
|
|
fn get_tasks(&self) -> Result<Vec<domain::Task>, Error>;
|
|
|
|
fn remove_task(&self, id: domain::TaskId) -> Result<domain::Task, Error>;
|
|
|
|
fn update_task(
|
|
&self,
|
|
id: domain::TaskId,
|
|
update_data: UpdateTaskData,
|
|
) -> Result<domain::Task, Error>;
|
|
|
|
fn insert_task(&self, insert_data: InsertTaskData) -> Result<domain::Task, Error>;
|
|
|
|
fn start_task(&self, id: domain::TaskId) -> Result<domain::Task, Error>;
|
|
|
|
fn stop_task(&self) -> Result<domain::Task, Error>;
|
|
|
|
fn finish_task(&self) -> Result<domain::Task, Error>;
|
|
}
|