use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case", tag = "kind")]
pub enum TriggerKind {
Manual,
Webhook {
path: String,
},
Cron {
schedule: String,
},
Api,
Retry {
parent_run_id: Uuid,
},
Workflow,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn serde_roundtrip() {
let triggers = vec![
TriggerKind::Manual,
TriggerKind::Api,
TriggerKind::Webhook {
path: "/hooks/gh".to_string(),
},
TriggerKind::Cron {
schedule: "0 */5 * * * *".to_string(),
},
TriggerKind::Retry {
parent_run_id: Uuid::nil(),
},
];
for trigger in triggers {
let json = serde_json::to_string(&trigger).expect("serialize");
let back: TriggerKind = serde_json::from_str(&json).expect("deserialize");
assert_eq!(trigger, back);
}
}
}