soma_mcp_client/process/
stdio.rs1use 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;