pub struct GuardedStream { /* private fields */ }Expand description
Guards a child process for the lifetime of a streaming response.
When the stream is dropped (after natural completion or early cancellation), the child process is killed and the stderr drain task is aborted. This prevents zombie processes and resource leaks.
All fields are Unpin, so GuardedStream is Unpin and the
Stream impl can safely access inner fields through Pin<&mut Self>.
Implementations§
Source§impl GuardedStream
impl GuardedStream
Sourcepub fn new(
inner: impl Stream<Item = Result<StreamChunk, RunnerError>> + Send + 'static,
child: Child,
stderr_task: JoinHandle<Vec<u8>>,
) -> Self
pub fn new( inner: impl Stream<Item = Result<StreamChunk, RunnerError>> + Send + 'static, child: Child, stderr_task: JoinHandle<Vec<u8>>, ) -> Self
Create a guarded stream wrapping a child process.
The stderr_task drains the child’s stderr in the background
to prevent buffer-full deadlocks where the child blocks on
write to a full stderr pipe.
Trait Implementations§
Source§impl Drop for GuardedStream
impl Drop for GuardedStream
Source§impl Stream for GuardedStream
impl Stream for GuardedStream
Source§type Item = Result<StreamChunk, RunnerError>
type Item = Result<StreamChunk, RunnerError>
Values yielded by the stream.
Auto Trait Implementations§
impl Freeze for GuardedStream
impl !RefUnwindSafe for GuardedStream
impl Send for GuardedStream
impl !Sync for GuardedStream
impl Unpin for GuardedStream
impl UnsafeUnpin for GuardedStream
impl !UnwindSafe for GuardedStream
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: 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<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<St> StreamExt for St
impl<St> StreamExt for St
Source§fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
Consumes and returns the next value in the stream or
None if the
stream is finished. Read moreSource§fn try_next<T, E>(&mut self) -> TryNext<'_, Self>
fn try_next<T, E>(&mut self) -> TryNext<'_, Self>
Consumes and returns the next item in the stream. If an error is
encountered before the next item, the error is returned instead. Read more
Source§fn map<T, F>(self, f: F) -> Map<Self, F>
fn map<T, F>(self, f: F) -> Map<Self, F>
Maps this stream’s items to a different type, returning a new stream of
the resulting type. Read more
Source§fn map_while<T, F>(self, f: F) -> MapWhile<Self, F>
fn map_while<T, F>(self, f: F) -> MapWhile<Self, F>
Map this stream’s items to a different type for as long as determined by
the provided closure. A stream of the target type will be returned,
which will yield elements until the closure returns
None. Read moreSource§fn then<F, Fut>(self, f: F) -> Then<Self, Fut, F>
fn then<F, Fut>(self, f: F) -> Then<Self, Fut, F>
Maps this stream’s items asynchronously to a different type, returning a
new stream of the resulting type. Read more
Source§fn merge<U>(self, other: U) -> Merge<Self, U>
fn merge<U>(self, other: U) -> Merge<Self, U>
Combine two streams into one by interleaving the output of both as it
is produced. Read more
Source§fn filter<F>(self, f: F) -> Filter<Self, F>
fn filter<F>(self, f: F) -> Filter<Self, F>
Filters the values produced by this stream according to the provided
predicate. Read more
Source§fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>
Filters the values produced by this stream while simultaneously mapping
them to a different type according to the provided closure. Read more
Source§fn fuse(self) -> Fuse<Self>where
Self: Sized,
fn fuse(self) -> Fuse<Self>where
Self: Sized,
Creates a stream which ends after the first
None. Read moreSource§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
Creates a new stream of at most
n items of the underlying stream. Read moreSource§fn take_while<F>(self, f: F) -> TakeWhile<Self, F>
fn take_while<F>(self, f: F) -> TakeWhile<Self, F>
Take elements from this stream while the provided predicate
resolves to
true. Read moreSource§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
Creates a new stream that will skip the
n first items of the
underlying stream. Read moreSource§fn skip_while<F>(self, f: F) -> SkipWhile<Self, F>
fn skip_while<F>(self, f: F) -> SkipWhile<Self, F>
Skip elements from the underlying stream while the provided predicate
resolves to
true. Read moreSource§fn all<F>(&mut self, f: F) -> AllFuture<'_, Self, F>
fn all<F>(&mut self, f: F) -> AllFuture<'_, Self, F>
Tests if every element of the stream matches a predicate. Read more
Source§fn any<F>(&mut self, f: F) -> AnyFuture<'_, Self, F>
fn any<F>(&mut self, f: F) -> AnyFuture<'_, Self, F>
Tests if any element of the stream matches a predicate. Read more
Source§fn chain<U>(self, other: U) -> Chain<Self, U>
fn chain<U>(self, other: U) -> Chain<Self, U>
Combine two streams into one by first returning all values from the
first stream then all values from the second stream. Read more
Source§fn fold<B, F>(self, init: B, f: F) -> FoldFuture<Self, B, F>
fn fold<B, F>(self, init: B, f: F) -> FoldFuture<Self, B, F>
A combinator that applies a function to every element in a stream
producing a single, final value. Read more
Source§fn collect<T>(
self,
) -> Collect<Self, T, <T as FromStreamPriv<Self::Item>>::InternalCollection>
fn collect<T>( self, ) -> Collect<Self, T, <T as FromStreamPriv<Self::Item>>::InternalCollection>
Drain stream pushing all emitted values into a collection. Read more
Source§fn timeout(self, duration: Duration) -> Timeout<Self>where
Self: Sized,
fn timeout(self, duration: Duration) -> Timeout<Self>where
Self: Sized,
Applies a per-item timeout to the passed stream. Read more
Source§fn timeout_repeating(self, interval: Interval) -> TimeoutRepeating<Self>where
Self: Sized,
fn timeout_repeating(self, interval: Interval) -> TimeoutRepeating<Self>where
Self: Sized,
Applies a per-item timeout to the passed stream. Read more
Source§fn throttle(self, duration: Duration) -> Throttle<Self>where
Self: Sized,
fn throttle(self, duration: Duration) -> Throttle<Self>where
Self: Sized,
Slows down a stream by enforcing a delay between items. Read more
Source§fn chunks_timeout(
self,
max_size: usize,
duration: Duration,
) -> ChunksTimeout<Self>where
Self: Sized,
fn chunks_timeout(
self,
max_size: usize,
duration: Duration,
) -> ChunksTimeout<Self>where
Self: Sized,
Batches the items in the given stream using a maximum duration and size for each batch. Read more