colored output, diffs
parent
1812caa171
commit
483d006181
|
@ -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"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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);
|
||||
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<CsvLine>, params: &Params) {
|
||||
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)]
|
||||
|
|
15
src/main.rs
15
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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue