colored output, diffs
This commit is contained in:
+31
-9
@@ -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)]
|
||||
|
||||
+5
-10
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user