Skip to content

Commit

Permalink
#393: switch to gen_setter macros for setters
Browse files Browse the repository at this point in the history
  • Loading branch information
andrey-kuprianov committed Jul 17, 2020
1 parent ffaa039 commit 19dd8be
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 34 deletions.
7 changes: 2 additions & 5 deletions mbt-utils/src/commit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,7 @@ impl Commit {
round: None,
}
}
pub fn round(mut self, round: u64) -> Self {
self.round = Some(round);
self
}
gen_setter!(round, u64);
}


Expand Down Expand Up @@ -70,7 +67,7 @@ impl Generator<block::Commit> for Commit {

let val_sign = |(i, v): (usize, &Validator)| -> Result<block::CommitSig, SimpleError> {
let validator = v.generate()?;
let signer: Ed25519Signer = v.signer()?;
let signer: Ed25519Signer = v.get_signer()?;
let vote = Vote {
vote_type: Type::Precommit,
height: block_header.height,
Expand Down
18 changes: 18 additions & 0 deletions mbt-utils/src/generator.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@


use serde::Serialize;
use std::str::FromStr;
use simple_error::*;
Expand All @@ -15,3 +17,19 @@ pub trait Generator<Output: Serialize>: FromStr<Err = SimpleError> {
))
}
}

#[macro_export]
macro_rules! gen_setter {
($name:ident, $t:ty) => {
pub fn $name(&mut self, $name: $t) -> &mut Self {
self.$name = Some($name);
self
}
};
($name:ident, $t:ty, $val:expr) => {
pub fn $name(&mut self, $name: $t) -> &mut Self {
self.$name = Some($val);
self
}
};
}
20 changes: 4 additions & 16 deletions mbt-utils/src/header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,22 +42,10 @@ impl Header {
time: None,
}
}
pub fn next_validators(mut self, vals: &[Validator]) -> Self {
self.next_validators = Some(vals.to_vec());
self
}
pub fn chain_id(mut self, id: &str) -> Self {
self.chain_id = Some(id.to_string());
self
}
pub fn height(mut self, height: u64) -> Self {
self.height = Some(height);
self
}
pub fn time(mut self, time: Time) -> Self {
self.time = Some(time);
self
}
gen_setter!(next_validators, &[Validator], next_validators.to_vec());
gen_setter!(chain_id, &str, chain_id.to_string());
gen_setter!(height, u64);
gen_setter!(time, Time);
}

impl std::str::FromStr for Header {
Expand Down
8 changes: 5 additions & 3 deletions mbt-utils/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#[macro_use]
pub mod generator;
pub mod validator;
pub mod header;
pub mod commit;
pub mod consensus;
pub mod header;
pub mod helpers;
pub mod generator;
pub mod validator;

18 changes: 8 additions & 10 deletions mbt-utils/src/validator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ pub struct Validator {
pub proposer_priority: Option<i64>,
}




impl Validator {
pub fn new(id: &str) -> Self {
Validator {
Expand All @@ -34,15 +37,10 @@ impl Validator {
proposer_priority: None,
}
}
pub fn voting_power(mut self, power: u64) -> Self {
self.voting_power = Some(power);
self
}
pub fn proposer_priority(mut self, priority: i64) -> Self {
self.proposer_priority = Some(priority);
self
}
pub fn signer(&self) -> Result<Ed25519Signer, SimpleError> {
gen_setter!(voting_power, u64);
gen_setter!(proposer_priority, i64);

pub fn get_signer(&self) -> Result<Ed25519Signer, SimpleError> {
if self.id.is_none() {
bail!("validator identifier is missing")
}
Expand Down Expand Up @@ -88,7 +86,7 @@ impl Generator<Info> for Validator {
}

fn generate(&self) -> Result<Info, SimpleError> {
let signer = self.signer()?;
let signer = self.get_signer()?;
let pk = try_with!(signer.public_key(), "failed to get a public key");
let info = Info {
address: account::Id::from(pk),
Expand Down

0 comments on commit 19dd8be

Please sign in to comment.