rust 在函数内部 Package 返回错误的惯用方法

xxhby3vn  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(150)

我不断地遇到生 rust 的模式。我的解决方案似乎非常冗长。想知道是否有更惯用的方法来完成同样的事情。
我有一个函数,在执行到一半的时候可能会出错。我需要要么得到结果并继续处理,要么返回一个错误。这个错误需要一个自定义类型并有一些上下文。

async fn load_data() -> Result<SomeOutput, MyError> {
    ...

    let raw = match str::from_utf8(&output.stdout) {
        Ok(o) => o,
        Err(e) => {
            return Err(MyError::FailedParse(
                "failed to read output from command X".into(),
                e.to_string(),
            ));
        }
    };

    ...
        
}

我已经考虑过在原始错误类型中添加一个From trait,但是这样错误总是会被转换成那个类型。我想更多地控制什么时候返回什么类型的错误。

dffbzjpn

dffbzjpn1#

这取决于你到底需要什么。
对于初学者来说,当然有?操作,不确定operator这个词是否正确,当然,这要求底层错误的From trait是为您的错误类型实现的,它缺乏您所寻求的控制。
因此,Result上实现了各种方法,您可以使用map_err将底层错误转换为您实际想要返回的错误。
这可能会比你想的要麻烦得多,所以还有两个板条箱需要检查:anyhowthiserror

相关问题