use async_trait::async_trait;
use std::time::Duration;
pub const DEFAULT_EPOCH_DURATION: Duration = Duration::from_secs(30);
pub struct StewardSchedulerConfig {
pub epoch_interval: Duration,
}
impl Default for StewardSchedulerConfig {
fn default() -> Self {
Self {
epoch_interval: DEFAULT_EPOCH_DURATION,
}
}
}
#[async_trait]
pub trait StewardScheduler: Send + Sync {
async fn next_tick(&mut self);
}
pub struct IntervalScheduler {
interval: tokio::time::Interval,
}
impl IntervalScheduler {
pub fn new(config: StewardSchedulerConfig) -> Self {
Self {
interval: tokio::time::interval(config.epoch_interval),
}
}
}
#[async_trait]
impl StewardScheduler for IntervalScheduler {
async fn next_tick(&mut self) {
self.interval.tick().await;
}
}