macro_rules! transform_safe_async_methods {
() => {
fn transform_safe_async<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T) -> Fut + '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_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(move |current: T, _previous: Option<T>, _key: K, _token: ferroui_system::threading::CancellationToken| transform_factory(current)),
Some(std::rc::Rc::new(error_handler)),
None,
None,
false,
)
}
fn transform_safe_async_with_key<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T, K) -> Fut + '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_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(move |current: T, _previous: Option<T>, key: K, _token: ferroui_system::threading::CancellationToken| transform_factory(current, key)),
Some(std::rc::Rc::new(error_handler)),
None,
None,
false,
)
}
fn transform_safe_async_with_previous<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T, Option<T>, K) -> Fut + '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_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(move |current: T, previous: Option<T>, key: K, _token: ferroui_system::threading::CancellationToken| {
transform_factory(current, previous, key)
}),
Some(std::rc::Rc::new(error_handler)),
None,
None,
false,
)
}
fn transform_safe_async_with_token<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T, Option<T>, K, ferroui_system::threading::CancellationToken) -> Fut + '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_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(transform_factory),
Some(std::rc::Rc::new(error_handler)),
None,
None,
false,
)
}
fn transform_safe_async_forced<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T) -> Fut + '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_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(move |current: T, _previous: Option<T>, _key: K, _token: ferroui_system::threading::CancellationToken| transform_factory(current)),
Some(std::rc::Rc::new(error_handler)),
Some(force_transform),
None,
false,
)
}
fn transform_safe_async_with_key_forced<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T, K) -> Fut + '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_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(move |current: T, _previous: Option<T>, key: K, _token: ferroui_system::threading::CancellationToken| transform_factory(current, key)),
Some(std::rc::Rc::new(error_handler)),
Some(force_transform),
None,
false,
)
}
fn transform_safe_async_with_previous_forced<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T, Option<T>, K) -> Fut + '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_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(move |current: T, previous: Option<T>, key: K, _token: ferroui_system::threading::CancellationToken| {
transform_factory(current, previous, key)
}),
Some(std::rc::Rc::new(error_handler)),
Some(force_transform),
None,
false,
)
}
fn transform_safe_async_with_token_forced<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T, Option<T>, K, ferroui_system::threading::CancellationToken) -> Fut + '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_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(transform_factory),
Some(std::rc::Rc::new(error_handler)),
Some(force_transform),
None,
false,
)
}
fn transform_safe_async_with_options<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T) -> Fut + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
options: crate::cache::TransformAsyncOptions,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(move |current: T, _previous: Option<T>, _key: K, _token: ferroui_system::threading::CancellationToken| transform_factory(current)),
Some(std::rc::Rc::new(error_handler)),
None,
options.maximum_concurrency,
options.transform_on_refresh,
)
}
fn transform_safe_async_with_key_and_options<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T, K) -> Fut + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
options: crate::cache::TransformAsyncOptions,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(move |current: T, _previous: Option<T>, key: K, _token: ferroui_system::threading::CancellationToken| transform_factory(current, key)),
Some(std::rc::Rc::new(error_handler)),
None,
options.maximum_concurrency,
options.transform_on_refresh,
)
}
fn transform_safe_async_with_previous_and_options<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T, Option<T>, K) -> Fut + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
options: crate::cache::TransformAsyncOptions,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(move |current: T, previous: Option<T>, key: K, _token: ferroui_system::threading::CancellationToken| {
transform_factory(current, previous, key)
}),
Some(std::rc::Rc::new(error_handler)),
None,
options.maximum_concurrency,
options.transform_on_refresh,
)
}
fn transform_safe_async_with_token_and_options<U: Clone + 'static, Fut: std::future::Future<Output = Result<U, ferroui_system::ObservableError>> + 'static>(
&self,
transform_factory: impl Fn(T, Option<T>, K, ferroui_system::threading::CancellationToken) -> Fut + 'static,
error_handler: impl Fn(crate::kernel::Error<T, K>) + 'static,
options: crate::cache::TransformAsyncOptions,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform_async(
self.change_sets(),
crate::cache::internal::async_transform_factory(transform_factory),
Some(std::rc::Rc::new(error_handler)),
None,
options.maximum_concurrency,
options.transform_on_refresh,
)
}
};
}
pub(crate) use transform_safe_async_methods;