use futures::{Stream, Async, Poll};
use ops::inc::Incrementable;
pub struct RangeStream<T> {
next: T,
end: T,
}
impl<T> RangeStream<T> {
pub fn new(start: T, end: T) -> RangeStream<T> {
RangeStream {
next: start,
end: end,
}
}
}
impl<T: Incrementable + ::std::cmp::PartialOrd> Stream for RangeStream<T> {
type Item = T;
type Error = ();
fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
if self.next >= self.end {
Ok(Async::Ready(None))
} else {
let v = self.next;
self.next.post_inc();
Ok(Async::Ready(Some(v)))
}
}
}