rust - Miette Result type from Option? - Stack Overflow

I'm trying to be a grown up about how I handle errors in my rust code, and not just unwrap everyth

I'm trying to be a grown up about how I handle errors in my rust code, and not just unwrap everything. I'm currently using Miette.

I want to be able to use the ?; syntax, preferably in a very lightweight way. I'm running into problems with what seems like it should be a very easy and common case - converting an Option into a Result.

pub fn foo() -> miette::Result<String>{
    let result = bar().some_function("Bar gave us nothing")?;
    Ok(result)
}
fn bar () -> Option<String>{
    Some("bar".to_string())
}

I've tried a bunch of options to make some_function work, but they all end up messy. The best I've managed to do so far is:

pub fn foo() -> miette::Result<String>{
    let result =  match bar(){
        Some(s) => Ok::<String, miette::Report>(s),
        None => miette::bail!("No bar")
    }?;

    Ok(result)
}
fn bar () -> Option<String>{
    Some("bar".to_string())
}

That seems to work but it'd be a pain to use everywhere... I could wrap it into a custom function and even make some trait in my project implemented on Option<T>, but I feel like I'm missing something obvious. What's the idiomatic way to approach this?

EDIT:

After some fiddling, I found that

let result =  bar().ok_or(miette::Error::msg("Bar Failed"))?;

works. That's vaguely acceptable but I'd still like to clean it up more, ideally down to a single call... is there a better way?

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744241959a4564748.html

相关推荐

  • rust - Miette Result type from Option? - Stack Overflow

    I'm trying to be a grown up about how I handle errors in my rust code, and not just unwrap everyth

    8天前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信