//! Tagged element. use std::borrow::Cow; use std::str::Utf8Error; use quick_xml::events::BytesStart; use crate::attribute::Iter as AttributeIter; /// The start tag of a tagged element. /// /// The `` in `Hello` #[derive(Debug, Clone, PartialEq, Eq)] pub struct TagStart<'a> { inner: BytesStart<'a>, } impl<'a> TagStart<'a> { /// Returns a new `TagStart`. pub fn new(name: impl Into>) -> Self { Self { inner: BytesStart::new(name), } } /// Returns the tag name. #[must_use] pub fn name(&self) -> &[u8] { let name_length = self.inner.name().as_ref().len(); &self.inner.as_ref()[..name_length] } /// Returns the tag name in UTF-8. /// /// # Errors /// Returns `Err` if the name is not valid UTF-8. pub fn name_utf8(&self) -> Result<&str, Utf8Error> { std::str::from_utf8(self.name()) } /// Returns the tag attributes. #[must_use] pub fn attributes(&'a self) -> AttributeIter<'a> { AttributeIter::new(self.inner.attributes()) } } // Crate-local functions impl<'a> TagStart<'a> { pub(crate) fn from_inner(inner: BytesStart<'a>) -> Self { Self { inner } } }