Struct SubcommandRunner

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

A struct that manages loading and running subcommand plugins

Implementations§

Source§

impl SubcommandRunner

Source

pub fn new() -> Result<Self>

Creates a new subcommand runner with no plugins loaded.

Source

pub async fn new_with_plugins( plugins: impl IntoIterator<Item = impl AsRef<Path>>, ) -> Result<Self>

Create a new runner initialized with the list of plugins provided.

This function will fail if any of the plugins fail to load. If you want to gracefully handle errors, use add_plugin instead.

Source

pub async fn add_plugin(&mut self, path: impl AsRef<Path>) -> Result<Metadata>

Adds a plugin to the runner, returning the metadata for the plugin and otherwise returning an error if there was a problem loading the plugin. This can happen due to bad instantiation or if a plugin with the same ID has already been loaded. As such, errors from this function should be treated as a warning as execution can continue

Source

pub async fn update_plugin( &mut self, path: impl AsRef<Path>, ) -> Result<Metadata>

Same as add_plugin, but will not return an error if the plugin exists, instead updating the metadata for the plugin. This is an upsert operation and will register the plugin if it does not exist.

Source

pub fn metadata(&self, id: &str) -> Option<&Metadata>

Get the metadata for a plugin with the given ID if it exists.

Source

pub fn all_metadata(&self) -> Vec<&Metadata>

Returns a list of all metadata for all plugins.

Source

pub fn path(&self, id: &str) -> Option<&Path>

Returns the path to the plugin with the given ID.

Source

pub async fn run( &mut self, plugin_id: &str, plugin_dir: PathBuf, dirs: Vec<DirMapping>, args: Vec<String>, ) -> Result<()>

Run a subcommand with the given name and args. The plugin will inherit all stdout/stderr/stdin/env. The given plugin_dirs will be mapped into the plugin after canonicalizing all paths and normalizing them to use / instead of \. An error will only be returned if there was a problem with the plugin (such as the plugin dirs not existing or failure to canonicalize) or the subcommand itself.

All plugins will be passed environment variables starting with WASH_PLUGIN_${plugin_id.to_upper()}_ from the current process. Other vars will be ignored

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> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> GetSetFdFlags for T

Source§

fn get_fd_flags(&self) -> Result<FdFlags, Error>
where T: AsFilelike,

Query the “status” flags for the self file descriptor.
Source§

fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>
where T: AsFilelike,

Create a new SetFdFlags value for use with set_fd_flags. Read more
Source§

fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>
where T: AsFilelike,

Set the “status” flags for the self file descriptor. Read more
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> 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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

impl<T> ErasedDestructor for T
where T: 'static,