From 1a385d0da3d9bfd5da75bef442af072ebc651804 Mon Sep 17 00:00:00 2001 From: Bloxx12 Date: Mon, 5 May 2025 15:22:55 +0200 Subject: [PATCH] main, print: move printing to new module --- src/main.rs | 103 ++------------------------------------------------- src/print.rs | 97 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 99 deletions(-) create mode 100644 src/print.rs diff --git a/src/main.rs b/src/main.rs index 515aff3..2343237 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +mod print; use clap::Parser; use core::str; use env_logger; @@ -342,11 +343,9 @@ fn main() { .max() .unwrap_or_default(); - print_added(added, &post, col_width); - println!(); - print_removed(removed, &pre, col_width); - println!(); - print_changes(changed, &pre, &post, col_width); + print::print_added(added, &post, col_width); + print::print_removed(removed, &pre, col_width); + print::print_changes(changed, &pre, &post, col_width); if let Some((pre_handle, post_handle)) = closure_size_handles { match (pre_handle.join(), post_handle.join()) { @@ -540,97 +539,3 @@ fn get_closure_size(path: &std::path::Path) -> Result { debug!("Closure size for {}: {} MiB", path.display(), size_mib); Ok(size_mib) } - -fn print_added(set: HashSet<&str>, post: &HashMap<&str, HashSet<&str>>, col_width: usize) { - println!("{}", "Packages added:".underline().bold()); - - // Use sorted outpu - let mut sorted: Vec<_> = set - .iter() - .filter_map(|p| post.get(p).map(|ver| (*p, ver))) - .collect(); - - // Sort by package name for consistent output - sorted.sort_by(|(a, _), (b, _)| a.cmp(b)); - - for (p, ver) in sorted { - let mut version_vec = ver.iter().copied().collect::>(); - version_vec.sort_unstable(); - let version_str = version_vec.join(", "); - println!( - "{} {:col_width$} {} {}", - "[A:]".green().bold(), - p, - "@".yellow().bold(), - version_str.blue() - ); - } -} - -fn print_removed(set: HashSet<&str>, pre: &HashMap<&str, HashSet<&str>>, col_width: usize) { - println!("{}", "Packages removed:".underline().bold()); - - // Use sorted output for more predictable and readable results - let mut sorted: Vec<_> = set - .iter() - .filter_map(|p| pre.get(p).map(|ver| (*p, ver))) - .collect(); - - // Sort by package name for consistent output - sorted.sort_by(|(a, _), (b, _)| a.cmp(b)); - - for (p, ver) in sorted { - let mut version_vec = ver.iter().copied().collect::>(); - version_vec.sort_unstable(); - let version_str = version_vec.join(", "); - println!( - "{} {:col_width$} {} {}", - "[R:]".red().bold(), - p, - "@".yellow(), - version_str.blue() - ); - } -} - -fn print_changes( - set: HashSet<&str>, - pre: &HashMap<&str, HashSet<&str>>, - post: &HashMap<&str, HashSet<&str>>, - col_width: usize, -) { - println!("{}", "Version changes:".underline().bold()); - - // Use sorted output for more predictable and readable results - let mut changes = Vec::new(); - - for p in set.iter().filter(|p| !p.is_empty()) { - if let (Some(ver_pre), Some(ver_post)) = (pre.get(p), post.get(p)) { - if ver_pre != ver_post { - changes.push((*p, ver_pre, ver_post)); - } - } - } - - // Sort by package name for consistent output - changes.sort_by(|(a, _, _), (b, _, _)| a.cmp(b)); - - for (p, ver_pre, ver_post) in changes { - let mut version_vec_pre = ver_pre.iter().copied().collect::>(); - version_vec_pre.sort_unstable(); - let version_str_pre = version_vec_pre.join(", "); - let mut version_vec_post = ver_post.iter().copied().collect::>(); - - version_vec_post.sort_unstable(); - let version_str_post = version_vec_post.join(", "); - - println!( - "{} {:col_width$} {} {} ~> {}", - "[C:]".bold().bright_yellow(), - p, - "@".yellow(), - version_str_pre.magenta(), - version_str_post.blue() - ); - } -} diff --git a/src/print.rs b/src/print.rs new file mode 100644 index 0000000..27903de --- /dev/null +++ b/src/print.rs @@ -0,0 +1,97 @@ +use core::str; +use std::collections::{HashMap, HashSet}; +use yansi::Paint; + +pub fn print_added(set: HashSet<&str>, post: &HashMap<&str, HashSet<&str>>, col_width: usize) { + println!("{}", "Packages added:".underline().bold()); + + // Use sorted outpu + let mut sorted: Vec<_> = set + .iter() + .filter_map(|p| post.get(p).map(|ver| (*p, ver))) + .collect(); + + // Sort by package name for consistent output + sorted.sort_by(|(a, _), (b, _)| a.cmp(b)); + + for (p, ver) in sorted { + let mut version_vec = ver.iter().copied().collect::>(); + version_vec.sort_unstable(); + let version_str = version_vec.join(", "); + println!( + "{} {:col_width$} {} {}", + "[A:]".green().bold(), + p, + "@".yellow().bold(), + version_str.blue() + ); + } +} + +pub fn print_removed(set: HashSet<&str>, pre: &HashMap<&str, HashSet<&str>>, col_width: usize) { + println!("{}", "Packages removed:".underline().bold()); + + // Use sorted output for more predictable and readable results + let mut sorted: Vec<_> = set + .iter() + .filter_map(|p| pre.get(p).map(|ver| (*p, ver))) + .collect(); + + // Sort by package name for consistent output + sorted.sort_by(|(a, _), (b, _)| a.cmp(b)); + + for (p, ver) in sorted { + let mut version_vec = ver.iter().copied().collect::>(); + version_vec.sort_unstable(); + let version_str = version_vec.join(", "); + println!( + "{} {:col_width$} {} {}", + "[R:]".red().bold(), + p, + "@".yellow(), + version_str.blue() + ); + } +} + +pub fn print_changes( + set: HashSet<&str>, + pre: &HashMap<&str, HashSet<&str>>, + post: &HashMap<&str, HashSet<&str>>, + col_width: usize, +) { + println!("{}", "Version changes:".underline().bold()); + + // Use sorted output for more predictable and readable results + let mut changes = Vec::new(); + + for p in set.iter().filter(|p| !p.is_empty()) { + if let (Some(ver_pre), Some(ver_post)) = (pre.get(p), post.get(p)) { + if ver_pre != ver_post { + changes.push((*p, ver_pre, ver_post)); + } + } + } + + // Sort by package name for consistent output + changes.sort_by(|(a, _, _), (b, _, _)| a.cmp(b)); + + for (p, ver_pre, ver_post) in changes { + let mut version_vec_pre = ver_pre.iter().copied().collect::>(); + version_vec_pre.sort_unstable(); + let version_str_pre = version_vec_pre.join(", "); + let mut version_vec_post = ver_post.iter().copied().collect::>(); + + version_vec_post.sort_unstable(); + let version_str_post = version_vec_post.join(", "); + + println!( + "{} {:col_width$} {} {} ~> {}", + "[C:]".bold().bright_yellow(), + p, + "@".yellow(), + version_str_pre.magenta(), + version_str_post.blue() + ); + } +}