diff --git a/minidom-rs/src/element.rs b/minidom-rs/src/element.rs
index a9da253..9907bc5 100644
--- a/minidom-rs/src/element.rs
+++ b/minidom-rs/src/element.rs
@@ -258,7 +258,7 @@ impl Element {
/// assert_eq!(elem.is("name", NSChoice::None), false);
/// assert_eq!(elem.is("name", NSChoice::OneOf("namespace")), true);
/// assert_eq!(elem.is("name", NSChoice::OneOf("foo")), false);
- /// assert_eq!(elem.is("name", NSChoice::AnyOf(vec!["foo", "namespace"])), true);
+ /// assert_eq!(elem.is("name", NSChoice::AnyOf(&["foo", "namespace"])), true);
/// assert_eq!(elem.is("name", NSChoice::Any), true);
///
/// let elem2 = Element::builder("name").build();
@@ -285,7 +285,7 @@ impl Element {
/// assert_eq!(elem.has_ns(NSChoice::None), false);
/// assert_eq!(elem.has_ns(NSChoice::OneOf("namespace")), true);
/// assert_eq!(elem.has_ns(NSChoice::OneOf("foo")), false);
- /// assert_eq!(elem.has_ns(NSChoice::AnyOf(vec!["foo", "namespace"])), true);
+ /// assert_eq!(elem.has_ns(NSChoice::AnyOf(&["foo", "namespace"])), true);
/// assert_eq!(elem.has_ns(NSChoice::Any), true);
///
/// let elem2 = Element::builder("name").build();
@@ -661,25 +661,31 @@ impl Element {
/// # Examples
///
/// ```rust
- /// use minidom::Element;
+ /// use minidom::{Element, NSChoice};
///
/// let elem: Element = r#""#.parse().unwrap();
- ///
/// assert!(elem.get_child("a", "ns").unwrap().is("a", "ns"));
/// assert!(elem.get_child("a", "other_ns").unwrap().is("a", "other_ns"));
/// assert!(elem.get_child("b", "ns").unwrap().is("b", "ns"));
/// assert_eq!(elem.get_child("c", "ns"), None);
/// assert_eq!(elem.get_child("b", "other_ns"), None);
/// assert_eq!(elem.get_child("a", "inexistent_ns"), None);
+ ///
+ /// let elem: Element = r#""#.parse().unwrap();
+ /// assert_eq!(elem.get_child("a", NSChoice::None), None);
+ /// assert!(elem.get_child("a", NSChoice::Any).unwrap().is("a", "other_ns"));
+ /// assert!(elem.get_child("b", NSChoice::None).unwrap().is("b", NSChoice::None));
+ /// assert!(elem.get_child("b", NSChoice::Any).unwrap().is("b", NSChoice::None));
/// ```
- pub fn get_child, NS: AsRef>(
+ pub fn get_child<'a, N: AsRef, NS: Into>>(
&self,
name: N,
namespace: NS,
) -> Option<&Element> {
+ let namespace = namespace.into();
for fork in &self.children {
if let Node::Element(ref e) = *fork {
- if e.is(name.as_ref(), namespace.as_ref()) {
+ if e.is(name.as_ref(), namespace) {
return Some(e);
}
}
@@ -689,14 +695,15 @@ impl Element {
/// Returns a mutable reference to the first child element with the specific name and namespace,
/// if it exists in the direct descendants of this `Element`, else returns `None`.
- pub fn get_child_mut, NS: AsRef>(
+ pub fn get_child_mut<'a, N: AsRef, NS: Into>>(
&mut self,
name: N,
namespace: NS,
) -> Option<&mut Element> {
+ let namespace = namespace.into();
for fork in &mut self.children {
if let Node::Element(ref mut e) = *fork {
- if e.is(name.as_ref(), namespace.as_ref()) {
+ if e.is(name.as_ref(), namespace) {
return Some(e);
}
}
@@ -710,18 +717,27 @@ impl Element {
/// # Examples
///
/// ```rust
- /// use minidom::Element;
+ /// use minidom::{Element, NSChoice};
///
/// let elem: Element = r#""#.parse().unwrap();
- ///
/// assert_eq!(elem.has_child("a", "other_ns"), true);
/// assert_eq!(elem.has_child("a", "ns"), true);
/// assert_eq!(elem.has_child("a", "inexistent_ns"), false);
/// assert_eq!(elem.has_child("b", "ns"), true);
/// assert_eq!(elem.has_child("b", "other_ns"), false);
/// assert_eq!(elem.has_child("b", "inexistent_ns"), false);
+ ///
+ /// let elem: Element = r#""#.parse().unwrap();
+ /// assert_eq!(elem.has_child("a", NSChoice::None), false);
+ /// assert_eq!(elem.has_child("a", NSChoice::OneOf("other_ns")), true);
+ /// assert_eq!(elem.has_child("a", NSChoice::Any), true);
+ /// assert_eq!(elem.has_child("b", NSChoice::None), true);
/// ```
- pub fn has_child, NS: AsRef>(&self, name: N, namespace: NS) -> bool {
+ pub fn has_child<'a, N: AsRef, NS: Into>>(
+ &self,
+ name: N,
+ namespace: NS,
+ ) -> bool {
self.get_child(name, namespace).is_some()
}
@@ -732,21 +748,25 @@ impl Element {
/// # Examples
///
/// ```rust
- /// use minidom::Element;
+ /// use minidom::{Element, NSChoice};
///
/// let mut elem: Element = r#""#.parse().unwrap();
- ///
/// assert!(elem.remove_child("a", "ns").unwrap().is("a", "ns"));
/// assert!(elem.remove_child("a", "ns").is_none());
/// assert!(elem.remove_child("inexistent", "inexistent").is_none());
+ ///
+ /// let mut elem: Element = r#""#.parse().unwrap();
+ /// assert!(elem.remove_child("a", NSChoice::None).is_none());
+ /// assert!(elem.remove_child("a", NSChoice::Any).unwrap().is("a", "other_ns"));
+ /// assert!(elem.remove_child("b", NSChoice::None).unwrap().is("b", NSChoice::None));
/// ```
- pub fn remove_child, NS: AsRef>(
+ pub fn remove_child<'a, N: AsRef, NS: Into>>(
&mut self,
name: N,
namespace: NS,
) -> Option {
let name = name.as_ref();
- let namespace = namespace.as_ref();
+ let namespace = namespace.into();
let idx = self.children.iter().position(|x| {
if let Node::Element(ref elm) = x {
elm.is(name, namespace)
diff --git a/minidom-rs/src/namespace_set.rs b/minidom-rs/src/namespace_set.rs
index 24eacd1..2e97d5a 100644
--- a/minidom-rs/src/namespace_set.rs
+++ b/minidom-rs/src/namespace_set.rs
@@ -3,7 +3,7 @@ use std::collections::BTreeMap;
use std::fmt;
use std::rc::Rc;
-#[derive(Clone, PartialEq, Eq, Debug)]
+#[derive(Clone, Copy, PartialEq, Eq, Debug)]
/// Use to compare namespaces
pub enum NSChoice<'a> {
/// The element must have no namespace
@@ -11,7 +11,7 @@ pub enum NSChoice<'a> {
/// The element's namespace must match the specified namespace
OneOf(&'a str),
/// The element's namespace must be in the specified vector
- AnyOf(Vec<&'a str>),
+ AnyOf(&'a [&'a str]),
/// The element can have any namespace, or no namespace
Any,
}