macro_rules! to_observable_optional_methods {
() => {
fn to_observable_optional(&self, key: K) -> std::rc::Rc<dyn ferroui_system::IObservable<Option<T>>>
where
T: PartialEq,
{
crate::cache::internal::to_observable_optional(self.change_sets(), key, std::rc::Rc::new(|a: &T, b: &T| a == b))
}
fn to_observable_optional_with_comparer(&self, key: K, equality_comparer: impl Fn(&T, &T) -> bool + 'static) -> std::rc::Rc<dyn ferroui_system::IObservable<Option<T>>> {
crate::cache::internal::to_observable_optional(self.change_sets(), key, std::rc::Rc::new(equality_comparer))
}
fn to_observable_optional_with_initial(&self, key: K, initial_optional_when_missing: bool) -> std::rc::Rc<dyn ferroui_system::IObservable<Option<T>>>
where
T: PartialEq,
{
self.to_observable_optional_with_initial_and_comparer(key, initial_optional_when_missing, |a: &T, b: &T| a == b)
}
fn to_observable_optional_with_initial_and_comparer(
&self,
key: K,
initial_optional_when_missing: bool,
equality_comparer: impl Fn(&T, &T) -> bool + 'static,
) -> std::rc::Rc<dyn ferroui_system::IObservable<Option<T>>> {
if initial_optional_when_missing {
crate::cache::internal::to_observable_optional_with_initial(self.change_sets(), key, std::rc::Rc::new(equality_comparer))
} else {
crate::cache::internal::to_observable_optional(self.change_sets(), key, std::rc::Rc::new(equality_comparer))
}
}
};
}
pub(crate) use to_observable_optional_methods;