| 353 | } |
| 354 | |
| 355 | fn parse_decode_result(s: &str) -> Option<DecodeResult> { |
| 356 | let v: serde_json::Value = serde_json::from_str(s).ok()?; |
| 357 | let payload = v.get("payload")?.clone(); |
| 358 | let rules_applied_count = v.get("rules_applied_count")?.as_u64()? as u32; |
| 359 | let rule_names: Vec<String> = v |
| 360 | .get("rule_names")? |
| 361 | .as_array()? |
| 362 | .iter() |
| 363 | .filter_map(|x| x.as_str().map(String::from)) |
| 364 | .collect(); |
| 365 | let policy_name = v.get("policy_name")?.as_str()?.to_string(); |
| 366 | Some(DecodeResult { |
| 367 | payload, |
| 368 | rules_applied_count, |
| 369 | rule_names, |
| 370 | policy_name, |
| 371 | }) |
| 372 | } |
| 373 | |
| 374 | /// Singleton entry point to create enforcers. |
| 375 | #[derive(Debug, Clone)] |