Skip to main content

bc_xid/
shared.rs

1use std::{
2    cmp::{Eq, PartialEq},
3    fmt::Debug,
4    sync::{Arc, RwLock},
5};
6
7#[derive(Clone, Debug)]
8pub struct Shared<T>(Arc<RwLock<T>>)
9where
10    T: Clone + Debug + PartialEq + Eq;
11
12impl<T> PartialEq for Shared<T>
13where
14    T: Clone + Debug + PartialEq + Eq,
15{
16    fn eq(&self, other: &Self) -> bool { *self.read() == *other.read() }
17}
18
19impl<T> Eq for Shared<T> where T: Clone + Debug + PartialEq + Eq {}
20
21impl<T> Shared<T>
22where
23    T: Clone + Debug + PartialEq + Eq,
24{
25    pub fn new(value: T) -> Self { Shared(Arc::new(RwLock::new(value))) }
26
27    pub fn read(&self) -> std::sync::RwLockReadGuard<'_, T> {
28        self.0.read().unwrap()
29    }
30
31    pub fn write(&self) -> std::sync::RwLockWriteGuard<'_, T> {
32        self.0.write().unwrap()
33    }
34}