block hash builder
This commit is contained in:
parent
6870c8f8f5
commit
6fa869d894
|
@ -1,10 +1,51 @@
|
||||||
//! Block builder
|
//! Block builder
|
||||||
|
|
||||||
use chain;
|
use chain::{self, RepresentH256};
|
||||||
use primitives::hash::H256;
|
use primitives::hash::H256;
|
||||||
use primitives::bytes::Bytes;
|
use primitives::bytes::Bytes;
|
||||||
use invoke::{Invoke, Identity};
|
use invoke::{Invoke, Identity};
|
||||||
|
|
||||||
|
pub struct BlockHashBuilder<F=Identity> {
|
||||||
|
callback: F,
|
||||||
|
block: Option<chain::Block>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<F> BlockHashBuilder<F> where F: Invoke<(H256, chain::Block)> {
|
||||||
|
pub fn with_callback(callback: F) -> Self {
|
||||||
|
BlockHashBuilder {
|
||||||
|
block: None,
|
||||||
|
callback: callback,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn block(self) -> BlockBuilder<Self> {
|
||||||
|
BlockBuilder::with_callback(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_block(mut self, block: chain::Block) -> Self {
|
||||||
|
self.block = Some(block);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn build(self) -> F::Result {
|
||||||
|
let block = self.block.expect("Block is supposed to be build here to get hash");
|
||||||
|
self.callback.invoke((
|
||||||
|
block.hash(),
|
||||||
|
block
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<F> Invoke<chain::Block> for BlockHashBuilder<F>
|
||||||
|
where F: Invoke<(H256, chain::Block)>
|
||||||
|
{
|
||||||
|
type Result = Self;
|
||||||
|
|
||||||
|
fn invoke(self, block: chain::Block) -> Self {
|
||||||
|
self.with_block(block)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct BlockBuilder<F=Identity> {
|
pub struct BlockBuilder<F=Identity> {
|
||||||
callback: F,
|
callback: F,
|
||||||
header: Option<chain::BlockHeader>,
|
header: Option<chain::BlockHeader>,
|
||||||
|
|
Loading…
Reference in New Issue