night 0.0.5

A scalable Task Queue for executing asynchronous tasks in topological order.
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::net::SocketAddr;
use uuid::Uuid;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskConfig {
    pub name: String,
    pub id: Uuid,
    pub command: String,
    pub is_periodic: bool,
    pub interval: String,
    pub importance: u8,
    pub dependencies: Vec<Uuid>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MissionConfig {
    pub name: String,
    pub tasks: Vec<TaskConfig>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum TaskStatus {
    Pending,
    Running,
    Completed,
    Failed,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskInfo {
    pub id: Uuid,
    pub status: TaskStatus,
    pub start_time: Option<DateTime<Utc>>,
    pub end_time: Option<DateTime<Utc>>,
    pub execution_order: Option<usize>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskCommunication {
    pub sender_id: Uuid,
    pub receiver_id: Uuid,
    pub message_type: String,
    pub payload: String,
}

pub type TaskDependencyMap = HashMap<Uuid, bool>;
pub type TaskAddressMap = HashMap<Uuid, SocketAddr>;