mirror of
https://gitlab.com/xmpp-rs/xmpp-rs.git
synced 2024-07-12 22:21:53 +00:00
add child iterators and fix up some of the tests, which still do not pass (yet)
This commit is contained in:
parent
75b494e02c
commit
fda38ff242
1 changed files with 42 additions and 5 deletions
47
src/lib.rs
47
src/lib.rs
|
@ -6,6 +6,10 @@ use std::io::prelude::*;
|
||||||
|
|
||||||
use std::convert::From;
|
use std::convert::From;
|
||||||
|
|
||||||
|
use std::iter::Iterator;
|
||||||
|
|
||||||
|
use std::slice;
|
||||||
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use xml::name::{OwnedName, Name};
|
use xml::name::{OwnedName, Name};
|
||||||
|
@ -152,11 +156,15 @@ impl Element {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn children<'a>(&'a self) -> Children<'a> {
|
pub fn children<'a>(&'a self) -> Children<'a> {
|
||||||
unimplemented!();
|
Children {
|
||||||
|
iter: self.children.iter(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn children_mut<'a>(&'a mut self) -> ChildrenMut<'a> {
|
pub fn children_mut<'a>(&'a mut self) -> ChildrenMut<'a> {
|
||||||
unimplemented!();
|
ChildrenMut {
|
||||||
|
iter: self.children.iter_mut(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn append_child(&mut self, child: Element) -> &mut Element {
|
pub fn append_child(&mut self, child: Element) -> &mut Element {
|
||||||
|
@ -191,11 +199,37 @@ impl Element {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Children<'a> {
|
pub struct Children<'a> {
|
||||||
elem: &'a Element,
|
iter: slice::Iter<'a, Fork>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Iterator for Children<'a> {
|
||||||
|
type Item = &'a Element;
|
||||||
|
|
||||||
|
fn next(&mut self) -> Option<&'a Element> {
|
||||||
|
while let Some(item) = self.iter.next() {
|
||||||
|
if let Fork::Element(ref child) = *item {
|
||||||
|
return Some(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ChildrenMut<'a> {
|
pub struct ChildrenMut<'a> {
|
||||||
elem: &'a mut Element,
|
iter: slice::IterMut<'a, Fork>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Iterator for ChildrenMut<'a> {
|
||||||
|
type Item = &'a mut Element;
|
||||||
|
|
||||||
|
fn next(&mut self) -> Option<&'a mut Element> {
|
||||||
|
while let Some(item) = self.iter.next() {
|
||||||
|
if let Fork::Element(ref mut child) = *item {
|
||||||
|
return Some(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ElementBuilder {
|
pub struct ElementBuilder {
|
||||||
|
@ -228,6 +262,9 @@ impl ElementBuilder {
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
use xml::reader::EventReader;
|
||||||
|
use xml::writer::EventWriter;
|
||||||
|
|
||||||
const TEST_STRING: &'static str = r#"<?xml version="1.0" encoding="utf-8"?><root xmlns="root_ns" a="b">meow<child c="d" /><child xmlns="child_ns" d="e" />nya</root>"#;
|
const TEST_STRING: &'static str = r#"<?xml version="1.0" encoding="utf-8"?><root xmlns="root_ns" a="b">meow<child c="d" /><child xmlns="child_ns" d="e" />nya</root>"#;
|
||||||
|
|
||||||
fn build_test_tree() -> Element {
|
fn build_test_tree() -> Element {
|
||||||
|
@ -263,7 +300,7 @@ mod tests {
|
||||||
let mut out = Vec::new();
|
let mut out = Vec::new();
|
||||||
{
|
{
|
||||||
let mut writer = EventWriter::new(&mut out);
|
let mut writer = EventWriter::new(&mut out);
|
||||||
root.write_to(&mut writer);
|
root.write_to(&mut writer).unwrap();
|
||||||
}
|
}
|
||||||
assert_eq!(String::from_utf8(out).unwrap(), TEST_STRING);
|
assert_eq!(String::from_utf8(out).unwrap(), TEST_STRING);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue