Skip to main content

afia_component/
dom.rs

1//! Types related to the DOM.
2
3use crate::dom::element::DomElement;
4
5pub mod dialog;
6pub mod element;
7pub mod event;
8pub mod text;
9
10pub mod node;
11pub mod node_list;
12
13/// A component output function's DOM element output.
14pub trait DomOutput {
15    /// Create the DOM element.
16    fn create_element(self) -> DomElement;
17
18    /// Rerender the DOM element.
19    fn render(self, element: DomElement);
20}
21
22/// A function for creating and a function for rerendering a DOM element.
23pub struct DomElementCreateAndRender<CreateFn, RenderFn>
24where
25    CreateFn: FnOnce() -> DomElement,
26    RenderFn: FnOnce(DomElement),
27{
28    /// Create the DOM element.
29    pub create: CreateFn,
30    /// Rerender the DOM element.
31    pub render: RenderFn,
32}
33
34impl<CreateFn, RenderFn> DomOutput for DomElementCreateAndRender<CreateFn, RenderFn>
35where
36    CreateFn: FnOnce() -> DomElement,
37    RenderFn: FnOnce(DomElement),
38{
39    fn create_element(self) -> DomElement {
40        (self.create)()
41    }
42
43    fn render(self, element: DomElement) {
44        (self.render)(element)
45    }
46}