updated protobuf serialisation

This commit is contained in:
Vladimir Komendantskiy 2018-05-24 19:11:56 +01:00
parent 111ed03a47
commit 67c7bf4f8b
2 changed files with 19 additions and 19 deletions

View File

@ -1,6 +1,6 @@
//! Binary Byzantine agreement protocol from a common coin protocol. //! Binary Byzantine agreement protocol from a common coin protocol.
mod bin_values; pub mod bin_values;
use std::collections::{BTreeMap, BTreeSet, VecDeque}; use std::collections::{BTreeMap, BTreeSet, VecDeque};
use std::fmt::Debug; use std::fmt::Debug;
@ -38,26 +38,26 @@ pub enum AgreementContent {
#[cfg_attr(feature = "serialization-serde", derive(Serialize))] #[cfg_attr(feature = "serialization-serde", derive(Serialize))]
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub struct AgreementMessage { pub struct AgreementMessage {
epoch: u32, pub epoch: u32,
content: AgreementContent, pub content: AgreementContent,
} }
impl AgreementMessage { impl AgreementMessage {
fn bval(epoch: u32, b: bool) -> Self { pub fn bval(epoch: u32, b: bool) -> Self {
AgreementMessage { AgreementMessage {
epoch, epoch,
content: AgreementContent::BVal(b), content: AgreementContent::BVal(b),
} }
} }
fn aux(epoch: u32, b: bool) -> Self { pub fn aux(epoch: u32, b: bool) -> Self {
AgreementMessage { AgreementMessage {
epoch, epoch,
content: AgreementContent::Aux(b), content: AgreementContent::Aux(b),
} }
} }
fn conf(epoch: u32, v: BinValues) -> Self { pub fn conf(epoch: u32, v: BinValues) -> Self {
AgreementMessage { AgreementMessage {
epoch, epoch,
content: AgreementContent::Conf(v), content: AgreementContent::Conf(v),

View File

@ -1,12 +1,14 @@
//! Construction of messages from protobuf buffers. //! Construction of messages from protobuf buffers.
pub mod message; pub mod message;
use agreement::{AgreementMessage, BinValues};
use broadcast::BroadcastMessage;
use merkle::proof::{Lemma, Positioned, Proof}; use merkle::proof::{Lemma, Positioned, Proof};
use proto::message::*;
use ring::digest::Algorithm; use ring::digest::Algorithm;
use agreement::{AgreementContent, AgreementMessage};
use agreement::bin_values::BinValues;
use broadcast::BroadcastMessage;
use proto::message::*;
impl From<message::BroadcastProto> for BroadcastMessage { impl From<message::BroadcastProto> for BroadcastMessage {
fn from(proto: message::BroadcastProto) -> BroadcastMessage { fn from(proto: message::BroadcastProto) -> BroadcastMessage {
BroadcastMessage::from_proto(proto, &::ring::digest::SHA256) BroadcastMessage::from_proto(proto, &::ring::digest::SHA256)
@ -66,17 +68,15 @@ impl BroadcastMessage {
impl AgreementMessage { impl AgreementMessage {
pub fn into_proto(self) -> message::AgreementProto { pub fn into_proto(self) -> message::AgreementProto {
let mut p = message::AgreementProto::new(); let mut p = message::AgreementProto::new();
match self { p.set_epoch(self.epoch);
AgreementMessage::BVal(e, b) => { match self.content {
p.set_epoch(e); AgreementContent::BVal(b) => {
p.set_bval(b); p.set_bval(b);
} }
AgreementMessage::Aux(e, b) => { AgreementContent::Aux(b) => {
p.set_epoch(e);
p.set_aux(b); p.set_aux(b);
} }
AgreementMessage::Conf(e, v) => { AgreementContent::Conf(v) => {
p.set_epoch(e);
let bin_values = match v { let bin_values = match v {
BinValues::None => 0, BinValues::None => 0,
BinValues::False => 1, BinValues::False => 1,
@ -94,9 +94,9 @@ impl AgreementMessage {
pub fn from_proto(mp: message::AgreementProto) -> Option<Self> { pub fn from_proto(mp: message::AgreementProto) -> Option<Self> {
let epoch = mp.get_epoch(); let epoch = mp.get_epoch();
if mp.has_bval() { if mp.has_bval() {
Some(AgreementMessage::BVal(epoch, mp.get_bval())) Some(AgreementMessage::bval(epoch, mp.get_bval()))
} else if mp.has_aux() { } else if mp.has_aux() {
Some(AgreementMessage::Aux(epoch, mp.get_aux())) Some(AgreementMessage::aux(epoch, mp.get_aux()))
} else if mp.has_conf() { } else if mp.has_conf() {
match mp.get_conf() { match mp.get_conf() {
0 => Some(BinValues::None), 0 => Some(BinValues::None),
@ -104,7 +104,7 @@ impl AgreementMessage {
2 => Some(BinValues::True), 2 => Some(BinValues::True),
3 => Some(BinValues::Both), 3 => Some(BinValues::Both),
_ => None, _ => None,
}.map(|bin_values| AgreementMessage::Conf(epoch, bin_values)) }.map(|bin_values| AgreementMessage::conf(epoch, bin_values))
} else { } else {
None None
} }