nutt_web/modules/state/
mod.rs1use 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}