use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
use std::path::PathBuf;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct PipelineConfig {
pub markdown_gfm: Option<bool>,
pub pretty_code: Option<PrettyCodeOptions>,
pub math_engine: Option<MathEngine>,
pub copy_linked_files: Option<CopyLinkedFilesOptions>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum MathEngine {
#[default]
Katex,
Mathml,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum PrettyCodeTheme {
Single(String),
Multi(BTreeMap<String, String>),
}
impl Default for PrettyCodeTheme {
fn default() -> Self {
Self::Multi(
[("light".to_string(), "Catppuccin Latte".to_string()), ("dark".to_string(), "Catppuccin Mocha".to_string())]
.into_iter()
.collect(),
)
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct PrettyCodeOptions {
pub theme: PrettyCodeTheme,
pub default_mode: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CopyLinkedFilesOptions {
pub source_dir: PathBuf,
pub assets_dir: PathBuf,
pub public_base: String,
}