1#![warn(clippy::all, clippy::pedantic, clippy::nursery)]
2
3use serde::{Deserialize, Serialize};
4
5pub enum Progress {
7 Log(Log),
8 Stage(Stage),
9}
10
11#[derive(Debug, Serialize, Deserialize)]
13#[serde(tag = "type", content = "log")]
14pub enum Log {
15 Info(String),
16 Error(String),
17}
18
19#[derive(Debug, Serialize, Deserialize)]
21#[serde(rename_all = "snake_case")]
22pub enum Stage {
23 Starting,
25 Downloaded,
27 DepsInstalled,
29 Migrated,
31 Optimized,
33 Deployed,
35}
36
37#[derive(Debug, thiserror::Error, Serialize, Deserialize)]
38#[serde(rename_all = "snake_case")]
39pub enum Error {
40 #[error("Failed to bootstrap the project.")]
42 Bootstrap,
43
44 #[error("Failed to clone the repository.")]
46 Download,
47
48 #[error("Failed to extract the repository contents.")]
50 Extraction,
51
52 #[error("Failed to configure the deployment.")]
54 Configure,
55
56 #[error("Failed to install dependencies.")]
58 InstallDeps,
59
60 #[error("Failed to run defined commands.")]
62 RunCommands,
63
64 #[error("Failed to optimize the deployment.")]
65 Optimize,
66
67 #[error("Failed to cleanup old deployments.")]
69 Cleanup,
70
71 #[error("Failed to publish the new deployment.")]
73 Publish,
74}
75
76#[derive(Debug, Serialize, Deserialize)]
77pub struct ErrorResponse {
78 pub error: Error,
79 pub message: String,
80}
81
82impl From<Error> for ErrorResponse {
83 fn from(error: Error) -> Self {
84 Self {
85 message: error.to_string(),
86 error,
87 }
88 }
89}
90
91impl From<Stage> for Progress {
92 fn from(value: Stage) -> Self {
93 Self::Stage(value)
94 }
95}