use exonum::{
blockchain::{ConsensusConfig, ValidatorKeys},
crypto::PublicKey,
merkledb::DbOptions,
};
use exonum_node::{
ConnectListConfig, MemoryPoolConfig, NetworkConfiguration, NodeApiConfig,
NodeConfig as CoreNodeConfig,
};
use exonum_supervisor::mode::Mode as SupervisorMode;
use serde_derive::{Deserialize, Serialize};
use std::{net::SocketAddr, path::PathBuf};
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
pub struct GeneralConfig {
pub validators_count: u32,
pub supervisor_mode: SupervisorMode,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct NodePublicConfig {
pub consensus: ConsensusConfig,
pub general: GeneralConfig,
pub validator_keys: Option<ValidatorKeys>,
pub address: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct NodePrivateConfig {
pub listen_address: SocketAddr,
pub external_address: String,
pub master_key_path: PathBuf,
pub api: NodeApiConfig,
pub network: NetworkConfiguration,
pub mempool: MemoryPoolConfig,
#[serde(default)]
pub database: DbOptions,
pub thread_pool_size: Option<u8>,
pub connect_list: ConnectListConfig,
pub consensus_public_key: PublicKey,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct NodeConfig {
pub private_config: NodePrivateConfig,
pub public_config: NodePublicConfig,
}
impl Into<CoreNodeConfig> for NodeConfig {
fn into(self) -> CoreNodeConfig {
CoreNodeConfig {
consensus: self.public_config.consensus,
listen_address: self.private_config.listen_address,
external_address: self.private_config.external_address,
network: self.private_config.network,
api: self.private_config.api,
mempool: self.private_config.mempool,
connect_list: self.private_config.connect_list,
thread_pool_size: self.private_config.thread_pool_size,
}
}
}