2016-07-07 10 views
1

PublicKeyナトリウム酸化物(libsodiumの錆びたバインディング)の構造体をファイル(JSONなど)にシリアル化しようとしましたが、バイナリも大丈夫です。JSONに酸化ナトリウムのPublicKeyをシリアル化

は、ここに私のコードです:

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

crates.iosodiumoxideの最新バージョンが現在0.0.10serdeをサポートしていないです。 Cargo.toml file for the 0.0.10 tagを見ると、これを見ることができます。

あなたが今できることは、新しいバージョンを出すまで、crates.ioの代わりにgithubの依存関係を使うことです。このようなあなたのCargo.tomlファイルを編集します

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

あなたはgithubのからsodiumoxideのバージョンを使用しているので、あなたもそのFFIラッパーlibsodium-sysのgithubのバージョンを使用する必要があります。これをあなたのCargo.tomlに追加することでできます:

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

本当に知っておく必要があります。私はほとんどの初心者がcrates.ioだけを使用していると仮定します。あなたはGitHubに関する問題を書くことに興味がありますか?そうでなければ、私はします:-) – duesee

+0

私はあなたにそれをさせるでしょ:) –

関連する問題