Skip to content

Commit 31565cf

Browse files
refactor: simplify serialize method implementation using strum crate
1 parent cac78db commit 31565cf

File tree

4 files changed

+29
-61
lines changed

4 files changed

+29
-61
lines changed

Cargo.lock

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pre-compute/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ reqwest = { version = "0.12.15", features = ["blocking", "json"] }
1616
serde = "1.0.219"
1717
sha256 = "1.6.0"
1818
sha3 = "0.10.8"
19+
strum = "0.27.2"
20+
strum_macros = "0.27.2"
1921
thiserror = "2.0.12"
2022

2123
[dev-dependencies]

pre-compute/src/compute/app_runner.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ mod pre_compute_start_with_app_tests {
231231

232232
let expected_exit_message_payload = json!([{
233233
"cause": "PRE_COMPUTE_OUTPUT_FOLDER_NOT_FOUND",
234-
"message": "Input files number related environment variable is missing"
234+
"message": "Output folder related environment variable is missing"
235235
}]);
236236

237237
// Mock the worker API to return success

pre-compute/src/compute/errors.rs

Lines changed: 6 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
use serde::{Serializer, ser::SerializeStruct};
22
use thiserror::Error;
3+
use strum_macros::EnumDiscriminants;
34

4-
#[derive(Debug, PartialEq, Clone, Error)]
5+
#[derive(Debug, PartialEq, Clone, Error, EnumDiscriminants)]
6+
#[strum_discriminants(derive(serde::Serialize))]
7+
#[strum_discriminants(serde(rename_all = "SCREAMING_SNAKE_CASE"))]
58
#[allow(clippy::enum_variant_names)]
69
pub enum ReplicateStatusCause {
710
#[error("input file URL {0} is missing")]
@@ -30,7 +33,7 @@ pub enum ReplicateStatusCause {
3033
PreComputeInputFilesNumberMissing,
3134
#[error("Invalid dataset checksum for dataset {0}")]
3235
PreComputeInvalidDatasetChecksum(usize),
33-
#[error("Input files number related environment variable is missing")]
36+
#[error("Output folder related environment variable is missing")]
3437
PreComputeOutputFolderNotFound,
3538
#[error("Output path related environment variable is missing")]
3639
PreComputeOutputPathMissing,
@@ -50,64 +53,7 @@ impl serde::Serialize for ReplicateStatusCause {
5053
S: Serializer,
5154
{
5255
let mut state = serializer.serialize_struct("ReplicateStatusCause", 2)?;
53-
54-
let cause_name = match self {
55-
ReplicateStatusCause::PreComputeAtLeastOneInputFileUrlMissing(_) => {
56-
"PRE_COMPUTE_AT_LEAST_ONE_INPUT_FILE_URL_MISSING"
57-
}
58-
ReplicateStatusCause::PreComputeDatasetChecksumMissing(_) => {
59-
"PRE_COMPUTE_DATASET_CHECKSUM_MISSING"
60-
}
61-
ReplicateStatusCause::PreComputeDatasetDecryptionFailed(_) => {
62-
"PRE_COMPUTE_DATASET_DECRYPTION_FAILED"
63-
}
64-
ReplicateStatusCause::PreComputeDatasetDownloadFailed(_) => {
65-
"PRE_COMPUTE_DATASET_DOWNLOAD_FAILED"
66-
}
67-
ReplicateStatusCause::PreComputeDatasetFilenameMissing(_) => {
68-
"PRE_COMPUTE_DATASET_FILENAME_MISSING"
69-
}
70-
ReplicateStatusCause::PreComputeDatasetKeyMissing(_) => {
71-
"PRE_COMPUTE_DATASET_KEY_MISSING"
72-
}
73-
ReplicateStatusCause::PreComputeDatasetUrlMissing(_) => {
74-
"PRE_COMPUTE_DATASET_URL_MISSING"
75-
}
76-
ReplicateStatusCause::PreComputeFailedUnknownIssue => {
77-
"PRE_COMPUTE_FAILED_UNKNOWN_ISSUE"
78-
}
79-
ReplicateStatusCause::PreComputeInvalidTeeSignature => {
80-
"PRE_COMPUTE_INVALID_TEE_SIGNATURE"
81-
}
82-
ReplicateStatusCause::PreComputeIsDatasetRequiredMissing => {
83-
"PRE_COMPUTE_IS_DATASET_REQUIRED_MISSING"
84-
}
85-
ReplicateStatusCause::PreComputeInputFileDownloadFailed => {
86-
"PRE_COMPUTE_INPUT_FILE_DOWNLOAD_FAILED"
87-
}
88-
ReplicateStatusCause::PreComputeInputFilesNumberMissing => {
89-
"PRE_COMPUTE_INPUT_FILES_NUMBER_MISSING"
90-
}
91-
ReplicateStatusCause::PreComputeInvalidDatasetChecksum(_) => {
92-
"PRE_COMPUTE_INVALID_DATASET_CHECKSUM"
93-
}
94-
ReplicateStatusCause::PreComputeOutputFolderNotFound => {
95-
"PRE_COMPUTE_OUTPUT_FOLDER_NOT_FOUND"
96-
}
97-
ReplicateStatusCause::PreComputeOutputPathMissing => "PRE_COMPUTE_OUTPUT_PATH_MISSING",
98-
ReplicateStatusCause::PreComputeSavingPlainDatasetFailed => {
99-
"PRE_COMPUTE_SAVING_PLAIN_DATASET_FAILED"
100-
}
101-
ReplicateStatusCause::PreComputeTaskIdMissing => "PRE_COMPUTE_TASK_ID_MISSING",
102-
ReplicateStatusCause::PreComputeTeeChallengePrivateKeyMissing => {
103-
"PRE_COMPUTE_TEE_CHALLENGE_PRIVATE_KEY_MISSING"
104-
}
105-
ReplicateStatusCause::PreComputeWorkerAddressMissing => {
106-
"PRE_COMPUTE_WORKER_ADDRESS_MISSING"
107-
}
108-
};
109-
110-
state.serialize_field("cause", cause_name)?;
56+
state.serialize_field("cause", &ReplicateStatusCauseDiscriminants::from(self))?;
11157
state.serialize_field("message", &self.to_string())?;
11258
state.end()
11359
}

0 commit comments

Comments
 (0)