use serde::{Deserialize, Serialize};
use crate::error::Result;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum Weekday {
Sun = 0,
Mon = 1,
Tue = 2,
Wed = 3,
Thu = 4,
Fri = 5,
Sat = 6,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ScheduleTrigger {
Cron {
expr: String,
},
Interval {
every_secs: u64,
},
Daily {
hour: u8,
minute: u8,
},
Weekly {
weekday: Weekday,
hour: u8,
minute: u8,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct ScheduleInstant {
pub secs: i64,
}
pub trait SchedulePort: Send + Sync {
fn next_run(
&self,
trigger: &ScheduleTrigger,
after: ScheduleInstant,
) -> Result<ScheduleInstant>;
}