diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 9a7f16b..202309e 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -6,6 +6,7 @@ pub use parser::template; pub use parser::Body; pub use parser::DustTag; pub use parser::Filter; +pub use parser::KVPair; pub use parser::RValue; pub use parser::Special; pub use parser::Template; diff --git a/src/parser/parser.rs b/src/parser/parser.rs index 090155f..883a445 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -125,9 +125,9 @@ pub enum RValue<'a> { } #[derive(Clone, Debug, PartialEq)] -struct KVPair<'a> { - key: &'a str, - value: RValue<'a>, +pub struct KVPair<'a> { + pub key: &'a str, + pub value: RValue<'a>, } #[derive(Clone, Debug, PartialEq)] diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index ce43f4d..5c86aab 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -2,6 +2,7 @@ mod context_element; mod errors; +mod parameters_context; mod renderer; pub use context_element::ContextElement; diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs new file mode 100644 index 0000000..d301010 --- /dev/null +++ b/src/renderer/parameters_context.rs @@ -0,0 +1,28 @@ +use crate::parser::KVPair; +use crate::parser::RValue; +use crate::renderer::context_element::ContextElement; +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> {} diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index 4278135..32914a2 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -1,13 +1,13 @@ use crate::parser::template; use crate::parser::Body; use crate::parser::DustTag; -use crate::parser::RValue; use crate::parser::Special; use crate::parser::Template; use crate::parser::TemplateElement; use crate::renderer::context_element::ContextElement; use crate::renderer::errors::CompileError; use crate::renderer::errors::RenderError; +use crate::renderer::parameters_context::ParametersContext; use std::collections::HashMap; #[derive(Clone, Debug)] @@ -254,11 +254,6 @@ fn walk_path<'a>( }) } -struct ParametersContext<'a> { - params: HashMap<&'a str, RValue<'a>>, - breadcrumbs: &'a Vec<&'a dyn ContextElement>, -} - #[cfg(test)] mod tests { use super::*;