use crate::detect::error::RuleParseError;
use nom7::bytes::complete::is_not;
use nom7::character::complete::multispace0;
use nom7::sequence::preceded;
use nom7::IResult;
#[derive(Debug)]
pub enum ResultValue {
Numeric(u64),
String(String),
}
static WHITESPACE: &str = " \t\r\n";
pub fn take_until_whitespace(input: &str) -> IResult<&str, &str, RuleParseError<&str>> {
nom7::bytes::complete::is_not(WHITESPACE)(input)
}
pub fn parse_var(input: &str) -> IResult<&str, ResultValue, RuleParseError<&str>> {
let (input, value) = parse_token(input)?;
if let Ok(val) = value.parse::<u64>() {
Ok((input, ResultValue::Numeric(val)))
} else {
Ok((input, ResultValue::String(value.to_string())))
}
}
pub fn parse_token(input: &str) -> IResult<&str, &str, RuleParseError<&str>> {
let terminators = "\n\r\t,;: ";
preceded(multispace0, is_not(terminators))(input)
}