()
| 17 | i18n!("locales", fallback = "en-us"); |
| 18 | |
| 19 | fn main() { |
| 20 | let args = Arguments::parse(); |
| 21 | let trace_level = match args.trace_level { |
| 22 | Some(trace_level) => trace_level, |
| 23 | None => { |
| 24 | // get from DSC_TRACE_LEVEL env var |
| 25 | if let Ok(trace_level) = std::env::var("DSC_TRACE_LEVEL") { |
| 26 | match trace_level.to_lowercase().as_str() { |
| 27 | "error" => TraceLevel::Error, |
| 28 | "warn" => TraceLevel::Warn, |
| 29 | "info" => TraceLevel::Info, |
| 30 | "debug" => TraceLevel::Debug, |
| 31 | "trace" => TraceLevel::Trace, |
| 32 | _ => { |
| 33 | warn!("{}: {trace_level}", t!("main.invalidTraceLevel")); |
| 34 | TraceLevel::Info |
| 35 | } |
| 36 | } |
| 37 | } else { |
| 38 | // default to info |
| 39 | TraceLevel::Info |
| 40 | } |
| 41 | } |
| 42 | }; |
| 43 | enable_tracing(&trace_level, &args.trace_format); |
| 44 | warn!("{}", t!("main.notIdempotent")); |
| 45 | |
| 46 | let stdin = if std::io::stdin().is_terminal() { |
| 47 | None |
| 48 | } else { |
| 49 | debug!("{}", t!("main.readStdin")); |
| 50 | let mut buffer: Vec<u8> = Vec::new(); |
| 51 | io::stdin().read_to_end(&mut buffer).unwrap(); |
| 52 | let stdin = match String::from_utf8(buffer) { |
| 53 | Ok(stdin) => stdin, |
| 54 | Err(e) => { |
| 55 | error!("{}: {e}", t!("main.invalidUtf8")); |
| 56 | exit(EXIT_INVALID_ARGS); |
| 57 | }, |
| 58 | }; |
| 59 | // parse_input expects at most 1 input, so wrapping Some(empty input) would throw it off |
| 60 | if stdin.is_empty() { |
| 61 | debug!("{}", t!("main.emptyStdin")); |
| 62 | None |
| 63 | } |
| 64 | else { |
| 65 | Some(stdin) |
| 66 | } |
| 67 | }; |
| 68 | |
| 69 | let mut command: RunCommand; |
| 70 | |
| 71 | match args.subcommand { |
| 72 | SubCommand::Get { arguments, executable, exit_code } => { |
| 73 | command = parse_input(arguments, executable, exit_code, stdin); |
| 74 | } |
| 75 | SubCommand::Set { arguments, executable, exit_code } => { |
| 76 | command = parse_input(arguments, executable, exit_code, stdin); |
nothing calls this directly
no test coverage detected