diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index 7eecacb..7debf9a 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -7,6 +7,7 @@ mod inline_partial_tree; mod iteration_context; mod parameters_context; mod renderer; +mod tree_renderer; mod tree_walking; mod walking; diff --git a/src/renderer/tree_renderer.rs b/src/renderer/tree_renderer.rs new file mode 100644 index 0000000..5965ffe --- /dev/null +++ b/src/renderer/tree_renderer.rs @@ -0,0 +1,35 @@ +use crate::parser::template; +use crate::parser::Template; +use crate::renderer::errors::CompileError; +use std::collections::HashMap; + +#[derive(Clone, Debug)] +pub struct CompiledTemplate<'a> { + template: Template<'a>, + pub name: String, +} + +#[derive(Clone, Debug)] +pub struct DustRenderer<'a> { + templates: HashMap>, +} + +pub fn compile_template<'a>( + source: &'a str, + name: String, +) -> Result, CompileError> { + // TODO: This could use better error management + let (_remaining, parsed_template) = template(source).expect("Failed to compile template"); + Ok(CompiledTemplate { + template: parsed_template, + name: name, + }) +} + +impl<'a> DustRenderer<'a> { + pub fn new() -> DustRenderer<'a> { + DustRenderer { + templates: HashMap::new(), + } + } +}