// bibiman - a TUI for managing BibLaTeX databases // Copyright (C) 2024 lukeflo // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . ///// use std::path::PathBuf; use color_eyre::eyre::Result; use config::{ConfigError, FileFormat}; use serde::Deserialize; use crate::cliargs::CLIArgs; /// Main struct of the config file. Contains substructs/headings in toml #[derive(Debug, Clone, Deserialize)] pub struct BibiConfig { pub general: General, } /// Substruct [general] in config.toml #[derive(Debug, Clone, Deserialize)] pub struct General { pub bibfiles: Option>, pub editor: Option, pub pdf_opener: Option, pub url_opener: Option, } impl BibiConfig { pub fn default() -> Self { Self { general: General { bibfiles: None, editor: None, pdf_opener: None, url_opener: None, }, } } pub fn new(args: &CLIArgs) -> Result { // let mut cfg = config::Config::builder(); // cfg = cfg.add_source( // config::File::from(args.cfg_path.clone()) // .format(FileFormat::Toml) // .required(false), // ); // cfg.build()?.try_deserialize() Ok(Self::parse_cfg_file(args)?) } fn parse_cfg_file(args: &CLIArgs) -> Result { let mut cfg = config::Config::builder(); cfg = cfg.add_source( config::File::from(args.cfg_path.clone()) .format(FileFormat::Toml) .required(false), ); cfg.build()?.try_deserialize() } }