Created util.rs
This commit is contained in:
parent
8963f17118
commit
99088d29ca
3 changed files with 41 additions and 35 deletions
|
@ -10,6 +10,7 @@ use reqwest::header::CONTENT_TYPE;
|
||||||
use minidom::Element;
|
use minidom::Element;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
|
use crate::utils::{find_elem, find_elems};
|
||||||
use crate::data::Calendar;
|
use crate::data::Calendar;
|
||||||
|
|
||||||
static DAVCLIENT_BODY: &str = r#"
|
static DAVCLIENT_BODY: &str = r#"
|
||||||
|
@ -194,41 +195,6 @@ impl Client {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Walks the tree and returns every element that has the given name
|
|
||||||
pub fn find_elems<S: AsRef<str>>(root: &Element, searched_name: S) -> Vec<&Element> {
|
|
||||||
let searched_name = searched_name.as_ref();
|
|
||||||
let mut elems: Vec<&Element> = Vec::new();
|
|
||||||
|
|
||||||
for el in root.children() {
|
|
||||||
if el.name() == searched_name {
|
|
||||||
elems.push(el);
|
|
||||||
} else {
|
|
||||||
let ret = find_elems(el, searched_name);
|
|
||||||
elems.extend(ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
elems
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Walks the tree until it finds an elements with the given name
|
|
||||||
pub fn find_elem<S: AsRef<str>>(root: &Element, searched_name: S) -> Option<&Element> {
|
|
||||||
let searched_name = searched_name.as_ref();
|
|
||||||
if root.name() == searched_name {
|
|
||||||
return Some(root);
|
|
||||||
}
|
|
||||||
|
|
||||||
for el in root.children() {
|
|
||||||
if el.name() == searched_name {
|
|
||||||
return Some(el);
|
|
||||||
} else {
|
|
||||||
let ret = find_elem(el, searched_name);
|
|
||||||
if ret.is_some() {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
pub mod data;
|
pub mod data;
|
||||||
pub mod settings;
|
pub mod settings;
|
||||||
|
pub mod utils;
|
||||||
|
|
39
src/utils.rs
Normal file
39
src/utils.rs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
///! Some utility functions
|
||||||
|
|
||||||
|
use minidom::Element;
|
||||||
|
|
||||||
|
/// Walks an XML tree and returns every element that has the given name
|
||||||
|
pub fn find_elems<S: AsRef<str>>(root: &Element, searched_name: S) -> Vec<&Element> {
|
||||||
|
let searched_name = searched_name.as_ref();
|
||||||
|
let mut elems: Vec<&Element> = Vec::new();
|
||||||
|
|
||||||
|
for el in root.children() {
|
||||||
|
if el.name() == searched_name {
|
||||||
|
elems.push(el);
|
||||||
|
} else {
|
||||||
|
let ret = find_elems(el, searched_name);
|
||||||
|
elems.extend(ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elems
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Walks an XML tree until it finds an elements with the given name
|
||||||
|
pub fn find_elem<S: AsRef<str>>(root: &Element, searched_name: S) -> Option<&Element> {
|
||||||
|
let searched_name = searched_name.as_ref();
|
||||||
|
if root.name() == searched_name {
|
||||||
|
return Some(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
for el in root.children() {
|
||||||
|
if el.name() == searched_name {
|
||||||
|
return Some(el);
|
||||||
|
} else {
|
||||||
|
let ret = find_elem(el, searched_name);
|
||||||
|
if ret.is_some() {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue