use parking_lot::RwLock;
use std::mem;
#[derive(Debug, Default)]
pub struct Data<T>(T);
impl<T> Data<T> {
#[inline]
pub fn new(value: T) -> Self {
Self(value)
}
#[inline]
pub fn into_inner(self) -> T {
self.0
}
}
impl<T: Clone> Data<T> {
#[inline]
pub fn get(&self) -> T {
self.0.clone()
}
}
#[derive(Debug, Default)]
pub struct SharedData<T>(RwLock<T>);
impl<T> SharedData<T> {
#[inline]
pub fn new(value: T) -> Self {
Self(RwLock::new(value))
}
#[inline]
pub fn set(&self, value: T) {
*self.0.write() = value;
}
#[inline]
pub fn replace(&self, value: T) -> T {
mem::replace(&mut self.0.write(), value)
}
#[inline]
pub fn into_inner(self) -> T {
self.0.into_inner()
}
}
impl<T: Clone> SharedData<T> {
#[inline]
pub fn get(&self) -> T {
self.0.read().clone()
}
}