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>,
pub emoji: Option<bool>,
pub autolink_headings: Option<bool>,
pub math: Option<bool>,
pub pretty_code_enabled: Option<bool>,
pub mermaid: Option<MermaidOptions>,
pub mermaid_enabled: Option<bool>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum MathEngine {
#[default]
Katex,
Mathml,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum MultiThemeStrategy {
#[default]
Split,
#[serde(alias = "cssVars")]
CssVars,
}
#[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, rename_all = "camelCase")]
pub struct PrettyCodeOptions {
pub theme: PrettyCodeTheme,
pub default_mode: Option<String>,
pub multi_theme_strategy: Option<MultiThemeStrategy>,
pub keep_raw_string: Option<bool>,
pub fragment_wrapper: Option<bool>,
pub line_class: Option<String>,
pub highlighted_line_attr: Option<String>,
pub default_language: Option<String>,
pub fallback_to_plaintext: Option<bool>,
pub render_title: Option<bool>,
pub include_data_language: Option<bool>,
pub include_pre_background: Option<bool>,
pub skip_languages: Vec<String>,
pub tab_size: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum MermaidThemeMode {
Single(String),
Multi(BTreeMap<String, String>),
}
impl Default for MermaidThemeMode {
fn default() -> Self {
Self::Multi(
[("light".to_string(), "default".to_string()), ("dark".to_string(), "dark".to_string())].into_iter().collect(),
)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CssDimension {
Number(f64),
String(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CssFontWeight {
Number(u32),
String(String),
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MermaidSecurityLevel {
Strict,
Loose,
Antiscript,
Sandbox,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MermaidLogLevel {
Debug,
Info,
Warn,
Error,
Fatal,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum MermaidLook {
Classic,
Neo,
HandDrawn,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MermaidLayout {
Dagre,
Elk,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum MermaidFlowchartRenderer {
#[serde(rename = "dagre-d3")]
DagreD3,
#[serde(rename = "dagre-wrapper")]
DagreWrapper,
Elk,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum MermaidFlowchartCurve {
Basis,
Linear,
Cardinal,
StepBefore,
StepAfter,
Natural,
MonotoneX,
MonotoneY,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MermaidAlign {
Left,
Center,
Right,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MermaidErLayoutDirection {
Tb,
Bt,
Lr,
Rl,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MermaidGanttDisplayMode {
#[serde(rename = "")]
Default,
Compact,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MermaidGanttWeekday {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MermaidSankeyAlignment {
Left,
Right,
Center,
Justify,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidThemeVariables {
pub background: Option<String>,
pub font_family: Option<String>,
pub font_size: Option<String>,
pub primary_color: Option<String>,
pub primary_text_color: Option<String>,
pub primary_border_color: Option<String>,
pub secondary_color: Option<String>,
pub secondary_text_color: Option<String>,
pub secondary_border_color: Option<String>,
pub tertiary_color: Option<String>,
pub tertiary_text_color: Option<String>,
pub tertiary_border_color: Option<String>,
pub note_bkg_color: Option<String>,
pub note_text_color: Option<String>,
pub note_border_color: Option<String>,
pub line_color: Option<String>,
pub text_color: Option<String>,
pub main_bkg: Option<String>,
pub error_bkg_color: Option<String>,
pub error_text_color: Option<String>,
pub node_bkg: Option<String>,
pub node_border: Option<String>,
pub cluster_bkg: Option<String>,
pub cluster_border: Option<String>,
pub default_link_color: Option<String>,
pub title_color: Option<String>,
pub edge_label_background: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidFlowchartConfig {
pub html_labels: Option<bool>,
pub use_max_width: Option<bool>,
pub default_renderer: Option<MermaidFlowchartRenderer>,
pub curve: Option<MermaidFlowchartCurve>,
pub diagram_padding: Option<u32>,
pub node_spacing: Option<u32>,
pub rank_spacing: Option<u32>,
pub padding: Option<u32>,
pub title_top_margin: Option<u32>,
pub wrapping_width: Option<u32>,
pub arrow_marker_absolute: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidSequenceConfig {
pub use_max_width: Option<bool>,
pub hide_unused_participants: Option<bool>,
pub activation_width: Option<u32>,
pub diagram_margin_x: Option<u32>,
pub diagram_margin_y: Option<u32>,
pub actor_margin: Option<u32>,
pub width: Option<u32>,
pub height: Option<u32>,
pub box_margin: Option<u32>,
pub box_text_margin: Option<u32>,
pub note_margin: Option<u32>,
pub message_margin: Option<u32>,
pub message_align: Option<MermaidAlign>,
pub mirror_actors: Option<bool>,
pub force_menus: Option<bool>,
pub bottom_margin_adj: Option<i32>,
pub right_angles: Option<bool>,
pub show_sequence_numbers: Option<bool>,
pub actor_font_size: Option<CssDimension>,
pub actor_font_family: Option<String>,
pub actor_font_weight: Option<CssFontWeight>,
pub note_font_size: Option<CssDimension>,
pub note_font_family: Option<String>,
pub note_font_weight: Option<CssFontWeight>,
pub note_align: Option<MermaidAlign>,
pub message_font_size: Option<CssDimension>,
pub message_font_family: Option<String>,
pub message_font_weight: Option<CssFontWeight>,
pub wrap: Option<bool>,
pub wrap_padding: Option<u32>,
pub label_box_width: Option<u32>,
pub label_box_height: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidGanttConfig {
pub use_max_width: Option<bool>,
pub title_top_margin: Option<u32>,
pub bar_height: Option<u32>,
pub bar_gap: Option<u32>,
pub top_padding: Option<u32>,
pub right_padding: Option<u32>,
pub left_padding: Option<u32>,
pub grid_line_start_padding: Option<u32>,
pub font_size: Option<u32>,
pub section_font_size: Option<CssDimension>,
pub number_section_styles: Option<u32>,
pub axis_format: Option<String>,
pub tick_interval: Option<String>,
pub top_axis: Option<bool>,
pub display_mode: Option<MermaidGanttDisplayMode>,
pub weekday: Option<MermaidGanttWeekday>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidErConfig {
pub use_max_width: Option<bool>,
pub title_top_margin: Option<u32>,
pub diagram_padding: Option<u32>,
pub layout_direction: Option<MermaidErLayoutDirection>,
pub min_entity_width: Option<u32>,
pub min_entity_height: Option<u32>,
pub entity_padding: Option<u32>,
pub stroke: Option<String>,
pub fill: Option<String>,
pub font_size: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidPieConfig {
pub use_max_width: Option<bool>,
pub text_position: Option<f32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidNodeRendererConfig {
pub use_max_width: Option<bool>,
pub title_top_margin: Option<u32>,
pub default_renderer: Option<MermaidFlowchartRenderer>,
pub arrow_marker_absolute: Option<bool>,
pub divider_margin: Option<u32>,
pub padding: Option<u32>,
pub text_height: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidGitGraphConfig {
pub use_max_width: Option<bool>,
pub title_top_margin: Option<u32>,
pub diagram_padding: Option<u32>,
pub main_branch_name: Option<String>,
pub main_branch_order: Option<u32>,
pub show_commit_label: Option<bool>,
pub show_branches: Option<bool>,
pub rotate_commit_label: Option<bool>,
pub parallel_commits: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidJourneyConfig {
pub use_max_width: Option<bool>,
pub diagram_margin_x: Option<u32>,
pub diagram_margin_y: Option<u32>,
pub left_margin: Option<u32>,
pub width: Option<u32>,
pub height: Option<u32>,
pub box_margin: Option<u32>,
pub box_text_margin: Option<u32>,
pub note_margin: Option<u32>,
pub message_margin: Option<u32>,
pub message_align: Option<MermaidAlign>,
pub bottom_margin_adj: Option<i32>,
pub right_angles: Option<bool>,
pub task_font_size: Option<CssDimension>,
pub task_font_family: Option<String>,
pub task_margin: Option<u32>,
pub activation_width: Option<u32>,
pub text_placement: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidMindmapConfig {
pub use_max_width: Option<bool>,
pub padding: Option<u32>,
pub max_node_width: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidTimelineConfig {
pub use_max_width: Option<bool>,
pub disable_multicolor: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidSankeyConfig {
pub use_max_width: Option<bool>,
pub node_alignment: Option<MermaidSankeyAlignment>,
pub show_values: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidXyChartConfig {
pub use_max_width: Option<bool>,
pub width: Option<u32>,
pub height: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidBlockConfig {
pub use_max_width: Option<bool>,
pub padding: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidRequirementConfig {
pub use_max_width: Option<bool>,
pub rect_min_width: Option<u32>,
pub rect_min_height: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidC4Config {
pub use_max_width: Option<bool>,
pub diagram_margin_x: Option<u32>,
pub diagram_margin_y: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidArchitectureConfig {
pub use_max_width: Option<bool>,
pub padding: Option<u32>,
pub icon_size: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidRadarConfig {
pub use_max_width: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidTreemapConfig {
pub use_max_width: Option<bool>,
pub padding: Option<u32>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct MermaidOptions {
pub theme: MermaidThemeMode,
#[serde(skip_serializing_if = "Option::is_none")]
pub background_color: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub responsive_svg: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub center_labels: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_dir: Option<PathBuf>,
#[serde(skip_serializing_if = "Option::is_none")]
pub puppeteer_config_file: Option<PathBuf>,
#[serde(skip_serializing_if = "Option::is_none")]
pub html_labels: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub theme_variables: Option<MermaidThemeVariables>,
#[serde(skip_serializing_if = "Option::is_none")]
pub font_family: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub font_size: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_on_load: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub arrow_marker_absolute: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deterministic_ids: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deterministic_id_seed: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_text_size: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_edges: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub security_level: Option<MermaidSecurityLevel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub log_level: Option<MermaidLogLevel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub look: Option<MermaidLook>,
#[serde(skip_serializing_if = "Option::is_none")]
pub layout: Option<MermaidLayout>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hand_drawn_seed: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wrap: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flowchart: Option<MermaidFlowchartConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sequence: Option<MermaidSequenceConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gantt: Option<MermaidGanttConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub er: Option<MermaidErConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pie: Option<MermaidPieConfig>,
#[serde(rename = "class", alias = "classDiagram", skip_serializing_if = "Option::is_none")]
pub class_diagram: Option<MermaidNodeRendererConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<MermaidNodeRendererConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub git_graph: Option<MermaidGitGraphConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub journey: Option<MermaidJourneyConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mindmap: Option<MermaidMindmapConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeline: Option<MermaidTimelineConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sankey: Option<MermaidSankeyConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub xy_chart: Option<MermaidXyChartConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub block: Option<MermaidBlockConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub requirement: Option<MermaidRequirementConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub c4: Option<MermaidC4Config>,
#[serde(skip_serializing_if = "Option::is_none")]
pub architecture: Option<MermaidArchitectureConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub radar: Option<MermaidRadarConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub treemap: Option<MermaidTreemapConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CopyLinkedFilesOptions {
pub source_dir: PathBuf,
pub assets_dir: PathBuf,
pub public_base: String,
}