rillrate_protocol/live_data/counter/
state.rs

1use 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}