Trait conch_runtime::eval::WordEval
[−]
[src]
pub trait WordEval<E: ?Sized>: Sized { type EvalResult: StringWrapper; type Error; type EvalFuture: EnvFuture<E, Item = Fields<Self::EvalResult>, Error = Self::Error>; fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture; fn eval(self, env: &E) -> Self::EvalFuture { ... } fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture>
where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>, { ... } fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture> { ... } }
A trait for evaluating shell words with various rules for expansion.
Associated Types
type EvalResult: StringWrapper
The underlying representation of the evaulation type (e.g. String
, Rc<String>
).
type Error
An error that can arise during evaluation.
type EvalFuture: EnvFuture<E, Item = Fields<Self::EvalResult>, Error = Self::Error>
A future which will carry out the evaluation.
Required Methods
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
Evaluate and take a provided config into account.
Generally $*
should always be joined by the first char of $IFS
or have all
fields concatenated if $IFS
is null or $*
is in double quotes.
If cfg.split_fields_further
is false then all empty fields will be kept.
The caller is responsible for doing path expansions.
Provided Methods
fn eval(self, env: &E) -> Self::EvalFuture
Evaluates a word in a given environment and performs all expansions.
Tilde, parameter, command substitution, and arithmetic expansions are
performed first. All resulting fields are then further split based on
the contents of the IFS
variable (no splitting is performed if IFS
is set to be the empty or null string). Finally, quotes and escaping
backslashes are removed from the original word (unless they themselves
have been quoted).
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
Evaluates a word in a given environment without doing field and pathname expansions.
Tilde, parameter, command substitution, arithmetic expansions, and quote removals
will be performed, however. In addition, if multiple fields arise as a result
of evaluating $@
or $*
, the fields will be joined with a single space.
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
Evaluates a word just like eval
, but converts the result into a glob::Pattern
.
Implementations on Foreign Types
impl<W, E: ?Sized> WordEval<E> for ComplexWord<W> where
W: WordEval<E>,
[src]
W: WordEval<E>,
type EvalResult = W::EvalResult
type Error = W::Error
type EvalFuture = ComplexWord<W, IntoIter<W>, E>
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<'a, W, E: ?Sized> WordEval<E> for &'a ComplexWord<W> where
&'a W: WordEval<E>,
[src]
&'a W: WordEval<E>,
type EvalResult = <&'a W as WordEval<E>>::EvalResult
type Error = <&'a W as WordEval<E>>::Error
type EvalFuture = ComplexWord<&'a W, Iter<'a, W>, E>
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<T, P, W, C, A, E> WordEval<E> for ParameterSubstitution<P, W, C, A> where
T: StringWrapper,
P: ParamEval<E, EvalResult = T> + Display,
W: WordEval<E, EvalResult = T>,
W::Error: From<ExpansionError> + From<C::Error>,
C: Spawn<E>,
C::Error: IsFatalError + From<IoError>,
A: ArithEval<E>,
E: AsyncIoEnvironment + FileDescEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SubEnvironment + VariableEnvironment<VarName = T, Var = T>,
E::FileHandle: FileDescWrapper,
E::Read: AsyncRead,
[src]
T: StringWrapper,
P: ParamEval<E, EvalResult = T> + Display,
W: WordEval<E, EvalResult = T>,
W::Error: From<ExpansionError> + From<C::Error>,
C: Spawn<E>,
C::Error: IsFatalError + From<IoError>,
A: ArithEval<E>,
E: AsyncIoEnvironment + FileDescEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SubEnvironment + VariableEnvironment<VarName = T, Var = T>,
E::FileHandle: FileDescWrapper,
E::Read: AsyncRead,
type EvalResult = T
type EvalFuture = ParameterSubstitution<T, W::EvalFuture, IntoIter<C>, A, E, E::Read>
type Error = W::Error
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
Evaluates a parameter subsitution in the context of some environment, optionally splitting fields.
Note: even if the caller specifies no splitting should be done,
multiple fields can occur if $@
or $*
is evaluated.
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<'a, T, P, W, C, A, E> WordEval<E> for &'a ParameterSubstitution<P, W, C, A> where
T: StringWrapper,
P: ParamEval<E, EvalResult = T> + Display,
&'a W: WordEval<E, EvalResult = T>,
<&'a W as WordEval<E>>::Error: From<ExpansionError> + From<<&'a C as Spawn<E>>::Error>,
&'a C: Spawn<E>,
<&'a C as Spawn<E>>::Error: IsFatalError + From<IoError>,
A: ArithEval<E>,
E: AsyncIoEnvironment + FileDescEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SubEnvironment + VariableEnvironment<VarName = T, Var = T>,
E::FileHandle: FileDescWrapper,
E::Read: AsyncRead,
[src]
T: StringWrapper,
P: ParamEval<E, EvalResult = T> + Display,
&'a W: WordEval<E, EvalResult = T>,
<&'a W as WordEval<E>>::Error: From<ExpansionError> + From<<&'a C as Spawn<E>>::Error>,
&'a C: Spawn<E>,
<&'a C as Spawn<E>>::Error: IsFatalError + From<IoError>,
A: ArithEval<E>,
E: AsyncIoEnvironment + FileDescEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SubEnvironment + VariableEnvironment<VarName = T, Var = T>,
E::FileHandle: FileDescWrapper,
E::Read: AsyncRead,
type EvalResult = T
type EvalFuture = ParameterSubstitution<T, <&'a W as WordEval<E>>::EvalFuture, Iter<'a, C>, &'a A, E, E::Read>
type Error = <&'a W as WordEval<E>>::Error
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
Evaluates a parameter subsitution in the context of some environment, optionally splitting fields.
Note: even if the caller specifies no splitting should be done,
multiple fields can occur if $@
or $*
is evaluated.
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<T, P, S, E: ?Sized> WordEval<E> for SimpleWord<T, P, S> where
T: StringWrapper,
P: ParamEval<E, EvalResult = T>,
S: WordEval<E, EvalResult = T>,
E: VariableEnvironment<Var = T>,
E::VarName: Borrow<String>,
[src]
T: StringWrapper,
P: ParamEval<E, EvalResult = T>,
S: WordEval<E, EvalResult = T>,
E: VariableEnvironment<Var = T>,
E::VarName: Borrow<String>,
type EvalResult = T
type Error = S::Error
type EvalFuture = SimpleWord<Self::EvalResult, S::EvalFuture>
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<'a, T, P, S, E: ?Sized> WordEval<E> for &'a SimpleWord<T, P, S> where
T: StringWrapper,
P: ParamEval<E, EvalResult = T>,
&'a S: WordEval<E, EvalResult = T>,
E: VariableEnvironment<Var = T>,
E::VarName: Borrow<String>,
[src]
T: StringWrapper,
P: ParamEval<E, EvalResult = T>,
&'a S: WordEval<E, EvalResult = T>,
E: VariableEnvironment<Var = T>,
E::VarName: Borrow<String>,
type EvalResult = T
type Error = <&'a S as WordEval<E>>::Error
type EvalFuture = SimpleWord<Self::EvalResult, <&'a S as WordEval<E>>::EvalFuture>
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<T, W, E: ?Sized> WordEval<E> for Word<T, W> where
T: StringWrapper,
W: WordEval<E, EvalResult = T>,
E: VariableEnvironment<Var = T>,
E::VarName: Borrow<String>,
[src]
T: StringWrapper,
W: WordEval<E, EvalResult = T>,
E: VariableEnvironment<Var = T>,
E::VarName: Borrow<String>,
type EvalResult = T
type Error = W::Error
type EvalFuture = Word<Self::EvalResult, W, W::EvalFuture, IntoIter<W>>
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<'a, T, W, E: ?Sized> WordEval<E> for &'a Word<T, W> where
T: StringWrapper,
&'a W: WordEval<E, EvalResult = T>,
E: VariableEnvironment<Var = T>,
E::VarName: Borrow<String>,
[src]
T: StringWrapper,
&'a W: WordEval<E, EvalResult = T>,
E: VariableEnvironment<Var = T>,
E::VarName: Borrow<String>,
type EvalResult = T
type Error = <&'a W as WordEval<E>>::Error
type EvalFuture = Word<Self::EvalResult, &'a W, <&'a W as WordEval<E>>::EvalFuture, Iter<'a, W>>
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<E: ?Sized, W: WordEval<E>> WordEval<E> for Box<W>
[src]
type EvalResult = W::EvalResult
type Error = W::Error
type EvalFuture = W::EvalFuture
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<'a, E: ?Sized, W: 'a> WordEval<E> for &'a Box<W> where
&'a W: WordEval<E>,
[src]
&'a W: WordEval<E>,
type EvalResult = <&'a W as WordEval<E>>::EvalResult
type Error = <&'a W as WordEval<E>>::Error
type EvalFuture = <&'a W as WordEval<E>>::EvalFuture
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<T, E: ?Sized> WordEval<E> for TopLevelWord<T> where
T: 'static + StringWrapper + Display,
E: 'static + AsyncIoEnvironment + ArgumentsEnvironment<Arg = T> + ExecutableEnvironment + ExportedVariableEnvironment<VarName = T, Var = T> + FileDescEnvironment + FunctionEnvironment + IsInteractiveEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SetArgumentsEnvironment + SubEnvironment + UnsetVariableEnvironment + WorkingDirectoryEnvironment,
E::Args: From<Vec<E::Arg>>,
E::FileHandle: FileDescWrapper,
E::FnName: From<T>,
E::Fn: Clone + From<Rc<SpawnBoxed<E, Error = RuntimeError> + 'static>> + Spawn<E, Error = RuntimeError>,
[src]
T: 'static + StringWrapper + Display,
E: 'static + AsyncIoEnvironment + ArgumentsEnvironment<Arg = T> + ExecutableEnvironment + ExportedVariableEnvironment<VarName = T, Var = T> + FileDescEnvironment + FunctionEnvironment + IsInteractiveEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SetArgumentsEnvironment + SubEnvironment + UnsetVariableEnvironment + WorkingDirectoryEnvironment,
E::Args: From<Vec<E::Arg>>,
E::FileHandle: FileDescWrapper,
E::FnName: From<T>,
E::Fn: Clone + From<Rc<SpawnBoxed<E, Error = RuntimeError> + 'static>> + Spawn<E, Error = RuntimeError>,
type EvalResult = T
type EvalFuture = Box<EnvFuture<E, Item = Fields<T>, Error = Self::Error> + 'static>
type Error = RuntimeError
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<'a, T, E: ?Sized> WordEval<E> for &'a TopLevelWord<T> where
T: 'static + StringWrapper + Display,
E: 'static + AsyncIoEnvironment + ArgumentsEnvironment<Arg = T> + ExecutableEnvironment + ExportedVariableEnvironment<VarName = T, Var = T> + FileDescEnvironment + FunctionEnvironment + IsInteractiveEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SetArgumentsEnvironment + SubEnvironment + UnsetVariableEnvironment + WorkingDirectoryEnvironment,
E::Args: From<Vec<E::Arg>>,
E::FileHandle: FileDescWrapper,
E::FnName: From<T>,
E::Fn: Clone + From<Rc<SpawnBoxed<E, Error = RuntimeError> + 'static>> + Spawn<E, Error = RuntimeError>,
[src]
T: 'static + StringWrapper + Display,
E: 'static + AsyncIoEnvironment + ArgumentsEnvironment<Arg = T> + ExecutableEnvironment + ExportedVariableEnvironment<VarName = T, Var = T> + FileDescEnvironment + FunctionEnvironment + IsInteractiveEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SetArgumentsEnvironment + SubEnvironment + UnsetVariableEnvironment + WorkingDirectoryEnvironment,
E::Args: From<Vec<E::Arg>>,
E::FileHandle: FileDescWrapper,
E::FnName: From<T>,
E::Fn: Clone + From<Rc<SpawnBoxed<E, Error = RuntimeError> + 'static>> + Spawn<E, Error = RuntimeError>,
type EvalResult = T
type EvalFuture = Box<EnvFuture<E, Item = Fields<T>, Error = Self::Error> + 'a>
type Error = RuntimeError
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<T, E: ?Sized> WordEval<E> for AtomicTopLevelWord<T> where
T: 'static + StringWrapper + Display + Send + Sync,
E: 'static + AsyncIoEnvironment + ArgumentsEnvironment<Arg = T> + ExecutableEnvironment + ExportedVariableEnvironment<VarName = T, Var = T> + FileDescEnvironment + FunctionEnvironment + IsInteractiveEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SetArgumentsEnvironment + SubEnvironment + UnsetVariableEnvironment + WorkingDirectoryEnvironment,
E::Args: From<Vec<E::Arg>>,
E::FileHandle: FileDescWrapper,
E::FnName: From<T>,
E::Fn: Clone + From<Arc<SpawnBoxed<E, Error = RuntimeError> + Send + Sync + 'static>> + Spawn<E, Error = RuntimeError>,
[src]
T: 'static + StringWrapper + Display + Send + Sync,
E: 'static + AsyncIoEnvironment + ArgumentsEnvironment<Arg = T> + ExecutableEnvironment + ExportedVariableEnvironment<VarName = T, Var = T> + FileDescEnvironment + FunctionEnvironment + IsInteractiveEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SetArgumentsEnvironment + SubEnvironment + UnsetVariableEnvironment + WorkingDirectoryEnvironment,
E::Args: From<Vec<E::Arg>>,
E::FileHandle: FileDescWrapper,
E::FnName: From<T>,
E::Fn: Clone + From<Arc<SpawnBoxed<E, Error = RuntimeError> + Send + Sync + 'static>> + Spawn<E, Error = RuntimeError>,
type EvalResult = T
type EvalFuture = Box<EnvFuture<E, Item = Fields<T>, Error = Self::Error> + 'static>
type Error = RuntimeError
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
fn eval_as_pattern(self, env: &E) -> Pattern<Self::EvalFuture>
[src]
impl<'a, T, E: ?Sized> WordEval<E> for &'a AtomicTopLevelWord<T> where
T: 'static + StringWrapper + Display + Send + Sync,
E: 'static + AsyncIoEnvironment + ArgumentsEnvironment<Arg = T> + ExecutableEnvironment + ExportedVariableEnvironment<VarName = T, Var = T> + FileDescEnvironment + FunctionEnvironment + IsInteractiveEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SetArgumentsEnvironment + SubEnvironment + UnsetVariableEnvironment + WorkingDirectoryEnvironment,
E::Args: From<Vec<E::Arg>>,
E::FileHandle: FileDescWrapper,
E::FnName: From<T>,
E::Fn: Clone + From<Arc<SpawnBoxed<E, Error = RuntimeError> + Send + Sync + 'static>> + Spawn<E, Error = RuntimeError>,
[src]
T: 'static + StringWrapper + Display + Send + Sync,
E: 'static + AsyncIoEnvironment + ArgumentsEnvironment<Arg = T> + ExecutableEnvironment + ExportedVariableEnvironment<VarName = T, Var = T> + FileDescEnvironment + FunctionEnvironment + IsInteractiveEnvironment + LastStatusEnvironment + ReportErrorEnvironment + SetArgumentsEnvironment + SubEnvironment + UnsetVariableEnvironment + WorkingDirectoryEnvironment,
E::Args: From<Vec<E::Arg>>,
E::FileHandle: FileDescWrapper,
E::FnName: From<T>,
E::Fn: Clone + From<Arc<SpawnBoxed<E, Error = RuntimeError> + Send + Sync + 'static>> + Spawn<E, Error = RuntimeError>,
type EvalResult = T
type EvalFuture = Box<EnvFuture<E, Item = Fields<T>, Error = Self::Error> + 'a>
type Error = RuntimeError
fn eval_with_config(self, env: &E, cfg: WordEvalConfig) -> Self::EvalFuture
[src]
fn eval(self, env: &E) -> Self::EvalFuture
[src]
fn eval_as_assignment(self, env: &E) -> Assignment<Self::EvalFuture> where
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,
[src]
E: VariableEnvironment,
E::VarName: Borrow<String>,
E::Var: Borrow<String>,