message: Use `subscription::run` for `download_progress` example
diff: +use futures::Stream;
  use iced_futures::futures;
  -use std::hash::{Hash, Hasher};
  +use iced_native::subscription;
  +
  +use std::hash::Hash;
  // Just a little utility function
  pub fn file<I: 'static + Hash + Copy + Send, T: ToString>(
  id: I,
  url: T,
  ) -> iced::Subscription<(I, Progress)> {
  - iced::Subscription::from_recipe(Download {
  + subscription::run(
  + Download {
  id,
  url: url.to_string(),
  - })
  + },
  + download,
  + )
  }
  +#[derive(Debug, Hash, Clone)]
  pub struct Download<I> {
  id: I,
  url: String,
  }
  -// Make sure iced can use our download stream
  -impl<H, I, T> iced_native::subscription::Recipe<H, I> for Download<T>
  -where
  - T: 'static + Hash + Copy + Send,
  - H: Hasher,
  -{
  - type Output = (T, Progress);
  +fn download<I: Copy>(
  + download: Download<I>,
  +) -> impl Stream<Item = (I, Progress)> {
  + let id = download.id;
  - fn hash(&self, state: &mut H) {
  - struct Marker;
  - std::any::TypeId::of::<Marker>().hash(state);
  -
  - self.id.hash(state);
  - }
  -
  - fn stream(
  - self: Box<Self>,
  - _input: futures::stream::BoxStream<'static, I>,
  - ) -> futures::stream::BoxStream<'static, Self::Output> {
  - let id = self.id;
  -
  - Box::pin(futures::stream::unfold(
  - State::Ready(self.url),
  + futures::stream::unfold(
  + State::Ready(download.url),
  move |state| async move {
  match state {
  State::Ready(url) => {
  @@ -57,10 +48,7 @@ where
  },
  ))
  } else {
  - Some((
  - (id, Progress::Errored),
  - State::Finished,
  - ))
  + Some(((id, Progress::Errored), State::Finished))
  }
  }
  Err(_) => {
  @@ -91,9 +79,7 @@ where
  Ok(None) => {
  Some(((id, Progress::Finished), State::Finished))
  }
  - Err(_) => {
  - Some(((id, Progress::Errored), State::Finished))
  - }
  + Err(_) => Some(((id, Progress::Errored), State::Finished)),
  },
  State::Finished => {
  // We do not let the stream die, as it would start a
  @@ -105,8 +91,7 @@ where
  }
  }
  },
  - ))
  - }
  + )
  }
  #[derive(Debug, Clone)]
  