From c93663d7db9af96e3211ae46e9a4b80ffbd8d496 Mon Sep 17 00:00:00 2001 From: Max Heller Date: Sun, 2 Jun 2024 16:53:25 -0400 Subject: [PATCH] feat: `skip-if-optional` flag to skip running even if `mdbook-pandoc` is available --- src/lib.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 74ed4a4..7d5054c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,7 +21,7 @@ use preprocess::Preprocessor; #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "kebab-case")] struct Config { - #[serde(rename = "profile")] + #[serde(rename = "profile", default = "Default::default")] pub profiles: HashMap, #[serde(default = "defaults::enabled")] pub keep_preprocessed: bool, @@ -29,6 +29,11 @@ struct Config { /// Code block related configuration. #[serde(default = "Default::default")] pub code: CodeConfig, + #[serde(default = "Default::default")] + pub optional: bool, + /// Never run the renderer if it is marked as optional. + #[serde(default = "Default::default")] + pub skip_if_optional: bool, } /// Configuration for tweaking how code blocks are rendered. @@ -97,6 +102,11 @@ impl mdbook::Renderer for Renderer { .with_context(|| format!("Unable to deserialize {}", Self::CONFIG_KEY))? .ok_or(anyhow!("No {} table found", Self::CONFIG_KEY))?; + if cfg.skip_if_optional && cfg.optional { + log::info!("Skipping rendering since `skip-if-optional` and `optional` are both set"); + return Ok(()); + } + let html_cfg: Option = ctx .config .get_deserialized_opt("output.html") @@ -1167,6 +1177,23 @@ colorlinks = false "###) } + #[test] + fn skip_if_optional() { + let cfg = r#" +[output.pandoc] +optional = true +skip-if-optional = true + "#; + let output = MDBook::init() + .mdbook_config(mdbook::Config::from_str(cfg).unwrap()) + .build(); + insta::assert_snapshot!(output, @r###" + ├─ log output + │ INFO mdbook::book: Running the pandoc backend + │ INFO mdbook_pandoc: Skipping rendering since `skip-if-optional` and `optional` are both set + "###) + } + #[test] fn redirects() { let cfg = r#"