use std::collections::HashMap;
use crate::common::error::prelude::*;
use crate::config::PoolConfig;
use super::cache::Cache;
use super::genesis::PoolTransactions;
use super::manager::{LocalPool, SharedPool};
use super::networker::{MakeLocal, MakeShared, ZMQNetworkerFactory};
use super::runner::PoolRunner;
use super::RequestResultMeta;
#[derive(Clone)]
pub struct PoolBuilder {
pub config: PoolConfig,
transactions: PoolTransactions,
node_weights: Option<HashMap<String, f32>>,
refreshed: bool,
}
impl PoolBuilder {
pub fn new(config: PoolConfig, transactions: PoolTransactions) -> Self {
Self {
config,
transactions,
node_weights: None,
refreshed: false,
}
}
pub fn refreshed(mut self, flag: bool) -> Self {
self.refreshed = flag;
self
}
pub fn node_weights(mut self, node_weights: Option<HashMap<String, f32>>) -> Self {
self.node_weights = node_weights;
self
}
pub fn into_local(self) -> VdrResult<LocalPool> {
let merkle_tree = self.transactions.merkle_tree()?;
LocalPool::build(
self.config,
merkle_tree,
MakeLocal(ZMQNetworkerFactory {}),
self.node_weights,
self.refreshed,
)
}
pub fn into_shared(self) -> VdrResult<SharedPool> {
let merkle_tree = self.transactions.merkle_tree()?;
SharedPool::build(
self.config,
merkle_tree,
MakeShared(ZMQNetworkerFactory {}),
self.node_weights,
self.refreshed,
)
}
pub fn into_runner(
self,
cache: Option<Cache<String, (String, RequestResultMeta)>>,
) -> VdrResult<PoolRunner> {
let merkle_tree = self.transactions.merkle_tree()?;
Ok(PoolRunner::new(
self.config,
merkle_tree,
MakeLocal(ZMQNetworkerFactory {}),
self.node_weights,
self.refreshed,
cache,
))
}
}