pub struct RequestBodyStream { /* private fields */ }Expand description
A streaming request body.
This provides an async interface for reading request body chunks without buffering the entire body in memory.
§Example
ⓘ
use fastapi_core::{Body, RequestBodyStream};
async fn handle_upload(body: Body) -> Vec<u8> {
match body {
Body::Stream(mut stream) => {
let mut buffer = Vec::new();
while let Some(chunk) = stream.next().await {
buffer.extend_from_slice(&chunk?);
}
buffer
}
Body::Bytes(bytes) => bytes,
Body::Empty => Vec::new(),
}
}Implementations§
Source§impl RequestBodyStream
impl RequestBodyStream
Sourcepub fn with_expected_size<S>(stream: S, expected_size: usize) -> Self
pub fn with_expected_size<S>(stream: S, expected_size: usize) -> Self
Create a body stream with a known expected size.
Sourcepub fn bytes_received(&self) -> usize
pub fn bytes_received(&self) -> usize
Returns the number of bytes received so far.
Sourcepub fn expected_size(&self) -> Option<usize>
pub fn expected_size(&self) -> Option<usize>
Returns the expected total size, if known.
Sourcepub fn is_complete(&self) -> bool
pub fn is_complete(&self) -> bool
Returns true if the stream is complete.
Sourcepub async fn collect(self) -> Result<Vec<u8>, RequestBodyStreamError>
pub async fn collect(self) -> Result<Vec<u8>, RequestBodyStreamError>
Collect all chunks into a single buffer.
This consumes the stream and buffers the entire body in memory. Use this for small bodies or when the full content is needed.
For large bodies, prefer processing chunks individually via next().
Trait Implementations§
Source§impl Debug for RequestBodyStream
impl Debug for RequestBodyStream
Auto Trait Implementations§
impl Freeze for RequestBodyStream
impl !RefUnwindSafe for RequestBodyStream
impl Send for RequestBodyStream
impl Sync for RequestBodyStream
impl Unpin for RequestBodyStream
impl !UnwindSafe for RequestBodyStream
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, _span: NoopSpan) -> Self
fn instrument(self, _span: NoopSpan) -> Self
Instruments this future with a span (no-op when disabled).
Source§fn in_current_span(self) -> Self
fn in_current_span(self) -> Self
Instruments this future with the current span (no-op when disabled).
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<S> StreamExt for S
impl<S> StreamExt for S
Source§fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>
fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>
Transforms each item using an async closure.
Source§fn zip<S2>(self, other: S2) -> Zip<Self, S2>
fn zip<S2>(self, other: S2) -> Zip<Self, S2>
Zips this stream with another stream, yielding pairs.
Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
Yields only items that match the predicate.
Source§fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>
Filters and transforms items in one step.
Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
Takes items while the predicate is true.
Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
Skips items while the predicate is true.
Source§fn buffered(self, n: usize) -> Buffered<Self>
fn buffered(self, n: usize) -> Buffered<Self>
Buffers up to
n futures, preserving output order.Source§fn buffer_unordered(self, n: usize) -> BufferUnordered<Self>
fn buffer_unordered(self, n: usize) -> BufferUnordered<Self>
Buffers up to
n futures, yielding results as they complete.Source§fn chunks(self, size: usize) -> Chunks<Self>where
Self: Sized,
fn chunks(self, size: usize) -> Chunks<Self>where
Self: Sized,
Collects items into fixed-size chunks.
Source§fn ready_chunks(self, size: usize) -> ReadyChunks<Self>where
Self: Sized,
fn ready_chunks(self, size: usize) -> ReadyChunks<Self>where
Self: Sized,
Yields immediately available items up to a maximum chunk size.
Source§fn fold<Acc, F>(self, init: Acc, f: F) -> Fold<Self, F, Acc>
fn fold<Acc, F>(self, init: Acc, f: F) -> Fold<Self, F, Acc>
Folds all items into a single value.
Source§fn for_each_async<F, Fut>(self, f: F) -> ForEachAsync<Self, F, Fut>
fn for_each_async<F, Fut>(self, f: F) -> ForEachAsync<Self, F, Fut>
Executes an async closure for each item.
Source§fn try_collect<T, E, C>(self) -> TryCollect<Self, C>
fn try_collect<T, E, C>(self) -> TryCollect<Self, C>
Collects items from a stream of Results, short-circuiting on error.
Source§fn try_fold<T, E, Acc, F>(self, init: Acc, f: F) -> TryFold<Self, F, Acc>
fn try_fold<T, E, Acc, F>(self, init: Acc, f: F) -> TryFold<Self, F, Acc>
Folds a stream of Results, short-circuiting on error.
Source§fn try_for_each<F, E>(self, f: F) -> TryForEach<Self, F>
fn try_for_each<F, E>(self, f: F) -> TryForEach<Self, F>
Executes a fallible closure for each item, short-circuiting on error.