use crate::client_objectiveai_mcp::{server_request, server_response};
use std::future::Future;
pub trait McpHandler: Send + Sync + 'static {
fn handle(
&self,
request: server_request::Request,
) -> impl Future<Output = server_response::Response> + Send;
}
#[derive(Debug, Clone, Copy, Default)]
pub struct RejectHandler;
impl McpHandler for RejectHandler {
async fn handle(
&self,
request: server_request::Request,
) -> server_response::Response {
use server_response::{JsonRpcResult, Payload};
const CODE: i64 = -32601;
const MESSAGE: &str = "this client does not host objectiveai-mcp";
let payload = match request.payload {
server_request::Payload::Initialize(_) => Payload::Initialize(JsonRpcResult::Err {
code: CODE,
message: MESSAGE.into(),
data: None,
}),
server_request::Payload::ToolsList(_) => Payload::ToolsList(JsonRpcResult::Err {
code: CODE,
message: MESSAGE.into(),
data: None,
}),
server_request::Payload::ToolsCall(_) => Payload::ToolsCall(JsonRpcResult::Err {
code: CODE,
message: MESSAGE.into(),
data: None,
}),
server_request::Payload::ResourcesList(_) => Payload::ResourcesList(JsonRpcResult::Err {
code: CODE,
message: MESSAGE.into(),
data: None,
}),
server_request::Payload::ResourcesRead(_) => Payload::ResourcesRead(JsonRpcResult::Err {
code: CODE,
message: MESSAGE.into(),
data: None,
}),
server_request::Payload::SessionTerminate => Payload::SessionTerminate(JsonRpcResult::Err {
code: CODE,
message: MESSAGE.into(),
data: None,
}),
};
server_response::Response {
id: request.id,
mcp_kind: request.mcp_kind,
payload,
}
}
}