ahecha_html/render/render_string/
mod.rs1use std::fmt::{Result, Write};
2
3mod attributes;
4mod children;
5mod doctype;
6mod elements;
7mod node;
8mod numbers;
9mod text;
10pub trait RenderString: Sized {
13 fn render_into<W: Write>(self, writer: &mut W) -> Result;
16
17 fn render(self) -> String {
19 let mut buf = String::new();
20 self.render_into(&mut buf).unwrap();
22 buf
24 }
25}
26
27impl RenderString for () {
29 fn render_into<W: Write>(self, _writer: &mut W) -> Result {
30 Ok(())
31 }
32}
33
34impl<T: RenderString> RenderString for Option<T> {
36 fn render_into<W: Write>(self, writer: &mut W) -> Result {
37 match self {
38 None => Ok(()),
39 Some(x) => x.render_into(writer),
40 }
41 }
42}
43
44impl<T: RenderString> RenderString for Vec<T> {
46 fn render_into<W: Write>(self, writer: &mut W) -> Result {
47 for elem in self {
48 elem.render_into(writer)?;
49 }
50 Ok(())
51 }
52}
53
54impl<O: RenderString, E: RenderString> RenderString for std::result::Result<O, E> {
56 fn render_into<W: Write>(self, writer: &mut W) -> Result {
57 match self {
58 Ok(o) => o.render_into(writer),
59 Err(e) => e.render_into(writer),
60 }
61 }
62}
63
64impl RenderString for bool {
66 fn render_into<W: Write>(self, writer: &mut W) -> Result {
67 if self {
68 write!(writer, "true")?;
69 } else {
70 write!(writer, "false")?;
71 }
72 Ok(())
73 }
74}
75
76