saluki_core/runtime/tree/
api.rs1use saluki_api::{
2 extract::State,
3 response::IntoResponse,
4 routing::{get, Router},
5 APIHandler, Json,
6};
7
8use super::{SupervisionTreeHandle, SUPERVISION_TREE_ROUTE};
9
10#[derive(Clone)]
12pub struct SupervisionTreeState {
13 tree: SupervisionTreeHandle,
14}
15
16pub struct SupervisionTreeAPIHandler {
22 state: SupervisionTreeState,
23}
24
25impl SupervisionTreeAPIHandler {
26 pub(super) fn from_handle(tree: SupervisionTreeHandle) -> Self {
27 Self {
28 state: SupervisionTreeState { tree },
29 }
30 }
31
32 async fn processes_handler(State(state): State<SupervisionTreeState>) -> impl IntoResponse {
33 Json(state.tree.snapshot())
34 }
35}
36
37impl APIHandler for SupervisionTreeAPIHandler {
38 type State = SupervisionTreeState;
39
40 fn generate_initial_state(&self) -> Self::State {
41 self.state.clone()
42 }
43
44 fn generate_routes(&self) -> Router<Self::State> {
45 Router::new().route(SUPERVISION_TREE_ROUTE, get(Self::processes_handler))
46 }
47}