Skip to main content

soma_mcp_client/process/
stdio.rs

1use std::collections::BTreeMap;
2
3use thiserror::Error;
4
5use super::guard::{SpawnGuard, SpawnGuardError};
6use crate::security::env::{self, EnvPolicyError};
7
8#[derive(Debug, Clone, PartialEq, Eq)]
9pub struct StdioProcessSpec {
10    pub command: String,
11    pub args: Vec<String>,
12    pub env: BTreeMap<String, String>,
13}
14
15#[derive(Debug, Error, PartialEq, Eq)]
16pub enum StdioSpecError {
17    #[error(transparent)]
18    Guard(#[from] SpawnGuardError),
19    #[error(transparent)]
20    Env(#[from] EnvPolicyError),
21}
22
23impl StdioProcessSpec {
24    pub fn validate(&self, guard: &SpawnGuard) -> Result<(), StdioSpecError> {
25        guard.validate_command(&self.command)?;
26        env::validate_spawn_env(&self.env)?;
27        env::reject_spawn_guard_overrides(&self.args)?;
28        Ok(())
29    }
30}
31
32#[cfg(test)]
33#[path = "stdio_tests.rs"]
34mod tests;