pub fn match_range(range: &str, target: i32) -> bool {
if range.is_empty() {
return true;
}
if let Ok(value) = range.parse::<i32>() {
return target == value;
}
if range.contains('-') {
let parts: Vec<&str> = range.split('-').collect();
if parts.len() == 2 {
let start = parts[0].parse::<i32>().unwrap_or(i32::MIN);
let end = parts[1].parse::<i32>().unwrap_or(i32::MAX);
return target >= start && target <= end;
}
}
if range.starts_with('>') {
if let Ok(value) = range[1..].parse::<i32>() {
return target > value;
}
}
if range.starts_with(">=") {
if let Ok(value) = range[2..].parse::<i32>() {
return target >= value;
}
}
if range.starts_with('<') {
if let Ok(value) = range[1..].parse::<i32>() {
return target < value;
}
}
if range.starts_with("<=") {
if let Ok(value) = range[2..].parse::<i32>() {
return target <= value;
}
}
false
}