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
51impl 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}