将 sodiumoxides 的 PublicKey 序列化为 JSON
Serialize sodiumoxides' PublicKey into JSON
我尝试将氧化钠的 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
那么,问题是什么?
编辑:
Cargo.toml:
[package]
name = ...
version = ...
authors = ...
[dependencies]
serde = "*"
serde_json = "*"
sodiumoxide = "*"
crates.io
上 sodiumoxide
的最新可用版本当前为 0.0.10
,不支持 serde
。如果您查看 Cargo.toml file for the 0.0.10 tag.
就可以看到这一点
你现在可以做的是使用 github 的依赖而不是 crates.io 直到他们推出新版本。像这样编辑您的 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/" }
我尝试将氧化钠的 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
那么,问题是什么?
编辑:
Cargo.toml:
[package]
name = ...
version = ...
authors = ...
[dependencies]
serde = "*"
serde_json = "*"
sodiumoxide = "*"
crates.io
上 sodiumoxide
的最新可用版本当前为 0.0.10
,不支持 serde
。如果您查看 Cargo.toml file for the 0.0.10 tag.
你现在可以做的是使用 github 的依赖而不是 crates.io 直到他们推出新版本。像这样编辑您的 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/" }