Hi, first of all sorry if it’s not the place to ask (I’ll delete the post if it’s the case).

I started to learn Rust a few days ago and I’m currently doing the rustlings course. I’m at the exercise error_handling/errors2.rs. I’ve succeed to make it compile using the ? operator which I find kinda easy to understand.

My problem is the following: It’s stated in the exercise that there’s another solution. After looking at the hint, I know that the other solution is the use of match. I’ve kept looking at the docs, the examples and also StackOverflow posts but I can’t make it work since I really don’t understand how it’s supposed to work.

Here's what I tried:
pub fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
         let processing_fee = 1;
         let cost_per_item = 5;
         let qty = item_quantity.parse();

         match qty {
                 Ok(qty) => qty * cost_per_item + processing_fee,
                 Err(e) => Err(e),                                           
         };
}
And here's what the compiler give:

expected enum 'Result<i32, ParseIntError>' found unit type '()'

  • Dessalines
    link
    fedilink
    4
    edit-2
    3 years ago

    You also don’t need that match there. You should be able to do :

    let qty = item_quantity.parse()?;
    let whatever = qty * cost_per_item + processing_fee;
    Ok(whatever)
    

    Check out the sections on error handling in the rust book.

    • @Reaton@lemmy.mlOP
      link
      fedilink
      23 years ago

      That’s what I did at first but I wanted to understand how to use match since they stated that we could use both case.