ShellTask

Struct ShellTask 

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

A ShellTask runs commands and provides a passthrough log handler for each log line.

Implementationsยง

Sourceยง

impl ShellTask

Source

pub fn new(command: &str) -> Result<Self>

Create a new ShellTask with a log line handler.

Source

pub fn env<K, V>(&mut self, key: K, value: V) -> &mut ShellTask
where K: AsRef<OsStr>, V: AsRef<OsStr>,

Adds an environment variable to the command run by ShellTask.

Source

pub fn current_dir<P>(&mut self, path: P)
where P: AsRef<Path>,

Sets the directory the command should be run in.

Source

pub fn descriptor(&self) -> String

Returns the full command that was used to instantiate this ShellTask.

Source

pub fn bash_descriptor(&self) -> String

Returns the ShellTask::descriptor with the classic $ shell prefix.

Source

pub fn run<F, T>(&self, log_handler: F) -> Result<ShellTaskOutput<T>>
where F: Fn(ShellTaskLog) -> ShellTaskBehavior<T> + Send + Sync + 'static, T: Send + Sync + 'static,

Run a ShellTask, applying the log handler to each line.

You can make the task terminate early if your log_handler returns ShellTaskBehavior::EarlyReturn<T>. When this variant is returned from a log handler, ShellTask::run will return Some<T>.

ยงExample
use anyhow::anyhow;
use shell_candy::{ShellTask, ShellTaskLog, ShellTaskOutput, ShellTaskBehavior};

fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
    let result = ShellTask::new("rustc --version")?.run(|line| {
        match line {
            ShellTaskLog::Stderr(_) => {
                ShellTaskBehavior::Passthrough
            },
            ShellTaskLog::Stdout(message) => {
                eprintln!("{}", &message);
                ShellTaskBehavior::EarlyReturn(Ok(message))
            }
        }
    })?;
    assert!(matches!(result, ShellTaskOutput::EarlyReturn { .. }));
    Ok(())
}

If your log_handler returns ShellTaskBehavior::Passthrough for the entire lifecycle of the task, ShellTask::run will return ShellTaskOutput::CompleteOutput.

ยงExample
use anyhow::anyhow;
use shell_candy::{ShellTask, ShellTaskLog, ShellTaskOutput, ShellTaskBehavior};

fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
    let result = ShellTask::new("rustc --version")?.run(|line| {
        match line {
            ShellTaskLog::Stderr(message) | ShellTaskLog::Stdout(message) => {
                eprintln!("info: {}", &message);
                ShellTaskBehavior::<()>::Passthrough
            }
        }
    })?;
    assert!(matches!(result, ShellTaskOutput::CompleteOutput { .. }));
    Ok(())
}

Trait Implementationsยง

Sourceยง

impl Debug for ShellTask

Sourceยง

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. 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> 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> IntoEither for T

Sourceยง

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 more
Sourceยง

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Sourceยง

impl<T> Pointable for T

Sourceยง

const ALIGN: usize

The alignment of pointer.
Sourceยง

type Init = T

The type for initializers.
Sourceยง

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Sourceยง

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Sourceยง

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Sourceยง

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.