项目地址:https://github.com/MrTwoc/todo-rs
用rust语言实现的一个基于控制台的todolist,主要用于对事件的记录&打卡,目前实现了基础的增删改查功能。
后续计划用 [表格化输出 + emoji符号 ] 来美化一下输出结果,比如:
✅🟢【已经完成】 🟡⏸️【待定】
添加=>
command_add()=>接收用户输入,判断第一个参数是否为add,然后判断参数长度,参数<3 则提示参数不足,
然后调用Target::add()=>方法接收四个参数,包括<任务名称><截止日期>[描述][分组],[]为可选参数,
所以只需要输入任务名和日期就能添加任务,其他参数都会被设默认值
添加之前会先遍历文件中所有任务的id,然后 +1 给新的任务,随后写入json
删除=>
将json文件读取出来,定义个变量存储长度,调用.retain方法,作用=>
遍历tasks向量中的每个元素
对每个元素执行闭包|task| task.id != Some(id)
保留闭包返回true的元素,移除返回false的元素
然后比较删除前和删除后的长度,小于前长度就删除成功了。
查询=>
读取json然后遍历
编辑=>
接收用户输入,判断指令长度<3 或者 (指令长度 - 1) % 2 == 0 则会提示不匹配,因为第0、1是edit和任务ID,
2是字段名 2+1则为修改内容,所以能这样匹配,然后进入Target::edit()=>方法
判断id是否合法与存在,然后按id取出该任务,进入for循环,定义:字段和参数俩变量,进入match匹配字段,
符合后修改,然后写入json文件
// 获取可变任务引用
let task = &mut tasks[task_index];
// 解析并应用字段更新(从索引1开始,每两个参数为一组)
for i in (2..args.len()).step_by(2) {
let field = args[i];
let value = args[i + 1];
// 任务状态可用指令单独修改
match field {
"name" => task.target_name = value.to_string(),
"deadline" => task.deadline = value.to_string(),
"description" => task.description = Some(value.to_string()),
"group" => task.group = Some(value.to_string()),
_ => eprintln!("不支持的字段: {}", field),
}
}