use std::sync::Arc;
use trusty_common::uds::server::{RpcError, RpcRouter};
use crate::daemon::api::coordinator_routes::{
CoordinatorChatRequest, CoordinatorChatResponse, coordinator_chat_op,
};
use crate::daemon::coordinator::{CoordinatorContext, build_coordinator_context};
use crate::daemon::rpc::registry::NoParams;
use crate::daemon::state::DaemonState;
#[cfg(test)]
#[path = "coordinator_tests.rs"]
mod tests;
pub const METHODS: &[&str] = &["mpm.sessions.chat", "mpm.sessions.context"];
pub fn register(router: RpcRouter, state: &Arc<DaemonState>) -> RpcRouter {
let context_state = Arc::clone(state);
let chat_state = Arc::clone(state);
router
.typed::<NoParams, CoordinatorContext, _, _>("mpm.sessions.context", move |_| {
let state = Arc::clone(&context_state);
async move { Ok(build_coordinator_context(&state)) }
})
.typed::<CoordinatorChatRequest, CoordinatorChatResponse, _, _>(
"mpm.sessions.chat",
move |body| {
let state = Arc::clone(&chat_state);
async move {
coordinator_chat_op(&state, body)
.await
.map_err(RpcError::from)
}
},
)
}