summaryrefslogtreecommitdiffstats
path: root/vendor/handlebars/src/cli.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/handlebars/src/cli.rs')
-rw-r--r--vendor/handlebars/src/cli.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/vendor/handlebars/src/cli.rs b/vendor/handlebars/src/cli.rs
new file mode 100644
index 000000000..571900da2
--- /dev/null
+++ b/vendor/handlebars/src/cli.rs
@@ -0,0 +1,51 @@
+use std::env;
+use std::fs;
+use std::process;
+use std::str::FromStr;
+
+use serde_json::value::Value as Json;
+
+use handlebars::Handlebars;
+
+fn usage() -> ! {
+ eprintln!("Usage: handlebars-cli template.hbs '{{\"json\": \"data\"}}'");
+ process::exit(1);
+}
+
+fn parse_json(text: &str) -> Json {
+ let result = if let Some(text) = text.strip_prefix('@') {
+ fs::read_to_string(text).unwrap()
+ } else {
+ text.to_owned()
+ };
+ match Json::from_str(&result) {
+ Ok(json) => json,
+ Err(_) => usage(),
+ }
+}
+
+fn main() {
+ let mut args = env::args();
+ args.next(); // skip own filename
+ let (filename, json) = match (args.next(), args.next()) {
+ (Some(filename), Some(json)) => (filename, json),
+ _ => usage(),
+ };
+ let data = parse_json(&json);
+
+ let mut handlebars = Handlebars::new();
+
+ handlebars
+ .register_template_file(&filename, &filename)
+ .ok()
+ .unwrap();
+ match handlebars.render(&filename, &data) {
+ Ok(data) => {
+ println!("{}", data);
+ }
+ Err(e) => {
+ println!("Error rendering {}: {}", filename, e);
+ process::exit(2);
+ }
+ }
+}