use pulldown_cmark::{html, Options, Parser};
#[derive(Debug, Clone, Copy)]
pub(crate) struct EmbeddedDoc {
pub slug: &'static str,
pub title: &'static str,
pub source: &'static str,
}
pub(crate) const EMBEDDED_DOCS: &[EmbeddedDoc] = &[
EmbeddedDoc {
slug: "architecture",
title: "Architecture",
source: include_str!("../../assets/docs/architecture.md"),
},
EmbeddedDoc {
slug: "modeladmin",
title: "ModelAdmin customisation",
source: include_str!("../../assets/docs/modeladmin.md"),
},
EmbeddedDoc {
slug: "public-api",
title: "Public API surface",
source: include_str!("../../assets/docs/public-api.md"),
},
];
pub(crate) fn find(slug: &str) -> Option<&'static EmbeddedDoc> {
EMBEDDED_DOCS.iter().find(|d| d.slug == slug)
}
pub(crate) fn render_markdown(src: &str) -> String {
let mut opts = Options::empty();
opts.insert(Options::ENABLE_TABLES);
opts.insert(Options::ENABLE_FOOTNOTES);
opts.insert(Options::ENABLE_STRIKETHROUGH);
opts.insert(Options::ENABLE_TASKLISTS);
opts.insert(Options::ENABLE_SMART_PUNCTUATION);
let parser = Parser::new_ext(src, opts);
let mut out = String::with_capacity(src.len() * 2);
html::push_html(&mut out, parser);
out
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn embedded_docs_have_non_empty_sources() {
for d in EMBEDDED_DOCS {
assert!(!d.source.is_empty(), "doc `{}` source is empty", d.slug);
assert!(!d.title.is_empty(), "doc `{}` title is empty", d.slug);
}
}
#[test]
fn embedded_doc_slugs_are_unique() {
let mut seen = std::collections::HashSet::new();
for d in EMBEDDED_DOCS {
assert!(seen.insert(d.slug), "duplicate doc slug `{}`", d.slug);
}
}
#[test]
fn find_returns_none_for_unknown_slug() {
assert!(find("definitely-not-a-doc").is_none());
assert!(find("").is_none());
}
#[test]
fn render_markdown_emits_html_for_headings_and_code() {
let src = "# Title\n\nA paragraph.\n\n```rust\nlet x = 1;\n```\n";
let html = render_markdown(src);
assert!(html.contains("<h1>Title</h1>"), "missing H1: {html}");
assert!(html.contains("<p>A paragraph.</p>"), "missing P: {html}");
assert!(html.contains("<pre><code"), "missing code block: {html}");
}
#[test]
fn render_markdown_escapes_html_in_source() {
let src = "<script>alert(1)</script>";
let html = render_markdown(src);
assert!(
html.contains("<script>"),
"raw HTML passes through (source is framework-trusted): {html}"
);
}
}