use std::io::Write; use std::path::PathBuf; use crate::{CurrentTaskInfo, Task}; #[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 tasks: Vec, pub tasks_file_path: PathBuf, } pub fn execute(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 idx = req.args.idx; if idx == 0 || idx > req.tasks.len() { panic!("invalid index"); } let mut task = &mut req.tasks[idx - 1]; if let Some(name) = req.args.name { task.name = name; } if let Some(link) = req.args.link { task.link = Some(link); } else if req.args.no_link { task.link = None; } let mut file = std::fs::File::create(&req.tasks_file_path).unwrap(); file.write_all(&serde_json::to_vec(&req.tasks).unwrap()) .unwrap(); println!("changed"); }