use indexmap::IndexMap;
use crate::namespace::Namespace;
use super::mutable::XmlNode;
use super::types::{NodeId, NodeType};
#[derive(Clone)]
pub struct XmlRoNode {
inner: XmlNode,
}
impl XmlRoNode {
pub fn from_node(node: XmlNode) -> Self {
Self { inner: node }
}
pub fn id(&self) -> NodeId {
self.inner.id()
}
pub fn get_type(&self) -> NodeType {
self.inner.get_type()
}
pub fn get_name(&self) -> String {
self.inner.get_name()
}
pub fn get_prefix(&self) -> Option<String> {
self.inner.get_prefix()
}
pub fn get_namespace_uri(&self) -> Option<String> {
self.inner.get_namespace_uri()
}
pub fn get_namespace(&self) -> Option<Namespace> {
self.inner.get_namespace()
}
pub fn qname(&self) -> String {
self.inner.qname()
}
pub fn get_content(&self) -> Option<String> {
self.inner.get_content()
}
pub fn get_attribute(&self, name: &str) -> Option<String> {
self.inner.get_attribute(name)
}
pub fn get_attribute_ns(&self, name: &str, ns_uri: &str) -> Option<String> {
self.inner.get_attribute_ns(name, ns_uri)
}
pub fn get_attributes(&self) -> IndexMap<String, String> {
self.inner.get_attributes()
}
pub fn get_namespace_declarations(&self) -> Vec<Namespace> {
self.inner.get_namespace_declarations()
}
pub fn get_parent(&self) -> Option<XmlRoNode> {
self.inner.get_parent().map(XmlRoNode::from_node)
}
pub fn get_child_nodes(&self) -> Vec<XmlRoNode> {
self.inner
.get_child_nodes()
.into_iter()
.map(XmlRoNode::from_node)
.collect()
}
pub fn get_child_elements(&self) -> Vec<XmlRoNode> {
self.inner
.get_child_elements()
.into_iter()
.map(XmlRoNode::from_node)
.collect()
}
pub fn first_child(&self) -> Option<XmlRoNode> {
self.inner.first_child().map(XmlRoNode::from_node)
}
pub fn last_child(&self) -> Option<XmlRoNode> {
self.inner.last_child().map(XmlRoNode::from_node)
}
pub fn line(&self) -> Option<usize> {
self.inner.line()
}
pub fn column(&self) -> Option<usize> {
self.inner.column()
}
pub fn is_element(&self) -> bool {
self.inner.is_element()
}
pub fn is_text(&self) -> bool {
self.inner.is_text()
}
pub fn into_node(self) -> XmlNode {
self.inner
}
}
impl std::fmt::Debug for XmlRoNode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("XmlRoNode")
.field("id", &self.id())
.field("type", &self.get_type())
.field("name", &self.get_name())
.finish()
}
}
impl PartialEq for XmlRoNode {
fn eq(&self, other: &Self) -> bool {
self.inner == other.inner
}
}
impl Eq for XmlRoNode {}
impl std::hash::Hash for XmlRoNode {
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
self.inner.hash(state);
}
}