pub mod apihost; pub mod auth; pub mod chat; pub mod database; pub mod email; pub mod git; pub mod internal; pub mod issues; pub mod livekit; pub mod migrate; pub mod pow; pub mod push; pub mod quota; pub mod redis; pub mod rocketmq; pub mod s3; pub mod session; pub mod smtp; pub mod space; pub mod user; pub mod web; pub mod error; pub mod loader; pub mod net; pub use error::ConfigError; pub use loader::{Config, Section}; pub use net::is_loopback_host; use crate::apihost::ApihostConfig; use crate::auth::AuthConfig; use crate::chat::ChatConfig; use crate::database::DatabaseConfig; use crate::email::EmailConfig; use crate::git::GitConfig; use crate::internal::InternalConfig; use crate::issues::IssueConfig; use crate::livekit::LiveKitConfig; use crate::pow::PowConfig; use crate::push::PushConfig; use crate::redis::RedisConfig; use crate::rocketmq::RocketMqConfig; use crate::s3::S3Config; 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 chat: ChatConfig, pub database: DatabaseConfig, pub pow: PowConfig, pub auth: AuthConfig, pub web: WebConfig, pub user: UserConfig, pub quota: quota::QuotaConfig, pub space: SpaceConfig, pub issues: IssueConfig, pub livekit: LiveKitConfig, pub git: GitConfig, pub session: SessionConfig, pub email: EmailConfig, pub apihost: ApihostConfig, pub rocketmq: RocketMqConfig, pub internal: InternalConfig, pub push: PushConfig, } 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.chat.is_valid().map_err(ConfigError::Validation)?; self.apihost.is_valid().map_err(ConfigError::Validation)?; self.rocketmq.is_valid().map_err(ConfigError::Validation)?; self.internal.is_valid().map_err(ConfigError::Validation)?; self.livekit.is_valid().map_err(ConfigError::Validation)?; self.push.is_valid().map_err(ConfigError::Validation)?; Ok(()) } }