Error handling 如何定义from方法来转换外部结果类型中的错误?

Error handling 如何定义from方法来转换外部结果类型中的错误?,error-handling,rust,Error Handling,Rust,我有一对Result类型别名,AResult和BResultAResult来自另一个板条箱,并嵌入其自己的错误类型arError。我有我的结果(BResult),我想将错误从AError转换为BError,以便将它们嵌入我返回的BResult 但Rust抱怨我无法从另一个板条箱中定义事物: error[E0117]:对于任意类型,只能实现当前板条箱中定义的特征 -->src/main.rs:12:1 | 12 |为BResult从导入{ | ^^^^^-------------^^^^^---

我有一对
Result
类型别名,
AResult
BResult
AResult
来自另一个板条箱,并嵌入其自己的错误类型
arError
。我有我的结果(
BResult
),我想将错误从
AError
转换为
BError
,以便将它们嵌入我返回的
BResult

但Rust抱怨我无法从另一个板条箱中定义事物:

error[E0117]:对于任意类型,只能实现当前板条箱中定义的特征
-->src/main.rs:12:1
|
12 |为BResult从导入{
| ^^^^^-------------^^^^^-------
| |    |                 |
|| | `std::result::result`未在当前板条箱中定义
||'std::result::result'未在当前板条箱中定义
|impl不仅使用当前板条箱中的类型
|
=注意:定义并实现特征或新类型
我试图在
BResult
上定义一个实现,而不是
AResult

我在做一些非常愚蠢的事情吗?有更好的方法吗?

重复项和更多.TL;DR:只定义错误类型之间的转换,而不是结果别名。重复项和更多.TL;DR:只定义错误类型之间的转换,而不是结果别名。
struct AError(u32);
struct BError(i64);
type AResult = Result<(), AError>;
type BResult = Result<(), BError>;

impl From<AError> for BError {
    fn from(item: AError) -> Self {
        (item as i64)
    }
}

impl From<AResult> for BResult {
    fn from(item: AResult) -> Self {
        item.map_err(BError::from)
    }
}

fn main() {
    let result_as_a: AResult = Err(5u32);
    let result_as_b = result_as_a;
    if let Err(value) = result_as_b {
        print!("{}", value);
    }
}
impl From<AResult> for BResult {
    fn from(item: AResult) -> Self {
        item.map_err(BError::from)
    }
}