use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RpcRequest {
pub function: String,
#[serde(default)]
pub args: serde_json::Value,
}
impl RpcRequest {
pub fn new(function: impl Into<String>, args: serde_json::Value) -> Self {
Self {
function: function.into(),
args,
}
}
}
#[allow(dead_code)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchRpcRequest {
pub requests: Vec<RpcRequest>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_rpc_request_deserialization() {
let json = r#"{"function": "getUser", "args": {"id": "123"}}"#;
let req: RpcRequest = serde_json::from_str(json).unwrap();
assert_eq!(req.function, "getUser");
assert_eq!(req.args["id"], "123");
}
#[test]
fn test_rpc_request_default_args() {
let json = r#"{"function": "healthCheck"}"#;
let req: RpcRequest = serde_json::from_str(json).unwrap();
assert_eq!(req.function, "healthCheck");
assert!(req.args.is_null());
}
#[test]
fn test_batch_request() {
let json = r#"{"requests": [{"function": "a"}, {"function": "b"}]}"#;
let batch: BatchRpcRequest = serde_json::from_str(json).unwrap();
assert_eq!(batch.requests.len(), 2);
}
}