minidom: ensure prefix is extracted out of provided name when creating Element

I would have liked to handle all of this in `Element::new` only, but I
also have to do it in `Element::builder` unfortunately because then
element builder then pushes prefixes it gathered itself.

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2020-03-28 16:22:37 +01:00
commit 171e7f1f34
2 changed files with 21 additions and 9 deletions

View file

@ -129,7 +129,16 @@ impl Element {
attributes: BTreeMap<String, String>, attributes: BTreeMap<String, String>,
children: Vec<Node>, children: Vec<Node>,
) -> Element { ) -> Element {
// TODO split name and possible prefix. let (prefix, name) = split_element_name(name).unwrap();
let namespace: String = namespace.into();
let prefixes: Prefixes = match prefix {
None => prefixes.into(),
Some(_) => {
let mut p = prefixes.into();
p.insert(namespace.clone(), prefix);
p
},
};
Element { Element {
name, name,
namespace, namespace,
@ -189,14 +198,13 @@ impl Element {
/// assert_eq!(bare.text(), ""); /// assert_eq!(bare.text(), "");
/// ``` /// ```
pub fn bare<S: Into<String>, NS: Into<String>>(name: S, namespace: NS) -> Element { pub fn bare<S: Into<String>, NS: Into<String>>(name: S, namespace: NS) -> Element {
// TODO split name and possible prefix. Element::new(
Element { name.into(),
name: name.into(), namespace.into(),
namespace: namespace.into(), BTreeMap::new(),
prefixes: Rc::new(Prefixes::default()), BTreeMap::new(),
attributes: BTreeMap::new(), Vec::new(),
children: Vec::new(), )
}
} }
/// Returns a reference to the name of this element. /// Returns a reference to the name of this element.

View file

@ -52,6 +52,10 @@ impl Prefixes {
None => None, None => None,
} }
} }
pub(crate) fn insert<S: Into<String>>(&mut self, namespace: S, prefix: Option<String>) {
self.prefixes.insert(namespace.into(), prefix);
}
} }
impl From<BTreeMap<String, Option<String>>> for Prefixes { impl From<BTreeMap<String, Option<String>>> for Prefixes {