Merge pull request #1118 from TannerRogalsky/native-web-fixes
Native web fixes.
This commit is contained in:
commit
96c7f9765c
3 changed files with 53 additions and 29 deletions
|
|
@ -37,33 +37,58 @@ pub mod time;
|
||||||
|
|
||||||
pub use command::Command;
|
pub use command::Command;
|
||||||
pub use executor::Executor;
|
pub use executor::Executor;
|
||||||
|
pub use platform::*;
|
||||||
pub use runtime::Runtime;
|
pub use runtime::Runtime;
|
||||||
pub use subscription::Subscription;
|
pub use subscription::Subscription;
|
||||||
|
|
||||||
/// A boxed static future.
|
|
||||||
///
|
|
||||||
/// - On native platforms, it needs a `Send` requirement.
|
|
||||||
/// - On the Web platform, it does not need a `Send` requirement.
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
pub type BoxFuture<T> = futures::future::BoxFuture<'static, T>;
|
mod platform {
|
||||||
|
/// A boxed static future.
|
||||||
|
///
|
||||||
|
/// - On native platforms, it needs a `Send` requirement.
|
||||||
|
/// - On the Web platform, it does not need a `Send` requirement.
|
||||||
|
pub type BoxFuture<T> = futures::future::BoxFuture<'static, T>;
|
||||||
|
|
||||||
|
/// A boxed static stream.
|
||||||
|
///
|
||||||
|
/// - On native platforms, it needs a `Send` requirement.
|
||||||
|
/// - On the Web platform, it does not need a `Send` requirement.
|
||||||
|
pub type BoxStream<T> = futures::stream::BoxStream<'static, T>;
|
||||||
|
|
||||||
|
/// Boxes a stream.
|
||||||
|
///
|
||||||
|
/// - On native platforms, it needs a `Send` requirement.
|
||||||
|
/// - On the Web platform, it does not need a `Send` requirement.
|
||||||
|
pub fn boxed_stream<T, S>(stream: S) -> BoxStream<T>
|
||||||
|
where
|
||||||
|
S: futures::Stream<Item = T> + Send + 'static,
|
||||||
|
{
|
||||||
|
futures::stream::StreamExt::boxed(stream)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A boxed static future.
|
|
||||||
///
|
|
||||||
/// - On native platforms, it needs a `Send` requirement.
|
|
||||||
/// - On the Web platform, it does not need a `Send` requirement.
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
#[cfg(target_arch = "wasm32")]
|
||||||
pub type BoxFuture<T> = futures::future::LocalBoxFuture<'static, T>;
|
mod platform {
|
||||||
|
/// A boxed static future.
|
||||||
|
///
|
||||||
|
/// - On native platforms, it needs a `Send` requirement.
|
||||||
|
/// - On the Web platform, it does not need a `Send` requirement.
|
||||||
|
pub type BoxFuture<T> = futures::future::LocalBoxFuture<'static, T>;
|
||||||
|
|
||||||
/// A boxed static stream.
|
/// A boxed static stream.
|
||||||
///
|
///
|
||||||
/// - On native platforms, it needs a `Send` requirement.
|
/// - On native platforms, it needs a `Send` requirement.
|
||||||
/// - On the Web platform, it does not need a `Send` requirement.
|
/// - On the Web platform, it does not need a `Send` requirement.
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
pub type BoxStream<T> = futures::stream::LocalBoxStream<'static, T>;
|
||||||
pub type BoxStream<T> = futures::stream::BoxStream<'static, T>;
|
|
||||||
|
|
||||||
/// A boxed static stream.
|
/// Boxes a stream.
|
||||||
///
|
///
|
||||||
/// - On native platforms, it needs a `Send` requirement.
|
/// - On native platforms, it needs a `Send` requirement.
|
||||||
/// - On the Web platform, it does not need a `Send` requirement.
|
/// - On the Web platform, it does not need a `Send` requirement.
|
||||||
#[cfg(target_arch = "wasm32")]
|
pub fn boxed_stream<T, S>(stream: S) -> BoxStream<T>
|
||||||
pub type BoxStream<T> = futures::stream::LocalBoxStream<'static, T>;
|
where
|
||||||
|
S: futures::Stream<Item = T> + 'static,
|
||||||
|
{
|
||||||
|
futures::stream::StreamExt::boxed_local(stream)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
//! Listen to external events in your application.
|
//! Listen to external events in your application.
|
||||||
use crate::event::{self, Event};
|
use crate::event::{self, Event};
|
||||||
use crate::Hasher;
|
use crate::Hasher;
|
||||||
use iced_futures::futures::stream::BoxStream;
|
use iced_futures::BoxStream;
|
||||||
|
|
||||||
/// A request to listen to external events.
|
/// A request to listen to external events.
|
||||||
///
|
///
|
||||||
|
|
@ -21,7 +21,7 @@ pub type Subscription<T> =
|
||||||
/// A stream of runtime events.
|
/// A stream of runtime events.
|
||||||
///
|
///
|
||||||
/// It is the input of a [`Subscription`] in the native runtime.
|
/// It is the input of a [`Subscription`] in the native runtime.
|
||||||
pub type EventStream = BoxStream<'static, (Event, event::Status)>;
|
pub type EventStream = BoxStream<(Event, event::Status)>;
|
||||||
|
|
||||||
/// A native [`Subscription`] tracker.
|
/// A native [`Subscription`] tracker.
|
||||||
pub type Tracker =
|
pub type Tracker =
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,9 @@ where
|
||||||
self: Box<Self>,
|
self: Box<Self>,
|
||||||
event_stream: EventStream,
|
event_stream: EventStream,
|
||||||
) -> BoxStream<Self::Output> {
|
) -> BoxStream<Self::Output> {
|
||||||
event_stream
|
let stream = event_stream.filter_map(move |(event, status)| {
|
||||||
.filter_map(move |(event, status)| {
|
future::ready((self.f)(event, status))
|
||||||
future::ready((self.f)(event, status))
|
});
|
||||||
})
|
iced_futures::boxed_stream(stream)
|
||||||
.boxed()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue