blob: 19ae03bda14481eaa01e65c6f53d16a7eefd5fae (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
//! 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 `<xyz foo="bar">` in `<xyz foo="bar">Hello</xyz>`
#[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<Cow<'a, str>>) -> 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 }
}
}
|