use serde::Deserialize;
#[non_exhaustive]
#[derive(Debug, Clone, Deserialize, Default)]
#[serde(default)]
pub struct Config {
pub server: crate::server::Config,
#[serde(default)]
pub database: crate::db::Config,
pub tracing: crate::tracing::Config,
pub cookie: Option<crate::cookie::CookieConfig>,
pub security_headers: crate::middleware::SecurityHeadersConfig,
pub cors: crate::middleware::CorsConfig,
pub csrf: crate::middleware::CsrfConfig,
pub rate_limit: crate::middleware::RateLimitConfig,
#[serde(default)]
pub session: crate::auth::session::SessionConfig,
#[serde(default)]
pub job: crate::job::JobConfig,
#[serde(default)]
pub trusted_proxies: Vec<String>,
#[serde(default)]
pub oauth: crate::auth::oauth::OAuthConfig,
#[serde(default)]
pub email: crate::email::EmailConfig,
#[serde(default)]
pub template: crate::template::TemplateConfig,
#[serde(default)]
pub geolocation: crate::geolocation::GeolocationConfig,
#[serde(default)]
pub storage: crate::storage::BucketConfig,
#[serde(default)]
pub dns: crate::dns::DnsConfig,
#[serde(default)]
pub apikey: crate::auth::apikey::ApiKeyConfig,
#[serde(default)]
pub jwt: crate::auth::session::jwt::JwtSessionsConfig,
}