From b94272563e98ca268bcee800533ce851cce9c604 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Sep 2018 00:07:16 +0200 Subject: move output formatting to submodule --- src/main.rs | 37 ++++++------------------------------- src/output.rs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 31 deletions(-) create mode 100644 src/output.rs (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 502d98e..c776336 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,9 +7,8 @@ extern crate evtclib; extern crate regex; extern crate walkdir; -use std::fmt; use std::fs::File; -use std::io::BufReader; +use std::io::{self, BufReader}; use std::path::PathBuf; use std::str::FromStr; @@ -23,6 +22,8 @@ use evtclib::{AgentKind, AgentName, EventKind, Log}; mod errors; use errors::RuntimeError; +mod output; + #[derive(StructOpt, Debug)] #[structopt(name = "raidgrep")] struct Opt { @@ -66,7 +67,7 @@ impl FromStr for SearchField { } #[derive(Debug, Clone)] -struct LogResult { +pub struct LogResult { log_file: PathBuf, time: NaiveDateTime, boss_name: String, @@ -74,39 +75,13 @@ struct LogResult { } #[derive(Debug, Clone)] -struct Player { +pub struct Player { account_name: String, character_name: String, profession: String, subgroup: u8, } -impl fmt::Display for LogResult { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - use colored::Colorize; - writeln!(f, "{}: {:?}", "File".green(), self.log_file)?; - writeln!( - f, - "{}: {} - {}: {}", - "Date".green(), - self.time, - "Boss".green(), - self.boss_name - )?; - for player in &self.players { - writeln!( - f, - " {:2} {:20} {:19} {}", - player.subgroup, - player.account_name.yellow(), - player.character_name.cyan(), - player.profession - )?; - } - Ok(()) - } -} - fn main() { let opt = Opt::from_args(); let result = grep(&opt); @@ -132,7 +107,7 @@ fn grep(opt: &Opt) -> Result<(), RuntimeError> { let entry = entry?; if is_log_file(&entry) { if let Some(result) = search_log(&entry, opt)? { - println!("{}", result); + output::colored(io::stdout(), &result)?; } } } diff --git a/src/output.rs b/src/output.rs new file mode 100644 index 0000000..848eab5 --- /dev/null +++ b/src/output.rs @@ -0,0 +1,30 @@ +use super::LogResult; +use super::errors::RuntimeError; + +use std::io::Write; + +/// Write the given log result to the given stream, using ANSI colors. +pub fn colored(mut f: W, item: &LogResult) -> Result<(), RuntimeError> { + use colored::Colorize; + writeln!(f, "{}: {:?}", "File".green(), item.log_file)?; + writeln!( + f, + "{}: {} - {}: {}", + "Date".green(), + item.time, + "Boss".green(), + item.boss_name + )?; + for player in &item.players { + writeln!( + f, + " {:2} {:20} {:19} {}", + player.subgroup, + player.account_name.yellow(), + player.character_name.cyan(), + player.profession + )?; + } + writeln!(f)?; + Ok(()) +} -- cgit v1.2.3