diff options
Diffstat (limited to 'src')
| -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(()) +} | 
