Crates.io | mdbook-preprocessor-boilerplate |
lib.rs | mdbook-preprocessor-boilerplate |
version | 0.1.2 |
source | src |
created_at | 2021-12-02 15:47:41.134699 |
updated_at | 2023-04-20 23:08:23.671097 |
description | Boilerplate code for mdbook preprocessors |
homepage | |
repository | https://github.com/JoelCourtney/mdbook-preprocessor-boilerplate |
max_upload_size | |
id | 491290 |
size | 42,900 |
Boilerplate code for mdbook preprocessors.
Handles the CLI, checks whether the renderer is supported, checks the mdbook version, and runs your preprocessor. All you need to do is implement the [mdbook::preprocess::Preprocessor] trait.
This boilerplate has a few heavy dependencies (like serde_json and mdbook). If you want a small executable, you'll have to implement this functionality yourself.
The following is functionally identical to the No-Op Preprocessor Example given by mdbook.
use mdbook::book::Book;
use mdbook::preprocess::{CmdPreprocessor, Preprocessor, PreprocessorContext};
use anyhow::{bail, Result};
fn main() {
mdbook_preprocessor_boilerplate::run(
NoOpPreprocessor,
"An mdbook preprocessor that does nothing" // CLI description
);
}
struct NoOpPreprocessor;
impl Preprocessor for NoOpPreprocessor {
fn name(&self) -> &str {
"nop-preprocessor"
}
fn run(&self, ctx: &PreprocessorContext, book: Book) -> Result<Book> {
// In testing we want to tell the preprocessor to blow up by setting a
// particular config value
if let Some(nop_cfg) = ctx.config.get_preprocessor(self.name()) {
if nop_cfg.contains_key("blow-up") {
anyhow::bail!("Boom!!1!");
}
}
// we *are* a no-op preprocessor after all
Ok(book)
}
fn supports_renderer(&self, renderer: &str) -> bool {
renderer != "not-supported"
}
}
License: GPL-3.0