use std::sync::Arc;
use serde_json::Value;
use trusty_common::uds::server::{RpcError, RpcRouter};
use crate::daemon::build_lease_routes::log_decision_op;
use crate::daemon::builder_slot_routes::RETIRED_MESSAGE;
use crate::daemon::error::CODE_GONE;
use crate::daemon::managed_routes::adopt_worktree::{AdoptWorktreeRequest, adopt_worktree_core};
use crate::daemon::state::DaemonState;
#[cfg(test)]
#[path = "cli_socket_tests.rs"]
mod tests;
pub const METHODS: &[&str] = &[
"mpm.build_lease.decision",
"mpm.builder_slot.claim",
"mpm.builder_slot.list",
"mpm.managed.adopt_worktree",
];
pub fn register(router: RpcRouter, state: &Arc<DaemonState>) -> RpcRouter {
let adopt_state = Arc::clone(state);
router
.typed("mpm.build_lease.decision", |body: Value| async move {
log_decision_op(&body);
Ok(serde_json::json!({}))
})
.typed("mpm.builder_slot.claim", |_: Value| async move {
Err::<Value, _>(RpcError::new(CODE_GONE, RETIRED_MESSAGE))
})
.typed("mpm.builder_slot.list", |_: Value| async move {
Err::<Value, _>(RpcError::new(CODE_GONE, RETIRED_MESSAGE))
})
.typed(
"mpm.managed.adopt_worktree",
move |req: AdoptWorktreeRequest| {
let state = Arc::clone(&adopt_state);
async move { adopt_worktree_core(&state, req).await.into_rpc() }
},
)
}