pub struct RunFunction<S>(pub for<'a> fn(&'a mut Env<S>, Rc<Function<S>>, Vec<Field>, Option<fn(&mut Env<S>) -> 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:
fn register_run_function<S: 'static>(env: &mut Env<S>) {
env.any.insert(Box::new(RunFunction::<S>(|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<S>, Rc<Function<S>>, Vec<Field>, Option<fn(&mut Env<S>) -> Pin<Box<dyn Future<Output = ()> + '_>>>) -> Pin<Box<dyn Future<Output = Result<()>> + 'a>>Trait Implementations§
Source§impl<S> Clone for RunFunction<S>
impl<S> Clone for RunFunction<S>
Source§impl<S> Debug for RunFunction<S>
impl<S> Debug for RunFunction<S>
impl<S> Copy for RunFunction<S>
Auto Trait Implementations§
impl<S> Freeze for RunFunction<S>
impl<S> RefUnwindSafe for RunFunction<S>
impl<S> Send for RunFunction<S>
impl<S> Sync for RunFunction<S>
impl<S> Unpin for RunFunction<S>
impl<S> UnwindSafe for RunFunction<S>
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