aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs
index ee1c232..ad996ea 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -25,6 +25,7 @@ use filters::{log::LogFilter, Inclusion};
mod guilds;
mod logger;
mod output;
+use output::sorting::Sorting;
mod paths;
mod playerclass;
use playerclass::PlayerClass;
@@ -79,6 +80,10 @@ pub struct Opt {
#[structopt(long = "no-color")]
no_color: bool,
+ /// Sort the output.
+ #[structopt(short = "s", long = "sort")]
+ sorting: Option<Sorting>,
+
/// Print more debugging information to stderr.
#[structopt(long = "debug")]
debug: bool,
@@ -150,7 +155,7 @@ impl Ord for Player {
}
/// Outcome of the fight.
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum FightOutcome {
Success,
Wipe,
@@ -377,7 +382,8 @@ fn build_filter(expr_string: &str) -> Result<Box<dyn LogFilter>> {
/// Run the grep search with the given options.
fn grep(opt: &Opt, filter: &dyn LogFilter) -> Result<()> {
- let pipeline = &output::build_pipeline(opt);
+ let pipeline = output::build_pipeline(opt);
+ let pipeline_ref = &pipeline;
rayon::scope(|s| {
let walker = WalkDir::new(&opt.path);
for entry in walker {
@@ -391,7 +397,7 @@ fn grep(opt: &Opt, filter: &dyn LogFilter) -> Result<()> {
let search = search_log(&entry, filter);
match search {
Ok(None) => (),
- Ok(Some(result)) => pipeline.push_item(&result),
+ Ok(Some(result)) => pipeline_ref.push_item(result),
Err(err) => {
debug!("Runtime error while scanning {:?}: {}", entry.path(), err);
}
@@ -400,7 +406,9 @@ fn grep(opt: &Opt, filter: &dyn LogFilter) -> Result<()> {
});
}
Ok(())
- })
+ }) as Result<()>;
+ pipeline.finish();
+ Ok(())
}
/// Search the given single log.