use super::*;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct TransportConfig {
pub stdio: bool,
pub socket: SocketTransportConfig,
#[serde(default)]
pub tcp: TcpTransportConfig,
#[serde(default)]
pub webhook: WebhookTransportConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct TcpTransportConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default)]
pub bind: String,
#[serde(default)]
pub noise: NoiseConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct WebhookTransportConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default = "default_webhook_bind")]
pub bind: String,
#[serde(default = "default_webhook_port")]
pub port: u16,
#[serde(default)]
pub hmac_secret_ref: String,
}
fn default_webhook_bind() -> String {
"127.0.0.1".to_string()
}
fn default_webhook_port() -> u16 {
6789
}
impl Default for WebhookTransportConfig {
fn default() -> Self {
Self {
enabled: false,
bind: default_webhook_bind(),
port: default_webhook_port(),
hmac_secret_ref: String::new(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct NoiseConfig {
pub pattern: String,
}
impl Default for NoiseConfig {
fn default() -> Self {
Self {
pattern: "Noise_XK_25519_ChaChaPoly_BLAKE2s".into(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SocketTransportConfig {
pub enabled: bool,
pub bind: String, #[serde(default, skip_serializing_if = "Option::is_none")]
pub auth: Option<AuthConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct AuthConfig {
pub scheme: String,
pub token_file: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct CommunicationConfig {
#[serde(default = "default_accepts_all")]
pub accepts_from: Vec<String>,
#[serde(default)]
pub sends_to: Vec<String>,
}
fn default_accepts_all() -> Vec<String> {
vec!["*".to_string()]
}