【发布时间】:2022-10-02 11:07:28
【问题描述】:
我正在尝试为任何Error 创建一个带有毯子From 实现的错误类型,但是由于这种类型本身就是Error,所以我遇到了冲突:
pub struct ApiError(pub i64, pub String);
impl<T: Error> From<T> for ApiError {
fn from(err: T) -> Self {
Self(500, err.to_string())
}
}
impl Error for ApiError {}
error[E0119]: conflicting implementations of trait `std::convert::From<ApiError>` for type `ApiError`
--> src/lib.rs:5:1
|
5 | impl<T: Error> From<T> for ApiError {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: conflicting implementation in crate `core`:
- impl<T> From<T> for T;
我认为这是因为我通过在ApiError 上实现Error 创建的循环。是否可以说T: Error & not ApiError 之类的内容并将我的特定类型从From 的此一揽子实现中排除?
如果这不可能,我很好奇anyhow 似乎做了类似的事情?
【问题讨论】:
-
不,这是不可能的。