#[derive(Debug, Default)]
pub struct Project {
pub id: i64,
pub title: String,
pub tasks: Vec<Task>,
}
impl Project {
pub fn new(id: i64, title: String, tasks: Vec<Task>) -> Self {
Self { id, title, tasks }
}
pub fn rename(&mut self, new_title: String) {
self.title = new_title;
}
pub fn populate_tasks(&mut self, tasks: Vec<Task>) {
self.tasks = tasks;
}
pub fn toggle_task_done(&mut self, task_index: usize) -> Option<(i64, bool)> {
if let Some(task) = self.tasks.get_mut(task_index) {
task.is_done = !task.is_done;
return Some((task.id, task.is_done));
}
None
}
pub fn add_task(&mut self, task: Task) {
self.tasks.push(task);
}
pub fn remove_task(&mut self, task_index: usize) -> i64 {
let task = self.tasks.remove(task_index);
task.id
}
pub fn rename_task(&mut self, new_title: String, task_index: usize) -> Option<i64> {
if let Some(task) = self.tasks.get_mut(task_index) {
task.title = new_title;
return Some(task.id);
}
None
}
pub fn get_task_title(&self, task_index: usize) -> Option<String> {
if let Some(task) = self.tasks.get(task_index) {
return Some(task.title.clone());
}
None
}
}
#[derive(Debug, Default)]
pub struct Task {
id: i64,
pub title: String,
pub is_done: bool,
}
impl Task {
pub fn new(id: i64, title: String, is_done: bool) -> Self {
Self { id, title, is_done }
}
}