use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize)]
pub struct BridgeRequest {
pub command: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub args: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
pub struct BridgeResponse<T = serde_json::Value> {
pub status: String,
pub data: Option<T>,
#[serde(default)]
pub message: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_request_serialization() {
let request = BridgeRequest {
command: "ping".to_string(),
args: None,
};
let json = serde_json::to_string(&request).unwrap();
assert!(json.contains("ping"));
assert!(!json.contains("args"));
}
#[test]
fn test_request_with_args() {
let request = BridgeRequest {
command: "list_functions".to_string(),
args: Some(serde_json::json!({"limit": 100})),
};
let json = serde_json::to_string(&request).unwrap();
assert!(json.contains("list_functions"));
assert!(json.contains("100"));
}
#[test]
fn test_response_deserialization() {
let json = r#"{"status":"success","data":{"count":42}}"#;
let response: BridgeResponse = serde_json::from_str(json).unwrap();
assert_eq!(response.status, "success");
assert!(response.data.is_some());
}
#[test]
fn test_error_response() {
let json = r#"{"status":"error","message":"Something went wrong"}"#;
let response: BridgeResponse = serde_json::from_str(json).unwrap();
assert_eq!(response.status, "error");
assert_eq!(response.message.as_ref().unwrap(), "Something went wrong");
}
}