use std::sync::Arc;
use std::sync::atomic::{AtomicU8, Ordering};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum Activity {
Active = 0,
Standby = 1,
Offline = 2,
}
#[derive(Debug, Clone)]
pub struct ActivitySignal(Arc<AtomicU8>);
impl ActivitySignal {
pub fn new() -> Self {
Self(Arc::new(AtomicU8::new(Activity::Active as u8)))
}
pub fn set(&self, activity: Activity) {
self.0.store(activity as u8, Ordering::Relaxed);
}
pub fn get(&self) -> Activity {
match self.0.load(Ordering::Relaxed) {
1 => Activity::Standby,
2 => Activity::Offline,
_ => Activity::Active,
}
}
}
impl Default for ActivitySignal {
fn default() -> Self {
Self::new()
}
}