This repository was archived by the owner on Aug 16, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 137
How to impl a trait for failure::Error?Β #104
Copy link
Copy link
Open
Description
I trying to migrate from quick_error
to failure
with the following code.
This was the original error enum:
quick_error!{
#[derive(Debug)]
pub enum AppError {
Business(err: BusinessError){
from()
cause(err)
description(err.description())
}
R2d2(err: r2d2::Error){
from()
}
// ...
Other(err: Box<error::Error + Send + Sync>){
from()
description(err.description())
from(err: io::Error) -> (Box::new(err))
}
}
}
that is used within a rocket module:
type Result<T> = result::Result<Json<T>, AppError>;
#[get("/count/tags")]
fn get_count_tags(db: State<DbPool>) -> Result<usize> {
let tags = usecase::get_tag_ids(&*db.get()?)?;
Ok(Json(tags.len()))
}
And here I was able to impl a trait for my custom AppError
:
impl<'r> Responder<'r> for AppError {
fn respond_to(self, _: &rocket::Request) -> result::Result<Response<'r>, Status> {
Err(match self {
AppError::Business(ref err) => {
// ...
}
_ => Status::InternalServerError,
})
}
}
With failure
I don't need the wrapping AppError
anymore (π) so now the Result
looks like this:
type Result<T> = result::Result<Json<T>, failure::Error>;
And everything is fine but of course I can't implement a trait for the external failure::Error
:(
How would you solve this? Keep using the wrapper AppError
that holds all possible error types?
Or use a struct WrappedError(failure::Error)
and impl the std::error::Error
manually?
devops398
Metadata
Metadata
Assignees
Labels
No labels