aboutsummaryrefslogtreecommitdiff
path: root/src/fexpr
diff options
context:
space:
mode:
Diffstat (limited to 'src/fexpr')
-rw-r--r--src/fexpr/grammar.lalrpop9
-rw-r--r--src/fexpr/mod.rs1
2 files changed, 10 insertions, 0 deletions
diff --git a/src/fexpr/grammar.lalrpop b/src/fexpr/grammar.lalrpop
index 9584536..9eef21a 100644
--- a/src/fexpr/grammar.lalrpop
+++ b/src/fexpr/grammar.lalrpop
@@ -7,6 +7,7 @@ use super::{
DateProducer,
DurationProducer,
+ CountProducer,
};
use evtclib::Boss;
use std::collections::HashSet;
@@ -73,6 +74,7 @@ LogPredicate: Box<dyn filters::log::LogFilter> = {
<Comparison<DateProducer>>,
<Comparison<DurationProducer>>,
+ <Comparison<CountProducer>>,
"(" <LogFilter> ")",
}
@@ -215,6 +217,11 @@ DurationProducer: Box<dyn DurationProducer> = {
"-duration" => filters::values::duration(),
}
+CountProducer: Box<dyn CountProducer> = {
+ <integer> => filters::values::constant(<>.parse().unwrap()),
+ "count" "(" "player" ":" <PlayerFilter> ")" => filters::values::player_count(<>),
+}
+
match {
"player" => "player",
"not" => "not",
@@ -223,10 +230,12 @@ match {
"any" => "any",
"all" => "all",
"exists" => "exists",
+ "count" => "count",
r"\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d" => datetime,
r"\d\d\d\d-\d\d-\d\d" => date,
r"((\d+m ?)?\d+s)|(\d+m)" => duration,
+ r"\d+" => integer,
r"[[:alpha:]][\w]*" => word,
r#""[^"]*""# => string,
diff --git a/src/fexpr/mod.rs b/src/fexpr/mod.rs
index 1738e44..f765acf 100644
--- a/src/fexpr/mod.rs
+++ b/src/fexpr/mod.rs
@@ -13,6 +13,7 @@ use thiserror::Error;
trait DateProducer = filters::values::Producer<Output = chrono::DateTime<chrono::Utc>>;
trait DurationProducer = filters::values::Producer<Output = chrono::Duration>;
+trait CountProducer = filters::values::Producer<Output = u8>;
lalrpop_mod!(#[allow(clippy::all)] pub grammar, "/fexpr/grammar.rs");