atm_io_utils/
limited_reader.rs1use std::cmp::min;
4
5use futures_core::Poll;
6use futures_core::task::Context;
7use futures_io::{AsyncRead, Error as FutIoErr};
8
9pub struct LimitedReader<R> {
12 inner: R,
13 remaining: usize,
14}
15
16impl<R> LimitedReader<R> {
17 pub fn new(inner: R, limit: usize) -> LimitedReader<R> {
19 LimitedReader {
20 inner: inner,
21 remaining: limit,
22 }
23 }
24}
25
26impl<R: AsyncRead> AsyncRead for LimitedReader<R> {
27 fn poll_read(&mut self, cx: &mut Context, buf: &mut [u8]) -> Poll<usize, FutIoErr> {
28 let upper = min(self.remaining, buf.len());
29 self.inner.poll_read(cx, &mut buf[..upper])
30 }
31}