Skip to main content

foxtive_ntex/enums/
response_code.rs

1use crate::contracts::ResponseCodeContract;
2use ntex::http::StatusCode;
3use std::borrow::Cow;
4use tracing::error;
5
6#[derive(Clone)]
7pub enum ResponseCode {
8    Ok,
9    Created,
10    Accepted,
11    NoContent,
12    BadRequest,
13    Unauthorized,
14    PaymentRequired,
15    Forbidden,
16    NotFound,
17    Conflict,
18    InternalServerError,
19    ServiceUnavailable,
20    NotImplemented,
21    Unknown(StatusCode),
22}
23
24impl ResponseCodeContract for ResponseCode {
25    fn code(&self) -> Cow<'static, str> {
26        match self {
27            ResponseCode::Ok => Cow::Borrowed("000"),
28            ResponseCode::Created => Cow::Borrowed("001"),
29            ResponseCode::Accepted => Cow::Borrowed("002"),
30            ResponseCode::NoContent => Cow::Borrowed("003"),
31            ResponseCode::BadRequest => Cow::Borrowed("004"),
32            ResponseCode::Unauthorized => Cow::Borrowed("005"),
33            ResponseCode::PaymentRequired => Cow::Borrowed("006"),
34            ResponseCode::Forbidden => Cow::Borrowed("007"),
35            ResponseCode::NotFound => Cow::Borrowed("008"),
36            ResponseCode::Conflict => Cow::Borrowed("009"),
37            ResponseCode::InternalServerError => Cow::Borrowed("010"),
38            ResponseCode::ServiceUnavailable => Cow::Borrowed("011"),
39            ResponseCode::NotImplemented => Cow::Borrowed("012"),
40            ResponseCode::Unknown(status) => Cow::Owned(status.as_u16().to_string()),
41        }
42    }
43
44    fn status(&self) -> StatusCode {
45        match self {
46            ResponseCode::Ok => StatusCode::OK,
47            ResponseCode::Created => StatusCode::CREATED,
48            ResponseCode::Accepted => StatusCode::ACCEPTED,
49            ResponseCode::NoContent => StatusCode::NO_CONTENT,
50            ResponseCode::BadRequest => StatusCode::BAD_REQUEST,
51            ResponseCode::Unauthorized => StatusCode::UNAUTHORIZED,
52            ResponseCode::PaymentRequired => StatusCode::PAYMENT_REQUIRED,
53            ResponseCode::Forbidden => StatusCode::FORBIDDEN,
54            ResponseCode::NotFound => StatusCode::NOT_FOUND,
55            ResponseCode::Conflict => StatusCode::CONFLICT,
56            ResponseCode::InternalServerError => StatusCode::INTERNAL_SERVER_ERROR,
57            ResponseCode::ServiceUnavailable => StatusCode::SERVICE_UNAVAILABLE,
58            ResponseCode::NotImplemented => StatusCode::NOT_IMPLEMENTED,
59            ResponseCode::Unknown(status) => *status,
60        }
61    }
62
63    fn from_code(code: &str) -> Self {
64        match code {
65            "000" => ResponseCode::Ok,
66            "001" => ResponseCode::Created,
67            "002" => ResponseCode::Accepted,
68            "003" => ResponseCode::NoContent,
69            "004" => ResponseCode::BadRequest,
70            "005" => ResponseCode::Unauthorized,
71            "006" => ResponseCode::PaymentRequired,
72            "007" => ResponseCode::Forbidden,
73            "008" => ResponseCode::NotFound,
74            "009" => ResponseCode::Conflict,
75            "010" => ResponseCode::InternalServerError,
76            "011" => ResponseCode::ServiceUnavailable,
77            "012" => ResponseCode::NotImplemented,
78            _ => {
79                error!("Unknown response code: {code}");
80                ResponseCode::InternalServerError
81            }
82        }
83    }
84
85    fn from_status(status: StatusCode) -> Self {
86        match status {
87            StatusCode::OK => ResponseCode::Ok,
88            StatusCode::CREATED => ResponseCode::Created,
89            StatusCode::ACCEPTED => ResponseCode::Accepted,
90            StatusCode::NO_CONTENT => ResponseCode::NoContent,
91            StatusCode::BAD_REQUEST => ResponseCode::BadRequest,
92            StatusCode::UNAUTHORIZED => ResponseCode::Unauthorized,
93            StatusCode::PAYMENT_REQUIRED => ResponseCode::PaymentRequired,
94            StatusCode::FORBIDDEN => ResponseCode::Forbidden,
95            StatusCode::NOT_FOUND => ResponseCode::NotFound,
96            StatusCode::CONFLICT => ResponseCode::Conflict,
97            StatusCode::INTERNAL_SERVER_ERROR => ResponseCode::InternalServerError,
98            StatusCode::SERVICE_UNAVAILABLE => ResponseCode::ServiceUnavailable,
99            StatusCode::NOT_IMPLEMENTED => ResponseCode::NotImplemented,
100            _ => ResponseCode::Unknown(status),
101        }
102    }
103}