mirror of
https://github.com/hexedtech/codemp.git
synced 2024-11-22 15:24:48 +01:00
feat: improve InternallyMutable
This commit is contained in:
parent
f14a8c40a5
commit
0ca5165b73
1 changed files with 17 additions and 5 deletions
|
@ -51,26 +51,38 @@ pub async fn select_buffer(
|
||||||
|
|
||||||
/// wraps sender and receiver to allow mutable field with immutable ref
|
/// wraps sender and receiver to allow mutable field with immutable ref
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct InternallyMutable<T: Clone> {
|
pub struct InternallyMutable<T> {
|
||||||
getter: tokio::sync::watch::Receiver<T>,
|
getter: tokio::sync::watch::Receiver<T>,
|
||||||
setter: tokio::sync::watch::Sender<T>,
|
setter: tokio::sync::watch::Sender<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Clone + Default> Default for InternallyMutable<T> {
|
impl<T: Default> Default for InternallyMutable<T> {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
let (tx, rx) = tokio::sync::watch::channel(T::default());
|
Self::new(T::default())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> InternallyMutable<T> {
|
||||||
|
pub fn new(init: T) -> Self {
|
||||||
|
let (tx, rx) = tokio::sync::watch::channel(init);
|
||||||
InternallyMutable {
|
InternallyMutable {
|
||||||
getter: rx,
|
getter: rx,
|
||||||
setter: tx,
|
setter: tx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: Clone> InternallyMutable<T> {
|
|
||||||
pub fn set(&self, state: T) -> T {
|
pub fn set(&self, state: T) -> T {
|
||||||
self.setter.send_replace(state)
|
self.setter.send_replace(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn wait(&self) {
|
||||||
|
let mut new = self.getter.clone();
|
||||||
|
new.changed().await; // first time unlocks immediately
|
||||||
|
new.changed().await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Clone> InternallyMutable<T> {
|
||||||
pub fn get(&self) -> T {
|
pub fn get(&self) -> T {
|
||||||
self.getter.borrow().clone()
|
self.getter.borrow().clone()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue