From e40948567a3a57a82eff821c6102638a8779cd44 Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 25 Aug 2022 22:33:25 +0200 Subject: [PATCH] Add 'data_dir' config option --- CHANGELOG.md | 1 + src/config.rs | 11 +++++++++-- src/main.rs | 27 +++++++++++++++++++++------ 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f148a5..24ef8c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ Procedure when bumping the version number: ### Added - Config file - `ephemeral` config option +- `data_dir` config option ## v0.3.0 - 2022-08-22 diff --git a/src/config.rs b/src/config.rs index 6faa9a5..2513838 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,5 +1,5 @@ use std::fs; -use std::path::Path; +use std::path::{Path, PathBuf}; use serde::Deserialize; @@ -7,6 +7,7 @@ use crate::macros::ok_or_return; #[derive(Debug, Default, Deserialize)] pub struct Config { + pub data_dir: Option, #[serde(default)] pub ephemeral: bool, } @@ -14,6 +15,12 @@ pub struct Config { impl Config { pub fn load(path: &Path) -> Self { let content = ok_or_return!(fs::read_to_string(path), Self::default()); - ok_or_return!(toml::from_str(&content), Self::default()) + match toml::from_str(&content) { + Ok(config) => config, + Err(err) => { + println!("Error loading config file: {err}"); + Self::default() + } + } } } diff --git a/src/main.rs b/src/main.rs index 1614e16..eb6c135 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,8 +30,9 @@ use std::path::PathBuf; use clap::Parser; use cookie::CookieJar; -use directories::ProjectDirs; +use directories::{BaseDirs, ProjectDirs}; use log::info; +use macros::some_or_return; use toss::terminal::Terminal; use ui::Ui; use vault::Vault; @@ -81,6 +82,22 @@ struct Args { command: Option, } +fn set_data_dir(config: &mut Config, args_data_dir: Option) { + let data_dir = some_or_return!(args_data_dir); + let data_dir = if let Some(base_dirs) = BaseDirs::new() { + base_dirs.home_dir().join(data_dir) + } else { + data_dir + }; + config.data_dir = Some(data_dir); +} + +fn set_ephemeral(config: &mut Config, args_ephemeral: bool) { + if args_ephemeral { + config.ephemeral = true; + } +} + #[tokio::main] async fn main() -> anyhow::Result<()> { let args = Args::parse(); @@ -91,15 +108,13 @@ async fn main() -> anyhow::Result<()> { .unwrap_or_else(|| dirs.config_dir().join("config.toml")); println!("Config file: {}", config_path.to_string_lossy()); let mut config = Config::load(&config_path); - - if args.ephemeral { - config.ephemeral = true; - } + set_data_dir(&mut config, args.data_dir); + set_ephemeral(&mut config, args.ephemeral); let vault = if config.ephemeral { vault::launch_in_memory()? } else { - let data_dir = args + let data_dir = config .data_dir .unwrap_or_else(|| dirs.data_dir().to_path_buf()); println!("Data dir: {}", data_dir.to_string_lossy());