Сериализация PublicKey оксидов натрия в JSON
Я пытаюсь сериализовать PublicKey
структура оксида натрия (связывание ржавчины для libsodium) с файлом (например, 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 = "*"
1 ответ
Последняя доступная версия sodiumoxide
на 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" }
Так как вы используете версию sodiumoxide
от github, вам также нужно будет использовать github-версию его оболочки FFI libsodium-sys
, Вы можете сделать это, добавив это в свой Cargo.toml
:
[replace]
"libsodium-sys:0.0.10" = { git = "https://github.com/dnaq/sodiumoxide/" }