struct Cell<T> {
inner: std::cell::RefCell<T>,
}
impl<T> Cell<T> {
fn new(value: T) -> Self {
Self {
inner: std::cell::RefCell::new(value),
}
}
fn read(&self) -> Result<std::cell::Ref<'_, T>> {
match self.inner.try_borrow() {
Ok(borrow) => Ok(borrow),
Err(..) => Err(Error::BusyShared),
}
}
fn write(&self) -> Result<std::cell::RefMut<'_, T>> {
match self.inner.try_borrow_mut() {
Ok(borrow) => Ok(borrow),
Err(..) => Err(Error::BusyShared),
}
}
fn get_mut(&mut self) -> &mut T {
self.inner.get_mut()
}
}