matrix-bridge-teams 0.1.0

A bridge between Matrix and Microsoft Teams written in Rust
use crate::config::Config;
use anyhow::{Context, Result};

pub fn validate_config(config: &Config) -> Result<()> {
    validate_bridge_config(&config.bridge)?;
    validate_auth_config(&config.auth)?;
    validate_database_config(&config.database)?;
    Ok(())
}

fn validate_bridge_config(bridge: &crate::config::BridgeConfig) -> Result<()> {
    if bridge.domain.is_empty() {
        anyhow::bail!("bridge.domain cannot be empty");
    }
    if bridge.homeserver_url.is_empty() {
        anyhow::bail!("bridge.homeserver_url cannot be empty");
    }
    if bridge.port == 0 {
        anyhow::bail!("bridge.port cannot be 0");
    }
    Ok(())
}

fn validate_auth_config(auth: &crate::config::AuthConfig) -> Result<()> {
    if auth.tenant_id.is_empty() {
        anyhow::bail!("auth.tenant_id cannot be empty");
    }
    if auth.client_id.is_empty() {
        anyhow::bail!("auth.client_id cannot be empty");
    }
    if auth.client_secret.is_empty() {
        anyhow::bail!("auth.client_secret cannot be empty");
    }
    Ok(())
}

fn validate_database_config(database: &crate::config::DatabaseConfig) -> Result<()> {
    if database.url.is_none() && database.filename.is_none() {
        anyhow::bail!("either database.url or database.filename must be set");
    }
    Ok(())
}