diff --git a/jid/src/lib.rs b/jid/src/lib.rs
index 6fa59f229069e3c936644bf15bb5050764fe7c60..6ec212257d7588ff257d1f2182bf8fab0743c5bf 100644
--- a/jid/src/lib.rs
+++ b/jid/src/lib.rs
@@ -1126,35 +1126,19 @@ mod tests {
#[test]
fn minidom() {
let elem: minidom::Element = "".parse().unwrap();
- let to: Jid = elem
- .attr("from".try_into().unwrap())
- .unwrap()
- .parse()
- .unwrap();
+ let to: Jid = elem.attr("from").unwrap().parse().unwrap();
assert_eq!(to, Jid::from(FullJid::new("a@b/c").unwrap()));
let elem: minidom::Element = "".parse().unwrap();
- let to: Jid = elem
- .attr("from".try_into().unwrap())
- .unwrap()
- .parse()
- .unwrap();
+ let to: Jid = elem.attr("from").unwrap().parse().unwrap();
assert_eq!(to, Jid::from(BareJid::new("a@b").unwrap()));
let elem: minidom::Element = "".parse().unwrap();
- let to: FullJid = elem
- .attr("from".try_into().unwrap())
- .unwrap()
- .parse()
- .unwrap();
+ let to: FullJid = elem.attr("from").unwrap().parse().unwrap();
assert_eq!(to, FullJid::new("a@b/c").unwrap());
let elem: minidom::Element = "".parse().unwrap();
- let to: BareJid = elem
- .attr("from".try_into().unwrap())
- .unwrap()
- .parse()
- .unwrap();
+ let to: BareJid = elem.attr("from").unwrap().parse().unwrap();
assert_eq!(to, BareJid::new("a@b").unwrap());
}
@@ -1165,28 +1149,19 @@ mod tests {
let elem = minidom::Element::builder("message", "jabber:client")
.attr("from".try_into().unwrap(), full.clone())
.build();
- assert_eq!(
- elem.attr("from".try_into().unwrap()),
- Some(full.to_string().as_str())
- );
+ assert_eq!(elem.attr("from"), Some(full.to_string().as_str()));
let bare = BareJid::new("a@b").unwrap();
let elem = minidom::Element::builder("message", "jabber:client")
.attr("from".try_into().unwrap(), bare.clone())
.build();
- assert_eq!(
- elem.attr("from".try_into().unwrap()),
- Some(bare.to_string().as_str())
- );
+ assert_eq!(elem.attr("from"), Some(bare.to_string().as_str()));
let jid = Jid::from(bare.clone());
let _elem = minidom::Element::builder("message", "jabber:client")
.attr("from".try_into().unwrap(), jid)
.build();
- assert_eq!(
- elem.attr("from".try_into().unwrap()),
- Some(bare.to_string().as_str())
- );
+ assert_eq!(elem.attr("from"), Some(bare.to_string().as_str()));
}
#[test]
diff --git a/minidom/src/element.rs b/minidom/src/element.rs
index 13f8fbe02e79d87a001d25a7825f44ad3923292c..e66566fda4198d007d38a55338ba261f6526b820 100644
--- a/minidom/src/element.rs
+++ b/minidom/src/element.rs
@@ -26,10 +26,12 @@ use alloc::vec::Vec;
use core::slice;
use core::str::FromStr;
+use std::borrow::Borrow;
+use std::hash::Hash;
use std::io;
use rxml::writer::{Encoder, Item, TrackNamespace};
-use rxml::{AttrMap, Namespace as RxmlNamespace, NcName, NcNameStr, RawReader, XmlVersion};
+use rxml::{AttrMap, Namespace as RxmlNamespace, NcName, RawReader, XmlVersion};
fn encode_and_write(
item: Item<'_>,
@@ -188,8 +190,8 @@ impl Element {
///
/// assert_eq!(elem.name(), "name");
/// assert_eq!(elem.ns(), "namespace".to_owned());
- /// assert_eq!(elem.attr(xml_ncname!("name")), Some("value"));
- /// assert_eq!(elem.attr(xml_ncname!("inexistent")), None);
+ /// assert_eq!(elem.attr("name"), Some("value"));
+ /// assert_eq!(elem.attr("inexistent"), None);
/// assert_eq!(elem.text(), "inner");
/// ```
pub fn builder, NS: Into>(name: S, namespace: NS) -> ElementBuilder {
@@ -210,13 +212,13 @@ impl Element {
///
/// ```rust
/// use minidom::Element;
- /// use rxml::{Namespace, xml_ncname};
+ /// use rxml::Namespace;
///
/// let bare = Element::bare("name", "namespace");
///
/// assert_eq!(bare.name(), "name");
/// assert_eq!(bare.ns(), "namespace");
- /// assert_eq!(bare.attr(xml_ncname!("name")), None);
+ /// assert_eq!(bare.attr("name"), None);
/// assert_eq!(bare.text(), "");
/// ```
pub fn bare, NS: Into>(name: S, namespace: NS) -> Element {
@@ -243,7 +245,10 @@ impl Element {
/// Returns a reference to the value of the given attribute, if it exists, else `None`.
#[must_use]
- pub fn attr<'a>(&'a self, name: &'a NcNameStr) -> Option<&'a str> {
+ pub fn attr<'a, N: Ord + Hash + Eq + ?Sized>(&'a self, name: &'a N) -> Option<&'a str>
+ where
+ NcName: Borrow,
+ {
if let Some(value) = self.attributes.get(&RxmlNamespace::NONE, name) {
return Some(value);
}
@@ -252,7 +257,15 @@ impl Element {
/// Returns a reference to the value of the given namespaced attribute, if it exists, else `None`.
#[must_use]
- pub fn attr_ns<'a>(&'a self, ns: &'a RxmlNamespace, name: &'a NcNameStr) -> Option<&'a str> {
+ pub fn attr_ns<'a, NS: Ord + Hash + Eq + ?Sized, N: Ord + Hash + Eq + ?Sized>(
+ &'a self,
+ ns: &'a NS,
+ name: &'a N,
+ ) -> Option<&'a str>
+ where
+ RxmlNamespace: Borrow,
+ NcName: Borrow,
+ {
if let Some(value) = self.attributes.get(ns, name) {
return Some(value);
}
@@ -953,11 +966,8 @@ mod tests {
assert_eq!(elem.name(), "name");
assert_eq!(elem.ns(), "namespace".to_owned());
- assert_eq!(
- elem.attr_ns(&String::from("namespace").into(), xml_ncname!("name")),
- Some("value")
- );
- assert_eq!(elem.attr(xml_ncname!("inexistent")), None);
+ assert_eq!(elem.attr_ns("namespace", "name"), Some("value"));
+ assert_eq!(elem.attr("inexistent"), None);
}
#[test]
diff --git a/minidom/src/tests.rs b/minidom/src/tests.rs
index 3f63426ca8b2cb886fdf450b90cc4a944130e1d5..d8152aa4109fc7f0a7f3d555f99f2a8915083078 100644
--- a/minidom/src/tests.rs
+++ b/minidom/src/tests.rs
@@ -281,8 +281,8 @@ fn builder_works() {
.build();
assert_eq!(elem.name(), "a");
assert_eq!(elem.ns(), "b".to_owned());
- assert_eq!(elem.attr(xml_ncname!("c")), Some("d"));
- assert_eq!(elem.attr(xml_ncname!("x")), None);
+ assert_eq!(elem.attr("c"), Some("d"));
+ assert_eq!(elem.attr("x"), None);
assert_eq!(elem.text(), "e");
assert!(elem.has_child("child", "b"));
assert!(elem.is("a", "b"));
@@ -311,15 +311,11 @@ fn get_child_works() {
.unwrap()
.is("child", "child_ns"));
assert_eq!(
- root.get_child("child", "root_ns")
- .unwrap()
- .attr(xml_ncname!("c")),
+ root.get_child("child", "root_ns").unwrap().attr("c"),
Some("d")
);
assert_eq!(
- root.get_child("child", "child_ns")
- .unwrap()
- .attr(xml_ncname!("d")),
+ root.get_child("child", "child_ns").unwrap().attr("d"),
Some("e")
);
}
@@ -357,15 +353,12 @@ fn two_elements_with_same_arguments_different_order_are_equal() {
#[test]
fn namespace_attributes_works() {
let root = Element::from_reader(TEST_STRING).unwrap();
- assert_eq!(
- Some("en"),
- root.attr_ns(RxmlNamespace::xml(), xml_ncname!("lang"))
- );
+ assert_eq!(Some("en"), root.attr_ns(RxmlNamespace::xml(), "lang"));
assert_eq!(
"fr",
root.get_child("child", "child_ns")
.unwrap()
- .attr_ns(RxmlNamespace::xml(), xml_ncname!("lang"))
+ .attr_ns(RxmlNamespace::xml(), "lang")
.unwrap()
);
}
diff --git a/parsers/src/util/macros.rs b/parsers/src/util/macros.rs
index 3709b9da388c7cb4a20cd18e28aa03ef5eeecafa..5a9cf89655b178a3a34a920d31ffbf7f9eb1de6c 100644
--- a/parsers/src/util/macros.rs
+++ b/parsers/src/util/macros.rs
@@ -15,13 +15,13 @@ macro_rules! get_attr {
)
};
($elem:ident, $attr:tt, Option, $value:ident, $func:expr) => {
- match $elem.attr(::xso::exports::rxml::xml_ncname!($attr).into()) {
+ match $elem.attr($attr) {
Some($value) => Some($func),
None => None,
}
};
($elem:ident, $attr:tt, Required, $value:ident, $func:expr) => {
- match $elem.attr(::xso::exports::rxml::xml_ncname!($attr).into()) {
+ match $elem.attr($attr) {
Some($value) => $func,
None => {
return Err(xso::error::Error::Other(
@@ -32,7 +32,7 @@ macro_rules! get_attr {
}
};
($elem:ident, $attr:tt, Default, $value:ident, $func:expr) => {
- match $elem.attr(::xso::exports::rxml::xml_ncname!($attr).into()) {
+ match $elem.attr($attr) {
Some($value) => $func,
None => ::core::default::Default::default(),
}
diff --git a/parsers/src/xhtml.rs b/parsers/src/xhtml.rs
index 90232636ba3a92d4bce9a5f56a3fa6c35dae1f9a..1e805d998db7cf510f90d48e23f0c9a311394792 100644
--- a/parsers/src/xhtml.rs
+++ b/parsers/src/xhtml.rs
@@ -77,7 +77,7 @@ impl TryFrom for XhtmlIm {
if child.is("body", ns::XHTML) {
let child = child.clone();
let lang = child
- .attr_ns(rxml::Namespace::xml(), rxml::xml_ncname!("lang").into())
+ .attr_ns(rxml::Namespace::xml(), "lang")
.unwrap_or("")
.to_string();
let body = Body::try_from(child)?;
@@ -168,12 +168,9 @@ impl TryFrom for Body {
}
Ok(Body {
- style: parse_css(elem.attr(rxml::xml_ncname!("style"))),
+ style: parse_css(elem.attr("style")),
xml_lang: elem
- .attr_ns(
- &Into::::into(String::from("xml")),
- rxml::xml_ncname!("lang").into(),
- )
+ .attr_ns("xml", "lang")
.map(|xml_lang| xml_lang.to_string()),
children,
})
@@ -328,52 +325,44 @@ impl TryFrom for Tag {
Ok(match elem.name() {
"a" => Tag::A {
- href: elem
- .attr(rxml::xml_ncname!("href"))
- .map(|href| href.to_string()),
+ href: elem.attr("href").map(|href| href.to_string()),
style: parse_css(elem.attr(rxml::xml_ncname!("style"))),
- type_: elem
- .attr(rxml::xml_ncname!("type"))
- .map(|type_| type_.to_string()),
+ type_: elem.attr("type").map(|type_| type_.to_string()),
children,
},
"blockquote" => Tag::Blockquote {
- style: parse_css(elem.attr(rxml::xml_ncname!("style"))),
+ style: parse_css(elem.attr("style")),
children,
},
"br" => Tag::Br,
"cite" => Tag::Cite {
- style: parse_css(elem.attr(rxml::xml_ncname!("style"))),
+ style: parse_css(elem.attr("style")),
children,
},
"em" => Tag::Em { children },
"img" => Tag::Img {
- src: elem
- .attr(rxml::xml_ncname!("src"))
- .map(|src| src.to_string()),
- alt: elem
- .attr(rxml::xml_ncname!("alt"))
- .map(|alt| alt.to_string()),
+ src: elem.attr("src").map(|src| src.to_string()),
+ alt: elem.attr("alt").map(|alt| alt.to_string()),
},
"li" => Tag::Li {
- style: parse_css(elem.attr(rxml::xml_ncname!("style"))),
+ style: parse_css(elem.attr("style")),
children,
},
"ol" => Tag::Ol {
- style: parse_css(elem.attr(rxml::xml_ncname!("style"))),
+ style: parse_css(elem.attr("style")),
children,
},
"p" => Tag::P {
- style: parse_css(elem.attr(rxml::xml_ncname!("style"))),
+ style: parse_css(elem.attr("style")),
children,
},
"span" => Tag::Span {
- style: parse_css(elem.attr(rxml::xml_ncname!("style"))),
+ style: parse_css(elem.attr("style")),
children,
},
"strong" => Tag::Strong { children },
"ul" => Tag::Ul {
- style: parse_css(elem.attr(rxml::xml_ncname!("style"))),
+ style: parse_css(elem.attr("style")),
children,
},
_ => Tag::Unknown(children),