pub struct RunFunction(pub for<'a> fn(&'a mut Env, Rc<Function>, Vec<Field>, Option<fn(&mut Env) -> Pin<Box<dyn Future<Output = ()>>>>) -> Pin<Box<dyn Future<Output = Result<()>> + 'a>>);Expand description
Wrapper for a function that runs a shell function
This struct declares a function type that runs a shell function.
It is used to inject command execution behavior into the shell environment.
An instance of this struct can be stored in the shell environment
(Env::any) and used by modules that need to run shell functions.
The wrapped function takes the following arguments:
- A mutable reference to the shell environment (
&'a mut Env) - A reference-counted pointer to the shell function to be executed (
Rc<Function>) - A vector of fields representing the arguments to be passed to the function (
Vec<Field>)- This should not be empty; the first element is the function name and the rest are the actual arguments.
- An optional environment preparation hook
(
Option<fn(&mut Env) -> Pin<Box<dyn Future<Output = ()>>>>)- This hook is called after setting up the local variable context. It can inject additional setup logic or modify the environment before the function is executed.
The function returns a future that resolves to a Result indicating the
outcome of the function execution.
The most standard implementation of this type is provided in the
yash-semantics crate:
let mut env = yash_env::Env::new_virtual();
env.any.insert(Box::new(RunFunction(|env, function, fields, env_prep_hook| {
Box::pin(async move {
yash_semantics::command::simple_command::execute_function_body(
env, function, fields, env_prep_hook
).await
})
})));Tuple Fields§
§0: for<'a> fn(&'a mut Env, Rc<Function>, Vec<Field>, Option<fn(&mut Env) -> Pin<Box<dyn Future<Output = ()>>>>) -> Pin<Box<dyn Future<Output = Result<()>> + 'a>>Trait Implementations§
Source§impl Clone for RunFunction
impl Clone for RunFunction
Source§fn clone(&self) -> RunFunction
fn clone(&self) -> RunFunction
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for RunFunction
impl Debug for RunFunction
impl Copy for RunFunction
Auto Trait Implementations§
impl Freeze for RunFunction
impl RefUnwindSafe for RunFunction
impl Send for RunFunction
impl Sync for RunFunction
impl Unpin for RunFunction
impl UnwindSafe for RunFunction
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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