Skip to main content

locus_mcp/tools/
get_moods.rs

1use serde_json::json;
2
3use crate::{GetMoodsRequest, SttpMcpServer, avec_to_json, to_json_string};
4
5pub(crate) async fn execute(server: &SttpMcpServer, request: GetMoodsRequest) -> String {
6    let result = server.moods.get(
7        request.target_mood.as_deref(),
8        request.blend,
9        request.current_stability,
10        request.current_friction,
11        request.current_logic,
12        request.current_autonomy,
13    );
14
15    let swap_preview = result.swap_preview.as_ref().map(|preview| {
16        json!({
17            "target_mood": preview.target_mood,
18            "blend": preview.blend,
19            "current": avec_to_json(preview.current),
20            "target": avec_to_json(preview.target),
21            "blended": avec_to_json(preview.blended),
22        })
23    });
24
25    to_json_string(json!({
26        "presets": result
27            .presets
28            .iter()
29            .map(|preset| {
30                json!({
31                    "name": preset.name,
32                    "description": preset.description,
33                    "avec": avec_to_json(preset.avec),
34                })
35            })
36            .collect::<Vec<_>>(),
37        "apply_guide": result.apply_guide,
38        "swap_preview": swap_preview,
39    }))
40}