use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Trigger {
pub id: String,
pub name: String,
pub workflow_id: String,
pub trigger_type: TriggerType,
pub condition: Option<TriggerCondition>,
pub debounce_ms: Option<u64>,
pub enabled: bool,
pub created_at: DateTime<Utc>,
pub metadata: HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum TriggerType {
FileSystem { path: String, events: Vec<FileEvent> },
Webhook { endpoint: String, method: String },
Schedule { schedule_id: String },
Manual,
WorkflowOutput { source_workflow_id: String },
ApiCallback { callback_id: String },
Custom { event_type: String, config: serde_json::Value },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum FileEvent {
Created,
Modified,
Deleted,
Renamed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TriggerCondition {
pub expression: String,
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TriggerActivation {
pub trigger_id: String,
pub execution_id: String,
pub activated_at: DateTime<Utc>,
pub event_data: serde_json::Value,
pub condition_met: bool,
}