soma_gateway/config/
virtual_servers.rs1use 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;