foxtive_ntex/enums/
response_code.rs1use 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}