html_site_generator/html/
div.rs

1use std::io::Write;
2
3use anyhow::Result;
4use html_site_generator_macro::{add_attributes_field, DeriveSetHtmlAttributes};
5
6use crate::html::IntoHtmlNode;
7
8#[add_attributes_field]
9#[derive(Debug, DeriveSetHtmlAttributes)]
10pub struct Div {
11    elements: Vec<Box<dyn IntoHtmlNode>>,
12}
13
14impl Div {
15    pub fn new() -> Self {
16        Div {
17            _attributes: Default::default(),
18            elements: Vec::new(),
19        }
20    }
21
22    pub fn add_element(&mut self, item: impl IntoHtmlNode + 'static) {
23        self.elements.push(Box::new(item))
24    }
25}
26
27impl IntoHtmlNode for Div {
28    fn transform_into_html_node(&self, buffer: &mut dyn Write) -> Result<()> {
29        write!(buffer, "<div")?;
30        self._attributes.transform_into_html_node(buffer)?;
31        writeln!(buffer, ">")?;
32
33        for element in &self.elements {
34            element.transform_into_html_node(buffer)?;
35        }
36
37        writeln!(buffer, "</div>")?;
38
39        Ok(())
40    }
41}