Skip to main content

soma_mcp_client/upstream/pool/
connect_stdio.rs

1use 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;