compiling templates in the same manner as the shim
This commit is contained in:
parent
7e0a617ba6
commit
743106684a
31
src/bin.rs
31
src/bin.rs
@ -1,13 +1,42 @@
|
|||||||
extern crate nom;
|
extern crate nom;
|
||||||
|
|
||||||
use parser::template;
|
use renderer::compile_template;
|
||||||
|
use renderer::CompiledTemplate;
|
||||||
|
use std::env;
|
||||||
|
use std::fs;
|
||||||
use std::io::{self, Read};
|
use std::io::{self, Read};
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
mod parser;
|
mod parser;
|
||||||
|
mod renderer;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let context = read_context_from_stdin();
|
let context = read_context_from_stdin();
|
||||||
println!("{:?}", context);
|
println!("{:?}", context);
|
||||||
|
|
||||||
|
let argv: Vec<String> = env::args().collect();
|
||||||
|
if argv.len() < 2 {
|
||||||
|
panic!("Need to pass templates");
|
||||||
|
}
|
||||||
|
let template_paths = &argv[1..];
|
||||||
|
let template_contents: Vec<(String, String)> = template_paths
|
||||||
|
.iter()
|
||||||
|
.map(|p| {
|
||||||
|
let template_content = fs::read_to_string(&p).unwrap();
|
||||||
|
(p.to_string(), template_content)
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let compiled_templates: Vec<CompiledTemplate> = template_contents
|
||||||
|
.iter()
|
||||||
|
.map(|(p, contents)| template_from_file(p, contents))
|
||||||
|
.collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn template_from_file<'a>(file_path: &str, file_contents: &'a str) -> CompiledTemplate<'a> {
|
||||||
|
let path: &Path = Path::new(file_path);
|
||||||
|
let name = path.file_stem().unwrap();
|
||||||
|
println!("{:?}", name);
|
||||||
|
compile_template(file_contents, name.to_string_lossy().to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_context_from_stdin() -> serde_json::map::Map<String, serde_json::Value> {
|
fn read_context_from_stdin() -> serde_json::map::Map<String, serde_json::Value> {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
extern crate nom;
|
extern crate nom;
|
||||||
|
|
||||||
mod parser;
|
mod parser;
|
||||||
|
mod renderer;
|
||||||
|
6
src/renderer/mod.rs
Normal file
6
src/renderer/mod.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
//! This module contains a renderer for a rust implementation of LinkedIn Dust
|
||||||
|
|
||||||
|
mod renderer;
|
||||||
|
|
||||||
|
pub use renderer::compile_template;
|
||||||
|
pub use renderer::CompiledTemplate;
|
19
src/renderer/renderer.rs
Normal file
19
src/renderer/renderer.rs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
use crate::parser::template;
|
||||||
|
use crate::parser::Template;
|
||||||
|
use nom::IResult;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct CompiledTemplate<'a> {
|
||||||
|
template: Template<'a>,
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn compile_template<'a>(source: &'a str, name: String) -> CompiledTemplate<'a> {
|
||||||
|
// TODO: Make this function return a result with a custom error type. Break the nom IResult chain
|
||||||
|
// TODO: Make this all consuming
|
||||||
|
let (_remaining, parsed_template) = template(source).expect("Failed to compile template");
|
||||||
|
CompiledTemplate {
|
||||||
|
template: parsed_template,
|
||||||
|
name: name,
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user