Add a parent to ParametersContext so we can chain parameters contexts for use with the select helper.
This commit is contained in:
@@ -21,6 +21,7 @@ use std::collections::HashMap;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct ParametersContext<'a> {
|
||||
parent: Option<&'a ParametersContext<'a>>,
|
||||
params: HashMap<&'a str, (&'a RValue<'a>, Option<BreadcrumbTreeElement<'a>>)>,
|
||||
}
|
||||
|
||||
@@ -29,6 +30,7 @@ impl<'a> ParametersContext<'a> {
|
||||
renderer: &DustRenderer,
|
||||
breadcrumbs: &'a Vec<BreadcrumbTreeElement<'a>>,
|
||||
params: &'a Vec<KVPair>,
|
||||
parent: Option<&'a ParametersContext<'a>>,
|
||||
) -> Self {
|
||||
// If the parameter is a Path, then we resolve it immediately
|
||||
// to a context element because those are resolved using the
|
||||
@@ -60,12 +62,17 @@ impl<'a> ParametersContext<'a> {
|
||||
.collect();
|
||||
|
||||
ParametersContext {
|
||||
parent: parent,
|
||||
params: rendered_params,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn contains_key(&self, segment: &str) -> bool {
|
||||
self.params.contains_key(segment)
|
||||
|| self
|
||||
.parent
|
||||
.map(|p| p.contains_key(segment))
|
||||
.unwrap_or(false)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +90,11 @@ impl<'a> Walkable for ParametersContext<'a> {
|
||||
fn walk(&self, segment: &str) -> Result<&dyn IntoContextElement, WalkError> {
|
||||
match self.params.get(segment).map(|(_rvalue, bte)| bte) {
|
||||
Some(Some(bte)) => Ok(bte.borrow()),
|
||||
_ => Err(WalkError::CantWalk),
|
||||
Some(None) => Err(WalkError::CantWalk),
|
||||
None => self
|
||||
.parent
|
||||
.map(|p| p.walk(segment))
|
||||
.unwrap_or(Err(WalkError::CantWalk)),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user