use crate::arena::NodeId;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Attribute {
pub name: String,
pub value: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ElementData {
pub name: String,
pub attributes: Vec<Attribute>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TextData {
pub content: String,
pub is_cdata: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum NodeKind {
Document,
Element(ElementData),
Text(TextData),
Comment(String),
Declaration(ElementData),
Unknown(String),
}
#[derive(Debug, Clone)]
pub struct NodeData {
pub kind: NodeKind,
pub parent: Option<NodeId>,
pub first_child: Option<NodeId>,
pub last_child: Option<NodeId>,
pub prev_sibling: Option<NodeId>,
pub next_sibling: Option<NodeId>,
pub line_num: u32,
}
impl NodeData {
#[must_use]
pub const fn new(kind: NodeKind, line_num: u32) -> Self {
Self {
kind,
parent: None,
first_child: None,
last_child: None,
prev_sibling: None,
next_sibling: None,
line_num,
}
}
}