use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ClientCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub experimental: Option<HashMap<String, serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub roots: Option<RootsCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sampling: Option<SamplingCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub elicitation: Option<ElicitationCapabilities>,
#[cfg(feature = "experimental-tasks")]
#[serde(skip_serializing_if = "Option::is_none")]
pub tasks: Option<ClientTasksCapabilities>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ServerCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub experimental: Option<HashMap<String, serde_json::Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub logging: Option<LoggingCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completions: Option<CompletionCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompts: Option<PromptsCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resources: Option<ResourcesCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<ToolsCapabilities>,
#[cfg(feature = "experimental-tasks")]
#[serde(skip_serializing_if = "Option::is_none")]
pub tasks: Option<ServerTasksCapabilities>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SamplingCapabilities {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct ElicitationCapabilities {
#[serde(rename = "schemaValidation", skip_serializing_if = "Option::is_none")]
pub schema_validation: Option<bool>,
}
impl ElicitationCapabilities {
pub fn with_schema_validation(mut self) -> Self {
self.schema_validation = Some(true);
self
}
pub fn without_schema_validation(mut self) -> Self {
self.schema_validation = Some(false);
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CompletionCapabilities {}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct RootsCapabilities {
#[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
pub list_changed: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct LoggingCapabilities {}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct PromptsCapabilities {
#[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
pub list_changed: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ResourcesCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub subscribe: Option<bool>,
#[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
pub list_changed: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ToolsCapabilities {
#[serde(rename = "listChanged", skip_serializing_if = "Option::is_none")]
pub list_changed: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct ServerTasksCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub list: Option<TasksListCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cancel: Option<TasksCancelCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub requests: Option<ServerTasksRequestsCapabilities>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct ClientTasksCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub list: Option<TasksListCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cancel: Option<TasksCancelCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub requests: Option<ClientTasksRequestsCapabilities>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct TasksListCapabilities {}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct TasksCancelCapabilities {}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct ServerTasksRequestsCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<TasksToolsCapabilities>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct ClientTasksRequestsCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub sampling: Option<TasksSamplingCapabilities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub elicitation: Option<TasksElicitationCapabilities>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct TasksToolsCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub call: Option<TasksToolsCallCapabilities>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct TasksToolsCallCapabilities {}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct TasksSamplingCapabilities {
#[serde(rename = "createMessage", skip_serializing_if = "Option::is_none")]
pub create_message: Option<TasksSamplingCreateMessageCapabilities>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct TasksSamplingCreateMessageCapabilities {}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct TasksElicitationCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub create: Option<TasksElicitationCreateCapabilities>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg(feature = "experimental-tasks")]
pub struct TasksElicitationCreateCapabilities {}