diff options
author | Daniel <kingdread@gmx.de> | 2018-09-07 00:07:16 +0200 |
---|---|---|
committer | Daniel <kingdread@gmx.de> | 2018-09-07 00:07:16 +0200 |
commit | b94272563e98ca268bcee800533ce851cce9c604 (patch) | |
tree | d510e70e85987a0bd47b1c1749b4366f31ecb3b8 | |
parent | 92cc9192081a3fa5cc9e5846dfe7118f5b87ae42 (diff) | |
download | raidgrep-b94272563e98ca268bcee800533ce851cce9c604.tar.gz raidgrep-b94272563e98ca268bcee800533ce851cce9c604.tar.bz2 raidgrep-b94272563e98ca268bcee800533ce851cce9c604.zip |
move output formatting to submodule
-rw-r--r-- | src/main.rs | 37 | ||||
-rw-r--r-- | src/output.rs | 30 |
2 files changed, 36 insertions, 31 deletions
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<W: Write>(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(()) +} |