use crate::error::Result;
use crate::shared::cancellation::RequestHandlerExtra;
use crate::types::{
CallToolResult, CreateMessageParams, CreateMessageResult, GetPromptResult,
ListResourcesResult, ListToolsResult, ReadResourceResult,
};
use async_trait::async_trait;
use serde_json::Value;
use std::collections::HashMap;
#[async_trait]
pub trait RequestHandler:
ToolHandler + PromptHandler + ResourceHandler + SamplingHandler + Send + Sync
{
}
#[async_trait]
pub trait ToolHandler: Send + Sync {
async fn list_tools(&self, _req: crate::types::ListToolsRequest) -> Result<ListToolsResult> {
Ok(ListToolsResult {
tools: vec![],
next_cursor: None,
})
}
async fn call_tool(&self, req: crate::types::CallToolRequest) -> Result<CallToolResult>;
}
#[async_trait]
pub trait PromptHandler: Send + Sync {
async fn handle(
&self,
args: HashMap<String, String>,
extra: RequestHandlerExtra,
) -> Result<GetPromptResult>;
}
#[async_trait]
pub trait ResourceHandler: Send + Sync {
async fn read(&self, uri: &str, extra: RequestHandlerExtra) -> Result<ReadResourceResult>;
async fn list(&self, cursor: Option<String>, extra: RequestHandlerExtra)
-> Result<ListResourcesResult>;
}
#[async_trait]
pub trait SamplingHandler: Send + Sync {
async fn create_message(
&self,
params: CreateMessageParams,
extra: RequestHandlerExtra,
) -> Result<CreateMessageResult>;
}