Serialization 系列化钠莫西塞德';将公钥转换为JSON
我尝试将sodiumoxide的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() {
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上写一篇文章吗?如果没有,我会做:-)我会让你做的:)