Browse Source

Created util.rs

github_actions
daladim 5 years ago
parent
commit
99088d29ca
  1. 36
      src/data/client.rs
  2. 1
      src/lib.rs
  3. 39
      src/utils.rs

36
src/data/client.rs

@ -10,6 +10,7 @@ use reqwest::header::CONTENT_TYPE;
use minidom::Element;
use url::Url;
use crate::utils::{find_elem, find_elems};
use crate::data::Calendar;
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
src/lib.rs

@ -1,2 +1,3 @@
pub mod data;
pub mod settings;
pub mod utils;

39
src/utils.rs

@ -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…
Cancel
Save