use std::fmt::Debug;
use std::path::PathBuf;
use internet2::addr::ServiceAddr;
#[cfg(feature = "server")]
use crate::opts::Options;
#[derive(Clone, PartialEq, Eq, Debug, Display)]
#[display(Debug)]
pub struct Config<Ext = ()>
where Ext: Clone + Eq + Debug
{
pub data_dir: PathBuf,
pub msg_endpoint: ServiceAddr,
pub ctl_endpoint: ServiceAddr,
pub rpc_endpoint: ServiceAddr,
pub ext_endpoint: ServiceAddr,
pub store_endpoint: ServiceAddr,
pub chat_endpoint: ServiceAddr,
pub ext: Ext,
}
impl<Ext> Config<Ext>
where Ext: Clone + Eq + Debug
{
pub fn with<Orig>(orig: Config<Orig>, ext: Ext) -> Self
where Orig: Clone + Eq + Debug {
Config::<Ext> {
data_dir: orig.data_dir,
rpc_endpoint: orig.rpc_endpoint,
msg_endpoint: orig.msg_endpoint,
ext_endpoint: orig.ext_endpoint,
ctl_endpoint: orig.ctl_endpoint,
store_endpoint: orig.store_endpoint,
chat_endpoint: orig.chat_endpoint,
ext,
}
}
}
#[cfg(feature = "server")]
impl<Opt> From<Opt> for Config<Opt::Conf>
where
Opt: Options,
Opt::Conf: Clone + Eq + Debug,
{
fn from(opt: Opt) -> Self {
let opts = opt.shared();
Config {
data_dir: opts.data_dir.clone(),
rpc_endpoint: opts.rpc_endpoint.clone(),
msg_endpoint: opts.msg_endpoint.clone(),
ext_endpoint: opts.ext_endpoint.clone(),
store_endpoint: opts.store_endpoint.clone(),
chat_endpoint: opts.chat_endpoint.clone(),
ctl_endpoint: opts.ctl_endpoint.clone(),
ext: opt.config(),
}
}
}