summaryrefslogtreecommitdiffstats
path: root/vendor/handlebars/examples/render_file.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/handlebars/examples/render_file.rs')
-rw-r--r--vendor/handlebars/examples/render_file.rs140
1 files changed, 140 insertions, 0 deletions
diff --git a/vendor/handlebars/examples/render_file.rs b/vendor/handlebars/examples/render_file.rs
new file mode 100644
index 000000000..7b7599672
--- /dev/null
+++ b/vendor/handlebars/examples/render_file.rs
@@ -0,0 +1,140 @@
+#![allow(unused_imports, dead_code)]
+extern crate env_logger;
+extern crate handlebars;
+extern crate serde;
+#[macro_use]
+extern crate serde_derive;
+extern crate serde_json;
+use serde::Serialize;
+use serde_json::value::{self, Map, Value as Json};
+
+use std::error::Error;
+use std::fs::File;
+use std::io::{Read, Write};
+
+use handlebars::{
+ to_json, Context, Handlebars, Helper, JsonRender, Output, RenderContext, RenderError,
+};
+
+// define a custom helper
+fn format_helper(
+ h: &Helper,
+ _: &Handlebars,
+ _: &Context,
+ _: &mut RenderContext,
+ out: &mut dyn Output,
+) -> Result<(), RenderError> {
+ let param = h
+ .param(0)
+ .ok_or(RenderError::new("Param 0 is required for format helper."))?;
+ let rendered = format!("{} pts", param.value().render());
+ out.write(rendered.as_ref())?;
+ Ok(())
+}
+
+// another custom helper
+fn rank_helper(
+ h: &Helper,
+ _: &Handlebars,
+ _: &Context,
+ _: &mut RenderContext,
+ out: &mut dyn Output,
+) -> Result<(), RenderError> {
+ let rank = h
+ .param(0)
+ .and_then(|ref v| v.value().as_u64())
+ .ok_or(RenderError::new(
+ "Param 0 with u64 type is required for rank helper.",
+ ))? as usize;
+ let total = h
+ .param(1)
+ .as_ref()
+ .and_then(|v| v.value().as_array())
+ .map(|arr| arr.len())
+ .ok_or(RenderError::new(
+ "Param 1 with array type is required for rank helper",
+ ))?;
+ if rank == 0 {
+ out.write("champion")?;
+ } else if rank >= total - 2 {
+ out.write("relegation")?;
+ } else if rank <= 2 {
+ out.write("acl")?;
+ }
+ Ok(())
+}
+
+static TYPES: &'static str = "serde_json";
+
+// define some data
+#[derive(Serialize)]
+pub struct Team {
+ name: String,
+ pts: u16,
+}
+
+// produce some data
+pub fn make_data() -> Map<String, Json> {
+ let mut data = Map::new();
+
+ data.insert("year".to_string(), to_json("2015"));
+
+ let teams = vec![
+ Team {
+ name: "Jiangsu Suning".to_string(),
+ pts: 43u16,
+ },
+ Team {
+ name: "Shanghai SIPG".to_string(),
+ pts: 39u16,
+ },
+ Team {
+ name: "Hebei CFFC".to_string(),
+ pts: 27u16,
+ },
+ Team {
+ name: "Guangzhou Evergrand".to_string(),
+ pts: 22u16,
+ },
+ Team {
+ name: "Shandong Luneng".to_string(),
+ pts: 12u16,
+ },
+ Team {
+ name: "Beijing Guoan".to_string(),
+ pts: 7u16,
+ },
+ Team {
+ name: "Hangzhou Greentown".to_string(),
+ pts: 7u16,
+ },
+ Team {
+ name: "Shanghai Shenhua".to_string(),
+ pts: 4u16,
+ },
+ ];
+
+ data.insert("teams".to_string(), to_json(&teams));
+ data.insert("engine".to_string(), to_json(TYPES));
+ data
+}
+
+fn main() -> Result<(), Box<dyn Error>> {
+ env_logger::init();
+ let mut handlebars = Handlebars::new();
+
+ handlebars.register_helper("format", Box::new(format_helper));
+ handlebars.register_helper("ranking_label", Box::new(rank_helper));
+ // handlebars.register_helper("format", Box::new(FORMAT_HELPER));
+
+ let data = make_data();
+
+ handlebars
+ .register_template_file("template", "./examples/render_file/template.hbs")
+ .unwrap();
+
+ let mut output_file = File::create("target/table.html")?;
+ handlebars.render_to_write("template", &data, &mut output_file)?;
+ println!("target/table.html generated");
+ Ok(())
+}