aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs37
-rw-r--r--src/output.rs30
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(())
+}