use std::sync::{Arc, LockResult, RwLock, RwLockReadGuard, RwLockWriteGuard};
pub struct DriverReadOnlyLock<T> {
inner: Arc<RwLock<T>>,
}
impl<T> DriverReadOnlyLock<T> {
pub fn new(val: T) -> Self {
Self {
inner: Arc::new(RwLock::new(val)),
}
}
pub fn write(&self) -> LockResult<RwLockWriteGuard<'_, T>> {
self.inner.write()
}
pub fn read(&self) -> LockResult<RwLockReadGuard<'_, T>> {
self.inner.read()
}
pub fn read_only(&self) -> ExecutorReadOnlyLock<T> {
ExecutorReadOnlyLock {
inner: self.inner.clone(),
}
}
}
pub struct ExecutorReadOnlyLock<T> {
inner: Arc<RwLock<T>>,
}
impl<T> ExecutorReadOnlyLock<T> {
pub fn read(&self) -> LockResult<RwLockReadGuard<'_, T>> {
self.inner.read()
}
}