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::CompiledTemplate; | ||||
| use renderer::DustRenderer; | ||||
| use renderer::Renderable; | ||||
| use std::env; | ||||
| use std::fs; | ||||
| 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"), | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 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
 | ||||
| 
 | ||||
| mod errors; | ||||
| mod renderable; | ||||
| mod renderer; | ||||
| 
 | ||||
| pub use renderable::Renderable; | ||||
| pub use renderer::compile_template; | ||||
| pub use renderer::CompiledTemplate; | ||||
| 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::renderer::errors::CompileError; | ||||
| use crate::renderer::errors::RenderError; | ||||
| use crate::renderer::renderable::Renderable; | ||||
| use std::collections::HashMap; | ||||
| use std::ops::Index; | ||||
| 
 | ||||
| @ -46,7 +47,7 @@ impl<'a> DustRenderer<'a> { | ||||
|     pub fn render<C>(&self, name: &str, context: &C) -> Result<String, RenderError> | ||||
|     where | ||||
|         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) { | ||||
|             Some(tmpl) => tmpl, | ||||
| @ -62,7 +63,7 @@ impl<'a> DustRenderer<'a> { | ||||
|     fn render_template<C>(&self, template: &Template, context: &C) -> Result<String, RenderError> | ||||
|     where | ||||
|         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(); | ||||
|         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> | ||||
|     where | ||||
|         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 { | ||||
|             DustTag::DTComment(comment) => (), | ||||
|             DustTag::DTReference(reference) => { | ||||
|                 let val = context.index("name"); | ||||
|                 return Ok(val.to_string()); | ||||
|                 return Ok(val.render()); | ||||
|             } | ||||
|             _ => (), // TODO: Implement the rest
 | ||||
|         } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander