use std::{
fmt::Display,
fs::{self, read_to_string, File},
path::PathBuf,
process::Command,
str::FromStr,
sync::OnceLock,
};
use anyhow::{bail, Context, Result};
use log::{debug, info, trace};
use taskchampion::Tag;
use crate::{interface::project::ProjectName, state::State};
/// The `taskwarrior` id of a task.
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Ord, Eq)]
pub struct Task {
uuid: taskchampion::Uuid,
}
impl From<&taskchampion::Task> for Task {
fn from(value: &taskchampion::Task) -> Self {
Self {
uuid: value.get_uuid(),
}
}
}
impl From<&taskchampion::TaskData> for Task {
fn from(value: &taskchampion::TaskData) -> Self {
Self {
uuid: value.get_uuid(),
}
}
}
impl Task {
pub fn from_working_set(id: usize, state: &mut State) -> Result