Skip to main content

soma_gateway/config/
virtual_servers.rs

1use serde::{Deserialize, Serialize};
2
3use super::ConfigError;
4
5#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
6pub struct VirtualServerConfig {
7    pub id: String,
8    pub service: String,
9    #[serde(default)]
10    pub enabled: bool,
11    #[serde(default)]
12    pub surfaces: VirtualServerSurfacesConfig,
13    #[serde(default)]
14    pub mcp_policy: Option<VirtualServerMcpPolicyConfig>,
15}
16
17#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
18pub struct VirtualServerSurfacesConfig {
19    #[serde(default)]
20    pub cli: bool,
21    #[serde(default)]
22    pub api: bool,
23    #[serde(default)]
24    pub mcp: bool,
25    #[serde(default)]
26    pub webui: bool,
27}
28
29#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
30pub struct VirtualServerMcpPolicyConfig {
31    #[serde(default)]
32    pub allowed_actions: Vec<String>,
33}
34
35impl VirtualServerConfig {
36    pub fn validate(&self) -> Result<(), ConfigError> {
37        if self.id.trim().is_empty() {
38            return Err(ConfigError::invalid(
39                "virtual_server.id",
40                "must not be empty",
41            ));
42        }
43        if self.service.trim().is_empty() {
44            return Err(ConfigError::invalid(
45                "virtual_server.service",
46                "must not be empty",
47            ));
48        }
49        Ok(())
50    }
51}
52
53#[cfg(test)]
54#[path = "virtual_servers_tests.rs"]
55mod tests;