async_ui_internal_utils 0.0.2

for internal use only
Documentation
use std::{
    cell::RefMut,
    ops::{Deref, DerefMut},
    task::Waker,
};

use super::{Inner, SUBLIST};

pub struct ReactiveCellBorrowMut<'b, T> {
    pub(super) reference: RefMut<'b, Inner<T>>,
}

impl<'b, T> DerefMut for ReactiveCellBorrowMut<'b, T> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.reference.data
    }
}

impl<'b, T> Deref for ReactiveCellBorrowMut<'b, T> {
    type Target = T;
    fn deref(&self) -> &Self::Target {
        &self.reference.data
    }
}

impl<'b, T> Drop for ReactiveCellBorrowMut<'b, T> {
    fn drop(&mut self) {
        self.reference.version += 1;
        self.reference
            .listeners
            .iter(&SUBLIST)
            .for_each(Waker::wake_by_ref);
    }
}