Skip to main content

ralph/contracts/
queue.rs

1//! Queue file contracts for Ralph.
2//!
3//! Responsibilities:
4//! - Define the queue file payload structure and defaults.
5//!
6//! Not handled here:
7//! - Queue persistence or scheduling logic (see `crate::queue`).
8//! - Task field definitions (see `super::task`).
9//!
10//! Invariants/assumptions:
11//! - `version` is the queue schema version.
12//! - Tasks are serialized/deserialized with strict field validation.
13
14use schemars::JsonSchema;
15use serde::{Deserialize, Serialize};
16
17use super::Task;
18
19/* --------------------------- QueueFile (JSON) ---------------------------- */
20
21#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
22#[serde(deny_unknown_fields)]
23pub struct QueueFile {
24    pub version: u32,
25
26    #[serde(default)]
27    pub tasks: Vec<Task>,
28}
29
30/* ------------------------------ Defaults -------------------------------- */
31
32impl Default for QueueFile {
33    fn default() -> Self {
34        Self {
35            version: 1,
36            tasks: Vec::new(),
37        }
38    }
39}