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>>> { /* private fields */ }
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

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

The type of a data chunk. Read more

Returns the length of the entity’s body in bytes.

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

Returns true iff the entity’s body has length 0.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.