relay/src/label.rs

36 lines
841 B
Rust
Raw Normal View History

2020-03-15 02:05:40 +00:00
use std::sync::{
atomic::{AtomicUsize, Ordering},
Arc,
};
#[derive(Clone, Debug)]
pub struct ArbiterLabelFactory(Arc<AtomicUsize>);
#[derive(Clone, Debug)]
pub struct ArbiterLabel(usize);
impl ArbiterLabelFactory {
pub fn new() -> Self {
ArbiterLabelFactory(Arc::new(AtomicUsize::new(0)))
}
pub fn set_label(&self) {
2020-03-15 16:29:01 +00:00
if !actix::Arbiter::contains_item::<ArbiterLabel>() {
let id = self.0.fetch_add(1, Ordering::SeqCst);
actix::Arbiter::set_item(ArbiterLabel(id));
}
2020-03-15 02:05:40 +00:00
}
}
impl ArbiterLabel {
pub fn get() -> ArbiterLabel {
actix::Arbiter::get_item(|label: &ArbiterLabel| label.clone())
}
}
impl std::fmt::Display for ArbiterLabel {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "Arbiter #{}", self.0)
}
}