我正在尝试实现一个错误枚举,它可以包含与我们的一个特征相关的错误,如下所示:
trait Storage {
type Error;
}
enum MyError<S: Storage> {
StorageProblem(S::Error),
}
我还尝试实施
From
允许构建的特性
MyError
来自
Storage::Error
:
impl<S: Storage> From<S::Error> for MyError<S> {
fn from(error: S::Error) -> MyError<S> {
MyError::StorageProblem(error)
}
}
(
playground
)
但是,这无法编译:
error[E0119]: conflicting implementations of trait `std::convert::From<MyError<_>>` for type `MyError<_>`:
--> src/lib.rs:9:1
|
9 | impl<S: Storage> From<S::Error> for MyError<S> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: conflicting implementation in crate `core`:
- impl<T> std::convert::From<T> for T;
我不明白为什么编译器认为这已经实现了。错误消息告诉我
From<MyError<_>>
(确实如此),但我并没有试图在这里实现它——我正在努力实现
From<S::Error>
和
MyError
与类型不同
S::Error
从我所看到的。
我是不是遗漏了一些泛型的基本内容?