NamespaceSet::set_parent(): don't require a full Element

by passing just a reference to a NamespaceSet we could reuse this for
xmlns elision in the serialization code.
This commit is contained in:
Astro 2017-08-13 02:28:44 +02:00
parent 98fd71fd3f
commit 7d2699e08e

View file

@ -136,9 +136,9 @@ impl NamespaceSet {
} }
} }
fn set_parent(&self, parent: &Element) { fn set_parent(&self, parent: Rc<NamespaceSet>) {
let mut parent_ns = self.parent.borrow_mut(); let mut parent_ns = self.parent.borrow_mut();
let new_set = parent.namespaces.clone(); let new_set = parent;
*parent_ns = Some(new_set); *parent_ns = Some(new_set);
} }
@ -579,7 +579,7 @@ impl Element {
/// assert_eq!(child.name(), "new"); /// assert_eq!(child.name(), "new");
/// ``` /// ```
pub fn append_child(&mut self, child: Element) -> &mut Element { pub fn append_child(&mut self, child: Element) -> &mut Element {
child.namespaces.set_parent(&self); child.namespaces.set_parent(self.namespaces.clone());
self.children.push(Node::Element(child)); self.children.push(Node::Element(child));
if let Node::Element(ref mut cld) = *self.children.last_mut().unwrap() { if let Node::Element(ref mut cld) = *self.children.last_mut().unwrap() {
@ -882,7 +882,7 @@ impl ElementBuilder {
// Propagate namespaces // Propagate namespaces
for node in &element.children { for node in &element.children {
if let Node::Element(ref e) = *node { if let Node::Element(ref e) = *node {
e.namespaces.set_parent(&element); e.namespaces.set_parent(element.namespaces.clone());
} }
} }