macro_rules! transform_methods {
() => {
fn transform<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> U + '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| Ok(transform_factory(current)), None, false)
}
fn transform_with_key<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, &K) -> U + '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| Ok(transform_factory(current, key)), None, false)
}
fn transform_with_previous<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> U + '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| Ok(transform_factory(current, previous, key)), None, false)
}
fn transform_with_refresh<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> U + 'static,
transform_on_refresh: bool,
) -> 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| Ok(transform_factory(current)), None, transform_on_refresh)
}
fn transform_with_key_and_refresh<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, &K) -> U + 'static,
transform_on_refresh: bool,
) -> 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| Ok(transform_factory(current, key)), None, transform_on_refresh)
}
fn transform_with_previous_and_refresh<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> U + 'static,
transform_on_refresh: bool,
) -> 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| Ok(transform_factory(current, previous, key)),
None,
transform_on_refresh,
)
}
fn transform_forced<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> U + '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| Ok(transform_factory(current))),
crate::cache::internal::for_forced(force_transform),
None,
)
}
fn transform_with_key_forced<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, &K) -> U + '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| Ok(transform_factory(current, key))),
force_transform,
None,
)
}
fn transform_with_previous_forced<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> U + '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| Ok(transform_factory(current, previous, key))),
force_transform,
None,
)
}
fn transform_forced_all<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> U + '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| Ok(transform_factory(current))),
crate::cache::internal::for_forced_all(force_transform),
None,
)
}
fn transform_with_key_forced_all<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, &K) -> U + '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| Ok(transform_factory(current, key))),
crate::cache::internal::for_forced_all(force_transform),
None,
)
}
fn transform_with_previous_forced_all<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> U + '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| Ok(transform_factory(current, previous, key))),
crate::cache::internal::for_forced_all(force_transform),
None,
)
}
fn try_transform<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T) -> Result<U, ferroui_system::ObservableError> + '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), None, false)
}
fn try_transform_with_key<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, &K) -> Result<U, ferroui_system::ObservableError> + '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), None, false)
}
fn try_transform_with_previous<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> Result<U, ferroui_system::ObservableError> + 'static,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform(self.change_sets(), transform_factory, None, false)
}
fn try_transform_with_previous_and_refresh<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> Result<U, ferroui_system::ObservableError> + 'static,
transform_on_refresh: bool,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<U, K>>> {
crate::cache::internal::transform(self.change_sets(), transform_factory, None, transform_on_refresh)
}
fn try_transform_with_previous_forced<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> Result<U, ferroui_system::ObservableError> + '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, None)
}
fn try_transform_with_previous_forced_all<U: Clone + 'static>(
&self,
transform_factory: impl Fn(&T, Option<&T>, &K) -> Result<U, ferroui_system::ObservableError> + '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),
None,
)
}
};
}
pub(crate) use transform_methods;