Я пытаюсь понять обработку ошибок из одного из примеров из репозитория Actix.Он использует failure
ящик для обработки ошибок.Вот соответствующий фрагмент кода:
#[derive(Fail, Debug)]
pub enum ServiceError {
#[fail(display = "Internal Server Error: {}", _0)]
InternalServerError(String),
#[fail(display = "BadRequest: {}", _0)]
BadRequest(String),
#[fail(display = "Unauthorized")]
Unauthorized,
}
impl ResponseError for ServiceError {
fn error_response(&self) -> HttpResponse {
match *self {
ServiceError::InternalServerError { .. } => HttpResponse::InternalServerError().json("Internal Server Error, Please try later"),
ServiceError::BadRequest(ref message) => HttpResponse::BadRequest().json(message)
}
}
}
impl From<ParseError> for ServiceError {
fn from(_: ParseError) -> ServiceError {
ServiceError::BadRequest("Invalid UUID".into())
}
}
Если мой обработчик вернет ServiceError
, код не паникует, он отобразит HttpResponse
(см. error_response()
).Из-за этого я не смогу видеть сообщение Fail
(#[fail(display
...) в моем терминале.
Есть ли какой-нибудь хороший встроенный способ отобразить его в моих журналах, другойчем, добавив println!
к error_response
?Я считаю, что имеет смысл отображать точную ошибку, а не общую InternalServerError
: то есть NetworkError / ParseError .
Если нет, то по какой причине он был разработан без возможности увидеть точную ошибку?