use std::io::Write; use crate::repo::{self, Repository}; use crate::CurrentTaskInfo; #[derive(clap::Args)] pub struct Args { #[clap(short, long)] link: Option, #[clap(long)] no_link: bool, #[clap(short, long)] name: Option, idx: usize, } pub struct Request { pub args: Args, pub current_task_info: Option, } pub fn execute(repo: impl Repository, mut req: Request) { if req.current_task_info.is_some() { panic!("You can edit task only when you don't have an active task, yet"); } let args = req.args; let res = repo.update_task( args.idx, repo::UpdateTaskData { name: args.name, link: args.no_link.then(|| None).or(args.link.map(Some)), }, ); match res { Ok(task) => { println!("The task was changed successfully"); println!(" {}", task.name); if let Some(link) = task.link { println!(" link: {}", link); } } Err(err) => { eprintln!("Cannot update the task: {}", err); } } }