macro_rules! transform_safe_methods {
() => {
fn transform_safe<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> Result<U, 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>>> {
crate::cache::internal::transform(
self.change_sets(),
move |current: &T, _previous: Option<&T>, _key: &K| transform_factory(current),
Some(std::rc::Rc::new(error_handler)),
false,
)
}
fn transform_safe_with_key<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, &K) -> Result<U, 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>>> {
crate::cache::internal::transform(
self.change_sets(),
move |current: &T, _previous: Option<&T>, key: &K| transform_factory(current, key),
Some(std::rc::Rc::new(error_handler)),
false,
)
}
fn transform_safe_with_previous<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> Result<U, 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>>> {
crate::cache::internal::transform(self.change_sets(), transform_factory, Some(std::rc::Rc::new(error_handler)), false)
}
fn transform_safe_forced<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> Result<U, ferroui_system::ObservableError> + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
force_transform: std::rc::Rc<dyn ferroui_system::IObservable<std::rc::Rc<dyn Fn(&T) -> bool>>>,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_with_forced_transform(
self.change_sets(),
crate::cache::internal::transform_factory(move |current: &T, _previous: Option<&T>, _key: &K| transform_factory(current)),
crate::cache::internal::for_forced(force_transform),
Some(std::rc::Rc::new(error_handler)),
)
}
fn transform_safe_with_key_forced<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, &K) -> Result<U, ferroui_system::ObservableError> + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
force_transform: std::rc::Rc<dyn ferroui_system::IObservable<std::rc::Rc<dyn Fn(&T, &K) -> bool>>>,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_with_forced_transform(
self.change_sets(),
crate::cache::internal::transform_factory(move |current: &T, _previous: Option<&T>, key: &K| transform_factory(current, key)),
force_transform,
Some(std::rc::Rc::new(error_handler)),
)
}
fn transform_safe_with_previous_forced<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> Result<U, ferroui_system::ObservableError> + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
force_transform: std::rc::Rc<dyn ferroui_system::IObservable<std::rc::Rc<dyn Fn(&T, &K) -> bool>>>,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_with_forced_transform(
self.change_sets(),
crate::cache::internal::transform_factory(transform_factory),
force_transform,
Some(std::rc::Rc::new(error_handler)),
)
}
fn transform_safe_forced_all<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> Result<U, ferroui_system::ObservableError> + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
force_transform: std::rc::Rc<dyn ferroui_system::IObservable<()>>,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_with_forced_transform(
self.change_sets(),
crate::cache::internal::transform_factory(move |current: &T, _previous: Option<&T>, _key: &K| transform_factory(current)),
crate::cache::internal::for_forced_all(force_transform),
Some(std::rc::Rc::new(error_handler)),
)
}
fn transform_safe_with_key_forced_all<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, &K) -> Result<U, ferroui_system::ObservableError> + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
force_transform: std::rc::Rc<dyn ferroui_system::IObservable<()>>,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_with_forced_transform(
self.change_sets(),
crate::cache::internal::transform_factory(move |current: &T, _previous: Option<&T>, key: &K| transform_factory(current, key)),
crate::cache::internal::for_forced_all(force_transform),
Some(std::rc::Rc::new(error_handler)),
)
}
fn transform_safe_with_previous_forced_all<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> Result<U, ferroui_system::ObservableError> + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
force_transform: std::rc::Rc<dyn ferroui_system::IObservable<()>>,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_with_forced_transform(
self.change_sets(),
crate::cache::internal::transform_factory(transform_factory),
crate::cache::internal::for_forced_all(force_transform),
Some(std::rc::Rc::new(error_handler)),
)
}
};
}
pub(crate) use transform_safe_methods;