use std::sync::Arc;
use serde::Deserialize;
use serde_json::Value;
use trusty_common::uds::server::RpcRouter;
use crate::daemon::delegation_routes as dg;
use crate::daemon::state::DaemonState;
#[derive(Debug, Deserialize)]
pub struct DispatchParams {
pub id: String,
pub payload: Value,
}
pub fn register(router: RpcRouter, state: &Arc<DaemonState>) -> RpcRouter {
let held = Arc::clone(state);
let r = router.typed::<DispatchParams, dg::SharedTreeWritersResponse, _, _>(
"mpm.delegation.shared_tree_dispatch",
move |p| {
let s = Arc::clone(&held);
async move {
dg::shared_tree_dispatch_op(
&s,
&p.id,
dg::SharedTreeDispatchRequest { payload: p.payload },
)
.map_err(Into::into)
}
},
);
let held = Arc::clone(state);
r.typed::<DispatchParams, dg::SharedTreeWritersResponse, _, _>(
"mpm.delegation.granted_worktree",
move |p| {
let s = Arc::clone(&held);
async move {
dg::granted_worktree_op(
&s,
&p.id,
dg::SharedTreeDispatchRequest { payload: p.payload },
)
.map_err(Into::into)
}
},
)
}