Skip to content
Clone
194c44c
146 lines 4.3 KB Rust
pub mod agents;
pub mod ai;
pub mod aihost;
pub mod apihost;
pub mod auth;
pub mod chat;
pub mod ci;
pub mod database;
pub mod email;
pub mod email_queue;
pub mod git;
pub mod githost;
pub mod health;
pub mod im;
pub mod import;
pub mod internal;
pub mod issues;
pub mod livekit;
pub mod mcp;
pub mod oauth;
pub mod pow;
pub mod push;
pub mod quota;
pub mod redis;
pub mod runner;
pub mod s3;
pub mod sandbox_rpc;
pub mod scoped;
pub mod search;
pub mod space;
pub mod user;
pub mod web;
pub mod webhook;
pub mod error;
pub mod loader;
pub use error::ConfigError;
use crate::agents::AgentsConfig;
use crate::ai::AiConfig;
use crate::aihost::AiHostServerConfig;
use crate::apihost::ApihostConfig;
use crate::auth::AuthConfig;
use crate::chat::ChatConfig;
use crate::ci::CiConfig;
use crate::database::DatabaseConfig;
use crate::email::EmailConfig;
use crate::email_queue::EmailQueueConfig;
use crate::git::GitConfig;
use crate::githost::GithostConfig;
use crate::health::HealthConfig;
use crate::im::ImServerConfig;
use crate::import::ImportConfig;
use crate::internal::InternalConfig;
use crate::issues::IssueConfig;
use crate::livekit::LiveKitConfig;
use crate::mcp::McpConfig;
use crate::oauth::OAuthConfig;
use crate::pow::PowConfig;
use crate::push::PushConfig;
use crate::redis::RedisConfig;
use crate::runner::RunnerConfig;
use crate::s3::S3Config;
use crate::sandbox_rpc::SandboxRpcConfig;
use crate::search::SearchConfig;
use crate::space::SpaceConfig;
use crate::user::UserConfig;
use crate::web::WebConfig;
use crate::webhook::WebhookConfig;
use serde::Deserialize;
#[derive(Clone, Debug, Default, Deserialize)]
#[serde(default)]
pub struct AppConfig {
pub s3: S3Config,
pub redis: RedisConfig,
pub chat: ChatConfig,
pub database: DatabaseConfig,
pub search: SearchConfig,
pub import: ImportConfig,
pub pow: PowConfig,
pub auth: AuthConfig,
pub web: WebConfig,
pub user: UserConfig,
pub quota: quota::QuotaConfig,
pub space: SpaceConfig,
pub issues: IssueConfig,
pub agents: AgentsConfig,
pub sandbox_rpc: SandboxRpcConfig,
pub livekit: LiveKitConfig,
pub mcp: McpConfig,
pub oauth: OAuthConfig,
pub git: GitConfig,
pub email: EmailConfig,
pub email_queue: EmailQueueConfig,
pub apihost: ApihostConfig,
pub githost: GithostConfig,
pub im: ImServerConfig,
pub health: HealthConfig,
pub internal: InternalConfig,
pub ci: CiConfig,
pub webhook: WebhookConfig,
pub runner: RunnerConfig,
pub ai: AiConfig,
pub aihost: AiHostServerConfig,
pub push: PushConfig,
}
impl AppConfig {
pub fn load() -> Result<Self, ConfigError> {
crate::loader::load_default()
}
pub fn validate(&self) -> Result<(), ConfigError> {
self.redis.validate().map_err(ConfigError::Validation)?;
self.database.validate().map_err(ConfigError::Validation)?;
self.pow.validate().map_err(ConfigError::Validation)?;
self.auth.validate().map_err(ConfigError::Validation)?;
self.chat.is_valid().map_err(ConfigError::Validation)?;
self.email.is_valid().map_err(ConfigError::Validation)?;
self.email_queue
.is_valid()
.map_err(ConfigError::Validation)?;
self.search.validate().map_err(ConfigError::Validation)?;
self.import.validate().map_err(ConfigError::Validation)?;
self.apihost.is_valid().map_err(ConfigError::Validation)?;
self.githost.is_valid().map_err(ConfigError::Validation)?;
self.im.is_valid().map_err(ConfigError::Validation)?;
self.health.is_valid().map_err(ConfigError::Validation)?;
self.internal.is_valid().map_err(ConfigError::Validation)?;
self.ci.validate().map_err(ConfigError::Validation)?;
self.webhook.is_valid().map_err(ConfigError::Validation)?;
self.ai.validate().map_err(ConfigError::Validation)?;
self.aihost.is_valid().map_err(ConfigError::Validation)?;
self.livekit.is_valid().map_err(ConfigError::Validation)?;
self.mcp.is_valid().map_err(ConfigError::Validation)?;
self.oauth.is_valid().map_err(ConfigError::Validation)?;
self.agents.validate().map_err(ConfigError::Validation)?;
self.sandbox_rpc
.is_valid()
.map_err(ConfigError::Validation)?;
self.push.is_valid().map_err(ConfigError::Validation)?;
Ok(())
}
}