diff --git a/src/review.rs b/src/review.rs index d94274d..82126be 100644 --- a/src/review.rs +++ b/src/review.rs @@ -47,7 +47,7 @@ pub(crate) fn review(todo_per_backend: ToDoPerBackend, groups: HashSet) - let backend = Rc::new(backend); for package in packages { println!("{}: {package}", backend.get_section()); - get_action_for_package(package, &groups, &mut reviews, &backend)?; + get_action_for_package(package, &mut groups, &mut reviews, &backend)?; } } @@ -56,83 +56,45 @@ pub(crate) fn review(todo_per_backend: ToDoPerBackend, groups: HashSet) - fn get_action_for_package( package: Package, - groups: &[Group], + groups: &mut [Group], reviews: &mut Reviews, backend: &Rc>, ) -> Result<()> { - todo!(); - // loop { - // match ask_user_action_for_package()? { - // ReviewAction::AsDependency => todo!(), - // ReviewAction::AssignGroupBackend => { - // if let Some(val) = assign_group_backend(&package, groups)? { - // break; - // }; - // } - // ReviewAction::Delete => { - // reviews.delete.push((backend.clone(), package)); - // break; - // } - // ReviewAction::Info => backend.show_package_info(&package)?, - // ReviewAction::Invalid => (), - // ReviewAction::Skip => break, - // ReviewAction::Quit => bail!("user wants to quit"), - // } - // } + loop { + match ask_user_action_for_package()? { + ReviewAction::AsDependency => todo!(), + ReviewAction::AssignGroupBackend => { + if let Ok(()) = assign_package_to_group(&package, groups) { + break; + }; + } + ReviewAction::Delete => { + reviews.delete.push((backend.clone(), package)); + break; + } + ReviewAction::Info => backend.show_package_info(&package)?, + ReviewAction::Invalid => (), + ReviewAction::Skip => break, + ReviewAction::Quit => bail!("user wants to quit"), + } + } Ok(()) } -fn ask_user_group_section(groups: &[Group]) -> Result> { +fn ask_user_group(groups: &[Group]) -> Result> { let group = match ask_group(groups)? { Some(group) => group, None => return Ok(None), }; - let section_reply = match ask_section(&group.sections)? { - Some(reply) => reply, - None => return Ok(None), - }; - - let section = match section_reply { - SectionReply::Existing(section) => section, - SectionReply::New => return Ok(Some(GroupSectionReply::New)), - }; - - Ok(Some(GroupSectionReply::Existing((group, section)))) + Ok(Some(GroupReply::Existing(group))) } -enum GroupSectionReply<'a> { - Existing((&'a Group, &'a Section)), +enum GroupReply<'a> { + Existing(&'a Group), New, } -enum SectionReply<'a> { - Existing(&'a Section), - New, -} - -fn ask_section(sections: &HashSet
) -> Result> { - let sections: Vec<_> = sections.iter().collect(); - - let mut buf = String::new(); - stdin().read_line(&mut buf)?; - let reply = buf.trim(); - - let idx: usize = if let Ok(idx) = reply.parse() { - idx - } else { - return Ok(None); - }; - - if idx < sections.len() { - Ok(Some(SectionReply::Existing(§ions[idx]))) - } else if idx == sections.len() { - Ok(Some(SectionReply::New)) - } else { - Ok(None) - } -} - fn ask_new_section_name() -> Result { print!("new section name: "); let reply = stdin().lines().next().context("reading line from stdin")?; @@ -202,10 +164,11 @@ fn ask_group(groups: &[Group]) -> Result> { } } -fn assign_group_backend(package: &Package, groups: &[Group]) -> Result<()> { - let reply = ask_user_group_section(groups)?; +fn assign_package_to_group(package: &Package, groups: &mut [Group]) -> Result<()> { + let reply = ask_user_group(groups)?; match reply { - Some(val) => todo!(), + Some(GroupReply::Existing(group)) => todo!(), + Some(GroupReply::New) => todo!(), None => todo!(), }