use crate::core::environment::RunSignal;
use crate::core::{Element, Environment};
use crate::error::Result;
use crate::template::{TModel, TemplateTransformModel};
use std::collections::HashMap;
pub struct HtmlEscapeTransform;
impl TemplateTransformModel for HtmlEscapeTransform {
fn transform_with_body(
&self,
env: &mut Environment,
_params: &HashMap<String, TModel>,
body: &[Element],
) -> Result<RunSignal> {
let (signal, captured) = env.capture(|e| e.run(body))?;
env.emit(&html_escape_entity(&captured))?;
Ok(signal)
}
}
pub fn html_escape_entity(s: &str) -> String {
let mut out = String::with_capacity(s.len());
for c in s.chars() {
match c {
'&' => out.push_str("&"),
'<' => out.push_str("<"),
'>' => out.push_str(">"),
'"' => out.push_str("""),
_ => out.push(c),
}
}
out
}