use batpak::prelude::*;
#[derive(Default, Debug, serde::Serialize, serde::Deserialize, PartialEq)]
pub struct KindFilteredCounter {
pub target_count: u64,
pub noise_count: u64,
}
impl EventSourced for KindFilteredCounter {
type Input = batpak::prelude::JsonValueInput;
fn from_events(events: &[Event<serde_json::Value>]) -> Option<Self> {
if events.is_empty() {
return None;
}
let mut s = Self::default();
for e in events {
s.apply_event(e);
}
Some(s)
}
fn apply_event(&mut self, event: &Event<serde_json::Value>) {
if event.event_kind() == EventKind::custom(0xF, 1) {
self.target_count += 1;
} else {
self.noise_count += 1;
}
}
fn relevant_event_kinds() -> &'static [EventKind] {
static KINDS: [EventKind; 1] = [EventKind::custom(0xF, 1)];
&KINDS
}
}
#[derive(Default, Debug, serde::Serialize, serde::Deserialize, PartialEq)]
pub struct AllCounter {
pub count: u64,
}
impl EventSourced for AllCounter {
type Input = batpak::prelude::JsonValueInput;
fn from_events(events: &[Event<serde_json::Value>]) -> Option<Self> {
if events.is_empty() {
return None;
}
let mut s = Self::default();
for e in events {
s.apply_event(e);
}
Some(s)
}
fn apply_event(&mut self, _event: &Event<serde_json::Value>) {
self.count += 1;
}
fn relevant_event_kinds() -> &'static [EventKind] {
&[]
}
}