From 618eb7fd2cba74f0547c8f838670fcbad8fda546 Mon Sep 17 00:00:00 2001 From: ghassmo Date: Sat, 3 Jul 2021 10:44:29 +0300 Subject: [PATCH] fix io error when loading config file --- src/bin/darkfid.rs | 2 +- src/cli/client_cli/cli_config.rs | 57 +++++++++++++++----------------- src/cli/client_cli/wallet_cli.rs | 2 +- 3 files changed, 28 insertions(+), 33 deletions(-) diff --git a/src/bin/darkfid.rs b/src/bin/darkfid.rs index f64cbc014..e131e64ec 100644 --- a/src/bin/darkfid.rs +++ b/src/bin/darkfid.rs @@ -231,7 +231,7 @@ fn main() -> Result<()> { let (signal, shutdown) = async_channel::unbounded::<()>(); let options = Arc::new(WalletCli::load()?); - let config = Arc::new(cli_config::Config::default()); + let config = Arc::new(cli_config::Config::load(PathBuf::from("darkfid_config_file"))?); let logger_config = ConfigBuilder::new().set_time_format_str("%T%.6f").build(); diff --git a/src/cli/client_cli/cli_config.rs b/src/cli/client_cli/cli_config.rs index 9a0030804..bee10f39e 100644 --- a/src/cli/client_cli/cli_config.rs +++ b/src/cli/client_cli/cli_config.rs @@ -1,9 +1,9 @@ -use crate::serial::{Encodable, Decodable, serialize, deserialize}; -use crate::Result; +use crate::serial::{deserialize, serialize, Decodable, Encodable}; use crate::util::join_config_path; +use crate::Result; use std::{ - fs::{create_dir_all, File}, + fs::OpenOptions, io::prelude::*, path::PathBuf, }; @@ -18,61 +18,56 @@ pub struct Config { impl Default for Config { fn default() -> Self { - let connect_url= String::from("127.0.0.1:3333"); - let subscriber_url= String::from("127.0.0.1:4444"); - let rpc_url= String::from("127.0.0.1:8000"); - let database_path = String::from("database_client.db"); + let connect_url = String::from("127.0.0.1:3333"); + let subscriber_url = String::from("127.0.0.1:4444"); + let rpc_url = String::from("127.0.0.1:8000"); + let database_path = String::from("database_client.db"); let log_path = String::from("/tmp/darkfid_service_daemon.log"); Self { connect_url, subscriber_url, rpc_url, database_path, - log_path + log_path, } } } impl Config { pub fn load(path: PathBuf) -> Result { - let path = join_config_path(&path)?; + let path = join_config_path(&path)?; load_config_file(path) } - pub fn save(&self, path: PathBuf) -> Result <()> { - let path = join_config_path(&path)?; + pub fn save(&self, path: PathBuf) -> Result<()> { + let path = join_config_path(&path)?; save_config_file(self, path) } } +pub fn load_config_file(config_file: PathBuf) -> Result { + let mut file = OpenOptions::new() + .read(true) + .write(true) + .create(true) + .open(config_file)?; - -pub fn load_config_file(config_file: PathBuf) -> Result -{ - - let mut file = File::open(config_file)?; let mut buffer: Vec = vec![]; file.read_to_end(&mut buffer)?; - let config: Config = deserialize(&buffer)?; - - Ok(config) + if !buffer.is_empty() { + let config: Config = deserialize(&buffer)?; + Ok(config) + } else { + Ok(Config::default()) + } } -pub fn save_config_file(config: &Config, config_file: PathBuf) -> Result<()> -{ +pub fn save_config_file(config: &Config, config_file: PathBuf) -> Result<()> { + let mut file = OpenOptions::new().write(true).create(true).open(&config_file)?; let serialized = serialize(config); - - if let Some(outdir) = config_file.parent() { - create_dir_all(outdir)?; - } - - let mut file = File::create(config_file)?; file.write_all(&serialized)?; - Ok(()) } - - impl Encodable for Config { fn encode(&self, mut s: S) -> Result { let mut len = 0; @@ -92,7 +87,7 @@ impl Decodable for Config { subscriber_url: Decodable::decode(&mut d)?, rpc_url: Decodable::decode(&mut d)?, database_path: Decodable::decode(&mut d)?, - log_path: Decodable::decode(&mut d)? + log_path: Decodable::decode(&mut d)?, }) } } diff --git a/src/cli/client_cli/wallet_cli.rs b/src/cli/client_cli/wallet_cli.rs index afe3e0d70..0b3eefe3f 100644 --- a/src/cli/client_cli/wallet_cli.rs +++ b/src/cli/client_cli/wallet_cli.rs @@ -20,7 +20,7 @@ impl WalletCli { .takes_value(false) ).get_matches(); - let verbose = app.is_present("VERBOSE"); + let verbose = app.is_present("verbose"); Ok(Self { verbose,