diff options
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/markdown.rs | 21 | ||||
-rw-r--r-- | src/internal/mod.rs | 16 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/internal/markdown.rs b/src/internal/markdown.rs new file mode 100644 index 0000000..9798876 --- /dev/null +++ b/src/internal/markdown.rs @@ -0,0 +1,21 @@ +use color_eyre::{Result, eyre::Context}; +use comrak::{ComrakOptions, Arena, parse_document, format_html}; + + +pub fn render(inp: &str) -> Result<String> { + let mut options = ComrakOptions::default(); + options.extension.autolink = true; + options.extension.table = true; + options.extension.superscript = true; + options.extension.footnotes = true; + + options.render.unsafe_ = true; + + let arena = Arena::new(); + let root = parse_document(&arena, inp, &options); + + let mut html = vec![]; + format_html(root, &options, &mut html).unwrap(); + + String::from_utf8(html).wrap_err("this is somehow not UTF-8") +} diff --git a/src/internal/mod.rs b/src/internal/mod.rs new file mode 100644 index 0000000..f924c50 --- /dev/null +++ b/src/internal/mod.rs @@ -0,0 +1,16 @@ +use color_eyre::eyre::Result; +use crate::blog::post::Post; + +pub mod markdown; + +pub struct SiteState { + pub blog: Vec<Post>, +} + +pub async fn init() -> Result<SiteState> { + let blog = crate::blog::post::load("blog").await?; + + Ok(SiteState { + blog, + }) +} |