From dade738f55bf2c6d142f060ad7f4b25e86d08e36 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 10 May 2020 21:34:18 -0400 Subject: [PATCH] The structure is all there, just need to implement owned_walk_path and clone on NewParametersContext. --- src/renderer/parameters_context.rs | 10 +++++++--- src/renderer/walking.rs | 8 ++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs index 1a5af63..f6045b7 100644 --- a/src/renderer/parameters_context.rs +++ b/src/renderer/parameters_context.rs @@ -3,6 +3,7 @@ use crate::parser::{Filter, RValue}; use crate::renderer::context_element::CloneIntoBoxedContextElement; use crate::renderer::context_element::CompareContextElement; use crate::renderer::context_element::ContextElement; +use crate::renderer::walking::owned_walk_path; use crate::renderer::walking::walk_path; use crate::renderer::Loopable; use crate::renderer::RenderError; @@ -94,7 +95,7 @@ impl Walkable for NewParametersContext { fn walk(&self, segment: &str) -> Result<&dyn ContextElement, WalkError> { let rval = self.params.get(segment).ok_or(WalkError::CantWalk)?; match rval { - OwnedRValue::RVPath(path) => walk_path(self.breadcrumbs, &path.keys), + OwnedRValue::RVPath(path) => owned_walk_path(&self.breadcrumbs, &path.keys), OwnedRValue::RVString(text) => Ok(text), } } @@ -102,8 +103,11 @@ impl Walkable for NewParametersContext { impl Clone for NewParametersContext { fn clone(&self) -> Self { - // TODO: What is this doing, really? - *self + // TODO: Implement clone + NewParametersContext { + params: HashMap::new(), + breadcrumbs: Vec::new(), + } } } diff --git a/src/renderer/walking.rs b/src/renderer/walking.rs index feadce3..942db87 100644 --- a/src/renderer/walking.rs +++ b/src/renderer/walking.rs @@ -51,3 +51,11 @@ pub fn walk_path<'a>( } Err(WalkError::CantWalk) } + +pub fn owned_walk_path<'a>( + breadcrumbs: &Vec>, + path: &Vec, +) -> Result<&'a dyn ContextElement, WalkError> { + // TODO: Implement owned_walk_path + Err(WalkError::CantWalk) +}