From 564a0e8b2ae2998df6aeebb720f5a07e3623abb9 Mon Sep 17 00:00:00 2001 From: Hugh Kaznowski Date: Mon, 7 Sep 2026 10:26:01 +0100 Subject: [PATCH] Extract filter_value_as_f64 helper in compare_json_value Flattens the Number arm's nested target-coercion match into a one-line comparison, matching the shape of the String arm. No behavior change. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01TeyhRfMYjMditek6geDRoQ --- src/engine/snapshot/filter.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/engine/snapshot/filter.rs b/src/engine/snapshot/filter.rs index ab9ad22..d40ac04 100644 --- a/src/engine/snapshot/filter.rs +++ b/src/engine/snapshot/filter.rs @@ -101,18 +101,19 @@ pub(crate) fn eval_json_comparison(text: &str, field: &str, op: CompareOp, value compare_json_value(field_value, op, value) } +fn filter_value_as_f64(value: &FilterValue) -> Option { + match value { + FilterValue::Number(v) => Some(*v), + FilterValue::Raw(raw) => raw.parse::().ok(), + } +} + fn compare_json_value(field_value: &serde_json::Value, op: CompareOp, value: &FilterValue) -> bool { match field_value { - serde_json::Value::Number(n) => { - let target = match value { - FilterValue::Number(v) => Some(*v), - FilterValue::Raw(raw) => raw.parse::().ok(), - }; - match (n.as_f64(), target) { - (Some(f), Some(v)) => f.partial_cmp(&v).is_some_and(|ordering| op.matches(ordering)), - _ => false, - } - } + serde_json::Value::Number(n) => matches!( + (n.as_f64(), filter_value_as_f64(value)), + (Some(f), Some(v)) if f.partial_cmp(&v).is_some_and(|ordering| op.matches(ordering)) + ), serde_json::Value::String(s) => { let target = match value { FilterValue::Raw(raw) => raw.clone(),