use crate::parser::KVPair; use crate::parser::{Filter, RValue}; use crate::renderer::context_element::ContextElement; use crate::renderer::Loopable; use crate::renderer::RenderError; use crate::renderer::Renderable; use crate::renderer::WalkError; use crate::renderer::Walkable; use std::collections::HashMap; #[derive(Clone, Debug)] pub struct ParametersContext<'a> { params: HashMap<&'a str, &'a RValue<'a>>, breadcrumbs: &'a Vec<&'a dyn ContextElement>, } impl<'a> ParametersContext<'a> { pub fn new( breadcrumbs: &'a Vec<&'a dyn ContextElement>, params: &'a Vec>, ) -> ParametersContext<'a> { let param_map = params .iter() .map(|pair: &KVPair<'a>| (pair.key, &pair.value)) .collect(); ParametersContext { params: param_map, breadcrumbs: breadcrumbs, } } } impl<'a> ContextElement for ParametersContext<'a> {} impl<'a> Renderable for ParametersContext<'a> { fn render(&self, _filters: &Vec) -> Result { Ok("[object Object]".to_owned()) } } impl<'a> Loopable for ParametersContext<'a> { fn get_loop_elements(&self) -> Vec<&dyn ContextElement> { // TODO: Would this even ever be called? Won't matter, but I'd like to know. vec![self] } } impl<'a> Walkable for ParametersContext<'a> { fn walk(&self, segment: &str) -> Result<&dyn ContextElement, WalkError> { // TODO: Actually implement Err(WalkError::CantWalk) } }