git.delta.rocks / jrsonnet / refs/commits / d37d57f47273

difftreelog

feat CLI --format option

Лач2020-06-04parent: #cc58898.patch.diff
in: master

1 file changed

modifiedcmds/jsonnet/src/main.rsdiffbeforeafterboth
1use clap::Clap;1use clap::Clap;
2use jsonnet_evaluator::Val;2use jsonnet_evaluator::Val;
3use std::str::FromStr;
4
5enum Format {
6 None,
7 Json,
8}
9
10impl 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}
320
4#[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}
1231
13fn 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 = evaluator
53 .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::{