use futures::{Future, IntoStream, Poll, Stream};
pub struct RelmStream<ERROR, ITEM, STREAM: Stream<Item=ITEM, Error=ERROR>> {
stream: STREAM,
}
impl<ERROR, ITEM, STREAM: Stream<Item=ITEM, Error=ERROR>> Stream for RelmStream<ERROR, ITEM, STREAM> {
type Item = ITEM;
type Error = ERROR;
fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
self.stream.poll()
}
}
pub trait ToStream<STREAM: Stream<Item=Self::Item, Error=Self::Error>> {
type Error;
type Item;
fn to_stream(self) -> RelmStream<Self::Error, Self::Item, STREAM>;
}
impl<ERROR, ITEM, STREAM: Stream<Item=ITEM, Error=ERROR>> ToStream<STREAM> for STREAM {
type Error = ERROR;
type Item = ITEM;
fn to_stream(self) -> RelmStream<ERROR, ITEM, STREAM> {
RelmStream {
stream: self,
}
}
}
impl<ERROR, FUTURE: Future<Item=ITEM, Error=ERROR>, ITEM> ToStream<IntoStream<FUTURE>> for FUTURE {
type Error = ERROR;
type Item = ITEM;
fn to_stream(self) -> RelmStream<ERROR, ITEM, IntoStream<FUTURE>> {
RelmStream {
stream: self.into_stream(),
}
}
}