From 5b1da2a33b265b674a130a90377c289faea7a210 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Mon, 27 May 2024 18:16:53 +0200 Subject: webdav sync core codec --- aero-dav/src/versioningdecoder.rs | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 aero-dav/src/versioningdecoder.rs (limited to 'aero-dav/src/versioningdecoder.rs') diff --git a/aero-dav/src/versioningdecoder.rs b/aero-dav/src/versioningdecoder.rs new file mode 100644 index 0000000..4816cf1 --- /dev/null +++ b/aero-dav/src/versioningdecoder.rs @@ -0,0 +1,62 @@ +use super::error::ParsingError; +use super::types as dav; +use super::versioningtypes::*; +use super::xml::{IRead, QRead, Reader, DAV_URN}; + +impl QRead> for Report { + async fn qread(xml: &mut Reader) -> Result { + //@FIXME VersionTree not implemented + //@FIXME ExpandTree not implemented + + E::ReportType::qread(xml).await.map(Report::Extension) + } +} + +impl QRead for Limit { + async fn qread(xml: &mut Reader) -> Result { + xml.open(DAV_URN, "limit").await?; + let nres = xml.find().await?; + xml.close().await?; + Ok(Limit(nres)) + } +} + +impl QRead for NResults { + async fn qread(xml: &mut Reader) -> Result { + xml.open(DAV_URN, "nresults").await?; + let sz = xml.tag_string().await?.parse::()?; + xml.close().await?; + Ok(NResults(sz)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::xml::Node; + + async fn deserialize>(src: &str) -> T { + let mut rdr = Reader::new(quick_xml::NsReader::from_reader(src.as_bytes())) + .await + .unwrap(); + rdr.find().await.unwrap() + } + + #[tokio::test] + async fn nresults() { + let expected = NResults(100); + let src = r#"100"#; + let got = deserialize::(src).await; + assert_eq!(got, expected); + } + + #[tokio::test] + async fn limit() { + let expected = Limit(NResults(1024)); + let src = r#" + 1024 + "#; + let got = deserialize::(src).await; + assert_eq!(got, expected); + } +} -- cgit v1.2.3