Skip to main content

RunError

Enum RunError 

Source
#[non_exhaustive]
pub enum RunError { NotFound(String), NotAllowed(String), Injects { task: String, args: Vec<String>, }, MissingArg(MissingArg), InvalidArgName { task: String, args: Vec<String>, }, Dependency(DepError), Cancelled, Io { task: String, program: String, cwd: PathBuf, source: Error, }, }
Expand description

Why a run* call could not complete. It reports the failure to resolve or dispatch a job; a job that runs to a non-zero exit is not an error here (the exit status rides back in the Ok). Only Debug is derived, because Io wraps a std::io::Error, which is neither Clone nor PartialEq. Non-exhaustive on purpose. This release adds a variant, which is a breaking change only because it was not marked before; marking it now means the next error mdtask learns to report costs consumers a _ arm they already have rather than a major bump.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

NotFound(String)

No job by that name across the resolved files (from run/run_captured).

§

NotAllowed(String)

The nearest definition of the named job is not Agent: allow, so an agent surface may not run it (from run_agent only). A nearer non-allowed definition shadowing a farther allowed one lands here too: fail closed.

§

Injects

The agent target raw-templates a declared arg into its script via {{ arg }} (from run_agent only). args lists the offending names. The job must read the value from the environment instead before an agent may run it.

Fields

§task: String
§args: Vec<String>
§

MissingArg(MissingArg)

A required positional argument had no value.

§

InvalidArgName

A job declares an argument whose name cannot be a shell variable, so the script could never read it. args lists the offending names.

Refused rather than run, because running it reaches the script and fails there as unbound variable naming the correct spelling used in the script, which points away from the declaration that is wrong.

Fields

§task: String
§args: Vec<String>
§

Dependency(DepError)

The Requires: chain could not be resolved (a typo or a cycle).

§

Cancelled

The run was stopped through a Cancel handle.

Distinct from a failing step: nothing went wrong, someone asked for it to stop. A caller that treats every non-success as an error would otherwise report a cancellation as a task failure.

§

Io

Spawning a step failed: the interpreter is not installed, or the directory the task would run in is gone.

Carries which task and which program, because the bare io::Error was “No such file or directory (os error 2)” and nothing else. In a Requires: chain that named neither the failing step nor the thing that was missing, and the obvious reading of it, that a file the script wanted was absent, was the wrong one.

Fields

§task: String
§program: String
§source: Error

Trait Implementations§

Source§

impl Debug for RunError

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Display for RunError

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Error for RunError

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.