use rocket::serde::Serialize; use std::sync::atomic::{AtomicU64, Ordering}; #[derive(Serialize)] pub struct Snapshot { pub request: u64, pub blocked: u64, pub entries: u64, } #[derive(Default)] pub struct Total { entries: AtomicU64, blocked: AtomicU64, request: AtomicU64, } impl Total { pub fn with_entries(entries: u64) -> Self { Self { entries: entries.into(), ..Self::default() } } pub fn snapshot(&self) -> Snapshot { Snapshot { request: self.request.load(Ordering::Relaxed), blocked: self.blocked.load(Ordering::Relaxed), entries: self.entries.load(Ordering::Relaxed), } } pub fn set_entries(&self, value: u64) { self.entries.store(value, Ordering::Relaxed); } pub fn increase_blocked(&self) { self.blocked.fetch_add(1, Ordering::Relaxed); } pub fn increase_request(&self) { self.request.fetch_add(1, Ordering::Relaxed); } }