Serialization 系列化钠莫西塞德';将公钥转换为JSON

Serialization 系列化钠莫西塞德';将公钥转换为JSON,serialization,rust,public-key,libsodium,Serialization,Rust,Public Key,Libsodium,我尝试将sodiumoxide的PublicKeystruct(libnaid的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() {

我尝试将sodiumoxide的
PublicKey
struct(libnaid的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
,如下所述:

那么,问题是什么

编辑:

Cargo.toml:

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

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

板条箱上的
sodiumoxide
的最新可用版本当前为
0.0.10
,不支持
serde
。你可以看到这一点,如果你看

现在可以做的是使用github中的依赖项,而不是crates.io,直到他们发布新版本。按如下方式编辑您的
Cargo.toml
文件:

[dependencies]
serde       = "*"
serde_json  = "*"
sodiumoxide = { git = "https://github.com/dnaq/sodiumoxide" }
由于您使用的是github的
Sodiumxide
版本,因此还需要使用github版本的FFI包装器
libsys
。您可以通过将其添加到您的
货物中来完成此操作。toml

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

我们真的需要知道这一点。我想大多数初学者只使用crates.io。你有兴趣在GitHub上写一篇文章吗?如果没有,我会做:-)我会让你做的:)