forge_runtime/gateway/
request.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct RpcRequest {
6 pub function: String,
8 #[serde(default)]
10 pub args: serde_json::Value,
11}
12
13impl RpcRequest {
14 pub fn new(function: impl Into<String>, args: serde_json::Value) -> Self {
16 Self {
17 function: function.into(),
18 args,
19 }
20 }
21}
22
23#[allow(dead_code)]
25#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct BatchRpcRequest {
27 pub requests: Vec<RpcRequest>,
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn test_rpc_request_deserialization() {
37 let json = r#"{"function": "getUser", "args": {"id": "123"}}"#;
38 let req: RpcRequest = serde_json::from_str(json).unwrap();
39 assert_eq!(req.function, "getUser");
40 assert_eq!(req.args["id"], "123");
41 }
42
43 #[test]
44 fn test_rpc_request_default_args() {
45 let json = r#"{"function": "healthCheck"}"#;
46 let req: RpcRequest = serde_json::from_str(json).unwrap();
47 assert_eq!(req.function, "healthCheck");
48 assert!(req.args.is_null());
49 }
50
51 #[test]
52 fn test_batch_request() {
53 let json = r#"{"requests": [{"function": "a"}, {"function": "b"}]}"#;
54 let batch: BatchRpcRequest = serde_json::from_str(json).unwrap();
55 assert_eq!(batch.requests.len(), 2);
56 }
57}