title: Use of moved value when pattern matching an enum with multiple values after downcasting
body: <p>I can use pattern matching on an <code>enum</code> that has one <code>String</code> parameter:</p>
  
  <pre><code>extern crate robots;
  
  use std::any::Any;
  use robots::actors::{Actor, ActorCell};
  
  #[derive(Clone, PartialEq)]
  pub enum ExampleMessage {
      Msg { param_a: String },
  }
  
  pub struct Dummy {}
  
  impl Actor for Dummy {
      // Using `Any` is required for actors in RobotS
      fn receive(&amp;self, message: Box&lt;Any&gt;, _context: ActorCell) {
          if let Ok(message) = Box::&lt;Any&gt;::downcast::&lt;ExampleMessage&gt;(message) {
              match *message {
                  ExampleMessage::Msg { param_a } =&gt; println!("got message"),
              }
          }
      }
  }
  </code></pre>
  
  <p>And yet I am unable to perform pattern matching on an enum with 2 parameters:</p>
  
  <pre><code>#[derive(Clone, PartialEq)]
  pub enum ExampleMessage {
      Msg { param_a: String, param_b: usize },
  }
  
  impl Actor for Dummy {
      // Using `Any` is required for actors in RobotS
      fn receive(&amp;self, message: Box&lt;Any&gt;, _context: ActorCell) {
          if let Ok(message) = Box::&lt;Any&gt;::downcast::&lt;ExampleMessage&gt;(message) {
              match *message {
                  ExampleMessage::Msg { param_a, param_b } =&gt; println!("got message"),
              }
          }
      }
  }
  </code></pre>
  
  <p>This results in the error:</p>
  
  <pre class="lang-none prettyprint-override"><code>error[E0382]: use of moved value: `message`
    --&gt; src/example.rs:19:48
     |
  19 |                 ExampleMessage::Msg { param_a, param_b } =&gt; {
     |                                       -------  ^^^^^^^ value used here after move
     |                                       |
     |                                       value moved here
     |
     = note: move occurs because `message.param_a` has type `std::string::String`, which does not implement the `Copy` trait
  </code></pre>
  
  <p>I tried pattern matching on the same <code>enum</code> without downcasting before, and this works fine but I am required to downcast.
  This just seems like very strange behavior to me and I don't know how to circumvent this error.</p>
  
  <p>I am using Rust 1.19.0-nightly (afa1240e5 2017-04-29) </p>