use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct OxContentConfig {
#[serde(default = "default_src_dir")]
pub src_dir: String,
#[serde(default = "default_out_dir")]
pub out_dir: String,
#[serde(default)]
pub base: String,
#[serde(default = "default_true")]
pub gfm: bool,
#[serde(default)]
pub theme: ThemeConfig,
#[serde(default)]
pub site: SiteConfig,
#[serde(default)]
pub og_image: OgImageConfig,
}
impl Default for OxContentConfig {
fn default() -> Self {
Self {
src_dir: default_src_dir(),
out_dir: default_out_dir(),
base: String::new(),
gfm: true,
theme: ThemeConfig::default(),
site: SiteConfig::default(),
og_image: OgImageConfig::default(),
}
}
}
fn default_src_dir() -> String {
"docs".to_string()
}
fn default_out_dir() -> String {
"dist".to_string()
}
fn default_true() -> bool {
true
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ThemeConfig {
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub custom_css: Option<String>,
#[serde(default = "default_true")]
pub dark_mode: bool,
#[serde(default)]
pub primary_color: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SiteConfig {
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub url: Option<String>,
#[serde(default)]
pub logo: Option<String>,
#[serde(default)]
pub social: Vec<SocialLink>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SocialLink {
pub platform: String,
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct OgImageConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default = "default_og_bg")]
pub background: String,
#[serde(default = "default_og_text")]
pub text_color: String,
#[serde(default)]
pub font_family: Option<String>,
}
impl Default for OgImageConfig {
fn default() -> Self {
Self {
enabled: false,
background: default_og_bg(),
text_color: default_og_text(),
font_family: None,
}
}
}
fn default_og_bg() -> String {
"#1a1a1a".to_string()
}
fn default_og_text() -> String {
"#ffffff".to_string()
}