aboutsummaryrefslogtreecommitdiff
path: root/src/filters/player.rs
diff options
context:
space:
mode:
authorDaniel <kingdread@gmx.de>2020-04-25 13:14:30 +0200
committerDaniel <kingdread@gmx.de>2020-04-25 13:19:42 +0200
commit5dbea93266c3a30dac5ec6f5a7915d73a440f573 (patch)
tree9b7bba1b25b2ccebd0b5ed705bf8b7238ddb0893 /src/filters/player.rs
parent509e5817e6e035e762840c00fb95b18253b1d269 (diff)
downloadraidgrep-5dbea93266c3a30dac5ec6f5a7915d73a440f573.tar.gz
raidgrep-5dbea93266c3a30dac5ec6f5a7915d73a440f573.tar.bz2
raidgrep-5dbea93266c3a30dac5ec6f5a7915d73a440f573.zip
use free functions instead of Filter::new
Having a ::new on each of the filter types was a bit weird, especially because we returned Box<dyn ...> instead of Self (and clippy rightfully complained). With this patch, we now have a bunch of normal functions, and we don't show to the outside how a filter is actually implemented (or what struct is behind it).
Diffstat (limited to 'src/filters/player.rs')
-rw-r--r--src/filters/player.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/filters/player.rs b/src/filters/player.rs
index 8f9196a..4daeb22 100644
--- a/src/filters/player.rs
+++ b/src/filters/player.rs
@@ -64,13 +64,7 @@ pub fn any(player_filter: Box<dyn PlayerFilter>) -> Box<dyn LogFilter> {
///
/// The given SearchField determines in which field something should be searched.
#[derive(Debug, Clone)]
-pub struct NameFilter(SearchField, Regex);
-
-impl NameFilter {
- pub fn new(field: SearchField, regex: Regex) -> Box<dyn PlayerFilter> {
- Box::new(NameFilter(field, regex))
- }
-}
+struct NameFilter(SearchField, Regex);
impl Filter<Agent, Player> for NameFilter {
fn filter_early(&self, agent: &Agent) -> Inclusion {
@@ -108,3 +102,18 @@ impl Filter<Agent, Player> for NameFilter {
}
}
}
+
+/// Construct a `PlayerFilter` that searches the given `field` with the given `regex`.
+pub fn name(field: SearchField, regex: Regex) -> Box<dyn PlayerFilter> {
+ Box::new(NameFilter(field, regex))
+}
+
+/// Construct a `PlayerFilter` that searches the character name with the given `regex`.
+pub fn character(regex: Regex) -> Box<dyn PlayerFilter> {
+ name(SearchField::Character, regex)
+}
+
+/// Construct a `PlayerFilter` that searches the account name with the given `regex`.
+pub fn account(regex: Regex) -> Box<dyn PlayerFilter> {
+ name(SearchField::Account, regex)
+}