use crate::Error;
use cron::Schedule;
use std::str::FromStr;
use std::time::Duration;
use tokio_postgres::config::Config;
#[derive(Default, Clone)]
pub struct JobConfig {
pub name: String,
pub(crate) sync_key: String,
pub(crate) interval: Option<Duration>,
pub(crate) cron: Option<Schedule>,
pub(crate) cron_str: Option<String>,
}
impl JobConfig {
pub fn new(name: &str, sync_key: &str) -> Self {
Self {
name: name.to_owned(),
sync_key: sync_key.to_owned(),
..Default::default()
}
}
pub fn interval(mut self, interval: Duration) -> Self {
self.interval = Some(interval);
self
}
pub fn cron(mut self, expression: &str) -> Self {
self.cron = Some(Schedule::from_str(expression).expect("invalid cron expression"));
self.cron_str = Some(expression.to_owned());
self
}
}
#[derive(Clone)]
pub struct RunnerConfig {
pub(crate) check_interval: Duration,
pub(crate) initial_delay: Option<Duration>,
pub(crate) db: Config,
#[cfg(feature = "pool-mobc")]
pub(crate) pool: Option<crate::pool::DBPool>,
}
impl RunnerConfig {
pub fn new(db_config: &str) -> Result<Self, Error> {
let res = Self {
db: Config::from_str(db_config).map_err(Error::DBConfigError)?,
..Default::default()
};
Ok(res)
}
pub fn check_interval(mut self, check_interval: Duration) -> Self {
self.check_interval = check_interval;
self
}
pub fn initial_delay(mut self, initial_delay: Duration) -> Self {
self.initial_delay = Some(initial_delay);
self
}
#[cfg(feature = "pool-mobc")]
pub fn pool(mut self, pool: crate::pool::DBPool) -> Self {
self.pool = Some(pool);
self
}
}
impl Default for RunnerConfig {
fn default() -> Self {
Self {
check_interval: Duration::from_secs(60),
initial_delay: None,
#[cfg(feature = "pool-mobc")]
pool: None,
db: Config::from_str("host=localhost user=postgres port=5432")
.expect("default config is valid"),
}
}
}