unreal-doc 1.0.9

Tool for generating documentation from Unreal C++ sources.
use serde::{Deserialize, Serialize};
use std::path::PathBuf;

#[derive(Debug, Default, Copy, Clone, PartialEq, Serialize, Deserialize)]
pub enum Backend {
    #[default]
    Json,
    MdBook,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct BackendMdBook {
    #[serde(default = "BackendMdBook::default_title")]
    pub title: String,
    #[serde(default)]
    pub authors: Vec<String>,
    #[serde(default = "BackendMdBook::default_language")]
    pub language: String,
    #[serde(default)]
    pub multilingual: bool,
    #[serde(default)]
    pub build: bool,
    #[serde(default)]
    pub cleanup: bool,
    #[serde(default)]
    pub header: Option<PathBuf>,
    #[serde(default)]
    pub footer: Option<PathBuf>,
    #[serde(default)]
    pub assets: Option<PathBuf>,
    #[serde(default)]
    pub site_url: Option<String>,
}

impl Default for BackendMdBook {
    fn default() -> Self {
        Self {
            title: Self::default_title(),
            authors: vec![],
            language: Self::default_language(),
            multilingual: false,
            build: false,
            cleanup: false,
            header: None,
            footer: None,
            assets: None,
            site_url: None,
        }
    }
}

impl BackendMdBook {
    fn default_title() -> String {
        "Documentation".to_owned()
    }

    fn default_language() -> String {
        "en".to_owned()
    }
}

#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct Config {
    #[serde(default)]
    pub dependencies: Vec<PathBuf>,
    pub input_dirs: Vec<PathBuf>,
    pub output_dir: PathBuf,
    #[serde(default)]
    pub backend: Backend,
    #[serde(default)]
    pub settings: Settings,
    pub backend_mdbook: Option<BackendMdBook>,
}

#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct Settings {
    #[serde(default)]
    pub show_all: bool,
    #[serde(default)]
    pub document_protected: bool,
    #[serde(default)]
    pub document_private: bool,
}