use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::{ActivityId, Event, LeaseRecording, ReadProvenance, RunId, WorkflowSummary};
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq)]
pub struct DescribeWorkflowResponse {
pub summary: Option<WorkflowSummary>,
pub history: Vec<Event>,
pub unserved: Vec<UnservedActivity>,
pub generations: Vec<RunGeneration>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provenance: Option<ReadProvenance>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub lease_recording: Option<LeaseRecording>,
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq, Eq)]
pub struct RunGeneration {
pub seq: u64,
pub run_id: RunId,
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq, Eq)]
pub struct UnservedActivity {
pub activity_id: ActivityId,
pub activity_type: String,
pub task_queue: String,
pub node: Option<String>,
pub attempt: u32,
pub dispatched_at: DateTime<Utc>,
pub reason: String,
pub detail: String,
pub workers_in_pool: u64,
pub workers_serving_activity: u64,
pub compatible_workers: u64,
pub dispatch_parked: bool,
}