git.delta.rocks / jrsonnet / refs/commits / 295345aa77d8

difftreelog

feat add -c, -o, -m flags

Lach2020-08-26parent: #946acf9.patch.diff
in: master

3 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -148,6 +148,7 @@
  "jrsonnet-evaluator",
  "jrsonnet-parser",
  "mimallocator",
+ "thiserror",
 ]
 
 [[package]]
@@ -176,6 +177,7 @@
  "serde",
  "serde_json",
  "structdump",
+ "thiserror",
 ]
 
 [[package]]
@@ -429,6 +431,26 @@
 ]
 
 [[package]]
+name = "thiserror"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
 name = "unescape"
 version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
modifiedcmds/jrsonnet/Cargo.tomldiffbeforeafterboth
--- a/cmds/jrsonnet/Cargo.toml
+++ b/cmds/jrsonnet/Cargo.toml
@@ -19,6 +19,7 @@
 jrsonnet-cli = { path = "../../crates/jrsonnet-cli", version = "0.1.0" }
 # TODO: Fix mimalloc compile errors, and use them
 mimallocator = { version = "0.1.3", optional = true }
+thiserror = "1.0.20"
 
 [dependencies.clap]
 git = "https://github.com/clap-rs/clap"
modifiedcmds/jrsonnet/src/main.rsdiffbeforeafterboth
1use clap::Clap;1use clap::Clap;
2use jrsonnet_cli::{ConfigureState, GeneralOpts, InputOpts, ManifestOpts};2use jrsonnet_cli::{ConfigureState, GeneralOpts, InputOpts, ManifestOpts, OutputOpts};
3use jrsonnet_evaluator::{error::Result, EvaluationState};3use jrsonnet_evaluator::{error::LocError, EvaluationState};
4use std::{path::PathBuf, rc::Rc};4use std::{
5 fs::{create_dir_all, File},
6 io::Write,
7 path::PathBuf,
8 rc::Rc,
9};
510
6#[cfg(feature = "mimalloc")]11#[cfg(feature = "mimalloc")]
24 general: GeneralOpts,29 general: GeneralOpts,
25 #[clap(flatten)]30 #[clap(flatten)]
26 manifest: ManifestOpts,31 manifest: ManifestOpts,
32 #[clap(flatten)]
33 output: OutputOpts,
27 #[clap(flatten)]34 #[clap(flatten)]
28 debug: DebugOpts,35 debug: DebugOpts,
29}36}
42 }49 }
43}50}
51
52#[derive(thiserror::Error, Debug)]
53enum Error {
54 // Handled differently
55 #[error("evaluation error")]
56 Evaluation(jrsonnet_evaluator::error::LocError),
57 #[error("io error")]
58 Io(#[from] std::io::Error),
59}
60impl From<LocError> for Error {
61 fn from(e: LocError) -> Self {
62 Self::Evaluation(e)
63 }
64}
4465
45fn main_catch(opts: Opts) {66fn main_catch(opts: Opts) {
46 let state = EvaluationState::default();67 let state = EvaluationState::default();
47 if let Err(e) = main_real(&state, opts) {68 if let Err(e) = main_real(&state, opts) {
69 if let Error::Evaluation(e) = e {
48 println!("{}", state.stringify_err(&e));70 println!("{}", state.stringify_err(&e));
49 }71 } else {
72 println!("{}", e);
73 }
74 }
50}75}
5176
52fn main_real(state: &EvaluationState, opts: Opts) -> Result<()> {77fn main_real(state: &EvaluationState, opts: Opts) -> Result<(), Error> {
53 opts.general.configure(&state)?;78 opts.general.configure(&state)?;
54 opts.manifest.configure(&state)?;79 opts.manifest.configure(&state)?;
5580
6489
65 let val = state.with_tla(val)?;90 let val = state.with_tla(val)?;
6691
92 if let Some(multi) = opts.output.multi {
93 if opts.output.create_output_dirs {
94 let mut dir = multi.clone();
95 dir.pop();
96 create_dir_all(dir)?;
97 }
98 for (file, data) in state.manifest_multi(val)?.iter() {
99 let mut path = multi.clone();
100 path.push(&file as &str);
101 if opts.output.create_output_dirs {
102 let mut dir = path.clone();
103 dir.pop();
104 create_dir_all(dir)?;
105 }
106 let mut file = File::create(path)?;
107 write!(file, "{}", data)?;
108 }
109 } else if let Some(path) = opts.output.output_file {
110 if opts.output.create_output_dirs {
111 let mut dir = path.clone();
112 dir.pop();
113 create_dir_all(dir)?;
114 }
115 let mut file = File::create(path)?;
116 write!(file, "{}", state.manifest(val)?)?;
117 } else {
67 println!("{}", state.manifest(val)?);118 println!("{}", state.manifest(val)?);
119 }
68120
69 Ok(())121 Ok(())
70}122}