diff --git a/src/cli/cli_config.rs b/src/cli/cli_config.rs index d792c6e0c..ab70efbbc 100644 --- a/src/cli/cli_config.rs +++ b/src/cli/cli_config.rs @@ -3,7 +3,12 @@ use crate::Result; use serde::{Deserialize, Serialize}; use std::str; -use std::fs; +use std::{ + fs, + fs::{create_dir_all, File}, + io::Write, +}; + use std::path::PathBuf; #[derive(Serialize, Deserialize, Debug)] @@ -26,7 +31,14 @@ impl DrkConfig { pub fn load_default(path: PathBuf) -> Result { let toml = Self::default(); let config_file = toml::to_string(&toml)?; - fs::write(&path, &config_file)?; + + if let Some(outdir) = path.parent() { + create_dir_all(outdir)?; + } + + let mut file = File::create(path.clone())?; + file.write_all(&config_file.into_bytes())?; + let config = Self::load(path)?; Ok(config) } @@ -77,7 +89,14 @@ impl DarkfidConfig { pub fn load_default(path: PathBuf) -> Result { let toml = Self::default(); let config_file = toml::to_string(&toml)?; - fs::write(&path, &config_file)?; + + if let Some(outdir) = path.parent() { + create_dir_all(outdir)?; + } + + let mut file = File::create(path.clone())?; + file.write_all(&config_file.into_bytes())?; + let config = Self::load(path)?; Ok(config) } @@ -140,7 +159,14 @@ impl GatewaydConfig { pub fn load_default(path: PathBuf) -> Result { let toml = Self::default(); let config_file = toml::to_string(&toml)?; - fs::write(&path, &config_file)?; + + if let Some(outdir) = path.parent() { + create_dir_all(outdir)?; + } + + let mut file = File::create(path.clone())?; + file.write_all(&config_file.into_bytes())?; + let config = Self::load(path)?; Ok(config) } @@ -190,7 +216,14 @@ impl CashierdConfig { pub fn load_default(path: PathBuf) -> Result { let toml = Self::default(); let config_file = toml::to_string(&toml)?; - fs::write(&path, &config_file)?; + + if let Some(outdir) = path.parent() { + create_dir_all(outdir)?; + } + + let mut file = File::create(path.clone())?; + file.write_all(&config_file.into_bytes())?; + let config = Self::load(path)?; Ok(config) }