2017-02-20 8 views
1

夜間に作業していたコードがあります(2016-11-15)。私が1.15.1の安定版にアップグレードしたとき、型の実装が見つからないというエラーが発生し始めました。関連From実装があるにもかかわらず...関連する種類の形質実装が見つかりません

error[E0277]: the trait bound `errors::Error: core::convert::From<r2d2_postgres::<unnamed>::error::Error>` is not satisfied 
    --> src/pg/datastore.rs:79:23 
    | 
79 |   let results = conn.query("DELETE FROM accounts WHERE id=$1 RETURNING 1", &[&account_id])?; 
    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `core::convert::From<r2d2_postgres::<unnamed>::error::Error>` is not implemented for `errors::Error` 
    | 
    = help: the following implementations were found: 
    = help: <errors::Error as core::convert::From<r2d2_postgres::Error>> 
    = help: <errors::Error as core::convert::From<postgres::error::Error>> 
    = help: <errors::Error as core::convert::From<r2d2::GetTimeout>> 
    = help: <errors::Error as core::convert::From<rocksdb::Error>> 
    = help: and 3 others 
    = note: required by `core::convert::From::from` 

:ここでは例です。

use std::error::Error as StdError; 
use r2d2::GetTimeout; 
use postgres::error::Error as PostgresError; 
use r2d2_postgres::Error as R2D2PostgresError; 
use super::fmt; 

#[derive(Eq, PartialEq, Clone, Debug)] 
pub enum Error { 
    Unexpected(String), 
    ... 
} 

impl StdError for Error { 
    fn description(&self) -> &str { 
     ... 
    } 

    fn cause(&self) -> Option<&StdError> { 
     None 
    } 
} 

impl From<R2D2PostgresError> for Error { 
    fn from(err: R2D2PostgresError) -> Error { 
     Error::Unexpected(format!("{}", err)) 
    } 
} 

impl From<PostgresError> for Error { 
    fn from(err: PostgresError) -> Error { 
     Error::Unexpected(pg_error_to_description(err)) 
    } 
} 

impl From<GetTimeout> for Error { 
    fn from(err: GetTimeout) -> Error { 
     Error::Unexpected(format!("Could not fetch connection: {}", err)) 
    } 
} 

これは他のコンテキストでは起こりそうにないので、これは関連タイプの使用と関係があると思います。さらに、ネームスペースr2d2_postgres::<unnamed>::error::Errorは意味をなさない - <unnamed>とは何ですか?ここにはthe relevant type associationがあります。

+0

申し訳ありませんが、私は質問がすでにあまりにも長ったらしい取得し、答えがかもしれないとしていることを心配していました他人には明らかである。私はそれをさらに肉付けします。 – ysimonson

+0

提示されたコードを取り出してコンパイルすると(externボックスの追加、 'Display'の実装、インポートの修正、' ... 'など)、このコードをローカルでテストしなかったことを示す)、コードはあなたは言う。 [MCVE]を提供するまで、役に立つ助けを得ることはほとんどありません。具体的には、質問から直接コピーしてローカルに貼り付け、同じエラーメッセージが表示される可能性が最も高い回答です。 – Shepmaster

+0

@Shepmasterあなたのコメントを削除する前に私たちが持っていた会話の中で述べたように、私は最小限の例を作ることに問題がありました。この質問は、(まだ)オープンソースではない大きなコードベースの一部であるため、一般的には解きにくいものでした。私は後世のために、私のためにそれを修正したものにコメントを残します。 – ysimonson

答えて

2

これはバージョンの競合が原因であることが判明しました。別のバージョンの競合を修正するためにpostgresのマスターブランチに切り替えましたが、r2d2_postgrespostgresという別のバージョンを参照していました。 this issueで説明したように

幸いにも、Cargo.tomlは、あなたがこのようにそれを処理することができます[replace]セクションがあります。

[replace] 
"postgres:0.13.6" = { git = "https://github.com/sfackler/rust-postgres" } 
関連する問題