@lo48576 ShoppingWarningの例に関しては、Brokenをtroublesに記録しないことにすれば.clone()が不要になる(下記コード)のでClone実装の必要性が低いと思います。
Brokenは最終的にbuy関数の戻り値でErrとして返ってくるわけですからハンドラの内部で記録する必要性も低いですし。
// 160行目
buy(2, 2, |w| {
if let ShoppingWarning::Broken = w {
Err(w)
} else {
troubles.push(w);
Ok(())
}
})
// https://play.rust-lang.org/?gist=c9d9f91d1881e3b15df9f87c2f31553f