У меня ошибка типа std :: boxed :: Box, и я хотел бы иметь возможность использовать IntoHandlerError
для преобразования ее в ошибку, которую может gotham использовать. Компилятор услужливо говорит мне:
error[E0599]: no method named `into_handler_error` found for type `std::boxed::Box<dyn std::error::Error + std::marker::Send + std::marker::Sync>` in the current scope
--> web/src/main.rs:112:31
|
112 | (state, x.into_handler_error())
| ^^^^^^^^^^^^^^^^^^ method not found in `std::boxed::Box<dyn std::error::Error + std::marker::Send + std::marker::Sync>`
|
= note: the method `into_handler_error` exists but the following trait bounds were not satisfied:
`&dyn std::error::Error + std::marker::Send + std::marker::Sync : gotham::handler::error::IntoHandlerError`
`&mut dyn std::error::Error + std::marker::Send + std::marker::Sync : gotham::handler::error::IntoHandlerError`
`&mut std::boxed::Box<dyn std::error::Error + std::marker::Send + std::marker::Sync> : gotham::handler::error::IntoHandlerError`
`&std::boxed::Box<dyn std::error::Error + std::marker::Send + std::marker::Sync> : gotham::handler::error::IntoHandlerError`
`dyn std::error::Error + std::marker::Send + std::marker::Sync : gotham::handler::error::IntoHandlerError`
`std::boxed::Box<dyn std::error::Error + std::marker::Send + std::marker::Sync> : gotham::handler::error::IntoHandlerError`
Я уверен, что я идиот, но тип, названный вверху, похоже, точно соответствует последнему перечисленному типу. Что дает?
Добавление разыменования не помогает:
error[E0599]: no method named `into_handler_error` found for type `&dyn std::error::Error + std::marker::Send + std::marker::Sync` in the current scope
--> web/src/main.rs:124:45
|
124 | Err(e) => Err((state, (&*e).into_handler_error()))
| ^^^^^^^^^^^^^^^^^^ method not found in `&dyn std::error::Error + std::marker::Send + std::marker::Sync`
|
= note: the method `into_handler_error` exists but the following trait bounds were not satisfied:
`&&dyn std::error::Error + std::marker::Send + std::marker::Sync : gotham::handler::error::IntoHandlerError`
`&dyn std::error::Error + std::marker::Send + std::marker::Sync : gotham::handler::error::IntoHandlerError`
`&mut &dyn std::error::Error + std::marker::Send + std::marker::Sync : gotham::handler::error::IntoHandlerError`
`&mut dyn std::error::Error + std::marker::Send + std::marker::Sync : gotham::handler::error::IntoHandlerError`
`dyn std::error::Error + std::marker::Send + std::marker::Sync : gotham::handler::error::IntoHandlerError`