use std::cell::Cell;
pub trait CellUpdateExt {
type Inner;
fn update<R>(&self, f: impl FnOnce(&mut Self::Inner) -> R) -> R;
}
impl<T: Default> CellUpdateExt for Cell<T> {
type Inner = T;
fn update<R>(&self, f: impl FnOnce(&mut Self::Inner) -> R) -> R {
let mut inner = self.replace(Default::default());
let ret = (f)(&mut inner);
self.set(inner);
ret
}
}