1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
use crate::Topic; use serde::{Deserialize, Serialize}; use std::{collections::HashMap, time::SystemTime}; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct Logs { creation_time: SystemTime, last_update: SystemTime, last_gossip: SystemTime, quarantined: Option<SystemTime>, last_use_of: HashMap<Topic, SystemTime>, } impl Logs { pub fn creation_time(&self) -> &SystemTime { &self.creation_time } pub fn last_update(&self) -> &SystemTime { &self.last_update } pub fn last_gossip(&self) -> &SystemTime { &self.last_gossip } pub fn last_use_of(&self, topic: Topic) -> Option<&SystemTime> { self.last_use_of.get(&topic) } pub fn quarantined(&self) -> Option<&SystemTime> { self.quarantined.as_ref() } pub(crate) fn gossiping(&mut self) { self.last_gossip = SystemTime::now() } pub(crate) fn updated(&mut self) { self.last_update = SystemTime::now() } pub(crate) fn quarantine(&mut self) { self.quarantined = Some(SystemTime::now()) } pub(crate) fn lift_quarantine(&mut self) { self.quarantined = None } pub(crate) fn use_of(&mut self, topic: Topic) { self.last_use_of.insert(topic, SystemTime::now()); } } impl Default for Logs { fn default() -> Self { let now = SystemTime::now(); Self { creation_time: now, last_update: now, last_gossip: now, quarantined: None, last_use_of: HashMap::default(), } } }