2020/3/6 2:00 追記
先ほどfailureのv0.1.7がリリースされたことで問題は解決しました。
現在は以下の対策は不要になっています。
はじめに
2020/3/5現在、Rustの多くのクレートが以下のようなコンパイルエラーになる可能性があります。
結構影響範囲が広そうなので原因と対策をまとめておきます。
error[E0433]: failed to resolve: could not find `__rt` in `quote`
--> /Users/sloveless/.cargo/registry/src/github.com-1ecc6299db9ec823/failure_derive-0.1.6/src/lib.rs:107:70
|
107 | fn display_body(s: &synstructure::Structure) -> Result<Option<quote::__rt::TokenStream>, Error> {
| ^^^^ could not find `__rt` in `quote`
対策
自分のクレートがコンパイルエラーになる場合はCargo.tomlに以下を追加してください。
("1.0.2"の前についている=
が重要です)
[dependencies]
quote = "=1.0.2" # workaround of https://github.com/rust-lang-nursery/failure/issues/342
cargo install
コマンドが失敗する場合には、代わりにcargo install --locked
を使ってください。
原因
2020/3/5 9:00頃にquoteクレートのバージョン1.0.3がリリースされました。1.0.2からのパッチバージョンアップデートなので、アップデートしても互換性に問題ないはずだったのですが、failure_deriveが壊れる結果となりました。
これはfailure_deriveがquoteの非公開APIを使っていたためのようです。(詳細は未確認です)
failure_deriveはfailureを通してcrates.io内の多数のクレートで使われており、手元の計測では全クレートの6割に達します。
そのためかなり高い確率でこの問題の影響を受けることになると思われます。
すでにCargo.lockを作成済みの環境ではcargo update
しない限り影響はありません。