locus_mcp/tools/
get_moods.rs1use 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}