1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
8#[serde(rename_all = "snake_case")]
9pub enum MissedPolicy {
10 #[default]
12 Skip,
13 RunLatest,
15 RunAll,
17}
18
19#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
21#[serde(rename_all = "snake_case")]
22pub enum ScheduleExecutor {
23 #[default]
25 SystemCron,
26 Commander,
28 Server,
30}
31
32#[derive(Debug, Clone, Default, Serialize, Deserialize)]
34pub struct ScheduleNotify {
35 #[serde(default, rename = "type")]
37 pub notify_type: String,
38 #[serde(default)]
40 pub target: String,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
45#[serde(rename_all = "snake_case")]
46pub enum Capability {
47 Shell,
48 Docker,
49 Browser,
50 Ai,
51 Http,
52 Ssh,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct Schedule {
61 pub id: String,
63 pub workflow: String,
65 pub cron: String,
67 #[serde(default = "default_timezone")]
69 pub timezone: String,
70 #[serde(default = "default_enabled")]
72 pub enabled: bool,
73 #[serde(default)]
75 pub user_id: String,
76 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
78 pub variables: HashMap<String, String>,
79 #[serde(default)]
81 pub notify: ScheduleNotify,
82 #[serde(default)]
84 pub on_missed: MissedPolicy,
85 #[serde(default)]
87 pub executor: ScheduleExecutor,
88}
89
90fn default_timezone() -> String {
91 "UTC".into()
92}
93fn default_enabled() -> bool {
94 true
95}
96
97#[derive(Debug, Serialize, Deserialize)]
99pub struct SchedulesFile {
100 #[serde(default)]
101 pub schedules: Vec<Schedule>,
102}