use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum CompletionReference {
#[serde(rename = "ref/prompt")]
Prompt {
name: String,
},
#[serde(rename = "ref/resource")]
Resource {
uri: String,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompletionArgument {
pub name: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompleteRequest {
pub r#ref: CompletionReference,
pub argument: CompletionArgument,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompletionResult {
pub values: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total: Option<usize>,
pub has_more: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompleteResponse {
pub completion: CompletionResult,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompletionCompleteParams {
pub r#ref: CompletionReference,
pub argument: CompletionArgument,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompletionCompleteResult {
pub completion: CompletionInfo,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompletionInfo {
pub values: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total: Option<u32>,
#[serde(rename = "hasMore")]
pub has_more: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompletionItem {
pub label: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub detail: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub documentation: Option<String>,
}