xqpath 1.4.3

A high-performance jq-inspired path extractor and updater for structured data in Rust with advanced debugging, configuration management and interactive debugging capabilities
Documentation
#[cfg(test)]
mod debug_tests {

    #[test]
    fn test_basic_query() {
        let data = r#"{"users": [{"name": "Alice"}, {"name": "Bob"}]}"#;
        let result = crate::query!(data, ".users[*].name").unwrap();
        assert_eq!(result.len(), 2);
        assert_eq!(result[0], serde_json::json!("Alice"));
        assert_eq!(result[1], serde_json::json!("Bob"));
    }

    #[cfg(feature = "debug")]
    #[test]
    fn test_debug_functionality() {
        use crate::debug::{DebugContext, LogLevel};

        let ctx = DebugContext::new()
            .with_timing(true)
            .with_memory_tracking(true)
            .with_log_level(LogLevel::Debug);

        assert!(ctx.get_config().timing_enabled);
        assert!(ctx.get_config().memory_tracking);
        assert_eq!(ctx.get_config().log_level, LogLevel::Debug);
    }
    #[cfg(feature = "debug")]
    #[test]
    fn test_trace_query_macro() {
        let data = r#"{"users": [{"name": "Alice"}]}"#;
        let result = crate::trace_query!(data, ".users[*].name");

        assert!(result.is_ok());
        let (values, stats) = result.unwrap();
        assert_eq!(values.len(), 1);
        assert_eq!(values[0], serde_json::json!("Alice"));
        assert!(stats.duration.as_nanos() > 0);
    }

    #[cfg(feature = "debug")]
    #[test]
    fn test_query_debug_macro() {
        let data = r#"{"user": {"name": "Charlie"}}"#;
        let mut debug_called = false;

        let result = crate::query_debug!(
            data,
            ".user.name",
            |debug_info: &crate::debug::DebugInfo| {
                debug_called = true;
                assert!(debug_info.parse_duration.is_some());
                assert!(debug_info.execution_duration.is_some());
                assert_eq!(debug_info.execution_path, "query(.user.name)");
                assert_eq!(debug_info.queries_executed, 1);
            }
        );

        assert!(result.is_ok());
        assert!(debug_called);
        let values = result.unwrap();
        assert_eq!(values.len(), 1);
        assert_eq!(values[0], serde_json::json!("Charlie"));
    }
}