e2e_test_model/
lib.rs

1mod step;
2
3use std::fmt::Display;
4
5use serde::{Deserialize, Serialize};
6#[cfg(feature = "sqlx")]
7use sqlx::{FromRow, Type};
8use time::OffsetDateTime;
9use uuid::Uuid;
10
11pub use step::*;
12
13#[derive(Debug, Deserialize, Serialize)]
14pub struct CreateExecutionRequest {
15    pub product: String,
16    pub repository: String,
17    pub ref_name: String,
18}
19
20#[derive(Debug, Deserialize, Serialize)]
21pub struct GetExecutionsRequest {
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub product: Option<String>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub repository: Option<String>,
26}
27
28#[cfg_attr(feature = "sqlx", derive(Type))]
29#[cfg_attr(
30    feature = "sqlx",
31    sqlx(type_name = "execution_result", rename_all = "snake_case")
32)]
33#[derive(Debug, Deserialize, Serialize)]
34#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
35pub enum ExecutionResult {
36    InProgress,
37    Passed,
38    Failed,
39}
40
41impl Display for ExecutionResult {
42    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43        match self {
44            ExecutionResult::InProgress => write!(f, "in_progress"),
45            ExecutionResult::Passed => write!(f, "passed"),
46            ExecutionResult::Failed => write!(f, "failed"),
47        }
48    }
49}
50
51// TODO I think this should work, but it's not currently
52// #[cfg(feature = "sqlx")]
53// impl PgHasArrayType for ExecutionResult {
54//     fn array_type_info() -> sqlx::postgres::PgTypeInfo {
55//         PgTypeInfo::with_name("_execution_result")
56//     }
57// }
58
59impl Default for ExecutionResult {
60    fn default() -> Self {
61        Self::InProgress
62    }
63}
64
65#[derive(Debug, Deserialize, Serialize)]
66#[cfg_attr(feature = "sqlx", derive(FromRow))]
67pub struct Execution {
68    #[cfg_attr(feature = "sqlx", sqlx(flatten))]
69    pub uuid: Uuid,
70    pub product: String,
71    pub repository: String,
72    pub ref_name: String,
73    pub result: ExecutionResult,
74    #[serde(with = "time::serde::rfc3339")]
75    pub created_at: OffsetDateTime,
76}
77
78impl Default for Execution {
79    fn default() -> Self {
80        let (uuid, product, repository, ref_name, result) = Default::default();
81
82        Self {
83            uuid,
84            product,
85            repository,
86            ref_name,
87            result,
88            created_at: OffsetDateTime::now_utc(),
89        }
90    }
91}
92
93#[derive(Debug, Deserialize, Serialize)]
94pub struct CreateStepRequest {
95    pub state: StepState,
96    pub result: StepResult,
97}