use serde::{Deserialize, Serialize};
use std::path::PathBuf;
#[derive(Deserialize, Serialize, Clone)]
pub struct Config {
#[serde(default = "default_posts")]
pub posts_dir: PathBuf,
#[serde(default = "default_posts_outdir")]
pub posts_outdir: String,
#[serde(default = "default_pages")]
pub pages_dir: PathBuf,
#[serde(default = "default_output")]
pub output_dir: PathBuf,
#[serde(default = "default_template")]
pub template_path: PathBuf,
#[serde(default = "default_includes")]
pub includes_dir: PathBuf,
#[serde(default = "default_static")]
pub static_dir: PathBuf,
#[serde(default = "default_view")]
pub view_template_path: PathBuf,
#[serde(default = "default_url")]
pub base_url: String,
#[serde(default = "default_base")]
pub base: String,
#[serde(default)]
pub site: SiteMetadata,
#[serde(default)]
pub build: BuildSettings,
}
#[derive(Deserialize, Serialize, Clone, Default)]
pub struct SiteMetadata {
#[serde(default = "default_title")]
pub title: String,
#[serde(default)]
pub description: String,
#[serde(default)]
pub author: String,
#[serde(default = "default_bool_true")]
pub generate_rss: bool,
#[serde(default = "default_bool_true")]
pub generate_search: bool,
}
#[derive(Deserialize, Serialize, Clone, Default)]
pub struct BuildSettings {
#[serde(default = "default_bool_true")]
pub clean_output: bool,
#[serde(default = "default_sass_style")]
pub sass_style: String,
#[serde(default = "default_bool_false")]
pub minify_html: bool,
#[serde(default = "default_bool_true")]
pub use_syntect: bool,
#[serde(default = "default_theme")]
pub syntax_theme: String,
pub syntax_theme_path: Option<PathBuf>,
pub custom_syntax_dir: Option<PathBuf>,
}
fn default_posts() -> PathBuf { PathBuf::from("./posts") }
fn default_posts_outdir() -> String { "".to_string() }
fn default_pages() -> PathBuf { PathBuf::from("./pages") }
fn default_output() -> PathBuf { PathBuf::from("./.build") }
fn default_template() -> PathBuf { PathBuf::from("./index.html") }
fn default_includes() -> PathBuf { PathBuf::from("./includes") }
fn default_static() -> PathBuf { PathBuf::from("./static") }
fn default_view() -> PathBuf { PathBuf::from("./includes/view_template.html") }
fn default_url() -> String { "https://example.com".to_string() }
fn default_base() -> String { "".to_string() }
fn default_title() -> String { "a novos site".to_string() }
fn default_sass_style() -> String { "expanded".to_string() }
fn default_theme() -> String { "base16-ocean.dark".to_string() }
fn default_bool_true() -> bool { true }
fn default_bool_false() -> bool { false }