Я пытаюсь понять обработку ошибок из одного из примеры из репозитория 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
сообщение (_7 _...) в моем терминале.
Есть ли какой-нибудь удобный встроенный способ отобразить это в моих журналах, кроме добавления println!
в error_response
? Я считаю, что имеет смысл отображать точную ошибку, а не общий InternalServerError
: т.е. NetworkError / ParseError.
Если нет, то по какой причине он был разработан без возможности увидеть точную ошибку?