use std::collections::HashSet;
use std::fs;
use std::path::PathBuf;
use internet2::addr::ServiceAddr;
#[derive(Clone, PartialEq, Eq, Debug, Display)]
#[display(Debug)]
pub struct Config {
pub rpc_endpoint: ServiceAddr,
pub data_dir: PathBuf,
pub databases: HashSet<String>,
pub verbose: u8,
}
impl Config {
pub fn process(&mut self) {
self.data_dir =
PathBuf::from(shellexpand::tilde(&self.data_dir.display().to_string()).to_string());
let me = self.clone();
let mut data_dir = self.data_dir.to_string_lossy().into_owned();
self.process_dir(&mut data_dir);
self.data_dir = PathBuf::from(data_dir);
fs::create_dir_all(&self.data_dir).expect("Unable to access data directory");
for dir in vec![&mut self.rpc_endpoint] {
if let ServiceAddr::Ipc(ref mut path) = dir {
me.process_dir(path);
}
}
}
pub fn process_dir(&self, path: &mut String) {
*path = path.replace("{data_dir}", &self.data_dir.to_string_lossy());
*path = shellexpand::tilde(path).to_string();
}
}