From cacb24083066c5c38bf9508c93eb6fa91ee82aa7 Mon Sep 17 00:00:00 2001 From: timeshifter Date: Thu, 12 Jan 2023 12:09:39 +0100 Subject: [PATCH] refactor output of search --- src/core.rs | 53 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/core.rs b/src/core.rs index caca216..a7fc4b5 100644 --- a/src/core.rs +++ b/src/core.rs @@ -1,7 +1,9 @@ use std::collections::HashSet; use std::fs::{remove_file, File}; +use std::iter::Peekable; use std::os::unix::fs::symlink; use std::path::PathBuf; +use std::vec::IntoIter; use anyhow::{ensure, Context, Result}; use clap::ArgMatches; @@ -274,30 +276,47 @@ fn print_triples(mut vec: Vec<(&Group, &Section, &Package)>) { let mut iter = vec.into_iter().peekable(); while let Some((g, s, p)) = iter.next() { - if g.name != g0 { - println!("{}", g.name); - for _ in 0..g.name.len() { - print!("-"); - } - println!(); - s0.clear(); - } - if s.name != s0 { - println!("[{}]", s.name); - } + print_group_if_changed(g, &g0, &mut s0); + print_section_if_changed(s, &s0); println!("{p}"); + save_group_and_section_name(&mut g0, g, &mut s0, s); + print_separator_unless_exhausted(&mut iter, &g0); + } +} - g0 = g.name.clone(); - s0 = s.name.clone(); +fn save_group_and_section_name(g0: &mut String, g: &Group, s0: &mut String, s: &Section) { + *g0 = g.name.clone(); + *s0 = s.name.clone(); +} - if let Some((g, _, _)) = iter.peek() { - if g.name != g0 { - println!(); - } +fn print_separator_unless_exhausted( + iter: &mut Peekable>, + g0: &String, +) { + if let Some((g, _, _)) = iter.peek() { + if g.name != *g0 { + println!(); } } } +fn print_section_if_changed(s: &Section, s0: &String) { + if s.name != *s0 { + println!("[{}]", s.name); + } +} + +fn print_group_if_changed(g: &Group, g0: &String, s0: &mut String) { + if g.name != *g0 { + println!("{}", g.name); + for _ in 0..g.name.len() { + print!("-"); + } + println!(); + s0.clear(); + } +} + fn get_assumed_group_file_names(arg_match: &ArgMatches) -> Result> { let groups_dir = get_pacdef_group_dir()?;