nutt_web/modules/state/
mod.rs

1use std::sync::{Arc, RwLock, RwLockReadGuard, RwLockWriteGuard};
2
3#[derive(Debug, Clone)]
4pub struct State<T>(Arc<RwLock<T>>);
5
6impl<T> State<T> {
7    pub fn new(value: T) -> Self {
8        Self(Arc::new(RwLock::new(value)))
9    }
10    pub fn read(&self) -> RwLockReadGuard<T> {
11        while self.0.try_read().is_err() {}
12        self.0.read().unwrap()
13    }
14
15    pub fn write(&self) -> RwLockWriteGuard<T> {
16        while self.0.try_write().is_err() {}
17        self.0.write().unwrap()
18    }
19}
20
21#[macro_export]
22macro_rules! state {
23    ($state:expr) => {
24        (stringify!($state).into(), $state)
25    };
26}