2023-10-11 07:54:41 +13:00
|
|
|
use std::fs::File;
|
|
|
|
use std::io::{BufWriter, Write};
|
2023-05-08 06:54:05 +12:00
|
|
|
use std::path::Path;
|
|
|
|
|
2024-02-15 05:45:25 +13:00
|
|
|
use fun_time::fun_time;
|
|
|
|
use serde::Serialize;
|
|
|
|
|
2020-09-27 03:52:13 +13:00
|
|
|
pub trait DebugPrint {
|
|
|
|
fn debug_print(&self);
|
|
|
|
}
|
2021-11-28 08:57:10 +13:00
|
|
|
|
2020-09-27 03:52:13 +13:00
|
|
|
pub trait PrintResults {
|
2023-10-11 07:54:41 +13:00
|
|
|
fn write_results<T: Write>(&self, writer: &mut T) -> std::io::Result<()>;
|
|
|
|
|
2023-10-15 04:48:57 +13:00
|
|
|
#[fun_time(message = "print_results_to_output", level = "debug")]
|
2023-10-11 07:54:41 +13:00
|
|
|
fn print_results_to_output(&self) {
|
|
|
|
let stdout = std::io::stdout();
|
|
|
|
let mut handle = stdout.lock();
|
|
|
|
self.write_results(&mut handle).unwrap();
|
|
|
|
handle.flush().unwrap();
|
|
|
|
}
|
|
|
|
|
2023-10-15 04:48:57 +13:00
|
|
|
#[fun_time(message = "print_results_to_file", level = "debug")]
|
2023-10-11 07:54:41 +13:00
|
|
|
fn print_results_to_file(&self, file_name: &str) -> std::io::Result<()> {
|
|
|
|
let file_name: String = match file_name {
|
|
|
|
"" => "results.txt".to_string(),
|
|
|
|
k => k.to_string(),
|
|
|
|
};
|
|
|
|
|
|
|
|
let file_handler = File::create(file_name)?;
|
|
|
|
let mut writer = BufWriter::new(file_handler);
|
|
|
|
self.write_results(&mut writer)?;
|
|
|
|
writer.flush()?;
|
|
|
|
Ok(())
|
|
|
|
}
|
2023-10-13 05:48:46 +13:00
|
|
|
|
|
|
|
fn save_results_to_file_as_json(&self, file_name: &str, pretty_print: bool) -> std::io::Result<()>;
|
|
|
|
|
2023-12-04 00:06:42 +13:00
|
|
|
fn save_results_to_file_as_json_internal<T: Serialize + std::fmt::Debug>(&self, file_name: &str, item_to_serialize: &T, pretty_print: bool) -> std::io::Result<()> {
|
2023-10-13 05:48:46 +13:00
|
|
|
if pretty_print {
|
|
|
|
self.save_results_to_file_as_json_pretty(file_name, item_to_serialize)
|
|
|
|
} else {
|
|
|
|
self.save_results_to_file_as_json_compact(file_name, item_to_serialize)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-10-15 04:48:57 +13:00
|
|
|
#[fun_time(message = "save_results_to_file_as_json_pretty", level = "debug")]
|
2023-12-04 00:06:42 +13:00
|
|
|
fn save_results_to_file_as_json_pretty<T: Serialize + std::fmt::Debug>(&self, file_name: &str, item_to_serialize: &T) -> std::io::Result<()> {
|
2023-10-13 05:48:46 +13:00
|
|
|
let file_handler = File::create(file_name)?;
|
|
|
|
let mut writer = BufWriter::new(file_handler);
|
|
|
|
serde_json::to_writer_pretty(&mut writer, item_to_serialize)?;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
2023-10-15 04:48:57 +13:00
|
|
|
#[fun_time(message = "save_results_to_file_as_json_compact", level = "debug")]
|
2023-12-04 00:06:42 +13:00
|
|
|
fn save_results_to_file_as_json_compact<T: Serialize + std::fmt::Debug>(&self, file_name: &str, item_to_serialize: &T) -> std::io::Result<()> {
|
2023-10-13 05:48:46 +13:00
|
|
|
let file_handler = File::create(file_name)?;
|
|
|
|
let mut writer = BufWriter::new(file_handler);
|
|
|
|
serde_json::to_writer(&mut writer, item_to_serialize)?;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
fn save_all_in_one(&self, file_name: &str) -> std::io::Result<()> {
|
|
|
|
self.save_results_to_file_as_json(&format!("{file_name}_pretty.json"), true)?;
|
|
|
|
self.save_results_to_file_as_json(&format!("{file_name}_compact.json"), false)?;
|
|
|
|
self.print_results_to_file(&format!("{file_name}.txt"))?;
|
|
|
|
Ok(())
|
|
|
|
}
|
2020-09-27 03:52:13 +13:00
|
|
|
}
|
2023-05-08 06:54:05 +12:00
|
|
|
|
|
|
|
pub trait ResultEntry {
|
|
|
|
fn get_path(&self) -> &Path;
|
2023-10-08 05:04:17 +13:00
|
|
|
fn get_modified_date(&self) -> u64;
|
|
|
|
fn get_size(&self) -> u64;
|
2023-05-08 06:54:05 +12:00
|
|
|
}
|