modality_network_node/reqres/
mod.rs1use anyhow::Result;
2use libp2p::request_response;
3mod consensus;
4mod ping;
5
6#[allow(dead_code)]
7pub const PROTOCOL: &str = "/modality-network/reqres/0.0.1";
8#[allow(dead_code)]
9pub const PROTOCOL_VERSION: &str = "0.0.1";
10#[allow(dead_code)]
11pub const PROTOCOL_PREFIX: &str = "modality-network";
12#[allow(dead_code)]
13pub const PROTOCOL_NAME: &str = "reqres";
14
15pub type Behaviour = request_response::json::Behaviour::<Request, Response>;
16
17#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
18pub struct Request {
19 pub path: String,
20 pub data: Option<serde_json::Value>,
21}
22
23#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
24pub struct Response {
25 pub ok: bool,
26 pub data: Option<serde_json::Value>,
27 pub errors: Option<serde_json::Value>
28}
29
30pub async fn handle_request(req: Request) -> Result<Response> {
31 log::info!("Handling request: {:?}", req);
32 let path = req.path;
33 let data = req.data.unwrap_or_default();
34 let response = match path.as_str() {
35 "/ping" => {
36 ping::handler(Some(data.clone())).await?
37 },
38 "/consensus/status" => {
39 consensus::status::handler(Some(data.clone())).await?
40 }
41 _ => {
42 Response {
43 ok: false,
44 data: None,
45 errors: Some(serde_json::json!({"error": "Unknown path"}))
46 }
47 }
48 };
49 log::info!("Response: {:?}", response);
50 Ok(response)
51}