1

我尝试将氧化钠的PublicKey结构(libsodium 的 Rust 绑定)序列化为一个文件(例如 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::Serialize 特征。但它确实serde::Serialize按照此处所述实现:https ://dnaq.github.io/sodiumoxide/sodiumoxide/crypto/sign/ed25519/struct.PublicKey.html

那么,问题是什么?

编辑:

货物.toml:

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

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

1 回答 1

2

sodiumoxideon的最新可用版本crates.io当前0.0.10不支持serde. 如果您查看Cargo.toml 文件中的 0.0.10 标记,您可以看到这一点。

您现在可以做的是使用来自 github 而不是 crates.io 的依赖项,直到他们推出新版本。像这样编辑您的Cargo.toml文件:

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

由于您使用的是sodiumoxidefrom github 的版本,因此您还需要使用其 FFI wrapper 的 github 版本libsodium-sys。您可以通过将其添加到您的Cargo.toml

[replace]
"libsodium-sys:0.0.10" = { git = "https://github.com/dnaq/sodiumoxide/" }
于 2016-07-07T17:53:51.843 回答