use super::CronSchedule;
use chrono::{DateTime, Utc};
use chrono_tz::{Asia::Shanghai, Tz};
use std::time::Duration;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Schedule {
Interval(Duration),
AtTimes(Vec<DateTime<Tz>>),
Cron(CronSchedule),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum MissedRunPolicy {
Skip,
#[default]
CatchUpOnce,
ReplayAll,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum OverlapPolicy {
#[default]
Forbid,
QueueOne,
AllowParallel,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum TerminalStatePolicy {
#[default]
Retain,
Delete,
}
#[derive(Debug, Clone)]
pub struct SchedulerConfig {
pub timezone: Tz,
pub history_limit: usize,
pub terminal_state_policy: TerminalStatePolicy,
}
impl Default for SchedulerConfig {
fn default() -> Self {
Self {
timezone: Shanghai,
history_limit: 32,
terminal_state_policy: TerminalStatePolicy::Retain,
}
}
}
pub(crate) fn utc_time(value: DateTime<Tz>) -> DateTime<Utc> {
value.with_timezone(&Utc)
}