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});