use std::collections::HashMap; use log::debug; use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Deserialize, Serialize)] pub struct Config { #[serde(default)] pub book: BookConfig, #[serde(default)] pub build: BuildConfig, #[serde(default)] pub pandoc: HashMap, } impl Config { pub fn new(config_file: &str) -> Result { let mut s = config::Config::default(); debug!("Parsing config file: {}", config_file); s.merge(config::File::with_name(config_file))?; debug!("Parsing config from environment"); s.merge(config::Environment::with_prefix("PANDOC_DOCBOOK").separator("_"))?; s.try_into() } } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct BookConfig { #[serde(default = "default_summary")] pub summary: String, } impl Default for BookConfig { fn default() -> Self { Self { summary: default_summary(), } } } fn default_summary() -> String { "src/_summary.md".to_string() } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct BuildConfig { #[serde(default = "default_build_dir")] pub build_dir: String, } impl Default for BuildConfig { fn default() -> Self { Self { build_dir: default_build_dir(), } } } fn default_build_dir() -> String { "pdbook".to_string() }