initial walkable implementation
This commit is contained in:
parent
15c8ee57a7
commit
d5c3985c29
@ -3,8 +3,10 @@
|
|||||||
mod errors;
|
mod errors;
|
||||||
mod renderable;
|
mod renderable;
|
||||||
mod renderer;
|
mod renderer;
|
||||||
|
mod walkable;
|
||||||
|
|
||||||
pub use renderable::Renderable;
|
pub use renderable::Renderable;
|
||||||
pub use renderer::compile_template;
|
pub use renderer::compile_template;
|
||||||
pub use renderer::CompiledTemplate;
|
pub use renderer::CompiledTemplate;
|
||||||
pub use renderer::DustRenderer;
|
pub use renderer::DustRenderer;
|
||||||
|
pub use walkable::Walkable;
|
||||||
|
@ -5,6 +5,7 @@ use crate::parser::TemplateElement;
|
|||||||
use crate::renderer::errors::CompileError;
|
use crate::renderer::errors::CompileError;
|
||||||
use crate::renderer::errors::RenderError;
|
use crate::renderer::errors::RenderError;
|
||||||
use crate::renderer::renderable::Renderable;
|
use crate::renderer::renderable::Renderable;
|
||||||
|
use crate::renderer::walkable::Walkable;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::ops::Index;
|
use std::ops::Index;
|
||||||
|
|
||||||
@ -93,3 +94,42 @@ impl<'a> DustRenderer<'a> {
|
|||||||
Ok("".to_owned())
|
Ok("".to_owned())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn walk_path<'a, C>(context: &'a C, path: &Vec<&str>) -> &'a C
|
||||||
|
where
|
||||||
|
C: Walkable<Output = C>,
|
||||||
|
{
|
||||||
|
let mut output: &C = context;
|
||||||
|
|
||||||
|
for elem in path.iter() {
|
||||||
|
output = context.walk(elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
output
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
impl<'a> Walkable for HashMap<&str, &str> {
|
||||||
|
type Output = str;
|
||||||
|
|
||||||
|
fn walk(&self, segment: &str) -> &str {
|
||||||
|
self.get(segment).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_walk_path() {
|
||||||
|
let context: HashMap<&str, &str> = [
|
||||||
|
("cat", "kitty"),
|
||||||
|
("dog", "doggy"),
|
||||||
|
("tiger", "murder kitty"),
|
||||||
|
]
|
||||||
|
.iter()
|
||||||
|
.cloned()
|
||||||
|
.collect();
|
||||||
|
assert_eq!(context.walk("cat"), "kitty");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user