1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use crate::command::*;
use serde::Deserialize;
use std::io;

#[derive(Deserialize, Clone, Debug)]
pub struct JsonatrTransform {
    pub input: String,
    pub include: Vec<String>,
    pub output: String,
}

pub fn run_jsonatr_transform(dir: &str, transform: JsonatrTransform) -> io::Result<CommandRun> {
    let mut cmd = Command::new();
    cmd.program("jsonatr");
    cmd.arg("--in");
    cmd.arg(&transform.input);
    cmd.arg("--out");
    cmd.arg(&transform.output);
    for include in transform.include {
        cmd.arg("--use");
        cmd.arg(&include);
    }
    if !dir.is_empty() {
        cmd.current_dir(dir);
    }
    match cmd.spawn() {
        Ok(run) => {
            if run.status.success() {
                Ok(run)
            } else {
                Err(io::Error::new(io::ErrorKind::Interrupted, run.stderr))
            }
        }
        Err(e) => Err(e),
    }
}