use mitrid_core::base::Result;
use mitrid_core::base::Sizable;
use mitrid_core::base::Checkable;
use mitrid_core::base::Serializable;
use mitrid_core::base::Datable;
use mitrid_core::util::Version;
use mitrid_core::base::Stage;
use mitrid_core::app::Config as BasicConfig;
use fixture::crypto::Digest;
use fixture::io::network::Address;
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Default, Hash, Serialize, Deserialize)]
pub struct Config {
pub chain: String,
pub version: Version,
pub stage: Stage,
pub pswd_hash: Digest,
pub buffer_size: u64,
pub max_threads: u64,
pub addresses: Vec<Address>,
pub seed: Vec<Address>,
}
impl Config {
pub fn new(chain: &str,
version: &Version,
stage: &Stage,
pswd_hash: &Digest,
buffer_size: u64,
max_threads: u64,
addresses: &Vec<Address>,
seed: &Vec<Address>)
-> Result<Config>
{
version.check()?;
stage.check()?;
pswd_hash.check()?;
addresses.check()?;
seed.check()?;
let config = Config {
chain: chain.to_owned(),
version: version.to_owned(),
stage: stage.to_owned(),
pswd_hash: pswd_hash.to_owned(),
buffer_size: buffer_size,
max_threads: max_threads,
addresses: addresses.to_owned(),
seed: seed.to_owned(),
};
Ok(config)
}
}
impl BasicConfig<Digest, (), Address, (), (), (), ()> for Config {
fn chain(&self) -> String {
self.chain.clone()
}
fn version(&self) -> Version {
self.version.clone()
}
fn stage(&self) -> Stage {
self.stage.clone()
}
fn pswd_hash(&self) -> Digest {
self.pswd_hash.clone()
}
fn buffer_size(&self) -> u64 {
self.buffer_size
}
fn max_threads(&self) -> u64 {
self.max_threads
}
fn manager_params(&self) -> () {
()
}
fn store_params(&self) -> () {
()
}
fn addresses(&self) -> Vec<Address> {
self.addresses.clone()
}
fn seed(&self) -> Vec<Address> {
self.seed.clone()
}
fn server_params(&self) -> () {
()
}
fn client_params(&self) -> () {
()
}
fn custom_params(&self) -> () {
()
}
}
impl Sizable for Config {
fn size(&self) -> u64 {
self.chain.size() +
self.version.size() +
self.stage.size() +
self.pswd_hash.size() +
self.buffer_size.size() +
self.max_threads.size() +
self.addresses.size() +
self.seed.size()
}
}
impl Checkable for Config {
fn check(&self) -> Result<()> {
self.chain.check()?;
self.version.check()?;
self.stage.check()?;
self.pswd_hash.check()?;
self.buffer_size.check()?;
self.max_threads.check()?;
self.addresses.check()?;
self.seed.check()
}
}
impl Serializable for Config {}
impl Datable for Config {}