rsconnect 0.2.2

Fine-grained reactivity in Rust
Documentation
pub struct NonComparableValue<T>(pub(crate) T);

pub struct ComparableValue<T: PartialEq>(pub(crate) T);

pub trait Value<T> {
	fn get_ref(&self) -> &T;

	fn set_own(&mut self, value: T) -> T;

	fn equal(&self, old_value: &T) -> bool;
}

impl<T> Value<T> for NonComparableValue<T> {
	fn get_ref(&self) -> &T {
		&self.0
	}

	fn set_own(&mut self, value: T) -> T {
		std::mem::replace(&mut self.0, value)
	}

	fn equal(&self, _old_value: &T) -> bool {
		false
	}
}

impl<T: PartialEq> Value<T> for ComparableValue<T> {
	fn get_ref(&self) -> &T {
		&self.0
	}

	fn set_own(&mut self, value: T) -> T {
		std::mem::replace(&mut self.0, value)
	}

	fn equal(&self, old_value: &T) -> bool {
		self.0 == *old_value
	}
}