Moved ParametersContext to its own file.

This commit is contained in:
Tom Alexander 2020-05-08 22:12:35 -04:00
parent 1a6db195cb
commit b45448edbd
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE
5 changed files with 34 additions and 9 deletions

View File

@ -6,6 +6,7 @@ pub use parser::template;
pub use parser::Body; pub use parser::Body;
pub use parser::DustTag; pub use parser::DustTag;
pub use parser::Filter; pub use parser::Filter;
pub use parser::KVPair;
pub use parser::RValue; pub use parser::RValue;
pub use parser::Special; pub use parser::Special;
pub use parser::Template; pub use parser::Template;

View File

@ -125,9 +125,9 @@ pub enum RValue<'a> {
} }
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Debug, PartialEq)]
struct KVPair<'a> { pub struct KVPair<'a> {
key: &'a str, pub key: &'a str,
value: RValue<'a>, pub value: RValue<'a>,
} }
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Debug, PartialEq)]

View File

@ -2,6 +2,7 @@
mod context_element; mod context_element;
mod errors; mod errors;
mod parameters_context;
mod renderer; mod renderer;
pub use context_element::ContextElement; pub use context_element::ContextElement;

View File

@ -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<KVPair<'a>>,
) -> 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> {}

View File

@ -1,13 +1,13 @@
use crate::parser::template; use crate::parser::template;
use crate::parser::Body; use crate::parser::Body;
use crate::parser::DustTag; use crate::parser::DustTag;
use crate::parser::RValue;
use crate::parser::Special; use crate::parser::Special;
use crate::parser::Template; use crate::parser::Template;
use crate::parser::TemplateElement; use crate::parser::TemplateElement;
use crate::renderer::context_element::ContextElement; use crate::renderer::context_element::ContextElement;
use crate::renderer::errors::CompileError; use crate::renderer::errors::CompileError;
use crate::renderer::errors::RenderError; use crate::renderer::errors::RenderError;
use crate::renderer::parameters_context::ParametersContext;
use std::collections::HashMap; use std::collections::HashMap;
#[derive(Clone, Debug)] #[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)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;