From 7253c7d99e37cfeb486c1beda42ee3e652915fc8 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 6 Jun 2020 18:37:35 -0400 Subject: [PATCH] Implement function to convert IceResult into a BreadcrumbTreeElement. --- src/renderer/breadcrumb_tree.rs | 12 ++++++++++++ src/renderer/parameters_context.rs | 25 ++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/renderer/breadcrumb_tree.rs b/src/renderer/breadcrumb_tree.rs index 7083141..b0a6993 100644 --- a/src/renderer/breadcrumb_tree.rs +++ b/src/renderer/breadcrumb_tree.rs @@ -1,3 +1,4 @@ +use crate::renderer::context_element::IceResult; use crate::renderer::context_element::IntoContextElement; use std::borrow::Borrow; use std::rc::Rc; @@ -17,6 +18,17 @@ pub enum BreadcrumbTreeElement<'a> { Borrowed(&'a dyn IntoContextElement), } +impl<'a> From<&'a IceResult<'a>> for BreadcrumbTreeElement<'a> { + fn from(inp: &'a IceResult<'a>) -> Self { + match inp { + IceResult::Owned(rc_ce) => { + BreadcrumbTreeElement::Borrowed(rc_ce.from_context_element()) + } + IceResult::Borrowed(ce) => BreadcrumbTreeElement::Borrowed(ce.from_context_element()), + } + } +} + impl<'a> BreadcrumbTree<'a> { pub fn new(parent: Option<&'a BreadcrumbTree>, element: BreadcrumbTreeElement<'a>) -> Self { BreadcrumbTree { diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs index d703408..653443a 100644 --- a/src/renderer/parameters_context.rs +++ b/src/renderer/parameters_context.rs @@ -27,8 +27,8 @@ pub struct ParametersContext<'a> { impl<'a> ParametersContext<'a> { pub fn new( renderer: &DustRenderer, - breadcrumbs: Option<&BreadcrumbTree>, - params: &Vec, + breadcrumbs: Option<&'a BreadcrumbTree>, + params: &'a Vec, ) -> Self { // If the parameter is a Path, then we resolve it immediately // to a context element because those are resolved using the @@ -38,8 +38,27 @@ impl<'a> ParametersContext<'a> { // then those are resolved at the time of access rather than // the time of assignment, so we leave them into their // original IntoContextElement state. + let rendered_params = params + .iter() + .map(|kvpair| { + let k = kvpair.key; + let v: &dyn IntoContextElement = match &kvpair.value { + RValue::RVLiteral(owned_literal) => &kvpair.value, + /*RValue::RVPath(path) => kvpair + .value + .into_context_element(renderer, breadcrumbs) + .unwrap() + .get_context_element_reference() + .from_context_element(),*/ + RValue::RVPath(path) => todo!(), + RValue::RVTemplate(template) => todo!(), + }; + (k, v) + }) + .collect(); + ParametersContext { - params: HashMap::new(), + params: rendered_params, } } }