summaryrefslogtreecommitdiffstats
path: root/futures/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-26 14:55:02 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-26 14:55:02 +0100
commit338fff35ac821e6b03d68bd94418de500fb50f77 (patch)
tree7028f6e3c6f28c3d14392e5d1b3bb07586955c28 /futures/src
parent138110f5967899365bb4e1409651dec43a46d123 (diff)
downloadiced-338fff35ac821e6b03d68bd94418de500fb50f77.tar.gz
iced-338fff35ac821e6b03d68bd94418de500fb50f77.tar.bz2
iced-338fff35ac821e6b03d68bd94418de500fb50f77.zip
Make `subscription::Recipe` cross-platform
By removing the `Send` requirement when targetting Wasm
Diffstat (limited to 'futures/src')
-rw-r--r--futures/src/subscription.rs34
-rw-r--r--futures/src/subscription/tracker.rs10
2 files changed, 20 insertions, 24 deletions
diff --git a/futures/src/subscription.rs b/futures/src/subscription.rs
index 8eccb7be..ab333a20 100644
--- a/futures/src/subscription.rs
+++ b/futures/src/subscription.rs
@@ -3,7 +3,7 @@ mod tracker;
pub use tracker::Tracker;
-use futures::stream::BoxStream;
+use crate::BoxStream;
/// A request to listen to external events.
///
@@ -168,8 +168,8 @@ pub trait Recipe<Hasher: std::hash::Hasher, Event> {
/// [`Recipe`]: trait.Recipe.html
fn stream(
self: Box<Self>,
- input: BoxStream<'static, Event>,
- ) -> BoxStream<'static, Self::Output>;
+ input: BoxStream<Event>,
+ ) -> BoxStream<Self::Output>;
}
struct Map<Hasher, Event, A, B> {
@@ -201,18 +201,16 @@ where
self.recipe.hash(state);
}
- fn stream(
- self: Box<Self>,
- input: BoxStream<'static, E>,
- ) -> futures::stream::BoxStream<'static, Self::Output> {
+ fn stream(self: Box<Self>, input: BoxStream<E>) -> BoxStream<Self::Output> {
use futures::StreamExt;
let mapper = self.mapper;
- self.recipe
- .stream(input)
- .map(move |element| mapper(element))
- .boxed()
+ Box::pin(
+ self.recipe
+ .stream(input)
+ .map(move |element| mapper(element)),
+ )
}
}
@@ -243,17 +241,15 @@ where
self.recipe.hash(state);
}
- fn stream(
- self: Box<Self>,
- input: BoxStream<'static, E>,
- ) -> futures::stream::BoxStream<'static, Self::Output> {
+ fn stream(self: Box<Self>, input: BoxStream<E>) -> BoxStream<Self::Output> {
use futures::StreamExt;
let value = self.value;
- self.recipe
- .stream(input)
- .map(move |element| (value.clone(), element))
- .boxed()
+ Box::pin(
+ self.recipe
+ .stream(input)
+ .map(move |element| (value.clone(), element)),
+ )
}
}
diff --git a/futures/src/subscription/tracker.rs b/futures/src/subscription/tracker.rs
index cfa36170..efb464b5 100644
--- a/futures/src/subscription/tracker.rs
+++ b/futures/src/subscription/tracker.rs
@@ -1,6 +1,6 @@
-use crate::Subscription;
+use crate::{BoxFuture, Subscription};
-use futures::{channel::mpsc, future::BoxFuture, sink::Sink};
+use futures::{channel::mpsc, sink::Sink};
use std::{collections::HashMap, marker::PhantomData};
/// A registry of subscription streams.
@@ -59,7 +59,7 @@ where
&mut self,
subscription: Subscription<Hasher, Event, Message>,
receiver: Receiver,
- ) -> Vec<BoxFuture<'static, ()>>
+ ) -> Vec<BoxFuture<()>>
where
Message: 'static + Send,
Receiver: 'static
@@ -70,7 +70,7 @@ where
{
use futures::{future::FutureExt, stream::StreamExt};
- let mut futures = Vec::new();
+ let mut futures: Vec<BoxFuture<()>> = Vec::new();
let recipes = subscription.recipes();
let mut alive = std::collections::HashSet::new();
@@ -115,7 +115,7 @@ where
},
);
- futures.push(future.boxed());
+ futures.push(Box::pin(future));
}
self.subscriptions.retain(|id, _| alive.contains(&id));