Initial implementation of custom Renderable trait.
This commit is contained in:
parent
af5122ab9f
commit
e26b158ab4
@ -3,6 +3,7 @@ extern crate nom;
|
|||||||
use renderer::compile_template;
|
use renderer::compile_template;
|
||||||
use renderer::CompiledTemplate;
|
use renderer::CompiledTemplate;
|
||||||
use renderer::DustRenderer;
|
use renderer::DustRenderer;
|
||||||
|
use renderer::Renderable;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::{self, Read};
|
use std::io::{self, Read};
|
||||||
@ -65,3 +66,9 @@ fn read_context_from_stdin() -> serde_json::map::Map<String, serde_json::Value>
|
|||||||
_ => panic!("Expected context to be an object"),
|
_ => panic!("Expected context to be an object"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Renderable for serde_json::Value {
|
||||||
|
fn render(&self) -> String {
|
||||||
|
self.to_string()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
//! This module contains a renderer for a rust implementation of LinkedIn Dust
|
//! This module contains a renderer for a rust implementation of LinkedIn Dust
|
||||||
|
|
||||||
mod errors;
|
mod errors;
|
||||||
|
mod renderable;
|
||||||
mod renderer;
|
mod renderer;
|
||||||
|
|
||||||
|
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;
|
||||||
|
3
src/renderer/renderable.rs
Normal file
3
src/renderer/renderable.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
pub trait Renderable {
|
||||||
|
fn render(&self) -> String;
|
||||||
|
}
|
@ -4,6 +4,7 @@ use crate::parser::Template;
|
|||||||
use crate::parser::TemplateElement;
|
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 std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::ops::Index;
|
use std::ops::Index;
|
||||||
|
|
||||||
@ -46,7 +47,7 @@ impl<'a> DustRenderer<'a> {
|
|||||||
pub fn render<C>(&self, name: &str, context: &C) -> Result<String, RenderError>
|
pub fn render<C>(&self, name: &str, context: &C) -> Result<String, RenderError>
|
||||||
where
|
where
|
||||||
C: Index<&'a str>,
|
C: Index<&'a str>,
|
||||||
<C as std::ops::Index<&'a str>>::Output: std::string::ToString,
|
<C as std::ops::Index<&'a str>>::Output: Renderable,
|
||||||
{
|
{
|
||||||
let main_template = match self.templates.get(name) {
|
let main_template = match self.templates.get(name) {
|
||||||
Some(tmpl) => tmpl,
|
Some(tmpl) => tmpl,
|
||||||
@ -62,7 +63,7 @@ impl<'a> DustRenderer<'a> {
|
|||||||
fn render_template<C>(&self, template: &Template, context: &C) -> Result<String, RenderError>
|
fn render_template<C>(&self, template: &Template, context: &C) -> Result<String, RenderError>
|
||||||
where
|
where
|
||||||
C: Index<&'a str>,
|
C: Index<&'a str>,
|
||||||
<C as std::ops::Index<&'a str>>::Output: std::string::ToString,
|
<C as std::ops::Index<&'a str>>::Output: Renderable,
|
||||||
{
|
{
|
||||||
let mut output = String::new();
|
let mut output = String::new();
|
||||||
for elem in &template.contents.elements {
|
for elem in &template.contents.elements {
|
||||||
@ -79,13 +80,13 @@ impl<'a> DustRenderer<'a> {
|
|||||||
fn render_tag<C>(&self, tag: &DustTag, context: &C) -> Result<String, RenderError>
|
fn render_tag<C>(&self, tag: &DustTag, context: &C) -> Result<String, RenderError>
|
||||||
where
|
where
|
||||||
C: Index<&'a str>,
|
C: Index<&'a str>,
|
||||||
<C as std::ops::Index<&'a str>>::Output: std::string::ToString,
|
<C as std::ops::Index<&'a str>>::Output: Renderable,
|
||||||
{
|
{
|
||||||
match tag {
|
match tag {
|
||||||
DustTag::DTComment(comment) => (),
|
DustTag::DTComment(comment) => (),
|
||||||
DustTag::DTReference(reference) => {
|
DustTag::DTReference(reference) => {
|
||||||
let val = context.index("name");
|
let val = context.index("name");
|
||||||
return Ok(val.to_string());
|
return Ok(val.render());
|
||||||
}
|
}
|
||||||
_ => (), // TODO: Implement the rest
|
_ => (), // TODO: Implement the rest
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user