sprite-core 0.1.0

Sprite Engine — a fault-tolerant actor runtime for Rust
Documentation
use std::sync::atomic::{AtomicU64, Ordering};

/// Per-actor metrics. Lightweight, lock-free counters.
#[derive(Debug)]
pub struct ActorMetrics {
    messages_received: AtomicU64,
    messages_sent: AtomicU64,
    recoveries: AtomicU64,
    panics: AtomicU64,
}

impl ActorMetrics {
    pub fn new() -> Self {
        Self {
            messages_received: AtomicU64::new(0),
            messages_sent: AtomicU64::new(0),
            recoveries: AtomicU64::new(0),
            panics: AtomicU64::new(0),
        }
    }
    pub fn inc_received(&self) { self.messages_received.fetch_add(1, Ordering::Relaxed); }
    pub fn inc_sent(&self) { self.messages_sent.fetch_add(1, Ordering::Relaxed); }
    pub fn inc_recovery(&self) { self.recoveries.fetch_add(1, Ordering::Relaxed); }
    pub fn inc_panic(&self) { self.panics.fetch_add(1, Ordering::Relaxed); }
    pub fn messages_received(&self) -> u64 { self.messages_received.load(Ordering::Relaxed) }
    pub fn messages_sent(&self) -> u64 { self.messages_sent.load(Ordering::Relaxed) }
    pub fn recoveries(&self) -> u64 { self.recoveries.load(Ordering::Relaxed) }
    pub fn panics(&self) -> u64 { self.panics.load(Ordering::Relaxed) }
}

impl Default for ActorMetrics {
    fn default() -> Self { Self::new() }
}