use std::io::{self, Read};
use std::path::PathBuf;
use std::process;
use rsigma_parser::{parse_sigma_file, parse_sigma_yaml};
pub(crate) fn cmd_parse(path: PathBuf, pretty: bool) {
match parse_sigma_file(&path) {
Ok(collection) => {
crate::print_warnings(&collection.errors);
crate::print_json(&collection, pretty);
}
Err(e) => {
eprintln!("Error parsing {}: {e}", path.display());
process::exit(crate::exit_code::RULE_ERROR);
}
}
}
pub(crate) fn cmd_condition(expr: String) {
match rsigma_parser::parse_condition(&expr) {
Ok(ast) => crate::print_json(&ast, true),
Err(e) => {
eprintln!("Condition parse error: {e}");
process::exit(crate::exit_code::RULE_ERROR);
}
}
}
pub(crate) fn cmd_stdin(pretty: bool) {
let mut input = String::new();
if let Err(e) = io::stdin().read_to_string(&mut input) {
eprintln!("Error reading stdin: {e}");
process::exit(crate::exit_code::RULE_ERROR);
}
match parse_sigma_yaml(&input) {
Ok(collection) => {
crate::print_warnings(&collection.errors);
crate::print_json(&collection, pretty);
}
Err(e) => {
eprintln!("Parse error: {e}");
process::exit(crate::exit_code::RULE_ERROR);
}
}
}