From 4fb6df67b8e08ef897be4b939e1baecc13e04e79 Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Sat, 7 Apr 2018 00:12:18 +0200 Subject: [PATCH] [fix] #55 impl Serialize for WOT Documents & pubkey --- crypto/keys/ed25519.rs | 12 ++++++++++++ .../blockchain/v10/documents/certification.rs | 14 +++++++++++++- documents/blockchain/v10/documents/identity.rs | 14 +++++++++++++- documents/blockchain/v10/documents/membership.rs | 14 +++++++++++++- documents/blockchain/v10/documents/revocation.rs | 14 +++++++++++++- documents/lib.rs | 2 +- 6 files changed, 65 insertions(+), 5 deletions(-) diff --git a/crypto/keys/ed25519.rs b/crypto/keys/ed25519.rs index 0446123d..3f60e0d5 100644 --- a/crypto/keys/ed25519.rs +++ b/crypto/keys/ed25519.rs @@ -19,6 +19,8 @@ //! //! [`KeyPairGenerator`]: struct.KeyPairGenerator.html +extern crate serde; + use std::collections::hash_map::DefaultHasher; use std::fmt::Debug; use std::fmt::Display; @@ -30,6 +32,7 @@ use base58::{FromBase58, FromBase58Error, ToBase58}; use base64; use base64::DecodeError; use crypto; +use self::serde::ser::{Serialize, Serializer}; use super::{BaseConvertionError, PrivateKey as PrivateKeyMethods, PublicKey as PublicKeyMethods}; @@ -123,6 +126,15 @@ impl Debug for PublicKey { } } +impl Serialize for PublicKey { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where + S: Serializer, + { + serializer.serialize_str(&format!("{}", self)) + } +} + impl super::PublicKey for PublicKey { type Signature = Signature; diff --git a/documents/blockchain/v10/documents/certification.rs b/documents/blockchain/v10/documents/certification.rs index 7579d2cc..8a2f7955 100644 --- a/documents/blockchain/v10/documents/certification.rs +++ b/documents/blockchain/v10/documents/certification.rs @@ -15,8 +15,11 @@ //! Wrappers around Certification documents. -use duniter_crypto::keys::{ed25519, PublicKey, Signature}; +extern crate serde; + +use duniter_crypto::keys::{PublicKey, Signature, ed25519}; use regex::Regex; +use self::serde::ser::{Serialize, Serializer}; use blockchain::v10::documents::{StandardTextDocumentParser, TextDocument, TextDocumentBuilder, V10Document, V10DocumentParsingError}; @@ -115,6 +118,15 @@ impl TextDocument for CertificationDocument { } } +impl Serialize for CertificationDocument { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where + S: Serializer, + { + serializer.serialize_str(&self.generate_compact_text()) + } +} + impl IntoSpecializedDocument<BlockchainProtocol> for CertificationDocument { fn into_specialized(self) -> BlockchainProtocol { BlockchainProtocol::V10(Box::new(V10Document::Certification(Box::new(self)))) diff --git a/documents/blockchain/v10/documents/identity.rs b/documents/blockchain/v10/documents/identity.rs index 9eb94177..8dccf472 100644 --- a/documents/blockchain/v10/documents/identity.rs +++ b/documents/blockchain/v10/documents/identity.rs @@ -15,8 +15,11 @@ //! Wrappers around Identity documents. -use duniter_crypto::keys::{ed25519, PublicKey}; +extern crate serde; + +use duniter_crypto::keys::{PublicKey, ed25519}; use regex::Regex; +use self::serde::ser::{Serialize, Serializer}; use blockchain::v10::documents::{StandardTextDocumentParser, TextDocument, TextDocumentBuilder, V10Document, V10DocumentParsingError}; @@ -100,6 +103,15 @@ impl TextDocument for IdentityDocument { } } +impl Serialize for IdentityDocument { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where + S: Serializer, + { + serializer.serialize_str(&self.generate_compact_text()) + } +} + impl IntoSpecializedDocument<BlockchainProtocol> for IdentityDocument { fn into_specialized(self) -> BlockchainProtocol { BlockchainProtocol::V10(Box::new(V10Document::Identity(self))) diff --git a/documents/blockchain/v10/documents/membership.rs b/documents/blockchain/v10/documents/membership.rs index f56937b2..c6f92fd7 100644 --- a/documents/blockchain/v10/documents/membership.rs +++ b/documents/blockchain/v10/documents/membership.rs @@ -15,8 +15,11 @@ //! Wrappers around Membership documents. -use duniter_crypto::keys::{ed25519, PublicKey}; +extern crate serde; + +use duniter_crypto::keys::{PublicKey, ed25519}; use regex::Regex; +use self::serde::ser::{Serialize, Serializer}; use blockchain::v10::documents::{StandardTextDocumentParser, TextDocument, TextDocumentBuilder, V10Document, V10DocumentParsingError}; @@ -122,6 +125,15 @@ impl TextDocument for MembershipDocument { } } +impl Serialize for MembershipDocument { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where + S: Serializer, + { + serializer.serialize_str(&self.generate_compact_text()) + } +} + impl IntoSpecializedDocument<BlockchainProtocol> for MembershipDocument { fn into_specialized(self) -> BlockchainProtocol { BlockchainProtocol::V10(Box::new(V10Document::Membership(self))) diff --git a/documents/blockchain/v10/documents/revocation.rs b/documents/blockchain/v10/documents/revocation.rs index 7568a355..fc2b347d 100644 --- a/documents/blockchain/v10/documents/revocation.rs +++ b/documents/blockchain/v10/documents/revocation.rs @@ -15,8 +15,11 @@ //! Wrappers around Revocation documents. -use duniter_crypto::keys::{ed25519, PublicKey, Signature}; +extern crate serde; + +use duniter_crypto::keys::{PublicKey, Signature, ed25519}; use regex::Regex; +use self::serde::ser::{Serialize, Serializer}; use blockchain::v10::documents::{StandardTextDocumentParser, TextDocument, TextDocumentBuilder, V10Document, V10DocumentParsingError}; @@ -102,6 +105,15 @@ impl TextDocument for RevocationDocument { } } +impl Serialize for RevocationDocument { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where + S: Serializer, + { + serializer.serialize_str(&self.generate_compact_text()) + } +} + impl IntoSpecializedDocument<BlockchainProtocol> for RevocationDocument { fn into_specialized(self) -> BlockchainProtocol { BlockchainProtocol::V10(Box::new(V10Document::Revocation(Box::new(self)))) diff --git a/documents/lib.rs b/documents/lib.rs index 7b360c1b..d0cd0672 100644 --- a/documents/lib.rs +++ b/documents/lib.rs @@ -120,7 +120,7 @@ impl Hash { /// Wrapper of a block hash. #[derive(Copy, Clone, PartialEq, Eq, Hash)] -pub struct BlockHash(Hash); +pub struct BlockHash(pub Hash); impl Display for BlockHash { fn fmt(&self, f: &mut Formatter) -> Result<(), Error> { -- GitLab