ferrum_email_render/
html_emitter.rs1pub fn escape_text(input: &str) -> String {
7 let mut output = String::with_capacity(input.len());
8 for ch in input.chars() {
9 match ch {
10 '&' => output.push_str("&"),
11 '<' => output.push_str("<"),
12 '>' => output.push_str(">"),
13 _ => output.push(ch),
14 }
15 }
16 output
17}
18
19pub fn escape_attr(input: &str) -> String {
23 let mut output = String::with_capacity(input.len());
24 for ch in input.chars() {
25 match ch {
26 '&' => output.push_str("&"),
27 '<' => output.push_str("<"),
28 '>' => output.push_str(">"),
29 '"' => output.push_str("""),
30 '\'' => output.push_str("'"),
31 _ => output.push(ch),
32 }
33 }
34 output
35}
36
37pub fn doctype() -> &'static str {
39 "<!DOCTYPE html>"
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn test_escape_text() {
48 assert_eq!(escape_text("Hello & World"), "Hello & World");
49 assert_eq!(escape_text("<script>"), "<script>");
50 assert_eq!(escape_text("plain text"), "plain text");
51 }
52
53 #[test]
54 fn test_escape_attr() {
55 assert_eq!(escape_attr("say \"hello\""), "say "hello"");
56 assert_eq!(escape_attr("it's"), "it's");
57 assert_eq!(escape_attr("a&b"), "a&b");
58 }
59}