Collector

Struct Collector 

Source
pub struct Collector<S: Sink> { /* private fields */ }
Expand description

A collector for stream data, inspecting it chunk by chunk but also providing mutable access to a sink in which the data can be stored.

See the collect_* functions on BroadcastOutputStream and SingleOutputStream.

For proper cleanup, call

  • wait(), which waits for the collection task to complete.
  • cancel(), which sends a termination signal and then waits for the collection task to complete.

If not cleaned up, the termination signal will be sent when dropping this collector, but the task will be aborted (forceful, not waiting for its regular completion).

Implementations§

Source§

impl<S: Sink> Collector<S>

Source

pub fn is_finished(&self) -> bool

Checks if this task has finished.

Source

pub async fn wait(self) -> Result<S, CollectorError>

Wait for the collector to terminate naturally.

A collector will automatically terminate when either:

  1. The underlying write-side of the stream is dropped.
  2. The underlying stream is closed (by receiving an EOF / final read of 0 bytes).
  3. The first Next::Break is observed.

If none of these may occur in your case, this could/will hang forever!

The stdout/stderr streams naturally close when the process is terminated, so waiting on a collector after termination is fine:


let mut process = Process::new(cmd).spawn_broadcast().unwrap();
let collector = process.stdout().collect_lines_into_vec(LineParsingOptions::default());
process.terminate(Duration::from_secs(1), Duration::from_secs(1)).await.unwrap();
let collected = collector.wait().await.unwrap(); // This will return immediately.
Source

pub async fn cancel(self) -> Result<S, CollectorError>

Sends a cancellation event to the collector, letting it shut down.

Trait Implementations§

Source§

impl<S: Sink> Drop for Collector<S>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<S> Freeze for Collector<S>

§

impl<S> !RefUnwindSafe for Collector<S>

§

impl<S> Send for Collector<S>

§

impl<S> Sync for Collector<S>

§

impl<S> Unpin for Collector<S>

§

impl<S> !UnwindSafe for Collector<S>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more