Прежде всего я хочу упомянуть, что есть много похожих вопросов о StackOverflow и в Интернете, но я просто не могу понять, как решить эту ошибку для моего случая.
Итак, у меня есть структура, который представляет мой собственный тип ошибки:
#[derive(Debug)]
pub struct Error {
msg: String,
}
Затем я продолжил реализацию Display
и std::error::Error
для моего типа ошибки:
impl Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.msg)
}
}
impl std::error::Error for Error {
fn description(&self) -> &str {
&self.msg
}
}
Теперь я попытался реализовать std::convert::From
так Я могу беспрепятственно использовать свой тип ошибки с оператором ?
:
impl From<dyn std::error::Error> for Error {
fn from(err: dyn std::error::Error) -> Self {
Error {
msg: err.to_string(),
}
}
}
Но тогда ржавый компилятор выдаст мне эту ошибку:
error[E0277]: the size for values of type `(dyn std::error::Error + 'static)` cannot be known
at compilation time
--> wasm_api/geohub_wasm_filehandler_api/src/lib.rs:33:6
|
33 | impl From<dyn std::error::Error> for Error {
| ^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
Я знаю, что по умолчанию, generi c функции будут работать только на типах, которые имеют известный размер во время компиляции. Но я не могу понять, как правильно решить эту проблему.
Спасибо за вашу помощь!
Ссылка на код на Rust-Playground:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=568900e8c7847c1f79781fa9bb6d499d