aboutsummaryrefslogtreecommitdiff
path: root/src/tagged.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2023-05-14 16:29:37 +0200
committerHampusM <hampus@hampusmat.com>2023-05-14 16:29:37 +0200
commit4d6664fb369607d42c269a8a50f26bfd3c3b8634 (patch)
treee1025e69d7d94f622e0e12cd1f279ec981baafcb /src/tagged.rs
parent0f44f2f36c3fa594e8bf9c0b23b7b8041cc6d13e (diff)
feat: add TagStart attribute functions
Diffstat (limited to 'src/tagged.rs')
-rw-r--r--src/tagged.rs44
1 files changed, 43 insertions, 1 deletions
diff --git a/src/tagged.rs b/src/tagged.rs
index 0150697..1fca458 100644
--- a/src/tagged.rs
+++ b/src/tagged.rs
@@ -5,7 +5,7 @@ use std::str::Utf8Error;
use quick_xml::events::BytesStart;
-use crate::attribute::Iter as AttributeIter;
+use crate::attribute::{Attribute, Error as AttributeError, Iter as AttributeIter};
/// The start tag of a tagged element.
///
@@ -26,6 +26,19 @@ impl<'a> TagStart<'a>
}
}
+ /// Returns `Self` with the specified attributes.
+ #[must_use]
+ pub fn with_attributes<Attrs>(mut self, attrs: Attrs) -> Self
+ where
+ Attrs: IntoIterator<Item = Attribute<'a>>,
+ {
+ self.inner = self
+ .inner
+ .with_attributes(attrs.into_iter().map(Attribute::into_inner));
+
+ self
+ }
+
/// Returns the name.
///
/// # Errors
@@ -50,6 +63,26 @@ impl<'a> TagStart<'a>
{
AttributeIter::new(self.inner.attributes())
}
+
+ /// Returns a attribute.
+ ///
+ /// # Errors
+ /// Returns `Err` if a invalid attribute is found.
+ pub fn get_attribute(
+ &self,
+ attr_name: &str,
+ ) -> Result<Option<Attribute>, TagStartError>
+ {
+ for attr_result in self.inner.attributes().with_checks(false) {
+ let attr = attr_result.map_err(AttributeError::from)?;
+
+ if attr.key.as_ref() == attr_name.as_bytes() {
+ return Ok(Some(Attribute::from_inner(attr)));
+ }
+ }
+
+ Ok(None)
+ }
}
// Crate-local functions
@@ -60,3 +93,12 @@ impl<'a> TagStart<'a>
Self { inner }
}
}
+
+/// `TagStart` error.
+#[derive(Debug, thiserror::Error)]
+pub enum TagStartError
+{
+ /// Invalid attribute.
+ #[error("Invalid attribute")]
+ InvalidAttribute(#[from] AttributeError),
+}