use async_trait::async_trait;
use chrono::{DateTime, Utc};
use std::collections::HashMap;
use std::fmt::Debug;
#[derive(Debug, Clone)]
pub struct TaskContext {
pub scheduled_time: DateTime<Utc>,
pub actual_time: DateTime<Utc>,
pub weight: i8, #[allow(dead_code)]
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TaskType {
Async, Blocking, }
#[async_trait]
pub trait ReactiveTask: Send + Sync + Debug {
fn id(&self) -> &str;
fn task_type(&self) -> TaskType {
TaskType::Async
}
async fn execute(
&self,
context: TaskContext,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>>;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExecutionPolicy {
SkipIfRunning,
Parallel,
#[allow(dead_code)]
Sequential,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum SchedulingPolicy {
FirstInFirstOut,
Priority,
Fair,
Delayed,
RateLimited,
}