use axum::{http::StatusCode, response::IntoResponse};
#[repr(u8)]
#[derive(Debug, PartialEq)]
pub enum UniResponse {
Success = 0,
ValidateError = 1,
AuthError = 2,
Timeout = 3,
Conflict = 4,
Duplicate = 11,
CheckError = 12,
CodeError = 13,
MsgError = 14,
WriteError = 15,
ReadError = 16,
SendError = 17,
}
impl UniResponse {
pub fn from_bytes(res_data: &[u8]) -> Self {
match res_data[0] {
0 => UniResponse::Success,
1 => UniResponse::ValidateError,
2 => UniResponse::AuthError,
3 => UniResponse::Timeout,
4 => UniResponse::Conflict,
11 => UniResponse::Duplicate,
12 => UniResponse::CheckError,
13 => UniResponse::CodeError,
14 => UniResponse::MsgError,
15 => UniResponse::WriteError,
16 => UniResponse::ReadError,
17 => UniResponse::SendError,
_ => panic!("转换命令处理结果枚举失败"),
}
}
pub fn to_bytes(self) -> [u8; 1] {
[self as u8]
}
}
impl std::fmt::Display for UniResponse {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
UniResponse::Success => write!(f, "成功"),
UniResponse::ValidateError => write!(f, "命令数据验证错误"),
UniResponse::AuthError => write!(f, "身份验证错误"),
UniResponse::Timeout => write!(f, "请求超时"),
UniResponse::Conflict => write!(f, "被冲突的新命令取代"),
UniResponse::Duplicate => write!(f, "命令已执行成功"),
UniResponse::CheckError => write!(f, "命令无法应用到聚合"),
UniResponse::CodeError => write!(f, "序列化错误"),
UniResponse::MsgError => write!(f, "消息处理错误"),
UniResponse::WriteError => write!(f, "写入事件流错误"),
UniResponse::ReadError => write!(f, "读取事件流错误"),
UniResponse::SendError => write!(f, "写入命令流错误"),
}
}
}
impl IntoResponse for UniResponse {
fn into_response(self) -> axum::response::Response {
match self {
UniResponse::Success => (StatusCode::OK, "成功").into_response(),
UniResponse::ValidateError => {
(StatusCode::BAD_REQUEST, "命令数据验证错误").into_response()
}
UniResponse::AuthError => (StatusCode::UNAUTHORIZED, "身份验证错误").into_response(),
UniResponse::Timeout => (StatusCode::REQUEST_TIMEOUT, "请求超时").into_response(),
UniResponse::Conflict => (StatusCode::CONFLICT, "被冲突的新命令取代").into_response(),
UniResponse::Duplicate => (StatusCode::OK, "命令已执行成功").into_response(),
UniResponse::CheckError => {
(StatusCode::BAD_REQUEST, "命令无法应用到聚合").into_response()
}
UniResponse::CodeError => {
(StatusCode::INTERNAL_SERVER_ERROR, "序列化错误").into_response()
}
UniResponse::MsgError => {
(StatusCode::INTERNAL_SERVER_ERROR, "消息处理错误").into_response()
}
UniResponse::WriteError => {
(StatusCode::INTERNAL_SERVER_ERROR, "写入事件流错误").into_response()
}
UniResponse::ReadError => {
(StatusCode::INTERNAL_SERVER_ERROR, "读取事件流错误").into_response()
}
UniResponse::SendError => {
(StatusCode::INTERNAL_SERVER_ERROR, "写入命令流错误").into_response()
}
}
}
}