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}