Struct reqwest_file::RequestFile
source · [−]pub struct RequestFile<const FF_WINDOW: u64 = DEFAULT_FF_WINDOW, const FF_BUFFER: usize = DEFAULT_FF_BUFFER> { /* private fields */ }
Expand description
Type that provides an asynchronous file-like interface to a web resource.
This type implements AsyncRead
and AsyncSeek
,
so it can be used like an asynchronous file.
Seeking is implemented as sending out a new request
with a Range
header.
All http requests made by this type include this header.
If the webserver does not support range requests,
seeking to anything other than the start of the file
will return a NotSeekable
error
(excluding fast-forwards).
Note that the Accept-Ranges
response header is not
used to check range request support before sending one.
If the webserver does not provide the Content-Length
header,
and no size was given using RequestFile::with_size()
,
then seeking relative to the file end
will return an Unsupported
error.
If the http request fails during a read
or seek
operation, it returns an Other
error that wraps the
original http error.
If the webserver returns anything other than status code
206 Partial Content
, or 200 Ok
for responses
starting at the first byte, that is also considered a failure.
For transient errors that require a new HTTP request,
the reset()
method can be used.
Assumptions
This type assumes that the http resource is of constant size, and thus that the separate requests performed while seeking are all consistent.
Reading
Reads are implemented by wrapping the response body
stream in StreamReader
.
Seeking
Seeking a position before the first byte will
return an InvalidInput
error.
This type performs no special handling of seeking beyond the end of the file (EOF), so what happens in this case depends on the webserver.
Optimizations
Fast-Forward
As an optimization, seeking forward by a small amount (by default up to 128KiB) will not perform a new request, but rather fast-forward through the response body.
This type of seek is always allowed,
even if the webserver does not support Range
requests.
Customization
The settings for fast-forwards can be changed through two constant parameters.
-
FF_WINDOW
limits how much can be fast-forwarded; only seeking up to this number of bytes forwards will read through the request (discarding the data) to avoid sending out a new request. -
FF_BUFFER
defines the internal buffer size used to read into during a fast-foward.
Implementations
sourceimpl<const FF_WINDOW: u64, const FF_BUFFER: usize> RequestFile<FF_WINDOW, FF_BUFFER>
impl<const FF_WINDOW: u64, const FF_BUFFER: usize> RequestFile<FF_WINDOW, FF_BUFFER>
sourcepub fn new(request: RequestBuilder) -> Self
pub fn new(request: RequestBuilder) -> Self
Create a new file-like object for a web resource.
Panics
This function panics if the request:
- already includes a
Range
header - contains a streaming body
- building the request fails.
sourcepub fn with_size(request: RequestBuilder, size: impl Into<Option<u64>>) -> Self
pub fn with_size(request: RequestBuilder, size: impl Into<Option<u64>>) -> Self
Create a new file-like object for a web resource.
This function allows you to set the response body size
if you happen to know it before performing the request.
This value must be known—either through this method
or via the Content-Length
header on the response—to
seek relative to the file end.
If the response specifies a different size using the Content-Length
header, the value given here is overwritten.
Panics
This function panics if the request:
- already includes a
Range
header - contains a streaming body
- building the request fails.
Trait Implementations
sourceimpl<const FF_WINDOW: u64, const FF_BUFFER: usize> AsyncRead for RequestFile<FF_WINDOW, FF_BUFFER>
impl<const FF_WINDOW: u64, const FF_BUFFER: usize> AsyncRead for RequestFile<FF_WINDOW, FF_BUFFER>
sourceimpl<const FF_WINDOW: u64, const FF_BUFFER: usize> AsyncSeek for RequestFile<FF_WINDOW, FF_BUFFER>
impl<const FF_WINDOW: u64, const FF_BUFFER: usize> AsyncSeek for RequestFile<FF_WINDOW, FF_BUFFER>
impl<'pin, const FF_WINDOW: u64, const FF_BUFFER: usize> Unpin for RequestFile<FF_WINDOW, FF_BUFFER> where
__RequestFile<'pin, FF_WINDOW, FF_BUFFER>: Unpin,
Auto Trait Implementations
impl<const FF_WINDOW: u64 = DEFAULT_FF_WINDOW, const FF_BUFFER: usize = DEFAULT_FF_BUFFER> !RefUnwindSafe for RequestFile<FF_WINDOW, FF_BUFFER>
impl<const FF_WINDOW: u64, const FF_BUFFER: usize> Send for RequestFile<FF_WINDOW, FF_BUFFER>
impl<const FF_WINDOW: u64, const FF_BUFFER: usize> Sync for RequestFile<FF_WINDOW, FF_BUFFER>
impl<const FF_WINDOW: u64 = DEFAULT_FF_WINDOW, const FF_BUFFER: usize = DEFAULT_FF_BUFFER> !UnwindSafe for RequestFile<FF_WINDOW, FF_BUFFER>
Blanket Implementations
sourceimpl<R> AsyncReadExt for R where
R: AsyncRead + ?Sized,
impl<R> AsyncReadExt for R where
R: AsyncRead + ?Sized,
sourcefn chain<R>(self, next: R) -> Chain<Self, R> where
R: AsyncRead,
fn chain<R>(self, next: R) -> Chain<Self, R> where
R: AsyncRead,
Creates a new AsyncRead
instance that chains this stream with
next
. Read more
sourcefn read(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self> where
Self: Unpin,
fn read(&'a mut self, buf: &'a mut [u8]) -> Read<'a, Self> where
Self: Unpin,
Pulls some bytes from this source into the specified buffer, returning how many bytes were read. Read more
sourcefn read_buf<B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B> where
Self: Unpin,
B: BufMut,
fn read_buf<B>(&'a mut self, buf: &'a mut B) -> ReadBuf<'a, Self, B> where
Self: Unpin,
B: BufMut,
Pulls some bytes from this source into the specified buffer, advancing the buffer’s internal cursor. Read more
sourcefn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self> where
Self: Unpin,
fn read_exact(&'a mut self, buf: &'a mut [u8]) -> ReadExact<'a, Self> where
Self: Unpin,
Reads the exact number of bytes required to fill buf
. Read more
sourcefn read_u8(&'a mut self) -> ReadU8<&'a mut Self> where
Self: Unpin,
fn read_u8(&'a mut self) -> ReadU8<&'a mut Self> where
Self: Unpin,
Reads an unsigned 8 bit integer from the underlying reader. Read more
sourcefn read_i8(&'a mut self) -> ReadI8<&'a mut Self> where
Self: Unpin,
fn read_i8(&'a mut self) -> ReadI8<&'a mut Self> where
Self: Unpin,
Reads a signed 8 bit integer from the underlying reader. Read more
sourcefn read_u16(&'a mut self) -> ReadU16<&'a mut Self> where
Self: Unpin,
fn read_u16(&'a mut self) -> ReadU16<&'a mut Self> where
Self: Unpin,
Reads an unsigned 16-bit integer in big-endian order from the underlying reader. Read more
sourcefn read_i16(&'a mut self) -> ReadI16<&'a mut Self> where
Self: Unpin,
fn read_i16(&'a mut self) -> ReadI16<&'a mut Self> where
Self: Unpin,
Reads a signed 16-bit integer in big-endian order from the underlying reader. Read more
sourcefn read_u32(&'a mut self) -> ReadU32<&'a mut Self> where
Self: Unpin,
fn read_u32(&'a mut self) -> ReadU32<&'a mut Self> where
Self: Unpin,
Reads an unsigned 32-bit integer in big-endian order from the underlying reader. Read more
sourcefn read_i32(&'a mut self) -> ReadI32<&'a mut Self> where
Self: Unpin,
fn read_i32(&'a mut self) -> ReadI32<&'a mut Self> where
Self: Unpin,
Reads a signed 32-bit integer in big-endian order from the underlying reader. Read more
sourcefn read_u64(&'a mut self) -> ReadU64<&'a mut Self> where
Self: Unpin,
fn read_u64(&'a mut self) -> ReadU64<&'a mut Self> where
Self: Unpin,
Reads an unsigned 64-bit integer in big-endian order from the underlying reader. Read more
sourcefn read_i64(&'a mut self) -> ReadI64<&'a mut Self> where
Self: Unpin,
fn read_i64(&'a mut self) -> ReadI64<&'a mut Self> where
Self: Unpin,
Reads an signed 64-bit integer in big-endian order from the underlying reader. Read more
sourcefn read_u128(&'a mut self) -> ReadU128<&'a mut Self> where
Self: Unpin,
fn read_u128(&'a mut self) -> ReadU128<&'a mut Self> where
Self: Unpin,
Reads an unsigned 128-bit integer in big-endian order from the underlying reader. Read more
sourcefn read_i128(&'a mut self) -> ReadI128<&'a mut Self> where
Self: Unpin,
fn read_i128(&'a mut self) -> ReadI128<&'a mut Self> where
Self: Unpin,
Reads an signed 128-bit integer in big-endian order from the underlying reader. Read more
sourcefn read_f32(&'a mut self) -> ReadF32<&'a mut Self> where
Self: Unpin,
fn read_f32(&'a mut self) -> ReadF32<&'a mut Self> where
Self: Unpin,
Reads an 32-bit floating point type in big-endian order from the underlying reader. Read more
sourcefn read_f64(&'a mut self) -> ReadF64<&'a mut Self> where
Self: Unpin,
fn read_f64(&'a mut self) -> ReadF64<&'a mut Self> where
Self: Unpin,
Reads an 64-bit floating point type in big-endian order from the underlying reader. Read more
sourcefn read_u16_le(&'a mut self) -> ReadU16Le<&'a mut Self> where
Self: Unpin,
fn read_u16_le(&'a mut self) -> ReadU16Le<&'a mut Self> where
Self: Unpin,
Reads an unsigned 16-bit integer in little-endian order from the underlying reader. Read more
sourcefn read_i16_le(&'a mut self) -> ReadI16Le<&'a mut Self> where
Self: Unpin,
fn read_i16_le(&'a mut self) -> ReadI16Le<&'a mut Self> where
Self: Unpin,
Reads a signed 16-bit integer in little-endian order from the underlying reader. Read more
sourcefn read_u32_le(&'a mut self) -> ReadU32Le<&'a mut Self> where
Self: Unpin,
fn read_u32_le(&'a mut self) -> ReadU32Le<&'a mut Self> where
Self: Unpin,
Reads an unsigned 32-bit integer in little-endian order from the underlying reader. Read more
sourcefn read_i32_le(&'a mut self) -> ReadI32Le<&'a mut Self> where
Self: Unpin,
fn read_i32_le(&'a mut self) -> ReadI32Le<&'a mut Self> where
Self: Unpin,
Reads a signed 32-bit integer in little-endian order from the underlying reader. Read more
sourcefn read_u64_le(&'a mut self) -> ReadU64Le<&'a mut Self> where
Self: Unpin,
fn read_u64_le(&'a mut self) -> ReadU64Le<&'a mut Self> where
Self: Unpin,
Reads an unsigned 64-bit integer in little-endian order from the underlying reader. Read more
sourcefn read_i64_le(&'a mut self) -> ReadI64Le<&'a mut Self> where
Self: Unpin,
fn read_i64_le(&'a mut self) -> ReadI64Le<&'a mut Self> where
Self: Unpin,
Reads an signed 64-bit integer in little-endian order from the underlying reader. Read more
sourcefn read_u128_le(&'a mut self) -> ReadU128Le<&'a mut Self> where
Self: Unpin,
fn read_u128_le(&'a mut self) -> ReadU128Le<&'a mut Self> where
Self: Unpin,
Reads an unsigned 128-bit integer in little-endian order from the underlying reader. Read more
sourcefn read_i128_le(&'a mut self) -> ReadI128Le<&'a mut Self> where
Self: Unpin,
fn read_i128_le(&'a mut self) -> ReadI128Le<&'a mut Self> where
Self: Unpin,
Reads an signed 128-bit integer in little-endian order from the underlying reader. Read more
sourcefn read_f32_le(&'a mut self) -> ReadF32Le<&'a mut Self> where
Self: Unpin,
fn read_f32_le(&'a mut self) -> ReadF32Le<&'a mut Self> where
Self: Unpin,
Reads an 32-bit floating point type in little-endian order from the underlying reader. Read more
sourcefn read_f64_le(&'a mut self) -> ReadF64Le<&'a mut Self> where
Self: Unpin,
fn read_f64_le(&'a mut self) -> ReadF64Le<&'a mut Self> where
Self: Unpin,
Reads an 64-bit floating point type in little-endian order from the underlying reader. Read more
sourcefn read_to_end(
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEnd<'a, Self> where
Self: Unpin,
fn read_to_end(
&'a mut self,
buf: &'a mut Vec<u8, Global>
) -> ReadToEnd<'a, Self> where
Self: Unpin,
Reads all bytes until EOF in this source, placing them into buf
. Read more
sourcefn read_to_string(&'a mut self, dst: &'a mut String) -> ReadToString<'a, Self> where
Self: Unpin,
fn read_to_string(&'a mut self, dst: &'a mut String) -> ReadToString<'a, Self> where
Self: Unpin,
Reads all bytes until EOF in this source, appending them to buf
. Read more
sourceimpl<S> AsyncSeekExt for S where
S: AsyncSeek + ?Sized,
impl<S> AsyncSeekExt for S where
S: AsyncSeek + ?Sized,
sourcefn seek(&mut self, pos: SeekFrom) -> Seek<'_, Self> where
Self: Unpin,
fn seek(&mut self, pos: SeekFrom) -> Seek<'_, Self> where
Self: Unpin,
Creates a future which will seek an IO object, and then yield the new position in the object and the object itself. Read more
sourcefn rewind(&mut self) -> Seek<'_, Self> where
Self: Unpin,
fn rewind(&mut self) -> Seek<'_, Self> where
Self: Unpin,
Creates a future which will rewind to the beginning of the stream. Read more
sourcefn stream_position(&mut self) -> Seek<'_, Self> where
Self: Unpin,
fn stream_position(&mut self) -> Seek<'_, Self> where
Self: Unpin,
Creates a future which will return the current seek position from the start of the stream. Read more
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more