use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
use super::common::{
BlobResourceContents, Cursor, Implementation, LoggingLevel, ProgressToken, Prompt,
PromptMessage, Resource, ResourceTemplate, Root, TextResourceContents, Tool,
};
use super::json_rpc::RequestId;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ClientCapabilities {
#[serde(skip_serializing_if = "Option::is_none")]
pub experimental: Option<HashMap<String, Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub roots: Option<RootsCapability>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sampling: Option<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RootsCapability {
#[serde(skip_serializing_if = "Option::is_none")]
pub list_changed: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InitializeRequest {
pub method: String,
pub params: InitializeParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InitializeParams {
pub protocol_version: String,
pub capabilities: ClientCapabilities,
pub client_info: Implementation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InitializedNotification {
pub method: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CancelledNotification {
pub method: String,
pub params: CancelledParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CancelledParams {
pub request_id: RequestId,
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProgressNotification {
pub method: String,
pub params: ProgressParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProgressParams {
pub progress_token: ProgressToken,
pub progress: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub total: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PingRequest {
pub method: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListResourcesRequest {
pub method: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub params: Option<PaginatedParams>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaginatedParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub cursor: Option<Cursor>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListResourcesResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<Cursor>,
pub resources: Vec<Resource>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListResourceTemplatesRequest {
pub method: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub params: Option<PaginatedParams>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListResourceTemplatesResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<Cursor>,
pub resource_templates: Vec<ResourceTemplate>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReadResourceRequest {
pub method: String,
pub params: ReadResourceParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReadResourceParams {
pub uri: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReadResourceResult {
pub contents: Vec<ResourceContent>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ResourceContent {
Text(TextResourceContents),
Blob(BlobResourceContents),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubscribeRequest {
pub method: String,
pub params: SubscribeParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubscribeParams {
pub uri: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UnsubscribeRequest {
pub method: String,
pub params: UnsubscribeParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UnsubscribeParams {
pub uri: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListPromptsRequest {
pub method: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub params: Option<PaginatedParams>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListPromptsResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<Cursor>,
pub prompts: Vec<Prompt>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetPromptRequest {
pub method: String,
pub params: GetPromptParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetPromptParams {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub arguments: Option<HashMap<String, String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GetPromptResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub messages: Vec<PromptMessage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListToolsRequest {
pub method: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub params: Option<PaginatedParams>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListToolsResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub next_cursor: Option<Cursor>,
pub tools: Vec<Tool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CallToolRequest {
pub method: String,
pub params: CallToolParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CallToolParams {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub arguments: Option<HashMap<String, Value>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SetLevelRequest {
pub method: String,
pub params: SetLevelParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SetLevelParams {
pub level: LoggingLevel,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompleteRequest {
pub method: String,
pub params: CompleteParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompleteParams {
pub ref_: Reference,
pub argument: ArgumentInfo,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum Reference {
Prompt(PromptReference),
Resource(ResourceReference),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PromptReference {
pub r#type: String,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceReference {
pub r#type: String,
pub uri: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArgumentInfo {
pub name: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListRootsResult {
pub roots: Vec<Root>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RootsListChangedNotification {
pub method: String,
}