Make iced_native subscription input opaque

This commit is contained in:
Héctor Ramón Jiménez 2019-12-14 04:49:13 +01:00
parent ba06d458d3
commit 293314405f
4 changed files with 36 additions and 28 deletions

View file

@ -155,13 +155,13 @@ mod time {
struct Every(std::time::Duration);
impl<Hasher, Input> iced_native::subscription::Recipe<Hasher, Input> for Every
impl<H, I> iced_native::subscription::Recipe<H, I> for Every
where
Hasher: std::hash::Hasher,
H: std::hash::Hasher,
{
type Output = std::time::Instant;
fn hash(&self, state: &mut Hasher) {
fn hash(&self, state: &mut H) {
use std::hash::Hash;
std::any::TypeId::of::<Self>().hash(state);
@ -170,7 +170,7 @@ mod time {
fn stream(
self: Box<Self>,
_input: Input,
_input: I,
) -> futures::stream::BoxStream<'static, Self::Output> {
use futures::stream::StreamExt;

View file

@ -1,31 +1,16 @@
use crate::{Event, Hasher};
use futures::stream::BoxStream;
pub type Subscription<T> = iced_core::Subscription<Hasher, Input, T>;
pub type Input = futures::channel::mpsc::Receiver<Event>;
pub type EventStream = BoxStream<'static, Event>;
pub type Subscription<T> = iced_core::Subscription<Hasher, EventStream, T>;
pub use iced_core::subscription::Recipe;
mod events;
use events::Events;
pub fn events() -> Subscription<Event> {
Subscription::from_recipe(Events)
}
struct Events;
impl Recipe<Hasher, Input> for Events {
type Output = Event;
fn hash(&self, state: &mut Hasher) {
use std::hash::Hash;
std::any::TypeId::of::<Self>().hash(state);
}
fn stream(
self: Box<Self>,
input: Input,
) -> futures::stream::BoxStream<'static, Self::Output> {
use futures::StreamExt;
input.boxed()
}
}

View file

@ -0,0 +1,23 @@
use crate::{
subscription::{EventStream, Recipe},
Event, Hasher,
};
pub struct Events;
impl Recipe<Hasher, EventStream> for Events {
type Output = Event;
fn hash(&self, state: &mut Hasher) {
use std::hash::Hash;
std::any::TypeId::of::<Self>().hash(state);
}
fn stream(
self: Box<Self>,
event_stream: EventStream,
) -> futures::stream::BoxStream<'static, Self::Output> {
event_stream
}
}

View file

@ -468,7 +468,7 @@ impl Subscriptions {
let (event_sender, event_receiver) =
futures::channel::mpsc::channel(100);
let stream = recipe.stream(event_receiver);
let stream = recipe.stream(event_receiver.boxed());
let proxy = proxy.clone();
let future = futures::future::select(