use super::Result;
use super::comm_trx::TransportTrx;
use crate::mcp::client::transport::ClientHttpTransport;
use crate::mcp::client::transport::stdio::ClientStdioTransport;
use crate::mcp::client::{self, ClientStdioTransportConfig};
use crate::mcp::client::{ClientHttpTransportConfig, IntoClientTransport};
use derive_more::From;
#[derive(From)]
pub enum ClientTransport {
StdioTransport(ClientStdioTransport),
HttpTransport(ClientHttpTransport),
}
impl ClientTransport {
pub(crate) async fn start(&mut self, transport_trx: TransportTrx) -> Result<()> {
match self {
ClientTransport::StdioTransport(transport) => transport.start(transport_trx).await?,
ClientTransport::HttpTransport(transport) => transport.start(transport_trx).await?,
};
Ok(())
}
}
impl From<ClientStdioTransportConfig> for ClientTransport {
fn from(config: ClientStdioTransportConfig) -> Self {
let transport = ClientStdioTransport::from(config);
transport.into()
}
}
impl From<ClientHttpTransportConfig> for ClientTransport {
fn from(config: ClientHttpTransportConfig) -> Self {
let transport = ClientHttpTransport::from(config);
transport.into()
}
}
impl IntoClientTransport for ClientStdioTransportConfig {
fn into_client_transport(self) -> ClientTransport {
ClientTransport::from(self)
}
}
impl client::into_client_transport::Sealed for ClientStdioTransportConfig {}
impl IntoClientTransport for ClientHttpTransportConfig {
fn into_client_transport(self) -> ClientTransport {
ClientTransport::from(self)
}
}
impl client::into_client_transport::Sealed for ClientHttpTransportConfig {}
impl IntoClientTransport for ClientTransport {
fn into_client_transport(self) -> ClientTransport {
self
}
}
impl client::into_client_transport::Sealed for ClientTransport {}