2016-07-07 18 views
1

Ich versuche, die PublicKey Struktur von Natriumoxid (Rust Bindings für libsodium) in eine Datei (z. B. JSON, aber binäre wäre auch in Ordnung) zu serialisieren.Serialize Natrium Oxyde 'PublicKey in JSON

Hier ist mein Code:

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); 
} 

bekomme ich folgende Fehlermeldung:

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

So ist der Compiler sagt mir, dass PublicKey die serde implementieren sollten :: Serialize Merkmal. Aber es implementiert serde::Serialize wie hier angegeben: https://dnaq.github.io/sodiumoxide/sodiumoxide/crypto/sign/ed25519/struct.PublicKey.html

Also, was ist das Problem?

Edit:

Cargo.toml:

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

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

Antwort

2

Die neueste verfügbare Version von sodiumoxide auf crates.io ist derzeit 0.0.10 die nicht serde unterstützt. Sie können dies sehen, wenn Sie auf die Cargo.toml file for the 0.0.10 tag schauen.

Was Sie jetzt tun können, ist, die Abhängigkeit von github anstelle von crates.io zu verwenden, bis sie eine neue Version veröffentlichen. Bearbeiten Sie Ihre Cargo.toml-Datei wie folgt:

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

Da Sie die Version von sodiumoxide von Github verwenden, werden Sie auch die Github Version seiner FFI-Wrapper libsodium-sys verwenden müssen. Sie können dies tun, indem Sie dies zu Ihrem Cargo.toml hinzufügen:

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

Man muss wirklich das wissen. Ich nehme an, die meisten Anfänger benutzen nur crates.io. Sind Sie daran interessiert, ein Problem auf GitHub zu schreiben? Wenn nicht, werde ich tun :-) – duesee

+0

Ich lass dich das tun :) –