Change IterVariablesContext
to use GATs instead of a lifetime parameter.
This commit is contained in:
parent
aebc2ba02e
commit
6ed820adc4
@ -50,17 +50,21 @@ pub trait ContextWithMutableFunctions: Context {
|
|||||||
/// A context that allows to iterate over its variable names with their values.
|
/// A context that allows to iterate over its variable names with their values.
|
||||||
///
|
///
|
||||||
/// **Note:** this trait will change after GATs are stabilised, because then we can get rid of the lifetime in the trait definition.
|
/// **Note:** this trait will change after GATs are stabilised, because then we can get rid of the lifetime in the trait definition.
|
||||||
pub trait IterateVariablesContext<'a> {
|
pub trait IterateVariablesContext {
|
||||||
/// The iterator type for iterating over variable name-value pairs.
|
/// The iterator type for iterating over variable name-value pairs.
|
||||||
type VariableIterator: 'a + Iterator<Item = (String, Value)>;
|
type VariableIterator<'a>: Iterator<Item = (String, Value)>
|
||||||
|
where
|
||||||
|
Self: 'a;
|
||||||
/// The iterator type for iterating over variable names.
|
/// The iterator type for iterating over variable names.
|
||||||
type VariableNameIterator: 'a + Iterator<Item = String>;
|
type VariableNameIterator<'a>: Iterator<Item = String>
|
||||||
|
where
|
||||||
|
Self: 'a;
|
||||||
|
|
||||||
/// Returns an iterator over pairs of variable names and values.
|
/// Returns an iterator over pairs of variable names and values.
|
||||||
fn iter_variables(&'a self) -> Self::VariableIterator;
|
fn iter_variables(&self) -> Self::VariableIterator<'_>;
|
||||||
|
|
||||||
/// Returns an iterator over variable names.
|
/// Returns an iterator over variable names.
|
||||||
fn iter_variable_names(&'a self) -> Self::VariableNameIterator;
|
fn iter_variable_names(&self) -> Self::VariableNameIterator<'_>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*/// A context that allows to retrieve functions programmatically.
|
/*/// A context that allows to retrieve functions programmatically.
|
||||||
@ -103,15 +107,15 @@ impl Context for EmptyContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> IterateVariablesContext<'a> for EmptyContext {
|
impl IterateVariablesContext for EmptyContext {
|
||||||
type VariableIterator = iter::Empty<(String, Value)>;
|
type VariableIterator<'a> = iter::Empty<(String, Value)>;
|
||||||
type VariableNameIterator = iter::Empty<String>;
|
type VariableNameIterator<'a> = iter::Empty<String>;
|
||||||
|
|
||||||
fn iter_variables(&self) -> Self::VariableIterator {
|
fn iter_variables(&self) -> Self::VariableIterator<'_> {
|
||||||
iter::empty()
|
iter::empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn iter_variable_names(&self) -> Self::VariableNameIterator {
|
fn iter_variable_names(&self) -> Self::VariableNameIterator<'_> {
|
||||||
iter::empty()
|
iter::empty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -147,15 +151,15 @@ impl Context for EmptyContextWithBuiltinFunctions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> IterateVariablesContext<'a> for EmptyContextWithBuiltinFunctions {
|
impl IterateVariablesContext for EmptyContextWithBuiltinFunctions {
|
||||||
type VariableIterator = iter::Empty<(String, Value)>;
|
type VariableIterator<'a> = iter::Empty<(String, Value)>;
|
||||||
type VariableNameIterator = iter::Empty<String>;
|
type VariableNameIterator<'a> = iter::Empty<String>;
|
||||||
|
|
||||||
fn iter_variables(&self) -> Self::VariableIterator {
|
fn iter_variables(&self) -> Self::VariableIterator<'_> {
|
||||||
iter::empty()
|
iter::empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn iter_variable_names(&self) -> Self::VariableNameIterator {
|
fn iter_variable_names(&self) -> Self::VariableNameIterator<'_> {
|
||||||
iter::empty()
|
iter::empty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -232,21 +236,21 @@ impl ContextWithMutableFunctions for HashMapContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> IterateVariablesContext<'a> for HashMapContext {
|
impl IterateVariablesContext for HashMapContext {
|
||||||
type VariableIterator = std::iter::Map<
|
type VariableIterator<'a> = std::iter::Map<
|
||||||
std::collections::hash_map::Iter<'a, String, Value>,
|
std::collections::hash_map::Iter<'a, String, Value>,
|
||||||
fn((&String, &Value)) -> (String, Value),
|
fn((&String, &Value)) -> (String, Value),
|
||||||
>;
|
>;
|
||||||
type VariableNameIterator =
|
type VariableNameIterator<'a> =
|
||||||
std::iter::Cloned<std::collections::hash_map::Keys<'a, String, Value>>;
|
std::iter::Cloned<std::collections::hash_map::Keys<'a, String, Value>>;
|
||||||
|
|
||||||
fn iter_variables(&'a self) -> Self::VariableIterator {
|
fn iter_variables(&self) -> Self::VariableIterator<'_> {
|
||||||
self.variables
|
self.variables
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(string, value)| (string.clone(), value.clone()))
|
.map(|(string, value)| (string.clone(), value.clone()))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn iter_variable_names(&'a self) -> Self::VariableNameIterator {
|
fn iter_variable_names(&self) -> Self::VariableNameIterator<'_> {
|
||||||
self.variables.keys().cloned()
|
self.variables.keys().cloned()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user