From
我正在尝试创建一个错误类型,并为 any 提供一揽子实现Error
,但是由于该类型本身就是一个错误类型,所以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 {}
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
我认为这是因为我通过实施创建的Error
循环ApiError
。是否可以这样说T: Error & not ApiError
并将我的特定类型从这个一揽子实现中排除From
?
如果这是不可能的,我很好奇无论如何似乎会做类似的事情?
你不能在 Rust 中做到这一点,但有一个解决方法。
查看文档,anyhow::Error
没有实现Error
,而是实现了Deref<Error>
(和类似的特征)。这允许anyhow::Error
默默地转换为&Error
.
这意味着它现在可以实施From<T:Error>
而不会遇到您提到的冲突。
归档时间: |
|
查看次数: |
750 次 |
最近记录: |