@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(())
}
})
// play.rust-lang.org/?gist=c9d9f

Box<Error>がclone出来ないというのも辛い。
というより、Cloneがオブジェクト安全じゃないのが辛い。どうしようもないことだけど

web+mastodon://share?text=test