diff options
Diffstat (limited to 'aero-dav/src/xml.rs')
-rw-r--r-- | aero-dav/src/xml.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/aero-dav/src/xml.rs b/aero-dav/src/xml.rs index 827e9d0..26f54cc 100644 --- a/aero-dav/src/xml.rs +++ b/aero-dav/src/xml.rs @@ -258,6 +258,17 @@ impl<T: IRead> Reader<T> { Ok(evt) } + pub async fn open_start(&mut self, ns: &[u8], key: &str) -> Result<Event<'static>, ParsingError> { + let evt = match self.peek() { + Event::Start(_) if self.is_tag(ns, key) => self.next().await?, + _ => return Err(ParsingError::Recoverable), + }; + + //println!("open tag {:?}", evt); + self.parents.push(evt.clone()); + Ok(evt) + } + pub async fn maybe_open(&mut self, ns: &[u8], key: &str) -> Result<Option<Event<'static>>, ParsingError> { match self.open(ns, key).await { Ok(v) => Ok(Some(v)), @@ -266,6 +277,14 @@ impl<T: IRead> Reader<T> { } } + pub async fn maybe_open_start(&mut self, ns: &[u8], key: &str) -> Result<Option<Event<'static>>, ParsingError> { + match self.open_start(ns, key).await { + Ok(v) => Ok(Some(v)), + Err(ParsingError::Recoverable) => Ok(None), + Err(e) => Err(e), + } + } + pub fn prev_attr(&self, attr: &str) -> Option<String> { match &self.prev { Event::Start(bs) | Event::Empty(bs) => match bs.try_get_attribute(attr) { |