convert2json/
lib.rs

1pub mod csv;
2pub mod jq;
3pub mod json;
4pub mod string;
5pub mod xml;
6pub mod yaml;
7
8extern crate serde_json;
9use std::io::{stdin, IsTerminal, StdinLock};
10use std::process::exit;
11
12// Error exit codes, starting at 1
13#[repr(u8)]
14pub enum Error {
15    InputParsing = 1,
16    InputReading,
17    FileOpening,
18    FileReading,
19    JqCalling,
20    JqPiping,
21    JqWaiting,
22    OutputSerialization,
23    ArgumentParsing,
24    JaqCalling,
25    JaqPiping,
26    JaqWaiting,
27}
28
29pub fn stdin_reader() -> StdinLock<'static> {
30    let stdin = stdin();
31    if stdin.is_terminal() {
32        eprintln!("Error reading input: Did you forget to pipe something into us?");
33        exit(Error::InputReading as i32);
34    }
35    stdin.lock()
36}
37
38pub fn to_value<E>(input: &Result<serde_json::Value, E>) -> &serde_json::Value
39where
40    E: ToString,
41{
42    match input {
43        Ok(data) => data,
44        Err(e) => {
45            // these give more detailed information using to_string() over std::fmt::display
46            eprintln!("Error parsing input: {}", e.to_string());
47            exit(Error::InputParsing as i32);
48        }
49    }
50}