pub mod admin; pub mod apihost; pub mod auth; pub mod cache; pub mod chat; 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 issues; pub mod pow; pub mod quota; pub mod redis; pub mod s3; pub mod scoped; pub mod search; pub mod session; pub mod space; pub mod user; pub mod web; pub mod error; pub mod loader; pub use error::ConfigError; use crate::admin::AdminConfig; use crate::apihost::ApihostConfig; use crate::auth::AuthConfig; use crate::cache::CacheConfig; use crate::chat::ChatConfig; 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::issues::IssueConfig; use crate::pow::PowConfig; use crate::redis::RedisConfig; use crate::s3::S3Config; use crate::search::SearchConfig; use crate::session::SessionConfig; use crate::space::SpaceConfig; use crate::user::UserConfig; use crate::web::WebConfig; use serde::Deserialize; #[derive(Clone, Debug, Default, Deserialize)] #[serde(default)] pub struct AppConfig { pub s3: S3Config, pub redis: RedisConfig, pub cache: CacheConfig, pub chat: ChatConfig, pub database: DatabaseConfig, pub session: SessionConfig, 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 git: GitConfig, pub email: EmailConfig, pub email_queue: EmailQueueConfig, pub apihost: ApihostConfig, pub githost: GithostConfig, pub im: ImServerConfig, pub health: HealthConfig, pub admin: AdminConfig, } impl AppConfig { pub fn load() -> Result { 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.cache.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.session.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.admin.is_valid().map_err(ConfigError::Validation)?; Ok(()) } }