title: Is there any way of doing unwrap_or_return an Error (any error)
body: <p>Is there any way to simplify the returns in the following example (originally copied from <a href="https://doc.rust-lang.org/rust-by-example/error/result/early_returns.html" rel="nofollow noreferrer">here</a>):</p>
  
  <pre><code>use std::num::ParseIntError;
  
  fn multiply(first_number_str: &amp;str, second_number_str: &amp;str) -&gt; Result&lt;i32, ParseIntError&gt; {
      let first_number = match first_number_str.parse::&lt;i32&gt;() {
          Ok(first_number)  =&gt; first_number,
          Err(e) =&gt; return Err(e),
      };
  
      let second_number = match second_number_str.parse::&lt;i32&gt;() {
          Ok(second_number)  =&gt; second_number,
          Err(e) =&gt; return Err(AnotherError::ParseError("error")),
      };
  
      Ok(first_number * second_number)
  }
  </code></pre>
  
  <p>I mean something like:</p>
  
  <pre><code>use std::num::ParseIntError;
  
  fn multiply(first_number_str: &amp;str, second_number_str: &amp;str) -&gt; Result&lt;i32, ParseIntError&gt; {
      let first_number = first_number_str.parse::&lt;i32&gt;()
          .unwrap_or_return(|e| Err(e));
  
      let second_number = second_number_str.parse::&lt;i32&gt;()
          .unwrap_or_return(|e| Err(AnotherError::ParseError("error"));
  
      Ok(first_number * second_number)
  }
  </code></pre>