use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::capabilities::ClientCapabilities;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InitializeRequest {
#[serde(rename = "protocolVersion")]
pub protocol_version: String,
#[serde(default)]
pub capabilities: ClientCapabilities,
#[serde(rename = "clientInfo", default)]
pub client_info: Option<ClientInfo>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ClientInfo {
pub name: String,
#[serde(default)]
pub version: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ToolsListRequest {
#[serde(default)]
pub cursor: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ToolsCallRequest {
pub name: String,
#[serde(default)]
pub arguments: Value,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ResourcesListRequest {
#[serde(default)]
pub cursor: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PromptsListRequest {
#[serde(default)]
pub cursor: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
#[test]
fn test_initialize_request_deser() {
let val = json!({
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "test-client", "version": "1.0" }
});
let req: Result<InitializeRequest, _> = serde_json::from_value(val);
assert!(req.is_ok());
let req = req.unwrap_or_else(|_| panic!("deser failed"));
assert_eq!(req.protocol_version, "2024-11-05");
}
#[test]
fn test_tools_call_request_deser() {
let val = json!({
"name": "reality_deployment",
"arguments": { "operation": "get" }
});
let req: Result<ToolsCallRequest, _> = serde_json::from_value(val);
assert!(req.is_ok());
}
#[test]
fn test_tools_list_request_default() {
let req = ToolsListRequest::default();
assert!(req.cursor.is_none());
}
#[test]
fn test_resources_list_request_default() {
let req = ResourcesListRequest::default();
assert!(req.cursor.is_none());
}
#[test]
fn test_prompts_list_request_default() {
let req = PromptsListRequest::default();
assert!(req.cursor.is_none());
}
}