duster/src/renderer/parameters_context.rs

54 lines
1.5 KiB
Rust
Raw Normal View History

use crate::parser::KVPair;
2020-05-09 02:34:58 +00:00
use crate::parser::{Filter, RValue};
use crate::renderer::context_element::ContextElement;
2020-05-09 02:34:58 +00:00
use crate::renderer::Loopable;
use crate::renderer::RenderError;
use crate::renderer::Renderable;
2020-05-09 18:10:38 +00:00
use crate::renderer::WalkError;
2020-05-09 02:34:58 +00:00
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<KVPair<'a>>,
) -> ParametersContext<'a> {
let param_map = params
.iter()
.map(|pair: &KVPair<'a>| (pair.key, &pair.value))
.collect();
ParametersContext {
params: param_map,
breadcrumbs: breadcrumbs,
}
}
}
2020-05-09 02:34:58 +00:00
impl<'a> ContextElement for ParametersContext<'a> {}
impl<'a> Renderable for ParametersContext<'a> {
fn render(&self, _filters: &Vec<Filter>) -> Result<String, RenderError> {
Ok("[object Object]".to_owned())
}
}
impl<'a> Loopable for ParametersContext<'a> {
2020-05-09 18:18:45 +00:00
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]
2020-05-09 02:34:58 +00:00
}
}
impl<'a> Walkable for ParametersContext<'a> {
2020-05-09 18:10:38 +00:00
fn walk(&self, segment: &str) -> Result<&dyn ContextElement, WalkError> {
2020-05-09 02:34:58 +00:00
// TODO: Actually implement
2020-05-09 18:10:38 +00:00
Err(WalkError::CantWalk)
2020-05-09 02:34:58 +00:00
}
}