Impl serde::Serialize for all types

This commit is contained in:
Paul Hauner 2019-01-26 08:25:31 +11:00
parent dbd5e850fe
commit 90ae2298ab
No known key found for this signature in database
GPG Key ID: D362883A9218FCC6
31 changed files with 101 additions and 27 deletions

View File

@ -10,4 +10,7 @@ boolean-bitfield = { path = "../utils/boolean-bitfield" }
ethereum-types = "0.4.0" ethereum-types = "0.4.0"
hashing = { path = "../utils/hashing" } hashing = { path = "../utils/hashing" }
rand = "0.5.5" rand = "0.5.5"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
ssz = { path = "../utils/ssz" } ssz = { path = "../utils/ssz" }

View File

@ -2,9 +2,10 @@ use super::{AttestationData, Bitfield};
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use bls::AggregateSignature; use bls::AggregateSignature;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq, Serialize)]
pub struct Attestation { pub struct Attestation {
pub data: AttestationData, pub data: AttestationData,
pub aggregation_bitfield: Bitfield, pub aggregation_bitfield: Bitfield,

View File

@ -1,6 +1,7 @@
use super::Hash256; use super::Hash256;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
pub const SSZ_ATTESTION_DATA_LENGTH: usize = { pub const SSZ_ATTESTION_DATA_LENGTH: usize = {
@ -14,7 +15,7 @@ pub const SSZ_ATTESTION_DATA_LENGTH: usize = {
32 // justified_block_root 32 // justified_block_root
}; };
#[derive(Debug, Clone, PartialEq, Default)] #[derive(Debug, Clone, PartialEq, Default, Serialize)]
pub struct AttestationData { pub struct AttestationData {
pub slot: u64, pub slot: u64,
pub shard: u64, pub shard: u64,

View File

@ -1,9 +1,10 @@
use super::AttestationData; use super::AttestationData;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, Clone, PartialEq, Default)] #[derive(Debug, Clone, PartialEq, Default, Serialize)]
pub struct AttestationDataAndCustodyBit { pub struct AttestationDataAndCustodyBit {
pub data: AttestationData, pub data: AttestationData,
pub custody_bit: bool, pub custody_bit: bool,

View File

@ -2,11 +2,12 @@ use super::{BeaconBlockBody, Eth1Data, Hash256};
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use bls::Signature; use bls::Signature;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
mod signing; mod signing;
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone, Serialize)]
pub struct BeaconBlock { pub struct BeaconBlock {
pub slot: u64, pub slot: u64,
pub parent_root: Hash256, pub parent_root: Hash256,

View File

@ -1,6 +1,7 @@
use super::{Attestation, CasperSlashing, Deposit, Exit, ProposerSlashing}; use super::{Attestation, CasperSlashing, Deposit, Exit, ProposerSlashing};
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
// The following types are just dummy classes as they will not be defined until // The following types are just dummy classes as they will not be defined until
@ -9,7 +10,7 @@ type CustodyReseed = usize;
type CustodyChallenge = usize; type CustodyChallenge = usize;
type CustodyResponse = usize; type CustodyResponse = usize;
#[derive(Debug, PartialEq, Clone, Default)] #[derive(Debug, PartialEq, Clone, Default, Serialize)]
pub struct BeaconBlockBody { pub struct BeaconBlockBody {
pub proposer_slashings: Vec<ProposerSlashing>, pub proposer_slashings: Vec<ProposerSlashing>,
pub casper_slashings: Vec<CasperSlashing>, pub casper_slashings: Vec<CasperSlashing>,

View File

@ -7,6 +7,7 @@ use super::validator::Validator;
use super::Hash256; use super::Hash256;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
mod slot_advance; mod slot_advance;
@ -16,7 +17,7 @@ pub use self::slot_advance::Error as SlotProcessingError;
// Custody will not be added to the specs until Phase 1 (Sharding Phase) so dummy class used. // Custody will not be added to the specs until Phase 1 (Sharding Phase) so dummy class used.
type CustodyChallenge = usize; type CustodyChallenge = usize;
#[derive(Debug, PartialEq, Clone, Default)] #[derive(Debug, PartialEq, Clone, Default, Serialize)]
pub struct BeaconState { pub struct BeaconState {
// Misc // Misc
pub slot: u64, pub slot: u64,

View File

@ -1,9 +1,10 @@
use super::SlashableVoteData; use super::SlashableVoteData;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone, Serialize)]
pub struct CasperSlashing { pub struct CasperSlashing {
pub slashable_vote_data_1: SlashableVoteData, pub slashable_vote_data_1: SlashableVoteData,
pub slashable_vote_data_2: SlashableVoteData, pub slashable_vote_data_2: SlashableVoteData,

View File

@ -1,9 +1,10 @@
use super::Hash256; use super::Hash256;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Debug, PartialEq, Serialize)]
pub struct Crosslink { pub struct Crosslink {
pub slot: u64, pub slot: u64,
pub shard_block_root: Hash256, pub shard_block_root: Hash256,

View File

@ -1,9 +1,10 @@
use super::{DepositData, Hash256}; use super::{DepositData, Hash256};
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone, Serialize)]
pub struct Deposit { pub struct Deposit {
pub merkle_branch: Vec<Hash256>, pub merkle_branch: Vec<Hash256>,
pub merkle_tree_index: u64, pub merkle_tree_index: u64,

View File

@ -1,9 +1,10 @@
use super::DepositInput; use super::DepositInput;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone, Serialize)]
pub struct DepositData { pub struct DepositData {
pub amount: u64, pub amount: u64,
pub timestamp: u64, pub timestamp: u64,

View File

@ -2,9 +2,10 @@ use super::Hash256;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use bls::{PublicKey, Signature}; use bls::{PublicKey, Signature};
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone, Serialize)]
pub struct DepositInput { pub struct DepositInput {
pub pubkey: PublicKey, pub pubkey: PublicKey,
pub withdrawal_credentials: Hash256, pub withdrawal_credentials: Hash256,

View File

@ -1,10 +1,11 @@
use super::Hash256; use super::Hash256;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
// Note: this is refer to as DepositRootVote in specs // Note: this is refer to as DepositRootVote in specs
#[derive(Debug, PartialEq, Clone, Default)] #[derive(Debug, PartialEq, Clone, Default, Serialize)]
pub struct Eth1Data { pub struct Eth1Data {
pub deposit_root: Hash256, pub deposit_root: Hash256,
pub block_hash: Hash256, pub block_hash: Hash256,

View File

@ -1,10 +1,11 @@
use super::Eth1Data; use super::Eth1Data;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
// Note: this is refer to as DepositRootVote in specs // Note: this is refer to as DepositRootVote in specs
#[derive(Debug, PartialEq, Clone, Default)] #[derive(Debug, PartialEq, Clone, Default, Serialize)]
pub struct Eth1DataVote { pub struct Eth1DataVote {
pub eth1_data: Eth1Data, pub eth1_data: Eth1Data,
pub vote_count: u64, pub vote_count: u64,

View File

@ -1,9 +1,10 @@
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use bls::Signature; use bls::Signature;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone, Serialize)]
pub struct Exit { pub struct Exit {
pub slot: u64, pub slot: u64,
pub validator_index: u32, pub validator_index: u32,

View File

@ -1,8 +1,9 @@
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, Clone, PartialEq, Default)] #[derive(Debug, Clone, PartialEq, Default, Serialize)]
pub struct Fork { pub struct Fork {
pub pre_fork_version: u64, pub pre_fork_version: u64,
pub post_fork_version: u64, pub post_fork_version: u64,

View File

@ -1,9 +1,10 @@
use super::{AttestationData, Bitfield}; use super::{AttestationData, Bitfield};
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq, Serialize)]
pub struct PendingAttestation { pub struct PendingAttestation {
pub data: AttestationData, pub data: AttestationData,
pub aggregation_bitfield: Bitfield, pub aggregation_bitfield: Bitfield,

View File

@ -1,9 +1,10 @@
use super::Hash256; use super::Hash256;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, PartialEq, Clone, Default)] #[derive(Debug, PartialEq, Clone, Default, Serialize)]
pub struct ProposalSignedData { pub struct ProposalSignedData {
pub slot: u64, pub slot: u64,
pub shard: u64, pub shard: u64,

View File

@ -2,9 +2,10 @@ use super::ProposalSignedData;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use bls::Signature; use bls::Signature;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone, Serialize)]
pub struct ProposerSlashing { pub struct ProposerSlashing {
pub proposer_index: u32, pub proposer_index: u32,
pub proposal_data_1: ProposalSignedData, pub proposal_data_1: ProposalSignedData,

View File

@ -1,8 +1,9 @@
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Debug, PartialEq, Serialize)]
pub struct ShardCommittee { pub struct ShardCommittee {
pub shard: u64, pub shard: u64,
pub committee: Vec<usize>, pub committee: Vec<usize>,

View File

@ -1,8 +1,9 @@
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone, Serialize)]
pub struct ShardReassignmentRecord { pub struct ShardReassignmentRecord {
pub validator_index: u64, pub validator_index: u64,
pub shard: u64, pub shard: u64,

View File

@ -2,9 +2,10 @@ use super::AttestationData;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use bls::AggregateSignature; use bls::AggregateSignature;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone, Serialize)]
pub struct SlashableVoteData { pub struct SlashableVoteData {
pub custody_bit_0_indices: Vec<u32>, pub custody_bit_0_indices: Vec<u32>,
pub custody_bit_1_indices: Vec<u32>, pub custody_bit_1_indices: Vec<u32>,

View File

@ -1,9 +1,10 @@
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
/// The value of the "type" field of SpecialRecord. /// The value of the "type" field of SpecialRecord.
/// ///
/// Note: this value must serialize to a u8 and therefore must not be greater than 255. /// Note: this value must serialize to a u8 and therefore must not be greater than 255.
#[derive(Debug, PartialEq, Clone, Copy)] #[derive(Debug, PartialEq, Clone, Copy, Serialize)]
pub enum SpecialRecordKind { pub enum SpecialRecordKind {
Logout = 0, Logout = 0,
CasperSlashing = 1, CasperSlashing = 1,

View File

@ -2,12 +2,13 @@ use super::Hash256;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use bls::PublicKey; use bls::PublicKey;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
const STATUS_FLAG_INITIATED_EXIT: u8 = 1; const STATUS_FLAG_INITIATED_EXIT: u8 = 1;
const STATUS_FLAG_WITHDRAWABLE: u8 = 2; const STATUS_FLAG_WITHDRAWABLE: u8 = 2;
#[derive(Debug, PartialEq, Clone, Copy)] #[derive(Debug, PartialEq, Clone, Copy, Serialize)]
pub enum StatusFlags { pub enum StatusFlags {
InitiatedExit, InitiatedExit,
Withdrawable, Withdrawable,
@ -43,7 +44,7 @@ fn status_flag_from_byte(flag: u8) -> Result<Option<StatusFlags>, StatusFlagsDec
} }
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq, Serialize)]
pub struct Validator { pub struct Validator {
pub pubkey: PublicKey, pub pubkey: PublicKey,
pub withdrawal_credentials: Hash256, pub withdrawal_credentials: Hash256,

View File

@ -2,10 +2,11 @@ use super::Hash256;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use bls::PublicKey; use bls::PublicKey;
use rand::RngCore; use rand::RngCore;
use serde_derive::Serialize;
use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use ssz::{hash, Decodable, DecodeError, Encodable, SszStream, TreeHash};
// The information gathered from the PoW chain validator registration function. // The information gathered from the PoW chain validator registration function.
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq, Serialize)]
pub struct ValidatorRegistryDeltaBlock { pub struct ValidatorRegistryDeltaBlock {
pub latest_registry_delta_root: Hash256, pub latest_registry_delta_root: Hash256,
pub validator_index: u32, pub validator_index: u32,

View File

@ -8,4 +8,5 @@ edition = "2018"
bls-aggregates = { git = "https://github.com/sigp/signature-schemes" } bls-aggregates = { git = "https://github.com/sigp/signature-schemes" }
hashing = { path = "../hashing" } hashing = { path = "../hashing" }
hex = "0.3" hex = "0.3"
serde = "1.0"
ssz = { path = "../ssz" } ssz = { path = "../ssz" }

View File

@ -1,6 +1,9 @@
use super::{AggregatePublicKey, Signature}; use super::{AggregatePublicKey, Signature};
use bls_aggregates::AggregateSignature as RawAggregateSignature; use bls_aggregates::AggregateSignature as RawAggregateSignature;
use ssz::{decode_ssz_list, hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use serde::ser::{Serialize, Serializer};
use ssz::{
decode_ssz_list, hash, ssz_encode, Decodable, DecodeError, Encodable, SszStream, TreeHash,
};
/// A BLS aggregate signature. /// A BLS aggregate signature.
/// ///
@ -44,6 +47,15 @@ impl Decodable for AggregateSignature {
} }
} }
impl Serialize for AggregateSignature {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_bytes(&ssz_encode(self))
}
}
impl TreeHash for AggregateSignature { impl TreeHash for AggregateSignature {
fn hash_tree_root(&self) -> Vec<u8> { fn hash_tree_root(&self) -> Vec<u8> {
hash(&self.0.as_bytes()) hash(&self.0.as_bytes())

View File

@ -1,6 +1,7 @@
use super::SecretKey; use super::SecretKey;
use bls_aggregates::PublicKey as RawPublicKey; use bls_aggregates::PublicKey as RawPublicKey;
use hex::encode as hex_encode; use hex::encode as hex_encode;
use serde::ser::{Serialize, Serializer};
use ssz::{ use ssz::{
decode_ssz_list, hash, ssz_encode, Decodable, DecodeError, Encodable, SszStream, TreeHash, decode_ssz_list, hash, ssz_encode, Decodable, DecodeError, Encodable, SszStream, TreeHash,
}; };
@ -55,6 +56,15 @@ impl Decodable for PublicKey {
} }
} }
impl Serialize for PublicKey {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_bytes(&ssz_encode(self))
}
}
impl TreeHash for PublicKey { impl TreeHash for PublicKey {
fn hash_tree_root(&self) -> Vec<u8> { fn hash_tree_root(&self) -> Vec<u8> {
hash(&self.0.as_bytes()) hash(&self.0.as_bytes())

View File

@ -1,6 +1,9 @@
use super::{PublicKey, SecretKey}; use super::{PublicKey, SecretKey};
use bls_aggregates::Signature as RawSignature; use bls_aggregates::Signature as RawSignature;
use ssz::{decode_ssz_list, hash, Decodable, DecodeError, Encodable, SszStream, TreeHash}; use serde::ser::{Serialize, Serializer};
use ssz::{
decode_ssz_list, hash, ssz_encode, Decodable, DecodeError, Encodable, SszStream, TreeHash,
};
/// A single BLS signature. /// A single BLS signature.
/// ///
@ -63,6 +66,15 @@ impl TreeHash for Signature {
} }
} }
impl Serialize for Signature {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_bytes(&ssz_encode(self))
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::super::Keypair; use super::super::Keypair;

View File

@ -7,3 +7,5 @@ edition = "2018"
[dependencies] [dependencies]
ssz = { path = "../ssz" } ssz = { path = "../ssz" }
bit-vec = "0.5.0" bit-vec = "0.5.0"
serde = "1.0"
serde_derive = "1.0"

View File

@ -3,6 +3,7 @@ extern crate ssz;
use bit_vec::BitVec; use bit_vec::BitVec;
use serde::ser::{Serialize, Serializer};
use std::cmp; use std::cmp;
use std::default; use std::default;
@ -149,6 +150,15 @@ impl ssz::Decodable for BooleanBitfield {
} }
} }
impl Serialize for BooleanBitfield {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_bytes(&ssz::ssz_encode(self))
}
}
impl ssz::TreeHash for BooleanBitfield { impl ssz::TreeHash for BooleanBitfield {
fn hash_tree_root(&self) -> Vec<u8> { fn hash_tree_root(&self) -> Vec<u8> {
self.to_bytes().hash_tree_root() self.to_bytes().hash_tree_root()