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

@ -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
}
}