Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Native web fixes. #1118

Merged
merged 2 commits into from
Nov 29, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 47 additions & 22 deletions futures/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,33 +37,58 @@ pub mod time;

pub use command::Command;
pub use executor::Executor;
pub use platform::*;
pub use runtime::Runtime;
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"))]
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 future.
///
/// - On native platforms, it needs a `Send` requirement.
/// - On the Web platform, it does not need a `Send` requirement.
#[cfg(target_arch = "wasm32")]
pub type BoxFuture<T> = futures::future::LocalBoxFuture<'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>;

/// A boxed static stream.
///
/// - On native platforms, it needs 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::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 stream.
///
/// - On native platforms, it needs a `Send` requirement.
/// - On the Web platform, it does not need a `Send` requirement.
#[cfg(target_arch = "wasm32")]
pub type BoxStream<T> = futures::stream::LocalBoxStream<'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.
///
/// - 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::LocalBoxStream<'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> + 'static,
{
futures::stream::StreamExt::boxed_local(stream)
}
}
4 changes: 2 additions & 2 deletions native/src/subscription.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//! Listen to external events in your application.
use crate::event::{self, Event};
use crate::Hasher;
use iced_futures::futures::stream::BoxStream;
use iced_futures::BoxStream;

/// A request to listen to external events.
///
Expand All @@ -21,7 +21,7 @@ pub type Subscription<T> =
/// A stream of runtime events.
///
/// 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.
pub type Tracker =
Expand Down
9 changes: 4 additions & 5 deletions native/src/subscription/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,9 @@ where
self: Box<Self>,
event_stream: EventStream,
) -> BoxStream<Self::Output> {
event_stream
.filter_map(move |(event, status)| {
future::ready((self.f)(event, status))
})
.boxed()
let stream = event_stream.filter_map(move |(event, status)| {
future::ready((self.f)(event, status))
});
iced_futures::boxed_stream(stream)
}
}