rsigma_runtime/input/
json.rs1use rsigma_eval::JsonEvent;
7
8use super::EventInputDecoded;
9
10pub fn parse_json(line: &str) -> Option<EventInputDecoded> {
12 let value: serde_json::Value = serde_json::from_str(line).ok()?;
13 Some(EventInputDecoded::Json(JsonEvent::owned(value)))
14}
15
16#[cfg(test)]
17mod tests {
18 use super::*;
19 use rsigma_eval::Event;
20
21 #[test]
22 fn valid_json_object() {
23 let decoded = parse_json(r#"{"EventID": 1, "host": "web01"}"#).unwrap();
24 assert!(decoded.get_field("EventID").is_some());
25 assert!(decoded.get_field("host").is_some());
26 }
27
28 #[test]
29 fn invalid_json_returns_none() {
30 assert!(parse_json("not json").is_none());
31 }
32
33 #[test]
34 fn gelf_message() {
35 let gelf = r#"{"version":"1.1","host":"example.org","short_message":"A short message","_user_id":"9001"}"#;
36 let decoded = parse_json(gelf).unwrap();
37 assert!(decoded.get_field("version").is_some());
38 assert!(decoded.get_field("_user_id").is_some());
39 }
40
41 #[test]
42 fn empty_string_returns_none() {
43 assert!(parse_json("").is_none());
44 }
45}