use anyhow::Error;
use exonum::blockchain::ConsensusConfig;
use exonum_supervisor::mode::Mode as SupervisorMode;
use serde_derive::{Deserialize, Serialize};
use structopt::StructOpt;
use std::path::PathBuf;
use crate::{
command::{ExonumCommand, StandardResult},
config::{GeneralConfig, NodePublicConfig},
io::save_config_file,
};
#[derive(StructOpt, Debug, Serialize, Deserialize)]
#[non_exhaustive]
pub struct GenerateTemplate {
pub common_config: PathBuf,
#[structopt(long)]
pub validators_count: u32,
#[structopt(long, default_value = "simple")]
pub supervisor_mode: SupervisorMode,
}
impl ExonumCommand for GenerateTemplate {
fn execute(self) -> Result<StandardResult, Error> {
let config = NodePublicConfig {
consensus: ConsensusConfig::default(),
general: GeneralConfig {
validators_count: self.validators_count,
supervisor_mode: self.supervisor_mode,
},
validator_keys: None,
address: None,
};
save_config_file(&config, &self.common_config)?;
Ok(StandardResult::GenerateTemplate {
template_config_path: self.common_config,
})
}
}