#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)]
pub struct InitializeRequest {
#[serde(rename = "protocolVersion")]
pub protocol_version: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub capabilities: Option<ClientCapabilities>,
#[serde(skip_serializing_if = "Option::is_none", rename = "clientInfo")]
pub client_info: Option<ClientInfo>,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, Debug, Default)]
pub struct ClientCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub experimental: Option<serde_json::Value>,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)]
pub struct ClientInfo {
pub name: String,
pub version: String,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)]
pub struct InitializeResult {
#[serde(rename = "protocolVersion")]
pub protocol_version: String,
pub capabilities: super::capabilities::ServerCapabilities,
#[serde(rename = "serverInfo")]
pub server_info: ServerInfo,
}
impl InitializeResult {
pub fn hexser_default() -> Self {
InitializeResult {
protocol_version: String::from("2024-11-05"),
capabilities: super::capabilities::ServerCapabilities::hexser_default(),
server_info: ServerInfo::hexser_default(),
}
}
}
#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)]
pub struct ServerInfo {
pub name: String,
pub version: String,
}
impl ServerInfo {
pub fn hexser_default() -> Self {
ServerInfo {
name: String::from("hexser-mcp-server"),
version: String::from(env!("CARGO_PKG_VERSION")),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_initialize_request_deserialization() {
let json = r#"{
"protocolVersion": "2024-11-05",
"clientInfo": {
"name": "test-client",
"version": "1.0.0"
}
}"#;
let req: InitializeRequest = serde_json::from_str(json).unwrap();
std::assert_eq!(req.protocol_version, "2024-11-05");
std::assert!(req.client_info.is_some());
}
#[test]
fn test_initialize_result_serialization() {
let result = InitializeResult::hexser_default();
let json = serde_json::to_string(&result).unwrap();
std::assert!(json.contains("\"protocolVersion\":\"2024-11-05\""));
std::assert!(json.contains("\"serverInfo\""));
std::assert!(json.contains("\"capabilities\""));
}
#[test]
fn test_server_info_default() {
let info = ServerInfo::hexser_default();
std::assert_eq!(info.name, "hexser-mcp-server");
std::assert!(!info.version.is_empty());
}
}