colored output, diffs

master
Mathias Rothenhaeusler 2023-08-02 19:57:49 +02:00
parent 1812caa171
commit 483d006181
4 changed files with 57 additions and 21 deletions

20
Cargo.lock generated
View File

@ -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"

View File

@ -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 <safemind@posteo.net"]
[dependencies]
clap = { version = "4.3.19", features = ["derive"] }
colored = "2.0.4"

View File

@ -1,3 +1,4 @@
use colored::Colorize;
use std::io::Write as IoWrite;
use std::{
fs::File,
@ -60,10 +61,24 @@ impl CsvLine {
}
}
pub fn print_lines(vector: Vec<CsvLine>) {
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<CsvLine>) {
@ -90,15 +105,20 @@ pub fn compare(reader: BufReader<File>, reader2: BufReader<File>, params: &Param
})
.collect();
let mut diff: Vec<CsvLine> = Vec::new();
let mut diff1: Vec<CsvLine> = find_diff(&vec1, &vec2, params);
let mut diff2: Vec<CsvLine> = find_diff(&vec2, &vec1, params);
find_diff(&vec1, &vec2, &mut diff, params);
find_diff(&vec2, &vec1, &mut diff, params);
diff
if params.output.is_none() {
print_lines(&diff1, &diff2, params);
}
fn find_diff(vec1: &[CsvLine], vec2: &[CsvLine], diff: &mut Vec<CsvLine>, params: &Params) {
diff1.append(&mut diff2);
diff1
}
fn find_diff(vec1: &[CsvLine], vec2: &[CsvLine], params: &Params) -> Vec<CsvLine> {
let mut diff: Vec<CsvLine> = 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<CsvLine>, params
diff.push(CsvLine::new(i.line.parse().unwrap()));
}
}
diff
}
#[cfg(test)]

View File

@ -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, &params);
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);
}
}