use super::create_client_info;
use crate::{ClientError, KodegenClient, KodegenConnection};
use rmcp::{
ServiceExt,
transport::{SseClientTransport, StreamableHttpClientTransport},
};
pub async fn create_http_client(
url: &str,
) -> Result<(KodegenClient, KodegenConnection), ClientError> {
let transport = SseClientTransport::start(url)
.await
.map_err(|e| ClientError::Connection {
message: format!("Failed to connect to SSE endpoint: {e}"),
transport_type: Some(crate::TransportType::Sse),
endpoint: Some(url.to_string()),
})?;
let client_info = create_client_info("kodegen-http-client");
let service = client_info
.serve(transport)
.await?;
let connection = KodegenConnection::from_service(service);
let client = connection.client();
Ok((client, connection))
}
pub async fn create_streamable_client(
url: &str,
) -> Result<(KodegenClient, KodegenConnection), ClientError> {
let transport = StreamableHttpClientTransport::from_uri(url);
let client_info = create_client_info("kodegen-streamable-client");
let service = client_info
.serve(transport)
.await?;
let connection = KodegenConnection::from_service(service);
let client = connection.client();
Ok((client, connection))
}