use std::sync::Arc;
use crate::{
DynConnectTo,
mcp_server::McpConnectionTo,
role::{self, Role},
};
pub trait McpServerConnect<Counterpart: Role>: Send + Sync + 'static {
fn name(&self) -> String;
fn connect(&self, cx: McpConnectionTo<Counterpart>) -> DynConnectTo<role::mcp::Client>;
}
impl<Counterpart: Role, S: ?Sized + McpServerConnect<Counterpart>> McpServerConnect<Counterpart>
for Box<S>
{
fn name(&self) -> String {
S::name(self)
}
fn connect(&self, cx: McpConnectionTo<Counterpart>) -> DynConnectTo<role::mcp::Client> {
S::connect(self, cx)
}
}
impl<Counterpart: Role, S: ?Sized + McpServerConnect<Counterpart>> McpServerConnect<Counterpart>
for Arc<S>
{
fn name(&self) -> String {
S::name(self)
}
fn connect(&self, cx: McpConnectionTo<Counterpart>) -> DynConnectTo<role::mcp::Client> {
S::connect(self, cx)
}
}