Skip to main content

OutputStream

Struct OutputStream 

Source
pub struct OutputStream { /* private fields */ }
Expand description

Stream of output chunks from a process

Implementations§

Source§

impl OutputStream

Source

pub async fn next(&mut self) -> Option<OutputChunk>

Receive the next chunk

Source

pub fn exit_signal(&self) -> Option<String>

Signal reported by the native child, available once it exits. Ordinary exit codes above 128 are not mistaken for signals.

Source

pub fn pid(&self) -> Option<u32>

Process id of the streamed command, as currently known.

The child is spawned by a background task, so this is None for the short window between StreamingRunner::stream returning and the spawn completing, and stays None if the spawn failed. From the first delivered chunk onwards it is set, and it remains readable after the process has exited. Use wait_for_pid to avoid the startup window.

Source

pub async fn wait_for_pid(&mut self) -> Option<u32>

Process id of the streamed command, waiting for the spawn to complete.

Resolves as soon as the child exists, and returns None if the process could never be spawned. This is the streaming counterpart of awaiting a stream before reading runner.pid in JavaScript.

Source

pub fn kill(&mut self)

Stop the process using the configured kill signal (default SIGTERM).

This can be called from inside the consumption loop to stop a long-running or endless process; a terminating OutputChunk::Exit is still delivered afterwards.

Source

pub fn kill_with(&mut self, signal: &str)

Stop the process using an explicit signal, overriding the configured kill signal for this call.

Source

pub async fn collect(self) -> (Vec<u8>, Vec<u8>, i32)

Collect all remaining output into vectors

Source

pub async fn collect_stdout(self) -> Vec<u8> ⓘ

Collect stdout only, discarding stderr

Trait Implementations§

Source§

impl AsyncIterator for OutputStream

Source§

type Item = OutputChunk

Source§

fn next<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Option<Self::Item>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the next item from the iterator
Source§

impl Drop for OutputStream

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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 = !

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

fn try_from(value: U) -> Result<T, !>

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.