Skip to main content

backbone_inventory/domain/entity/
transfer_state.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 = "transfer_state", rename_all = "snake_case")]
11pub enum TransferState {
12    Draft,
13    Waiting,
14    Confirmed,
15    Assigned,
16    Done,
17    Cancel,
18}
19
20impl std::fmt::Display for TransferState {
21    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22        match self {
23            Self::Draft => write!(f, "draft"),
24            Self::Waiting => write!(f, "waiting"),
25            Self::Confirmed => write!(f, "confirmed"),
26            Self::Assigned => write!(f, "assigned"),
27            Self::Done => write!(f, "done"),
28            Self::Cancel => write!(f, "cancel"),
29        }
30    }
31}
32
33impl FromStr for TransferState {
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            "waiting" => Ok(Self::Waiting),
40            "confirmed" => Ok(Self::Confirmed),
41            "assigned" => Ok(Self::Assigned),
42            "done" => Ok(Self::Done),
43            "cancel" => Ok(Self::Cancel),
44            _ => Err(format!("Unknown TransferState variant: {}", s)),
45        }
46    }
47}
48
49impl Default for TransferState {
50    fn default() -> Self {
51        Self::Draft
52    }
53}