1#![cfg(any(feature = "server", test))]
12
13use crate::models::settings::{
14 ImageLimitSettings, RateLimitSettings, RunnerSettings, SsrCacheSettings, WebpSettings,
15};
16use std::sync::OnceLock;
17
18static RATE_LIMIT_CFG: OnceLock<RateLimitSettings> = OnceLock::new();
24
25#[cfg(feature = "server")]
29pub fn set_rate_limit(cfg: RateLimitSettings) {
30 if RATE_LIMIT_CFG.set(cfg).is_err() {
31 tracing::warn!("rate_limit config already initialized, ignoring subsequent set");
32 }
33}
34
35pub fn rate_limit() -> RateLimitSettings {
40 RATE_LIMIT_CFG.get().cloned().unwrap_or_default()
41}
42
43static WEBP_CFG: OnceLock<WebpSettings> = OnceLock::new();
49
50#[cfg(feature = "server")]
52pub fn set_webp(cfg: WebpSettings) {
53 if WEBP_CFG.set(cfg).is_err() {
54 tracing::warn!("webp config already initialized, ignoring subsequent set");
55 }
56}
57
58pub fn webp() -> WebpSettings {
60 WEBP_CFG.get().cloned().unwrap_or_default()
61}
62
63static IMAGE_LIMIT_CFG: OnceLock<ImageLimitSettings> = OnceLock::new();
69
70#[cfg(feature = "server")]
72pub fn set_image_limit(cfg: ImageLimitSettings) {
73 if IMAGE_LIMIT_CFG.set(cfg).is_err() {
74 tracing::warn!("image_limit config already initialized, ignoring subsequent set");
75 }
76}
77
78pub fn image_limit() -> ImageLimitSettings {
80 IMAGE_LIMIT_CFG.get().cloned().unwrap_or_default()
81}
82
83#[cfg(feature = "server")]
84pub static MAX_IMAGE_DIMENSION: std::sync::LazyLock<u32> = std::sync::LazyLock::new(|| {
89 let val = crate::config::image_limit().max_dimension;
90 tracing::info!("Image dimension limit loaded from DB: {}", val);
91 val
92});
93#[cfg(feature = "server")]
94pub static MAX_IMAGE_PIXELS: std::sync::LazyLock<u32> = std::sync::LazyLock::new(|| {
101 let val = crate::config::image_limit().max_pixels.min(u32::MAX as u64) as u32;
103 tracing::info!("Image pixel limit loaded from DB: {}", val);
104 val
105});
106
107static SSR_CACHE_CFG: OnceLock<SsrCacheSettings> = OnceLock::new();
113
114#[cfg(feature = "server")]
116pub fn set_ssr_cache(cfg: SsrCacheSettings) {
117 if SSR_CACHE_CFG.set(cfg).is_err() {
118 tracing::warn!("ssr_cache config already initialized, ignoring subsequent set");
119 }
120}
121
122pub fn ssr_cache() -> SsrCacheSettings {
124 SSR_CACHE_CFG.get().cloned().unwrap_or_default()
125}
126
127static RUNNER_CFG: OnceLock<RunnerSettings> = OnceLock::new();
133
134#[cfg(feature = "server")]
136pub fn set_runner(cfg: RunnerSettings) {
137 if RUNNER_CFG.set(cfg).is_err() {
138 tracing::warn!("runner config already initialized, ignoring subsequent set");
139 }
140}
141
142pub fn runner() -> RunnerSettings {
144 RUNNER_CFG.get().cloned().unwrap_or_default()
145}