soma_mcp_client/upstream/pool/
connect_stdio.rs1use thiserror::Error;
2
3use crate::config::UpstreamConfig;
4use crate::process::guard::{SpawnGuard, SpawnGuardError};
5use crate::process::stdio::{StdioProcessSpec, StdioSpecError};
6
7#[derive(Debug, Error, PartialEq, Eq)]
8pub enum ConnectStdioError {
9 #[error("upstream is not configured for stdio")]
10 NotStdio,
11 #[error(transparent)]
12 Spec(#[from] StdioSpecError),
13 #[error(transparent)]
14 Guard(#[from] SpawnGuardError),
15}
16
17pub fn plan_stdio_connection(
18 config: &UpstreamConfig,
19 guard: &SpawnGuard,
20) -> Result<StdioProcessSpec, ConnectStdioError> {
21 let command = config.command.clone().ok_or(ConnectStdioError::NotStdio)?;
22 let spec = StdioProcessSpec {
23 command,
24 args: config.args.clone(),
25 env: config.env.clone(),
26 };
27 spec.validate(guard)?;
28 Ok(spec)
29}
30
31#[cfg(test)]
32#[path = "connect_stdio_tests.rs"]
33mod tests;