2016-07-07 54 views
1

我嘗試將文件(例如JSON,但二進制文件也可以)序列化氧化鈉的結構(用於libsodium的鏽結合)的PublicKey結構。序列化鈉氧化物的公鑰到JSON中

這裏是我的代碼:

extern crate serde; 
extern crate serde_json; 
extern crate sodiumoxide; 

use serde::Serialize; 
use serde_json::ser::Serializer; 
use sodiumoxide::crypto::sign; 

fn main() { 
    let (pk, _) = sign::gen_keypair();  
    let pk_ser = serde_json::to_string(&pk); 
} 

我收到以下錯誤信息:

error: the trait bound `sodiumoxide::crypto::sign::PublicKey: serde::Serialize` is not satisfied [E0277] 

所以編譯器告訴我,PublicKey應實施SERDE ::序列化特質。但它確實執行serde::Serialize如上所述:https://dnaq.github.io/sodiumoxide/sodiumoxide/crypto/sign/ed25519/struct.PublicKey.html

那麼,什麼問題?

編輯:

Cargo.toml:

[package] 
name = ... 
version = ... 
authors = ... 

[dependencies] 
serde  = "*" 
serde_json = "*" 
sodiumoxide = "*" 

回答

2

sodiumoxidecrates.io的最新版本是目前0.0.10不支持serde。你可以看到這個,如果你看看Cargo.toml file for the 0.0.10 tag

你現在可以做的是從github而不是crates.io使用依賴,直到他們發佈新版本。編輯您的Cargo.toml文件是這樣的:

[dependencies] 
serde  = "*" 
serde_json = "*" 
sodiumoxide = { git = "https://github.com/dnaq/sodiumoxide" } 

由於您使用的sodiumoxide從GitHub的版本,你還需要使用它的FFI包裝libsodium-sys GitHub的版本。您可以將此添加到您的Cargo.toml

[replace] 
"libsodium-sys:0.0.10" = { git = "https://github.com/dnaq/sodiumoxide/" } 
+0

一個確實需要知道這一點。我假設大多數初學者只使用crates.io。你有興趣在GitHub上寫一個問題嗎?如果沒有,我會做:-) – duesee

+0

我會讓你這樣做:) –