macro_rules! transform_with_inline_update_methods {
() => {
fn transform_with_inline_update<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> U + 'static,
update_action: impl Fn(&U, &T) + 'static,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
self.transform_with_inline_update_with(transform_factory, update_action, false)
}
fn transform_with_inline_update_with<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> U + 'static,
update_action: impl Fn(&U, &T) + 'static,
transform_on_refresh: bool,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
let transform_factory: std::rc::Rc<dyn Fn(&T) -> Result<U, ferroui_system::ObservableError>> = std::rc::Rc::new(move |current: &T| -> Result<U, ferroui_system::ObservableError> { Ok(transform_factory(current)) });
let update_action: std::rc::Rc<dyn Fn(&U, &T) -> Result<(), ferroui_system::ObservableError>> = std::rc::Rc::new(move |previous: &U, current: &T| -> Result<(), ferroui_system::ObservableError> {
update_action(previous, current);
Ok(())
});
crate::cache::internal::transform_with_inline_update(self.change_sets(), transform_factory, update_action, None, transform_on_refresh)
}
fn transform_with_inline_update_safe<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> Result<U, ferroui_system::ObservableError> + 'static,
update_action: impl Fn(&U, &T) -> Result<(), ferroui_system::ObservableError> + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
self.transform_with_inline_update_safe_with(transform_factory, update_action, error_handler, false)
}
fn transform_with_inline_update_safe_with<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> Result<U, ferroui_system::ObservableError> + 'static,
update_action: impl Fn(&U, &T) -> Result<(), ferroui_system::ObservableError> + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
transform_on_refresh: bool,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_with_inline_update(
self.change_sets(),
std::rc::Rc::new(transform_factory),
std::rc::Rc::new(update_action),
Some(std::rc::Rc::new(error_handler)),
transform_on_refresh,
)
}
fn try_transform_with_inline_update<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> Result<U, ferroui_system::ObservableError> + 'static,
update_action: impl Fn(&U, &T) -> Result<(), ferroui_system::ObservableError> + 'static,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
self.try_transform_with_inline_update_with(transform_factory, update_action, false)
}
fn try_transform_with_inline_update_with<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> Result<U, ferroui_system::ObservableError> + 'static,
update_action: impl Fn(&U, &T) -> Result<(), ferroui_system::ObservableError> + 'static,
transform_on_refresh: bool,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_with_inline_update(
self.change_sets(),
std::rc::Rc::new(transform_factory),
std::rc::Rc::new(update_action),
None,
transform_on_refresh,
)
}
};
}
pub(crate) use transform_with_inline_update_methods;