Skip to main content

faucet_source_rest/extract/
jsonpath.rs

1//! JSONPath-based record extraction.
2//!
3//! This module re-exports [`faucet_core::util::extract_records`] for backwards
4//! compatibility. New code should use `faucet_core::util::extract_records`
5//! directly.
6
7pub use faucet_core::util::extract_records;
8
9#[cfg(test)]
10mod tests {
11    use super::*;
12    use serde_json::json;
13
14    #[test]
15    fn test_extract_nested_records() {
16        let body = json!({
17            "data": [
18                {"id": 1, "name": "Alice"},
19                {"id": 2, "name": "Bob"},
20            ],
21            "meta": {"total": 2}
22        });
23        let records = extract_records(&body, Some("$.data[*]")).unwrap();
24        assert_eq!(records.len(), 2);
25        assert_eq!(records[0]["name"], "Alice");
26    }
27
28    #[test]
29    fn test_extract_no_path_array() {
30        let body = json!([{"id": 1}, {"id": 2}]);
31        let records = extract_records(&body, None).unwrap();
32        assert_eq!(records.len(), 2);
33    }
34
35    #[test]
36    fn test_extract_no_path_object() {
37        let body = json!({"id": 1, "name": "Alice"});
38        let records = extract_records(&body, None).unwrap();
39        assert_eq!(records.len(), 1);
40        assert_eq!(records[0]["name"], "Alice");
41    }
42
43    #[test]
44    fn test_extract_empty_result() {
45        let body = json!({"data": []});
46        let records = extract_records(&body, Some("$.data[*]")).unwrap();
47        assert!(records.is_empty());
48    }
49}