use tokio::io::BufReader;
use turbomcp_core::error::McpResult;
use turbomcp_core::handler::McpHandler;
use super::line::LineTransportRunner;
use crate::config::ServerConfig;
use crate::context::RequestContext;
pub async fn run<H: McpHandler>(handler: &H) -> McpResult<()> {
handler.on_initialize().await?;
let stdin = tokio::io::stdin();
let stdout = tokio::io::stdout();
let reader = BufReader::new(stdin);
let runner = LineTransportRunner::new(handler.clone());
let result = runner.run(reader, stdout, RequestContext::stdio).await;
handler.on_shutdown().await?;
result
}
pub async fn run_with_config<H: McpHandler>(handler: &H, config: &ServerConfig) -> McpResult<()> {
handler.on_initialize().await?;
let stdin = tokio::io::stdin();
let stdout = tokio::io::stdout();
let reader = BufReader::new(stdin);
let runner = LineTransportRunner::with_config(handler.clone(), config.clone());
let result = runner.run(reader, stdout, RequestContext::stdio).await;
handler.on_shutdown().await?;
result
}
#[cfg(test)]
mod tests {
}