1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use crate::error::{Elapsed, Error};
use futures::{Async, Future, Poll};
use tokio_timer::Delay;
#[derive(Debug)]
pub struct ResponseFuture<T> {
response: T,
sleep: Delay,
}
impl<T> ResponseFuture<T> {
pub(crate) fn new(response: T, sleep: Delay) -> Self {
ResponseFuture { response, sleep }
}
}
impl<T> Future for ResponseFuture<T>
where
T: Future,
Error: From<T::Error>,
{
type Item = T::Item;
type Error = Error;
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
match self.response.poll()? {
Async::Ready(v) => return Ok(Async::Ready(v)),
Async::NotReady => {}
}
match self.sleep.poll()? {
Async::NotReady => Ok(Async::NotReady),
Async::Ready(_) => Err(Elapsed(()).into()),
}
}
}