Browse Source

rpc: Support JsonRequest params as maps.

Internally we convert them to an array of len 1.
parazyd 2 years ago
parent
commit
6be651c408
2 changed files with 18 additions and 3 deletions
  1. 14 2
      src/rpc/jsonrpc.rs
  2. 4 1
      src/rpc/server.rs

+ 14 - 2
src/rpc/jsonrpc.rs

@@ -213,17 +213,29 @@ impl TryFrom<&JsonValue> for JsonRequest {
             ))
         }
 
-        if !map.contains_key("params") || !map["params"].is_array() {
+        if !map.contains_key("params")
+        /* || !map["params"].is_array() */
+        {
             return Err(RpcError::InvalidJson(
                 "Request does not contain valid \"params\" field".to_string(),
             ))
         }
 
+        let params = if map["params"].is_object() {
+            JsonValue::Array(vec![map["params"].clone()])
+        } else if map["params"].is_array() {
+            map["params"].clone().into()
+        } else {
+            return Err(RpcError::InvalidJson(
+                "Request does not contain valid \"params\" field".to_string(),
+            ))
+        };
+
         Ok(Self {
             jsonrpc: "2.0",
             id: *map["id"].get::<f64>().unwrap() as u16,
             method: map["method"].get::<String>().unwrap().clone(),
-            params: map["params"].clone(),
+            params,
         })
     }
 }

+ 4 - 1
src/rpc/server.rs

@@ -93,8 +93,11 @@ pub async fn accept(
     loop {
         let mut buf = Vec::with_capacity(INIT_BUF_SIZE);
         let _ = read_from_stream(&mut stream, &mut buf, false).await?;
-        let val: JsonValue = String::from_utf8(buf)?.parse()?;
+        error!("REACHED BEFORE VAL");
+        let val: JsonValue = String::from_utf8(buf)?.trim().parse()?;
+        error!("REACHED AFTER VAL");
         let req = JsonRequest::try_from(&val)?;
+        error!("REACHED AFTER REQ");
 
         debug!(target: "rpc::server", "{} --> {}", addr, val.stringify()?);