use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::{
ActivityEvent, ActivityId, InterventionCapabilities, Payload, UnservedActivity, WorkflowSummary,
};
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq)]
pub struct DescribeLiveResponse {
pub summary: Option<WorkflowSummary>,
pub current_step: Option<CurrentStep>,
pub open_steps: Vec<OpenStep>,
pub transcript_streams: Vec<TranscriptStreamHead>,
pub unserved: Vec<UnservedActivity>,
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq, Eq)]
pub struct OpenStep {
pub activity_id: ActivityId,
pub activity_type: String,
pub task_queue: String,
pub node: Option<String>,
pub scheduled_at: DateTime<Utc>,
pub state: StepState,
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq, Eq)]
#[serde(tag = "state")]
pub enum StepState {
Scheduled,
Dispatched {
attempt: u32,
dispatched_at: DateTime<Utc>,
},
Reopened {
reopened_at: DateTime<Utc>,
},
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq)]
pub struct CurrentStep {
pub step: OpenStep,
pub attempt: Option<LiveAttempt>,
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq)]
pub struct LiveAttempt {
pub attempt: u32,
pub dispatched_at: DateTime<Utc>,
pub liveness: AttemptLiveness,
pub note: HeartbeatNote,
pub transcript: TranscriptTail,
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq, Eq)]
#[serde(tag = "liveness")]
pub enum AttemptLiveness {
Live {
capabilities: InterventionCapabilities,
},
NoLiveOwner,
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq)]
#[serde(tag = "note")]
pub enum HeartbeatNote {
Reported {
payload: Payload,
reported_at: DateTime<Utc>,
},
NoneSent,
Unavailable {
notes_held_since: DateTime<Utc>,
restarted_since_attempt_began: bool,
},
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq)]
#[serde(tag = "transcript")]
pub enum TranscriptTail {
NotRequested,
Window {
events: Vec<ActivityEvent>,
head_seq: u64,
omitted_before: u64,
retention_truncated: bool,
},
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq, Eq)]
pub struct TranscriptStreamHead {
pub activity_id: ActivityId,
pub attempt: u32,
pub activity_type: Option<String>,
pub head_seq: u64,
pub current: bool,
pub retention_truncated: bool,
}