Skip to main content

backbone_accounting/domain/entity/
statement_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 = "statement_status", rename_all = "snake_case")]
11pub enum StatementStatus {
12    Draft,
13    Generated,
14    Reviewed,
15    Approved,
16    Published,
17    Archived,
18}
19
20impl std::fmt::Display for StatementStatus {
21    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22        match self {
23            Self::Draft => write!(f, "draft"),
24            Self::Generated => write!(f, "generated"),
25            Self::Reviewed => write!(f, "reviewed"),
26            Self::Approved => write!(f, "approved"),
27            Self::Published => write!(f, "published"),
28            Self::Archived => write!(f, "archived"),
29        }
30    }
31}
32
33impl FromStr for StatementStatus {
34    type Err = String;
35
36    fn from_str(s: &str) -> Result<Self, Self::Err> {
37        match s.to_lowercase().as_str() {
38            "draft" => Ok(Self::Draft),
39            "generated" => Ok(Self::Generated),
40            "reviewed" => Ok(Self::Reviewed),
41            "approved" => Ok(Self::Approved),
42            "published" => Ok(Self::Published),
43            "archived" => Ok(Self::Archived),
44            _ => Err(format!("Unknown StatementStatus variant: {}", s)),
45        }
46    }
47}
48
49impl Default for StatementStatus {
50    fn default() -> Self {
51        Self::Draft
52    }
53}