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
6pub enum DomNode {
7    Node { node: DomElement },
8    Text { node: DomText },
9    Comment { node: DomComment },
10}
11
12impl DomNode {
13    pub fn new_node(node: DomElement) -> DomNode {
14        DomNode::Node { node }
15    }
16
17    pub fn new_text(node: DomText) -> DomNode {
18        DomNode::Text { node }
19    }
20
21    pub fn id_dom(&self) -> DomId {
22        match self {
23            Self::Node { node } => node.id_dom(),
24            Self::Text { node } => node.id_dom(),
25            Self::Comment { node } => node.id_dom(),
26        }
27    }
28}
29
30impl From<DomElement> for DomNode {
31    fn from(node: DomElement) -> Self {
32        DomNode::Node { node }
33    }
34}
35
36impl From<DomText> for DomNode {
37    fn from(node: DomText) -> Self {
38        DomNode::Text { node }
39    }
40}
41
42impl From<DomComment> for DomNode {
43    fn from(node: DomComment) -> Self {
44        DomNode::Comment { node }
45    }
46}
47
48impl<T: Into<String>> From<T> for DomNode {
49    fn from(text: T) -> Self {
50        DomNode::Text {
51            node: DomText::new(text),
52        }
53    }
54}