fips_core/control/
commands.rs1use super::protocol::Response;
7use crate::node::Node;
8use serde_json::Value;
9use tracing::debug;
10
11pub async fn dispatch(node: &mut Node, command: &str, params: Option<&Value>) -> Response {
13 match command {
14 "connect" => connect(node, params).await,
15 "disconnect" => disconnect(node, params),
16 _ => Response::error(format!("unknown command: {command}")),
17 }
18}
19
20async fn connect(node: &mut Node, params: Option<&Value>) -> Response {
24 let Some(params) = params else {
25 return Response::error("missing params for connect");
26 };
27
28 let npub = match params.get("npub").and_then(|v| v.as_str()) {
29 Some(v) => v,
30 None => return Response::error("missing 'npub' parameter"),
31 };
32 let address = match params.get("address").and_then(|v| v.as_str()) {
33 Some(v) => v,
34 None => return Response::error("missing 'address' parameter"),
35 };
36 let transport = match params.get("transport").and_then(|v| v.as_str()) {
37 Some(v) => v,
38 None => return Response::error("missing 'transport' parameter"),
39 };
40
41 debug!(npub = %npub, address = %address, transport = %transport, "API connect requested");
42
43 match node.api_connect(npub, address, transport).await {
44 Ok(data) => Response::ok(data),
45 Err(msg) => Response::error(msg),
46 }
47}
48
49fn disconnect(node: &mut Node, params: Option<&Value>) -> Response {
53 let Some(params) = params else {
54 return Response::error("missing params for disconnect");
55 };
56
57 let npub = match params.get("npub").and_then(|v| v.as_str()) {
58 Some(v) => v,
59 None => return Response::error("missing 'npub' parameter"),
60 };
61
62 debug!(npub = %npub, "API disconnect requested");
63
64 match node.api_disconnect(npub) {
65 Ok(data) => Response::ok(data),
66 Err(msg) => Response::error(msg),
67 }
68}