Struct http_serve::ChunkedReadFile [−][src]
pub struct ChunkedReadFile<D: 'static + Send + Buf + From<Vec<u8>> + From<&'static [u8]>, E: 'static + Send + Into<Box<dyn StdError + Send + Sync>> + From<Box<dyn StdError + Send + Sync>>> { /* fields omitted */ }
Expand description
HTTP entity created from a std::fs::File
which reads the file chunk-by-chunk within
a tokio::task::block_in_place
closure.
ChunkedReadFile
is cheap to clone and reuse for many requests.
Expects to be served from a tokio threadpool.
type BoxedError = Box<dyn std::error::Error + 'static + Send + Sync>;
async fn serve_dictionary(req: Request<Body>) -> Result<Response<Body>, BoxedError> {
let f = tokio::task::block_in_place::<_, Result<_, BoxedError>>(
move || {
let f = std::fs::File::open("/usr/share/dict/words")?;
let mut headers = http::header::HeaderMap::new();
headers.insert(header::CONTENT_TYPE, HeaderValue::from_static("text/plain"));
Ok(http_serve::ChunkedReadFile::new(f, headers)?)
},
)?;
Ok(http_serve::serve(f, &req))
}
Implementations
Creates a new ChunkedReadFile.
read(2)
calls will be wrapped in tokio::task::block_in_place
calls so that they don’t
block the tokio reactor thread on local disk I/O. Note that std::fs::File::open
and
this constructor (specifically, its call to fstat(2)
) may also block, so they typically
should be wrapped in tokio::task::block_in_place
as well.
Creates a new ChunkedReadFile, with presupplied metadata.
This is an optimization for the case where the caller has already called fstat(2)
.
Note that on Windows, this still may perform a blocking file operation, so it should
still be wrapped in tokio::task::block_in_place
.
Trait Implementations
type Error = E
Gets the body bytes indicated by range
.
Adds entity headers such as Content-Type
to the supplied Headers
object.
In particular, these headers are the “other representation header fields” described by RFC
7233 section 4.1; they should exclude
Content-Range
, Date
, Cache-Control
, ETag
, Expires
, Content-Location
, and Vary
. Read more
Returns an etag for this entity, if available. Implementations are encouraged to provide a strong etag. RFC 7232 section 2.1 notes that only strong etags are usable for sub-range retrieval. Read more
Returns the last modified time of this entity, if available.
Note that serve
may serve an earlier Last-Modified:
date than the one returned here if
this time is in the future, as required by RFC 7232 section
2.2.1. Read more
Auto Trait Implementations
impl<D, E> RefUnwindSafe for ChunkedReadFile<D, E> where
D: RefUnwindSafe,
E: RefUnwindSafe,
impl<D, E> Send for ChunkedReadFile<D, E>
impl<D, E> Sync for ChunkedReadFile<D, E> where
D: Sync,
E: Sync,
impl<D, E> Unpin for ChunkedReadFile<D, E> where
D: Unpin,
E: Unpin,
impl<D, E> UnwindSafe for ChunkedReadFile<D, E> where
D: UnwindSafe,
E: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more