Skip to main content

forge_core/config/
cron_config.rs

1//! Cron scheduler configuration.
2
3use std::time::Duration;
4
5use serde::{Deserialize, Serialize};
6
7use super::types::DurationStr;
8
9/// Cron scheduler configuration.
10#[derive(Debug, Clone, Serialize, Deserialize)]
11#[non_exhaustive]
12pub struct CronConfig {
13    /// Poll interval for the cron scheduler tick (e.g. "1s", "5s").
14    #[serde(default = "default_poll_interval")]
15    pub poll_interval: DurationStr,
16
17    /// Maximum number of catch-up jobs to insert per scheduler tick after
18    /// downtime. Prevents burst-inserting thousands of missed jobs.
19    #[serde(default = "default_catch_up_limit")]
20    pub catch_up_limit: usize,
21}
22
23impl Default for CronConfig {
24    fn default() -> Self {
25        Self {
26            poll_interval: default_poll_interval(),
27            catch_up_limit: default_catch_up_limit(),
28        }
29    }
30}
31
32fn default_poll_interval() -> DurationStr {
33    DurationStr::new(Duration::from_secs(1))
34}
35
36fn default_catch_up_limit() -> usize {
37    100
38}