use serde::Deserialize;
#[non_exhaustive]
#[derive(Debug, Clone, Deserialize, Default)]
#[serde(default)]
pub struct Config {
pub server: crate::server::Config,
#[cfg(feature = "db")]
#[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,
#[cfg(feature = "session")]
#[serde(default)]
pub session: crate::session::SessionConfig,
#[cfg(feature = "job")]
#[serde(default)]
pub job: crate::job::JobConfig,
#[serde(default)]
pub trusted_proxies: Vec<String>,
#[cfg(feature = "auth")]
#[serde(default)]
pub oauth: crate::auth::oauth::OAuthConfig,
#[cfg(feature = "email")]
#[serde(default)]
pub email: crate::email::EmailConfig,
#[cfg(feature = "templates")]
#[serde(default)]
pub template: crate::template::TemplateConfig,
#[cfg(feature = "geolocation")]
#[serde(default)]
pub geolocation: crate::geolocation::GeolocationConfig,
#[cfg(feature = "storage")]
#[serde(default)]
pub storage: crate::storage::BucketConfig,
#[cfg(feature = "dns")]
#[serde(default)]
pub dns: crate::dns::DnsConfig,
#[cfg(feature = "apikey")]
#[serde(default)]
pub apikey: crate::apikey::ApiKeyConfig,
#[cfg(feature = "auth")]
#[serde(default)]
pub jwt: crate::auth::jwt::JwtConfig,
}