Method call on clap::App moving ownership more than once
<p>Even after reading the chapters about reference ownership and borrowing, I  cannot understand some things in the following code, effectively stopping me from calling more than one method from <code>clap::App</code>!</p>

<pre><code>extern crate clap;

use clap::App;

fn main() {
    let mut app =
        App::new("name me").args_from_usage("&lt;input_file&gt;          'Sets the input file to use'");
    let matches = app.get_matches();
    app.print_help();
    println!(
        "Using input file: {}",
        matches.value_of("input_file").unwrap()
    );
}
</code></pre>

<p>Compiling this code leads to:</p>

<pre class="lang-none prettyprint-override"><code>error[E0382]: use of moved value: `app`
 --&gt; src/main.rs:9:5
  |
8 |     let matches = app.get_matches();
  |                   --- value moved here
9 |     app.print_help();
  |     ^^^ value used here after move
  |
  = note: move occurs because `app` has type `clap::App&lt;'_, '_&gt;`, which does not implement the `Copy` trait
</code></pre>

<ol>
<li>If I understand correctly, <code>app.get_matches()</code> asks to borrow the ownership, thus <code>app</code> must be <code>mut</code>. Where does the ownership go once the function returns?</li>
<li>I thought <code>app</code> would still have ownership of the object, yet the compiler has a different opinion.</li>
</ol>

<p>How can I get the matches, and effectively still call another method, such as <code>print_help</code> on <code>app</code> then?</p>