2017-04-03 42 views
0

板條箱sha2包含類型Sha256,其實現板條箱digest中定義的特徵Digest。該特徵也從sha2轉出。使用實現來自不同板條箱的特徵的結構體

我想寫沒有提及sha2文件,只需digest

merkle_tree.rs:

use digest::Digest; 

#[derive(Default)] 
pub struct MerkleTree<T: Digest> { 
    digest: T, 
} 

impl<T: Digest+Default> MerkleTree<T> { 
    pub fn new() -> MerkleTree<T> { 
     MerkleTree{ ..Default::default() } 
    } 
} 

main.rs:

extern crate digest; 
extern crate sha2; 

mod merkle_tree; 

use sha2::{Digest, Sha256}; 
use merkle_tree::MerkleTree; 

fn main() { 
    let mut mt = MerkleTree::<Sha256>::new(); 
    println!("Hello, world!"); 
} 

我有以下輸出:

error: no associated item named new found for type merkle_tree::MerkleTree<sha2::Sha256> in the current scope the trait digest::Digest is not implemented for sha2::Sha256

Cargo.toml:

[package] 
name = "merkle_tree" 
version = "0.1.0" 
authors = ["Simon Prykhodko <[email protected]>"] 

[dependencies] 
digest = "0.4.0" 
sha2 = "0.3.0" 

這裏有什麼錯?

+0

@ababo你爲什麼使用'sha2 =「0.3.0」'?最新版本是「0.4.2」。 – kennytm

回答

3

您正在使用的digestdigestsha2箱子正在使用的是不兼容的。他們有相同的名字是無關緊要的;就編譯器而言,你試圖混淆兩個完全不同的板條箱。

最快的告訴方法是看看digest在編譯過程中多次出現,或在Cargo.lock文件中多次出現。您也可以通過查看箱子依賴性來手動驗證。 sha2 0.3.0列出了digest 0.3在其依賴關係中,0.3與0.4不兼容。

您需要降級您的箱子對digest的依賴,或者將箱子版本sha2升級爲使用較新版本digest的箱子。

0

我只是跑你的代碼,它編譯罰款與這些相關的版本:

[dependencies] 
sha2 = "0.4.2" 
digest = "0.4.0" 

嘗試更新的一個或兩個。

相關問題