use crate::mcp::{Cursor, GenericMeta}; use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Implementation {
pub name: String,
pub version: String,
}
impl Implementation {
pub fn new(name: impl Into<String>, version: impl Into<String>) -> Self {
Self {
name: name.into(),
version: version.into(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct PaginationParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub cursor: Option<Cursor>,
}
impl PaginationParams {
pub fn new() -> Self {
Self::default()
}
pub fn with_cursor(mut self, cursor: impl Into<Cursor>) -> Self {
self.cursor = Some(cursor.into());
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum IncludeContext {
None,
ThisServer,
AllServers,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct Annotations {
pub audience: Option<Vec<Role>>,
pub priority: Option<f64>,
}
impl Annotations {
pub fn new() -> Self {
Self::default()
}
pub fn with_audience(mut self, audience: Vec<Role>) -> Self {
self.audience = Some(audience);
self
}
pub fn append_audience(mut self, role: Role) -> Self {
self.audience.get_or_insert_with(Vec::new).push(role);
self
}
pub fn with_priority(mut self, priority: f64) -> Self {
self.priority = Some(priority);
self
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum Role {
User,
Assistant,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct EmptyResult {
#[serde(rename = "_meta")]
pub meta: Option<GenericMeta>,
}
impl EmptyResult {
pub fn new() -> Self {
Self::default()
}
pub fn with_meta(mut self, meta: GenericMeta) -> Self {
self.meta = Some(meta);
self
}
}