pub struct Eqname(/* private fields */);
Expand description
String slice for EQName
.
EQName
is union of QName
and
URIQualifiedName
.
See the documentation for Qname
type and UriQualifiedName
type.
Implementations§
Source§impl Eqname
impl Eqname
Sourcepub fn from_str(s: &str) -> Result<&Self, NameError>
pub fn from_str(s: &str) -> Result<&Self, NameError>
Creates a new &UriQualifiedName
.
§Failures
Fails if the given string is not a valid EQName
.
§Examples
let prefixed_q = Eqname::from_str("foo:bar")?;
assert_eq!(prefixed_q, "foo:bar");
let nc = Eqname::from_str("ncname")?;
assert_eq!(nc, "ncname");
let uri_qualified = Eqname::from_str("Q{http://example.com/}name")?;
assert_eq!(uri_qualified, "Q{http://example.com/}name");
assert_eq!(
Eqname::from_str("Q{}name")?,
"Q{}name",
"Empty URI is OK"
);
assert_eq!(
Eqname::from_str("Q{foo}bar")?,
"Q{foo}bar",
"URI is not validated"
);
Sourcepub unsafe fn new_unchecked(s: &str) -> &Self
pub unsafe fn new_unchecked(s: &str) -> &Self
Sourcepub fn as_str(&self) -> &str
pub fn as_str(&self) -> &str
Returns the string as &str
.
§Examples
let q = Eqname::from_str("foo:bar")?;
assert_eq!(q, "foo:bar");
assert_eq!(q.as_str(), "foo:bar");
let uri_qualified = Eqname::from_str("Q{foo}bar")?;
assert_eq!(uri_qualified, "Q{foo}bar");
assert_eq!(uri_qualified.as_str(), "Q{foo}bar");
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the length of the string in bytes.
§Examples
let q = Eqname::from_str("foo:bar")?;
assert_eq!(q.len(), "foo:bar".len());
let uri_qualified = Eqname::from_str("Q{foo}bar")?;
assert_eq!(uri_qualified.len(), "Q{foo}bar".len());
Sourcepub fn to_variant(&self) -> EqnameVariantData<&Qname, &UriQualifiedName>
pub fn to_variant(&self) -> EqnameVariantData<&Qname, &UriQualifiedName>
Returns the name in the type specific to the variant
(i.e. Qname
or UriQualifiedName
).
Sourcepub fn as_uri_qualified_name(&self) -> Option<&UriQualifiedName>
pub fn as_uri_qualified_name(&self) -> Option<&UriQualifiedName>
Returns the string as URIQualifiedName
, if valid.
Sourcepub fn parse_next(s: &str) -> Result<(&Self, &str), NameError>
pub fn parse_next(s: &str) -> Result<(&Self, &str), NameError>
Parses the leading Eqname
and returns the value and the rest input.
§Exmaples
let input = "foo:bar:012";
let expected = Eqname::from_str("foo:bar")
.expect("valid QName");
assert_eq!(
Eqname::parse_next(input),
Ok((expected, ":012"))
);
let input = "Q{foo}bar:012";
let expected = Eqname::from_str("Q{foo}bar")
.expect("valid UriQualifiedName");
assert_eq!(
Eqname::parse_next(input),
Ok((expected, ":012"))
);
let input = "012";
assert!(Eqname::parse_next(input).is_err());
Sourcepub fn namespace(&self) -> EqnameNamespace<'_>
pub fn namespace(&self) -> EqnameNamespace<'_>
Returns the namespace part if available: prefix for Qname
, URI for UriQualifiedName
.
Note that this is O(length) operation.
Consider using ParsedEqname::local_name
method if possible.
§Examples
use xml_string::names::{EqnameNamespace, Ncname, Qname};
let nc = Eqname::from_str("local")?;
assert_eq!(nc.namespace(), EqnameNamespace::None);
let q = Eqname::from_str("foo:bar")?;
let q_prefix = Ncname::from_str("foo")
.expect("Should never fail: Valid NCName");
assert_eq!(q.namespace(), EqnameNamespace::Prefix(q_prefix));
let uri_qualified = Eqname::from_str("Q{foo}bar")?;
assert_eq!(uri_qualified.namespace(), EqnameNamespace::Uri("foo"));
let uri_qualified_empty = Eqname::from_str("Q{}bar")?;
assert_eq!(uri_qualified_empty.namespace(), EqnameNamespace::Uri(""));
Sourcepub fn local_name(&self) -> &Ncname
pub fn local_name(&self) -> &Ncname
Returns the local name.
Note that this is O(length) operation.
Consider using ParsedEqname::local_name
method if possible.
§Examples
let q = Eqname::from_str("foo:bar")?;
assert_eq!(q.local_name(), "bar");
let nc = Eqname::from_str("bar")?;
assert_eq!(nc.local_name(), "bar");
let uri_qualified = Eqname::from_str("Q{foo}bar")?;
assert_eq!(uri_qualified.local_name(), "bar");
Sourcepub fn namespace_and_local(&self) -> (EqnameNamespace<'_>, &Ncname)
pub fn namespace_and_local(&self) -> (EqnameNamespace<'_>, &Ncname)
Returns a pair of the namespace and the local name.
This returns the same result as (self.namespace(), self.local_name())
,
but more efficiently than calling Eqname::namespace
and
Eqname::local_name
individually.
§Examples
use xml_string::names::{EqnameNamespace, Ncname};
let ncname_bar = Ncname::from_str("bar")
.expect("Should never fail: Valid NCName");
let nc = Eqname::from_str("bar")?;
assert_eq!(nc.namespace_and_local(), (EqnameNamespace::None, ncname_bar));
let q = Eqname::from_str("foo:bar")?;
let expected_prefix = Ncname::from_str("foo")
.expect("Should never fail: Valid NCName");
assert_eq!(
q.namespace_and_local(),
(EqnameNamespace::Prefix(expected_prefix), ncname_bar)
);
let uri_qualified = Eqname::from_str("Q{foo}bar")?;
assert_eq!(uri_qualified.namespace_and_local(), (EqnameNamespace::Uri("foo"), ncname_bar));
Sourcepub fn into_boxed_str(self: Box<Self>) -> Box<str>
pub fn into_boxed_str(self: Box<Self>) -> Box<str>
Converts a Box<Eqname>
into a Box<str>
without copying or allocating.
§Examples
let name = Eqname::from_str("q:name")?;
let boxed_name: Box<Eqname> = name.into();
assert_eq!(&*boxed_name, name);
let boxed_str: Box<str> = boxed_name.into_boxed_str();
assert_eq!(&*boxed_str, name.as_str());