LoginSignup
12
2

More than 3 years have passed since last update.

Rustのfailure_deriveコンパイルエラー(解決しました)

Last updated at Posted at 2020-03-05

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"の前についている=が重要です)

Cargo.toml
[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しない限り影響はありません。

12
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
2