html_site_generator/html/
div.rs1use 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}