From ba706a3f1f979fa3e8837d4093bf768798c15bb1 Mon Sep 17 00:00:00 2001 From: Anthony Merlo Date: Fri, 21 Aug 2026 21:09:03 +0100 Subject: [PATCH] fix: translate friendly nutrient keys to OFF keys in log_custom_food log_custom_food's schema documents keys like 'protein', 'fat', 'salt' but sum_nutriments() looks for OFF-style keys ('proteins_100g', 'fat_100g', 'salt_100g'). Nutrients passed with friendly keys were silently dropped from daily totals. Now translates friendly keys to OFF keys before storing. Both key styles work. --- src/tools.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/tools.rs b/src/tools.rs index a5392e0..4c88dd1 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -503,7 +503,32 @@ impl NutritionServer { // Build nutriments JSON — include calories in the energy-kcal_100g field let mut nutriments = params.nutriments.unwrap_or(json!({})); + + // Translate friendly key names (as documented in the schema) to the + // OFF-style _100g keys that sum_nutriments() looks for. Callers may + // also pass OFF keys directly — those pass through unchanged. + let friendly_to_off: &[(&str, &str)] = &[ + ("protein", "proteins_100g"), + ("carbohydrates", "carbohydrates_100g"), + ("fat", "fat_100g"), + ("fiber", "fiber_100g"), + ("sugars", "sugars_100g"), + ("saturated_fat", "saturated-fat_100g"), + ("salt", "salt_100g"), + ("fructose", "fructose_100g"), + ("alcohol", "alcohol_100g"), + ("potassium", "potassium_100g"), + ("calcium", "calcium_100g"), + ("magnesium", "magnesium_100g"), + ("cholesterol", "cholesterol_100g"), + ]; + if let Some(obj) = nutriments.as_object_mut() { + for (friendly, off_key) in friendly_to_off { + if let Some(val) = obj.remove(*friendly) { + obj.entry(off_key.to_string()).or_insert(val); + } + } obj.insert("energy-kcal_100g".to_string(), json!(params.calories)); } else { nutriments = json!({"energy-kcal_100g": params.calories});