1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use crate::{Id, JobId, StepId, WorkflowId, WorkflowState};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;

pub type Time = chrono::DateTime<chrono::Utc>;

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct StepRunResult {
  pub id: StepId,
  pub state: WorkflowState,
  pub exit_code: Option<i32>,
  pub started_at: Option<Time>,
  pub completed_at: Option<Time>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct JobRunResult {
  pub id: JobId,
  pub state: WorkflowState,
  pub started_at: Option<Time>,
  pub completed_at: Option<Time>,
  pub steps: Vec<StepRunResult>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct WorkflowRunResult {
  pub id: WorkflowId,
  pub state: WorkflowState,
  pub started_at: Option<Time>,
  pub completed_at: Option<Time>,
  pub jobs: HashMap<Id, JobRunResult>,
}