Introduce with helper and use sipper in gallery example

This commit is contained in:
Héctor Ramón Jiménez 2025-02-11 03:39:42 +01:00
parent 9f21eae152
commit 0c528be2ea
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
8 changed files with 143 additions and 105 deletions

View file

@ -63,7 +63,7 @@ impl<T> Task<T> {
/// progress with the first closure and the output with the second one.
pub fn sip<S>(
sipper: S,
on_progress: impl Fn(S::Progress) -> T + MaybeSend + 'static,
on_progress: impl FnMut(S::Progress) -> T + MaybeSend + 'static,
on_output: impl FnOnce(<S as Future>::Output) -> T + MaybeSend + 'static,
) -> Self
where
@ -98,50 +98,6 @@ impl<T> Task<T> {
self.then(move |output| Task::done(f(output)))
}
/// Combines a prefix value with the result of the [`Task`] using
/// the provided closure.
///
/// Sometimes you will want to identify the source or target
/// of some [`Task`] in your UI. This can be achieved through
/// normal means by using [`map`]:
///
/// ```rust
/// # use iced_runtime::Task;
/// # let task = Task::none();
/// # enum Message { TaskCompleted(u32, ()) }
/// let id = 123;
///
/// # let _ = {
/// task.map(move |result| Message::TaskCompleted(id, result))
/// # };
/// ```
///
/// Quite a mouthful. [`map_with`] lets you write:
///
/// ```rust
/// # use iced_runtime::Task;
/// # let task = Task::none();
/// # enum Message { TaskCompleted(u32, ()) }
/// # let id = 123;
/// # let _ = {
/// task.map_with(id, Message::TaskCompleted)
/// # };
/// ```
///
/// Much nicer!
pub fn map_with<P, O>(
self,
prefix: P,
mut f: impl FnMut(P, T) -> O + MaybeSend + 'static,
) -> Task<O>
where
T: MaybeSend + 'static,
P: MaybeSend + Clone + 'static,
O: MaybeSend + 'static,
{
self.map(move |result| f(prefix.clone(), result))
}
/// Performs a new [`Task`] for every output of the current [`Task`] using the
/// given closure.
///