| 328 | } |
| 329 | |
| 330 | fn parse_encode_result(s: &str) -> Option<EncodeResult> { |
| 331 | let v: serde_json::Value = serde_json::from_str(s).ok()?; |
| 332 | let payload = v.get("payload")?.clone(); |
| 333 | let signature_injection_text = v |
| 334 | .get("signature_injection_text") |
| 335 | .and_then(|x| x.as_str()) |
| 336 | .unwrap_or("") |
| 337 | .to_string(); |
| 338 | let rules_applied_count = v.get("rules_applied_count")?.as_u64()? as u32; |
| 339 | let rule_names: Vec<String> = v |
| 340 | .get("rule_names")? |
| 341 | .as_array()? |
| 342 | .iter() |
| 343 | .filter_map(|x| x.as_str().map(String::from)) |
| 344 | .collect(); |
| 345 | let policy_name = v.get("policy_name")?.as_str()?.to_string(); |
| 346 | Some(EncodeResult { |
| 347 | payload, |
| 348 | signature_injection_text, |
| 349 | rules_applied_count, |
| 350 | rule_names, |
| 351 | policy_name, |
| 352 | }) |
| 353 | } |
| 354 | |
| 355 | fn parse_decode_result(s: &str) -> Option<DecodeResult> { |
| 356 | let v: serde_json::Value = serde_json::from_str(s).ok()?; |