use chrono::{DateTime, Utc};
use serde::Deserialize;
use serde_json::Value;
use serde_repr::Deserialize_repr;
#[derive(Debug, Clone, Deserialize, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub struct HistoryEvent {
pub event_type: EventType,
pub event_id: i32,
pub is_played: bool,
pub timestamp: DateTime<Utc>,
#[serde(skip)]
pub is_processed: bool,
pub name: Option<String>,
pub input: Option<Value>,
pub result: Option<String>,
pub task_scheduled_id: Option<i32>,
pub instance_id: Option<String>,
pub reason: Option<String>,
pub details: Option<String>,
pub fire_at: Option<DateTime<Utc>>,
pub timer_id: Option<i32>,
}
#[derive(Debug, Copy, Clone, Deserialize_repr, PartialEq)]
#[repr(u8)]
pub enum EventType {
ExecutionStarted = 0,
ExecutionCompleted = 1,
ExecutionFailed = 2,
ExecutionTerminated = 3,
TaskScheduled = 4,
TaskCompleted = 5,
TaskFailed = 6,
SubOrchestrationInstanceCreated = 7,
SubOrchestrationInstanceCompleted = 8,
SubOrchestrationInstanceFailed = 9,
TimerCreated = 10,
TimerFired = 11,
OrchestratorStarted = 12,
OrchestratorCompleted = 13,
EventSent = 14,
EventRaised = 15,
ContinueAsNew = 16,
GenericEvent = 17,
HistoryState = 18,
}