message: [libra_channel] Implement clone for libra_channel::Sender
  Implementing `Clone` using the derive attribute has the disadvantage
  that it requires all the generic types to implement `Clone` as well.
  By explicitly implementing Clone trait for Sender we can remove this
  need and therefore make the implementation more general.
  Closes:
  Closes:
  Approved by: ankushagarwal
diff: @@ -41,7 +41,7 @@ struct SharedState<K: Eq + Hash + Clone, M> {
  }
  /// The sending end of the libra_channel.
  -#[derive(Clone, Debug)]
  +#[derive(Debug)]
  pub struct Sender<K: Eq + Hash + Clone, M> {
  shared_state: Arc<Mutex<SharedState<K, M>>>,
  }
  @@ -61,6 +61,14 @@ impl<K: Eq + Hash + Clone, M> Sender<K, M> {
  }
  }
  +impl<K: Eq + Hash + Clone, M> Clone for Sender<K, M> {
  + fn clone(&self) -> Self {
  + Sender {
  + shared_state: self.shared_state.clone(),
  + }
  + }
  +}
  +
  impl<K: Eq + Hash + Clone, M> Drop for Sender<K, M> {
  fn drop(&mut self) {
  let mut shared_state = self.shared_state.lock().unwrap();
  