use clap::ArgMatches;
use crate::core::*;
#[derive(Debug)]
pub enum TasksArgs {
EditTasks(String),
RemoveTasks(String),
ListAll,
ListProjects,
ListTasks(String),
}
pub fn run(vault: &Vault, args: &TasksArgs) -> Result<()> {
match args {
TasksArgs::EditTasks(project) => {
let _saved = tasks::edit(&vault, &project)?;
Ok(())
},
TasksArgs::RemoveTasks(project) => {
tasks::remove(&vault, &project)
},
TasksArgs::ListAll => {
tasks::list(&vault, true, None)
},
TasksArgs::ListProjects => {
tasks::list(&vault, false, None)
},
TasksArgs::ListTasks(project) => {
tasks::list(&vault, true, Some(project.to_owned()))
},
}
}
pub fn match_args(matches: &ArgMatches) -> Option<TasksArgs> {
if let Some(matches) = matches.subcommand_matches("tasks") {
if let Some(matches) = matches.subcommand_matches("edit") {
let project = matches.value_of("PROJECT").unwrap().to_owned();
return Some(TasksArgs::EditTasks(project))
}
if let Some(matches) = matches.subcommand_matches("remove") {
let project = matches.value_of("PROJECT").unwrap().to_owned();
return Some(TasksArgs::RemoveTasks(project))
}
if let Some(matches) = matches.subcommand_matches("list") {
let is_projects = matches.is_present("PROJECTS");
if is_projects {
return Some(TasksArgs::ListProjects);
}
return
match matches.value_of("PROJECT") {
Some(project) => Some(TasksArgs::ListTasks(project.to_owned())),
None => Some(TasksArgs::ListAll),
};
}
}
None
}