vertigo/dom/
dom_node.rs

1use crate::dom::{dom_element::DomElement, dom_text::DomText};
2
3use super::{dom_comment::DomComment, dom_id::DomId};
4
5/// A Real DOM representative.
6///
7/// It is used to generate DOM changing commands. To create `DomNode` tree conveniently use [dom!](crate::dom) macro.
8pub enum DomNode {
9    Node { node: DomElement },
10    Text { node: DomText },
11    Comment { node: DomComment },
12}
13
14impl DomNode {
15    pub fn new_node(node: DomElement) -> DomNode {
16        DomNode::Node { node }
17    }
18
19    pub fn new_text(node: DomText) -> DomNode {
20        DomNode::Text { node }
21    }
22
23    pub fn id_dom(&self) -> DomId {
24        match self {
25            Self::Node { node } => node.id_dom(),
26            Self::Text { node } => node.id_dom(),
27            Self::Comment { node } => node.id_dom(),
28        }
29    }
30}
31
32impl From<DomElement> for DomNode {
33    fn from(node: DomElement) -> Self {
34        DomNode::Node { node }
35    }
36}
37
38impl From<DomText> for DomNode {
39    fn from(node: DomText) -> Self {
40        DomNode::Text { node }
41    }
42}
43
44impl From<DomComment> for DomNode {
45    fn from(node: DomComment) -> Self {
46        DomNode::Comment { node }
47    }
48}
49
50impl<T: Into<String>> From<T> for DomNode {
51    fn from(text: T) -> Self {
52        DomNode::Text {
53            node: DomText::new(text),
54        }
55    }
56}