macro_rules! full_join_methods {
() => {
fn full_join<TR: Clone + 'static, KR: Eq + std::hash::Hash + Clone + 'static, D: Clone + 'static>(
&self,
right: std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<TR, KR>>>,
right_key_selector: impl Fn(&TR) -> K + 'static,
result_selector: impl Fn(Option<&T>, Option<&TR>) -> D + 'static,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<D, K>>> {
self.full_join_with_key(right, right_key_selector, move |_: &K, left: Option<&T>, right: Option<&TR>| result_selector(left, right))
}
fn full_join_with_key<TR: Clone + 'static, KR: Eq + std::hash::Hash + Clone + 'static, D: Clone + 'static>(
&self,
right: std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<TR, KR>>>,
right_key_selector: impl Fn(&TR) -> K + 'static,
result_selector: impl Fn(&K, Option<&T>, Option<&TR>) -> D + 'static,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<D, K>>> {
crate::cache::internal::full_join(self.change_sets(), right, std::rc::Rc::new(right_key_selector), std::rc::Rc::new(result_selector))
}
};
}
pub(crate) use full_join_methods;