complish 0.0.1

Core library for project-aware task management with git integration
Documentation
use std::ops::{Deref, DerefMut};

use chrono::Utc;
use eyre::{Result, eyre};

use crate::{Task, Vault};

pub struct TaskGuard<'a> {
  task_id: u32,
  vault: &'a mut Vault,
}

impl<'a> TaskGuard<'a> {
  pub fn new(task_id: u32, vault: &'a mut Vault) -> Result<Self> {
    if !vault.tasks.contains_key(&task_id) {
      return Err(eyre!("Task not found"));
    }
    Ok(Self {
      task_id,
      vault,
    })
  }
}

impl Deref for TaskGuard<'_> {
  type Target = Task;

  fn deref(&self) -> &Self::Target {
    &self.vault.tasks[&self.task_id]
  }
}

impl DerefMut for TaskGuard<'_> {
  fn deref_mut(&mut self) -> &mut Self::Target {
    self.vault.tasks.get_mut(&self.task_id).unwrap()
  }
}

impl Drop for TaskGuard<'_> {
  fn drop(&mut self) {
    self.vault.updated_at = Utc::now();
    let _ = self.vault.save();
  }
}