1 #![allow(unused_imports, dead_code)]
2 extern crate env_logger
;
3 extern crate handlebars
;
6 extern crate serde_derive
;
7 extern crate serde_json
;
9 use serde_json
::value
::{self, Map, Value as Json}
;
11 use std
::io
::{Read, Write}
;
14 use handlebars
::{to_json, Context, Handlebars, Helper, JsonRender, RenderContext, RenderError}
;
16 // define a custom helper
17 fn format_helper(h
: &Helper
, _
: &Handlebars
, rc
: &mut RenderContext
) -> Result
<(), RenderError
> {
20 .ok_or(RenderError
::new("Param 0 is required for format helper.",),)
22 let rendered
= format
!("{} pts", param
.value().render());
23 try
!(rc
.writer
.write(rendered
.into_bytes().as_ref()));
27 // another custom helper
28 fn rank_helper(h
: &Helper
, _
: &Handlebars
, rc
: &mut RenderContext
) -> Result
<(), RenderError
> {
31 .and_then(|v
| v
.value().as_u64(),)
32 .ok_or(RenderError
::new(
33 "Param 0 with u64 type is required for rank helper."
38 .and_then(|v
| v
.value().as_array(),)
39 .ok_or(RenderError
::new(
40 "Param 1 with array type is required for rank helper"
43 let total
= teams
.len();
45 try
!(rc
.writer
.write("champion".as_bytes()));
46 } else if rank
>= total
- 2 {
47 try
!(rc
.writer
.write("relegation".as_bytes()));
49 try
!(rc
.writer
.write("acl".as_bytes()));
54 static TYPES
: &'
static str = "serde_json";
64 pub fn make_data() -> Map
<String
, Json
> {
65 let mut data
= Map
::new();
67 data
.insert("year".to_string(), to_json(&"2015".to_owned()));
71 name
: "Jiangsu Suning".to_string(),
75 name
: "Shanghai SIPG".to_string(),
79 name
: "Hebei CFFC".to_string(),
83 name
: "Guangzhou Evergrand".to_string(),
87 name
: "Shandong Luneng".to_string(),
91 name
: "Beijing Guoan".to_string(),
95 name
: "Hangzhou Greentown".to_string(),
99 name
: "Shanghai Shenhua".to_string(),
104 data
.insert("teams".to_string(), to_json(&teams
));
105 data
.insert("engine".to_string(), to_json(&TYPES
.to_owned()));
110 env_logger
::init().unwrap();
111 let mut handlebars
= Handlebars
::new();
113 handlebars
.register_helper("format", Box
::new(format_helper
));
114 handlebars
.register_helper("ranking_label", Box
::new(rank_helper
));
115 // handlebars.register_helper("format", Box::new(FORMAT_HELPER));
117 let data
= make_data();
119 // I'm using unwrap directly here to demostration.
120 // Never use this style in your real-world projects.
121 let mut source_template
= File
::open(&"./examples/render_file/template.hbs").unwrap();
122 let mut output_file
= File
::create("target/table.html").unwrap();
124 handlebars
.render_template_source_to_write(&mut source_template
, &data
, &mut output_file
)
126 println
!("Failed to generate target/table.html: {}", e
);
128 println
!("target/table.html generated");