diff options
author | Daniel <kingdread@gmx.de> | 2020-05-01 13:29:38 +0200 |
---|---|---|
committer | Daniel <kingdread@gmx.de> | 2020-05-01 13:29:38 +0200 |
commit | 5f765b749f793b2866262546d28ff138a5654dfc (patch) | |
tree | 192add4f0c51169f8f2702596d05bee00af6561a /src/filters | |
parent | 811d7e62695c5c12aecd08b176c4ead641e2ad2c (diff) | |
download | raidgrep-5f765b749f793b2866262546d28ff138a5654dfc.tar.gz raidgrep-5f765b749f793b2866262546d28ff138a5654dfc.tar.bz2 raidgrep-5f765b749f793b2866262546d28ff138a5654dfc.zip |
change LogFilter to take EarlyLogResult
This allows us to attach some additional metadata that is not found in
the PartialEvtc otherwise, such as the file name.
Diffstat (limited to 'src/filters')
-rw-r--r-- | src/filters/log.rs | 19 | ||||
-rw-r--r-- | src/filters/player.rs | 9 |
2 files changed, 13 insertions, 15 deletions
diff --git a/src/filters/log.rs b/src/filters/log.rs index 2d2fc37..60e6912 100644 --- a/src/filters/log.rs +++ b/src/filters/log.rs @@ -3,27 +3,26 @@ //! This is the "base unit", as each file corresponds to one log. Filters on other items (such as //! players) have to be lifted into log filters first. use super::{ - super::{FightOutcome, LogResult, Weekday}, + super::{EarlyLogResult, FightOutcome, LogResult}, Filter, Inclusion, }; use std::collections::HashSet; -use evtclib::raw::parser::PartialEvtc; use evtclib::Boss; -use chrono::{DateTime, Datelike, Utc}; +use chrono::{DateTime, Datelike, Utc, Weekday}; use num_traits::FromPrimitive as _; /// Filter trait used for filters that operate on complete logs. -pub trait LogFilter = Filter<PartialEvtc, LogResult>; +pub trait LogFilter = Filter<EarlyLogResult, LogResult>; #[derive(Debug, Clone)] struct BossFilter(HashSet<Boss>); -impl Filter<PartialEvtc, LogResult> for BossFilter { - fn filter_early(&self, partial_evtc: &PartialEvtc) -> Inclusion { - let boss = Boss::from_u16(partial_evtc.header.combat_id); +impl Filter<EarlyLogResult, LogResult> for BossFilter { + fn filter_early(&self, early_log: &EarlyLogResult) -> Inclusion { + let boss = Boss::from_u16(early_log.evtc.header.combat_id); boss.map(|b| self.0.contains(&b).into()) .unwrap_or(Inclusion::Exclude) } @@ -42,7 +41,7 @@ pub fn boss(bosses: HashSet<Boss>) -> Box<dyn LogFilter> { #[derive(Debug, Clone)] struct OutcomeFilter(HashSet<FightOutcome>); -impl Filter<PartialEvtc, LogResult> for OutcomeFilter { +impl Filter<EarlyLogResult, LogResult> for OutcomeFilter { fn filter(&self, log: &LogResult) -> bool { self.0.contains(&log.outcome) } @@ -76,7 +75,7 @@ pub fn wipe() -> Box<dyn LogFilter> { #[derive(Debug, Clone)] struct WeekdayFilter(HashSet<Weekday>); -impl Filter<PartialEvtc, LogResult> for WeekdayFilter { +impl Filter<EarlyLogResult, LogResult> for WeekdayFilter { fn filter(&self, log: &LogResult) -> bool { self.0.contains(&log.time.weekday()) } @@ -90,7 +89,7 @@ pub fn weekday(weekdays: HashSet<Weekday>) -> Box<dyn LogFilter> { #[derive(Debug, Clone)] struct TimeFilter(Option<DateTime<Utc>>, Option<DateTime<Utc>>); -impl Filter<PartialEvtc, LogResult> for TimeFilter { +impl Filter<EarlyLogResult, LogResult> for TimeFilter { fn filter(&self, log: &LogResult) -> bool { let after_ok = match self.0 { Some(time) => time <= log.time, diff --git a/src/filters/player.rs b/src/filters/player.rs index 7258bd7..3af2be2 100644 --- a/src/filters/player.rs +++ b/src/filters/player.rs @@ -3,14 +3,13 @@ //! Additionally, it provides methods to lift a player filter to a log filter with [`any`][any] and //! [`all`][all]. use super::{ - super::{guilds, LogResult, Player, SearchField}, + super::{guilds, EarlyLogResult, LogResult, Player, SearchField}, log::LogFilter, Filter, Inclusion, }; use std::convert::TryFrom; -use evtclib::raw::parser::PartialEvtc; use evtclib::{Agent, AgentKind}; use regex::Regex; @@ -25,10 +24,10 @@ pub trait PlayerFilter = Filter<Agent, Player>; #[derive(Debug)] struct AllPlayers(Box<dyn PlayerFilter>); -impl Filter<PartialEvtc, LogResult> for AllPlayers { - fn filter_early(&self, partial_evtc: &PartialEvtc) -> Inclusion { +impl Filter<EarlyLogResult, LogResult> for AllPlayers { + fn filter_early(&self, early_log: &EarlyLogResult) -> Inclusion { let mut result = Inclusion::Include; - for agent in &partial_evtc.agents { + for agent in &early_log.evtc.agents { if !agent.is_player() { continue; } |