extern crate handlebars; extern crate rustc_serialize; use std::path::Path; use std::collections::BTreeMap; use self::rustc_serialize::json; use self::handlebars::{Handlebars, HelperDef, RenderError, RenderContext, Helper, Context}; // Handlebars helper to construct TOC #[derive(Clone, Copy)] pub struct RenderToc; impl HelperDef for RenderToc { fn call(&self, c: &Context, _h: &Helper, _: &Handlebars, rc: &mut RenderContext) -> Result<(), RenderError> { // get value from context data // rc.get_path() is current json parent path, you should always use it like this // param is the key of value you want to display let chapters = c.navigate(rc.get_path(), "chapters"); let current = c.navigate(rc.get_path(), "path").to_string().replace("\"", ""); try!(rc.writer.write("