summaryrefslogtreecommitdiffstats
path: root/examples/download_progress/src/download.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/download_progress/src/download.rs')
-rw-r--r--examples/download_progress/src/download.rs23
1 files changed, 9 insertions, 14 deletions
diff --git a/examples/download_progress/src/download.rs b/examples/download_progress/src/download.rs
index d63fb906..5b81f7a2 100644
--- a/examples/download_progress/src/download.rs
+++ b/examples/download_progress/src/download.rs
@@ -1,16 +1,14 @@
-use iced::futures::{SinkExt, Stream, StreamExt};
-use iced::stream::try_channel;
+use iced::futures::StreamExt;
+use iced::task::{sipper, Straw};
use std::sync::Arc;
-pub fn download(
- url: impl AsRef<str>,
-) -> impl Stream<Item = Result<Progress, Error>> {
- try_channel(1, move |mut output| async move {
+pub fn download(url: impl AsRef<str>) -> impl Straw<(), Progress, Error> {
+ sipper(move |mut progress| async move {
let response = reqwest::get(url.as_ref()).await?;
let total = response.content_length().ok_or(Error::NoContentLength)?;
- let _ = output.send(Progress::Downloading { percent: 0.0 }).await;
+ let _ = progress.send(Progress { percent: 0.0 }).await;
let mut byte_stream = response.bytes_stream();
let mut downloaded = 0;
@@ -19,23 +17,20 @@ pub fn download(
let bytes = next_bytes?;
downloaded += bytes.len();
- let _ = output
- .send(Progress::Downloading {
+ let _ = progress
+ .send(Progress {
percent: 100.0 * downloaded as f32 / total as f32,
})
.await;
}
- let _ = output.send(Progress::Finished).await;
-
Ok(())
})
}
#[derive(Debug, Clone)]
-pub enum Progress {
- Downloading { percent: f32 },
- Finished,
+pub struct Progress {
+ pub percent: f32,
}
#[derive(Debug, Clone)]