use std::collections::HashMap;
use serde::{Deserialize, Serialize};
pub type EventTimingsMap = HashMap<ReplicatorCandidateEvent, i128>;
#[derive(Debug, Default, Clone, PartialEq)]
pub struct StatemapEvents {
timings: EventTimingsMap,
}
impl StatemapEvents {
pub fn with_timings(event_timings: EventTimingsMap) -> Self {
Self { timings: event_timings }
}
}
impl ReplicatorCandidateEventTimingsTrait for StatemapEvents {
fn record_event_timestamp(&mut self, event: ReplicatorCandidateEvent, ts_ns: i128) {
self.timings.insert(event, ts_ns);
}
fn get_event_timestamp(&self, event: ReplicatorCandidateEvent) -> Option<i128> {
self.timings.get(&event).copied()
}
fn get_all_timings(&self) -> EventTimingsMap {
self.timings.clone()
}
}
#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq, Hash)]
pub enum ReplicatorCandidateEvent {
ReplicatorCandidateReceived,
ReplicatorDecisionReceived,
ReplicatorStatemapPicked,
QueueStatemapReceived,
QueueStatemapSent,
InstallerStatemapReceived,
InstallerStatemapInstallionBegin,
InstallerStatemapInstallionComplete,
}
pub trait ReplicatorCandidateEventTimingsTrait {
fn record_event_timestamp(&mut self, event: ReplicatorCandidateEvent, ts_ns: i128);
fn get_event_timestamp(&self, event: ReplicatorCandidateEvent) -> Option<i128>;
fn get_all_timings(&self) -> EventTimingsMap;
}