From 483d006181cbbb717459b7be69fbaae46ef372a1 Mon Sep 17 00:00:00 2001 From: mace Date: Wed, 2 Aug 2023 19:57:49 +0200 Subject: [PATCH] colored output, diffs --- Cargo.lock | 20 +++++++++++++++++++- Cargo.toml | 3 ++- src/csv/compare.rs | 40 +++++++++++++++++++++++++++++++--------- src/main.rs | 15 +++++---------- 4 files changed, 57 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c3d85c5..48cb8a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,11 +110,23 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "colored" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" +dependencies = [ + "is-terminal", + "lazy_static", + "windows-sys", +] + [[package]] name = "csvcompare" -version = "0.1.0" +version = "1.0.1" dependencies = [ "clap", + "colored", ] [[package]] @@ -161,6 +173,12 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + [[package]] name = "libc" version = "0.2.147" diff --git a/Cargo.toml b/Cargo.toml index 639af31..d57c1bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "csvcompare" -version = "0.1.0" +version = "1.0.1" edition = "2018" description = "compare two files in csv format" license = "MIT OR Apache-2.0" @@ -10,3 +10,4 @@ authors = ["Mathias Rothenhäusler ) { - for line in vector.iter() { - println!("{}", line.line); - } +pub fn print_lines(diff1: &[CsvLine], diff2: &[CsvLine], params: &Params) { + println!(); + println!("{}", params.source); + diff2 + .iter() + .for_each(|line| println!("-- {}", line.line.red())); + diff1 + .iter() + .for_each(|line| println!("++ {}", line.line.green())); + + println!(); + println!("{}", params.compared); + diff1 + .iter() + .for_each(|line| println!("-- {}", line.line.red())); + diff2 + .iter() + .for_each(|line| println!("++ {}", line.line.green())); } pub fn write_to_file(filename: String, diff: Vec) { @@ -90,15 +105,20 @@ pub fn compare(reader: BufReader, reader2: BufReader, params: &Param }) .collect(); - let mut diff: Vec = Vec::new(); + let mut diff1: Vec = find_diff(&vec1, &vec2, params); + let mut diff2: Vec = find_diff(&vec2, &vec1, params); - find_diff(&vec1, &vec2, &mut diff, params); - find_diff(&vec2, &vec1, &mut diff, params); + if params.output.is_none() { + print_lines(&diff1, &diff2, params); + } - diff + diff1.append(&mut diff2); + + diff1 } -fn find_diff(vec1: &[CsvLine], vec2: &[CsvLine], diff: &mut Vec, params: &Params) { +fn find_diff(vec1: &[CsvLine], vec2: &[CsvLine], params: &Params) -> Vec { + let mut diff: Vec = Vec::new(); for i in vec1.iter() { let splitter: Vec<&str> = i.line.split(params.delimiter()).collect(); let value = splitter[params.column]; @@ -116,6 +136,8 @@ fn find_diff(vec1: &[CsvLine], vec2: &[CsvLine], diff: &mut Vec, params diff.push(CsvLine::new(i.line.parse().unwrap())); } } + + diff } #[cfg(test)] diff --git a/src/main.rs b/src/main.rs index 1bdbec5..48cd814 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,14 +2,16 @@ mod csv; use std::fs::File; use std::io::BufReader; - use clap::Parser; use csv::compare; -use crate::csv::compare::{Params, write_to_file, print_lines}; use crate::csv::args::MyArgs; +use crate::csv::compare::{write_to_file, Params}; - +/// # Panics +/// +/// Panics if delimter is set wrong and column to compare +/// is not available. fn main() { let args = MyArgs::parse(); @@ -24,14 +26,7 @@ fn main() { let diff = compare::compare(reader, reader2, ¶ms); let option_string_ref = params.output_mut(); - - // Now, check if the option is Some and dereference it to get the String if let Some(string_ref) = option_string_ref { - // Clone the underlying String since process_string expects ownership write_to_file(string_ref.clone(), diff); - // Alternatively, you can pass the ownership directly and consume the String - // process_string(string_ref); - } else { - print_lines(diff); } }