use ibc_chain_registry::chain::ChainData;
use crate::DaemonAsyncBuilder;
use super::{super::error::DaemonError, core::Daemon};
#[derive(Clone, Default)]
pub struct DaemonBuilder {
pub(crate) chain: Option<ChainData>,
pub(crate) handle: Option<tokio::runtime::Handle>,
pub(crate) deployment_id: Option<String>,
pub(crate) mnemonic: Option<String>,
}
impl DaemonBuilder {
pub fn chain(&mut self, chain: impl Into<ChainData>) -> &mut Self {
self.chain = Some(chain.into());
self
}
pub fn deployment_id(&mut self, deployment_id: impl Into<String>) -> &mut Self {
self.deployment_id = Some(deployment_id.into());
self
}
pub fn handle(&mut self, handle: &tokio::runtime::Handle) -> &mut Self {
self.handle = Some(handle.clone());
self
}
pub fn mnemonic(&mut self, mnemonic: impl ToString) -> &mut Self {
self.mnemonic = Some(mnemonic.to_string());
self
}
pub fn build(&self) -> Result<Daemon, DaemonError> {
let rt_handle = self
.handle
.clone()
.ok_or(DaemonError::BuilderMissing("runtime handle".into()))?;
let daemon = rt_handle.block_on(DaemonAsyncBuilder::from(self.clone()).build())?;
Ok(Daemon { rt_handle, daemon })
}
}