simbld_http/responses/
mod.rs1pub mod actix_responder;
2pub mod client;
3pub mod crawler;
4pub mod informational;
5pub mod local;
6pub mod redirection;
7pub mod server;
8pub mod service;
9pub mod success;
10pub mod wrapper;
11
12pub use actix_responder::CustomResponse;
13pub use client::ResponsesClientCodes;
14pub use crawler::ResponsesCrawlerCodes;
15pub use informational::ResponsesInformationalCodes;
16pub use local::ResponsesLocalApiCodes;
17pub use redirection::ResponsesRedirectionCodes;
18pub use server::ResponsesServerCodes;
19pub use service::ResponsesServiceCodes;
20pub use success::ResponsesSuccessCodes;
21pub use wrapper::ResponseWrapper;
22
23use crate::helpers::{from_u16_helper::FromU16, to_u16_helper::ToU16};
24use strum::EnumProperty;
25use strum::IntoEnumIterator;
26use strum_macros::EnumProperty;
27
28#[derive(Debug, Clone, Copy, EnumProperty)]
30pub enum ResponsesTypes {
31 Informational(ResponsesInformationalCodes),
32 Success(ResponsesSuccessCodes),
33 Redirection(ResponsesRedirectionCodes),
34 ClientError(ResponsesClientCodes),
35 ServerError(ResponsesServerCodes),
36 ServiceError(ResponsesServiceCodes),
37 CrawlerError(ResponsesCrawlerCodes),
38 LocalApiError(ResponsesLocalApiCodes),
39}
40
41generate_http_response_functions!(
42 ResponsesClientCodes,
43 ResponsesCrawlerCodes,
44 ResponsesInformationalCodes,
45 ResponsesLocalApiCodes,
46 ResponsesRedirectionCodes,
47 ResponsesServerCodes,
48 ResponsesServiceCodes,
49 ResponsesSuccessCodes
50);
51
52impl ResponsesTypes {
53 pub fn from_u16(code: u16) -> Option<Self> {
55 if let Some(info_code) = ResponsesInformationalCodes::from_u16(code) {
56 return Some(ResponsesTypes::Informational(info_code));
57 }
58 if let Some(success_code) = ResponsesSuccessCodes::from_u16(code) {
59 return Some(ResponsesTypes::Success(success_code));
60 }
61 if let Some(redirect_code) = ResponsesRedirectionCodes::from_u16(code) {
62 return Some(ResponsesTypes::Redirection(redirect_code));
63 }
64 if let Some(client_error) = ResponsesClientCodes::from_u16(code) {
65 return Some(ResponsesTypes::ClientError(client_error));
66 }
67 if let Some(server_error) = ResponsesServerCodes::from_u16(code) {
68 return Some(ResponsesTypes::ServerError(server_error));
69 }
70 if let Some(service_error) = ResponsesServiceCodes::from_u16(code) {
71 return Some(ResponsesTypes::ServiceError(service_error));
72 }
73 if let Some(crawler_error) = ResponsesCrawlerCodes::from_u16(code) {
74 return Some(ResponsesTypes::CrawlerError(crawler_error));
75 }
76 if let Some(local_api_error) = ResponsesLocalApiCodes::from_u16(code) {
77 return Some(ResponsesTypes::LocalApiError(local_api_error));
78 }
79 None
80 }
81
82 pub fn description(&self) -> &'static str {
84 match self {
85 ResponsesTypes::Informational(code_enum) => {
86 code_enum.get_str("Description").unwrap_or("No description")
87 },
88 ResponsesTypes::Success(code_enum) => {
89 code_enum.get_str("Description").unwrap_or("No description")
90 },
91 ResponsesTypes::Redirection(code_enum) => {
92 code_enum.get_str("Description").unwrap_or("No description")
93 },
94 ResponsesTypes::ClientError(code_enum) => {
95 code_enum.get_str("Description").unwrap_or("No description")
96 },
97 ResponsesTypes::ServerError(code_enum) => {
98 code_enum.get_str("Description").unwrap_or("No description")
99 },
100 ResponsesTypes::ServiceError(code_enum) => {
101 code_enum.get_str("Description").unwrap_or("No description")
102 },
103 ResponsesTypes::CrawlerError(code_enum) => {
104 code_enum.get_str("Description").unwrap_or("No description")
105 },
106 ResponsesTypes::LocalApiError(code_enum) => {
107 code_enum.get_str("Description").unwrap_or("No description")
108 },
109 }
110 }
111
112 pub fn get_response_description(&self) -> (u16, &'static str) {
113 match self {
114 ResponsesTypes::Informational(code) => {
115 (code.to_u16(), code.get_str("Description").unwrap_or(""))
116 },
117 ResponsesTypes::Success(code) => (code.to_u16(), code.get_str("Description").unwrap_or("")),
118 ResponsesTypes::Redirection(code) => {
119 (code.to_u16(), code.get_str("Description").unwrap_or(""))
120 },
121 ResponsesTypes::ClientError(code) => {
122 (code.to_u16(), code.get_str("Description").unwrap_or(""))
123 },
124 ResponsesTypes::ServerError(code) => {
125 (code.to_u16(), code.get_str("Description").unwrap_or(""))
126 },
127 ResponsesTypes::ServiceError(code) => {
128 (code.to_u16(), code.get_str("Description").unwrap_or(""))
129 },
130 ResponsesTypes::CrawlerError(code) => {
131 (code.to_u16(), code.get_str("Description").unwrap_or(""))
132 },
133 ResponsesTypes::LocalApiError(code) => {
134 (code.to_u16(), code.get_str("Description").unwrap_or(""))
135 },
136 }
137 }
138}
139
140impl ToU16 for ResponsesTypes {
142 fn to_u16(self) -> u16 {
143 match self {
144 ResponsesTypes::Informational(code_enum) => code_enum.to_u16(),
145 ResponsesTypes::Success(code_enum) => code_enum.to_u16(),
146 ResponsesTypes::Redirection(code_enum) => code_enum.to_u16(),
147 ResponsesTypes::ClientError(code_enum) => code_enum.to_u16(),
148 ResponsesTypes::ServerError(code_enum) => code_enum.to_u16(),
149 ResponsesTypes::ServiceError(code_enum) => code_enum.to_u16(),
150 ResponsesTypes::CrawlerError(code_enum) => code_enum.to_u16(),
151 ResponsesTypes::LocalApiError(code_enum) => code_enum.to_u16(),
152 }
153 }
154}