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"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
|
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]]
|
[[package]]
|
||||||
name = "csvcompare"
|
name = "csvcompare"
|
||||||
version = "0.1.0"
|
version = "1.0.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
|
"colored",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -161,6 +173,12 @@ dependencies = [
|
||||||
"windows-sys",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lazy_static"
|
||||||
|
version = "1.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.147"
|
version = "0.2.147"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "csvcompare"
|
name = "csvcompare"
|
||||||
version = "0.1.0"
|
version = "1.0.1"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "compare two files in csv format"
|
description = "compare two files in csv format"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
@ -10,3 +10,4 @@ authors = ["Mathias Rothenhäusler <safemind@posteo.net"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = { version = "4.3.19", features = ["derive"] }
|
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::io::Write as IoWrite;
|
||||||
use std::{
|
use std::{
|
||||||
fs::File,
|
fs::File,
|
||||||
|
@ -60,10 +61,24 @@ impl CsvLine {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_lines(vector: Vec<CsvLine>) {
|
pub fn print_lines(diff1: &[CsvLine], diff2: &[CsvLine], params: &Params) {
|
||||||
for line in vector.iter() {
|
println!();
|
||||||
println!("{}", line.line);
|
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>) {
|
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();
|
.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);
|
if params.output.is_none() {
|
||||||
find_diff(&vec2, &vec1, &mut diff, params);
|
print_lines(&diff1, &diff2, params);
|
||||||
|
|
||||||
diff
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
for i in vec1.iter() {
|
||||||
let splitter: Vec<&str> = i.line.split(params.delimiter()).collect();
|
let splitter: Vec<&str> = i.line.split(params.delimiter()).collect();
|
||||||
let value = splitter[params.column];
|
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.push(CsvLine::new(i.line.parse().unwrap()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
diff
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
15
src/main.rs
15
src/main.rs
|
@ -2,14 +2,16 @@ mod csv;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::BufReader;
|
use std::io::BufReader;
|
||||||
|
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use csv::compare;
|
use csv::compare;
|
||||||
|
|
||||||
use crate::csv::compare::{Params, write_to_file, print_lines};
|
|
||||||
use crate::csv::args::MyArgs;
|
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() {
|
fn main() {
|
||||||
let args = MyArgs::parse();
|
let args = MyArgs::parse();
|
||||||
|
|
||||||
|
@ -24,14 +26,7 @@ fn main() {
|
||||||
let diff = compare::compare(reader, reader2, ¶ms);
|
let diff = compare::compare(reader, reader2, ¶ms);
|
||||||
|
|
||||||
let option_string_ref = params.output_mut();
|
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 {
|
if let Some(string_ref) = option_string_ref {
|
||||||
// Clone the underlying String since process_string expects ownership
|
|
||||||
write_to_file(string_ref.clone(), diff);
|
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