]> git.proxmox.com Git - rustc.git/blob - vendor/handlebars/src/cli.rs
New upstream version 1.47.0~beta.2+dfsg1
[rustc.git] / vendor / handlebars / src / cli.rs
1 use std::env;
2 use std::fs;
3 use std::process;
4 use std::str::FromStr;
5
6 use serde_json::value::Value as Json;
7
8 use handlebars::Handlebars;
9
10 fn usage() -> ! {
11 eprintln!("Usage: handlebars-cli template.hbs '{{\"json\": \"data\"}}'");
12 process::exit(1);
13 }
14
15 fn parse_json(text: &str) -> Json {
16 let text = if text.starts_with('@') {
17 fs::read_to_string(&text[1..]).unwrap()
18 } else {
19 text.to_owned()
20 };
21 match Json::from_str(&text) {
22 Ok(json) => json,
23 Err(_) => usage(),
24 }
25 }
26
27 fn main() {
28 let mut args = env::args();
29 args.next(); // skip own filename
30 let (filename, json) = match (args.next(), args.next()) {
31 (Some(filename), Some(json)) => (filename, json),
32 _ => usage(),
33 };
34 let data = parse_json(&json);
35
36 let mut handlebars = Handlebars::new();
37
38 handlebars
39 .register_template_file(&filename, &filename)
40 .ok()
41 .unwrap();
42 match handlebars.render(&filename, &data) {
43 Ok(data) => {
44 println!("{}", data);
45 }
46 Err(e) => {
47 println!("Error rendering {}: {}", filename, e);
48 process::exit(2);
49 }
50 }
51 }