Skip to main content

backbone_support/domain/entity/
issue_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 = "issue_status", rename_all = "snake_case")]
11pub enum IssueStatus {
12    Open,
13    Replied,
14    OnHold,
15    Resolved,
16    Closed,
17}
18
19impl std::fmt::Display for IssueStatus {
20    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21        match self {
22            Self::Open => write!(f, "open"),
23            Self::Replied => write!(f, "replied"),
24            Self::OnHold => write!(f, "on_hold"),
25            Self::Resolved => write!(f, "resolved"),
26            Self::Closed => write!(f, "closed"),
27        }
28    }
29}
30
31impl FromStr for IssueStatus {
32    type Err = String;
33
34    fn from_str(s: &str) -> Result<Self, Self::Err> {
35        match s.to_lowercase().as_str() {
36            "open" => Ok(Self::Open),
37            "replied" => Ok(Self::Replied),
38            "on_hold" => Ok(Self::OnHold),
39            "resolved" => Ok(Self::Resolved),
40            "closed" => Ok(Self::Closed),
41            _ => Err(format!("Unknown IssueStatus variant: {}", s)),
42        }
43    }
44}
45
46impl Default for IssueStatus {
47    fn default() -> Self {
48        Self::Open
49    }
50}