tower_web/util/buf_stream/
file.rs1use super::BufStream;
2
3use bytes::BytesMut;
4use futures::{Async, Poll};
5use tokio_fs::File;
6use tokio_io::AsyncRead;
7
8use std::io;
9
10impl BufStream for File {
11 type Item = io::Cursor<BytesMut>;
12 type Error = io::Error;
13
14 fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
15 let mut v = BytesMut::with_capacity(8 * 1024);
16
17 let len = try_ready!(self.read_buf(&mut v));
18
19 if len == 0 {
20 Ok(Async::Ready(None))
21 } else {
22 Ok(Async::Ready(Some(io::Cursor::new(v))))
23 }
24 }
25}