Skip to main content

backbone_bucket/domain/entity/
processing_status.rs

1use serde::{Deserialize, Serialize};
2use sqlx::Type;
3use std::str::FromStr;
4#[cfg(feature = "openapi")]
5use utoipa::ToSchema;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Type)]
8#[cfg_attr(feature = "openapi", derive(ToSchema))]
9#[serde(rename_all = "snake_case")]
10#[sqlx(type_name = "processing_status", rename_all = "snake_case")]
11pub enum ProcessingStatus {
12    Pending,
13    Processing,
14    ThumbnailsReady,
15    ScanComplete,
16    Complete,
17    Failed,
18}
19
20impl std::fmt::Display for ProcessingStatus {
21    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22        match self {
23            Self::Pending => write!(f, "pending"),
24            Self::Processing => write!(f, "processing"),
25            Self::ThumbnailsReady => write!(f, "thumbnails_ready"),
26            Self::ScanComplete => write!(f, "scan_complete"),
27            Self::Complete => write!(f, "complete"),
28            Self::Failed => write!(f, "failed"),
29        }
30    }
31}
32
33impl FromStr for ProcessingStatus {
34    type Err = String;
35
36    fn from_str(s: &str) -> Result<Self, Self::Err> {
37        match s.to_lowercase().as_str() {
38            "pending" => Ok(Self::Pending),
39            "processing" => Ok(Self::Processing),
40            "thumbnails_ready" => Ok(Self::ThumbnailsReady),
41            "scan_complete" => Ok(Self::ScanComplete),
42            "complete" => Ok(Self::Complete),
43            "failed" => Ok(Self::Failed),
44            _ => Err(format!("Unknown ProcessingStatus variant: {}", s)),
45        }
46    }
47}
48
49impl Default for ProcessingStatus {
50    fn default() -> Self {
51        Self::Pending
52    }
53}