difftreelog
feat CLI --format option
in: master
1 file changed
cmds/jsonnet/src/main.rsdiffbeforeafterboth1use clap::Clap;1use clap::Clap;2use jsonnet_evaluator::Val;2use jsonnet_evaluator::Val;3use std::str::FromStr;45enum Format {6 None,7 Json,8}910impl FromStr for Format {11 type Err = &'static str;12 fn from_str(s: &str) -> Result<Self, Self::Err> {13 Ok(match s {14 "none" => Format::None,15 "json" => Format::Json,16 _ => return Err("no such format"),17 })18 }19}3204#[derive(Clap)]21#[derive(Clap)]5#[clap(version = "0.1.0", author = "Lach <iam@lach.pw>")]22#[clap(version = "0.1.0", author = "Lach <iam@lach.pw>")]8 input: String,25 input: String,9 #[clap(long, about = "Disable global std variable")]26 #[clap(long, about = "Disable global std variable")]10 no_stdlib: bool,27 no_stdlib: bool,28 #[clap(long, short = "f", default_value = "none", possible_values = &["none", "json"])]29 format: Format,11}30}123113fn main() {32fn main() {24 .unwrap();43 .unwrap();25 let result = evaluator.evaluate_file(&opts.input);44 let result = evaluator.evaluate_file(&opts.input);26 match result {45 match result {27 Ok(v) => match v {46 Ok(mut v) => {47 if let Format::Json = opts.format {48 if opts.no_stdlib {49 evaluator.add_stdlib();50 }51 evaluator.add_global("__tmp__to_json__".to_owned(), v);52 v = evaluator53 .parse_evaluate_raw("std.manifestJson(__tmp__to_json__)")54 .expect("json serialization");55 }56 match v {28 Val::Str(s) => println!("{}", s),57 Val::Str(s) => println!("{}", s),29 Val::Num(n) => println!("{}", n),58 Val::Num(n) => println!("{}", n),30 _v => eprintln!(59 _v => eprintln!(31 "jsonnet output is not a string.\nDid you forgot to set --format, or wrap your data with std.manifestJson?"60 "jsonnet output is not a string.\nDid you forgot to set --format, or wrap your data with std.manifestJson?"32 ),61 ),33 },62 }63 }34 Err(err) => {64 Err(err) => {35 println!("Error: {:?}", err.0);65 println!("Error: {:?}", err.0);36 use annotate_snippets::{66 use annotate_snippets::{