subliminal 0.0.4

Base crate for subliminal microservices project
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value;

use std::fmt::Debug;
pub mod execution;

/// Represents a task that can be executed by the workers. All tasks must implement this trait.
pub trait Task: Send + Sync + Debug + 'static {
    fn execute(&self) -> TaskResultData;
}

/// Represents a task result
#[derive(Serialize, Deserialize, Debug)]
pub struct TaskResultData {
    pub result_status: TaskStatus,
    pub result_data: Option<Value>,
}

/// Represents a task status. This is within the TaskResultData struct.
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub enum TaskStatus {
    Initialized,
    Error,
    Cancelled,
    ReadyForDispatch,
    Dispatched,
    Running,
    Passed,
    Failed,
    Killed,
    Incomplete,
    Blocked,
}

/// Data required for a worker to execute a task
#[derive(Debug)]
pub struct TaskExecutionData {
    pub request_id: String,
    pub execution_id: String,
    pub task: Box<dyn Task>,
}