mdbook_preprocessor_utils/
html.rs1use anyhow::Result;
2use serde::Serialize;
3use std::fmt::Write;
4
5#[derive(Default)]
6pub struct HtmlElementBuilder {
7 html: String,
8}
9
10impl HtmlElementBuilder {
11 pub fn new() -> Self {
12 let html = String::from("<div");
13 HtmlElementBuilder { html }
14 }
15
16 pub fn attr(&mut self, key: &str, value: &str) -> &mut Self {
17 let value_escaped = html_escape::encode_double_quoted_attribute(&value);
18 write!(&mut self.html, r#" {key}="{value_escaped}""#).unwrap();
19 self
20 }
21
22 pub fn data(&mut self, key: &str, value: impl Serialize) -> Result<&mut Self> {
23 let value_json = serde_json::to_string(&value)?;
24 let value_escaped = html_escape::encode_double_quoted_attribute(&value_json);
25 write!(&mut self.html, r#" data-{key}="{value_escaped}""#).unwrap();
26 Ok(self)
27 }
28
29 pub fn finish(mut self) -> String {
30 write!(&mut self.html, "></div>").unwrap();
31 self.html
32 }
33}