rillrate_protocol/live_data/counter/
state.rs1use crate::base::stat_flow::{StatFlowSpec, StatFlowState};
2use serde::{Deserialize, Serialize};
3use std::time::Duration;
4
5pub type CounterStatState = StatFlowState<CounterStatSpec>;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct CounterStatSpec {
9 pub pull_ms: Option<u64>,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize, Default)]
13pub struct CounterStat {
14 pub total: i64,
15}
16
17impl StatFlowSpec for CounterStatSpec {
18 type Stat = CounterStat;
19 type Delta = i64;
20
21 fn interval(&self) -> Option<Duration> {
22 self.pull_ms.map(Duration::from_millis)
23 }
24
25 fn apply(stat: &mut Self::Stat, delta: Self::Delta) {
26 stat.total += delta;
27 }
28}