use clap::Subcommand;
#[derive(Subcommand, Debug)]
#[command(subcommand_required = true, arg_required_else_help = true)]
pub enum TasksCommand {
#[command(name = "ls", visible_alias = "list")]
List {
account: String,
},
Add {
account: String,
title: String,
#[arg(long)]
due: Option<String>,
},
Done {
composite: String,
},
Rm {
composite: String,
},
}
pub fn run(cmd: TasksCommand) -> netsky_core::Result<()> {
match cmd {
TasksCommand::List { account } => {
let value = netsky_channels::tasks::ops::list_tasks(&account, false)
.map_err(|e| netsky_core::Error::Message(e.to_string()))?;
println!(
"{}",
serde_json::to_string_pretty(&value)
.map_err(|e| netsky_core::Error::Message(e.to_string()))?
);
}
TasksCommand::Add {
account,
title,
due,
} => {
let id =
netsky_channels::tasks::ops::create_task(&account, &title, due.as_deref(), None)
.map_err(|e| netsky_core::Error::Message(e.to_string()))?;
println!("created: {id}");
}
TasksCommand::Done { composite } => {
netsky_channels::tasks::ops::complete_task(&composite)
.map_err(|e| netsky_core::Error::Message(e.to_string()))?;
println!("completed: {composite}");
}
TasksCommand::Rm { composite } => {
netsky_channels::tasks::ops::delete_task(&composite)
.map_err(|e| netsky_core::Error::Message(e.to_string()))?;
println!("deleted: {composite}");
}
}
Ok(())
}