#[derive(serde::Serialize, serde::Deserialize, Clone, Debug)]
pub struct ServerCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub resources: Option<ResourceCapability>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<ToolCapability>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompts: Option<PromptCapability>,
}
impl ServerCapabilities {
pub fn hexser_default() -> Self {
ServerCapabilities {
resources: Some(ResourceCapability::default()),
tools: None,
prompts: None,
}
}
}
#[derive(serde::Serialize, serde::Deserialize, Clone, Debug, Default)]
pub struct ResourceCapability {
#[serde(skip_serializing_if = "Option::is_none")]
pub subscribe: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub list_changed: Option<bool>,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, Debug, Default)]
pub struct ToolCapability {
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, Debug, Default)]
pub struct PromptCapability {
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_capabilities_serialization() {
let caps = ServerCapabilities::hexser_default();
let json = serde_json::to_string(&caps).unwrap();
std::assert!(json.contains("\"resources\""));
std::assert!(!json.contains("\"tools\""));
std::assert!(!json.contains("\"prompts\""));
}
#[test]
fn test_resource_capability_default() {
let res_cap = ResourceCapability::default();
let json = serde_json::to_string(&res_cap).unwrap();
std::assert_eq!(json, "{}");
}
}