use std::borrow::BorrowMut;
use yew::html::ShouldRender;
pub trait NeqAssign<NEW> {
fn neq_assign(&mut self, new: NEW) -> ShouldRender;
}
impl<T: BorrowMut<U>, U: PartialEq> NeqAssign<U> for T {
fn neq_assign(&mut self, new: U) -> bool {
self.neq_assign_by(new, |x, y| x == y)
}
}
pub trait NeqAssignBy<NEW> {
fn neq_assign_by<F>(&mut self, new: NEW, eq: F) -> ShouldRender
where
F: FnOnce(&NEW, &NEW) -> bool;
}
impl<T: BorrowMut<U>, U> NeqAssignBy<U> for T {
fn neq_assign_by<F>(&mut self, new: U, eq: F) -> ShouldRender
where
F: FnOnce(&U, &U) -> bool,
{
if !eq(self.borrow(), &new) {
*self.borrow_mut() = new;
true
} else {
false
}
}
}