mirror of
https://github.com/lennart-k/rustical.git
synced 2026-01-30 08:08:23 +00:00
carddav calendar-query: Add parsing support for limit
This commit is contained in:
@@ -105,4 +105,30 @@ pub struct AddressbookQueryRequest {
|
|||||||
pub prop: PropfindType<AddressObjectPropWrapperName>,
|
pub prop: PropfindType<AddressObjectPropWrapperName>,
|
||||||
#[xml(ns = "rustical_dav::namespace::NS_CARDDAV")]
|
#[xml(ns = "rustical_dav::namespace::NS_CARDDAV")]
|
||||||
pub(crate) filter: FilterElement,
|
pub(crate) filter: FilterElement,
|
||||||
|
#[xml(ns = "rustical_dav::namespace::NS_CARDDAV")]
|
||||||
|
pub(crate) limit: Option<LimitElement>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://datatracker.ietf.org/doc/html/rfc5323#section-5.17
|
||||||
|
#[derive(XmlDeserialize, Clone, Debug, PartialEq, Eq)]
|
||||||
|
pub struct LimitElement {
|
||||||
|
#[xml(ns = "rustical_dav::namespace::NS_CARDDAV")]
|
||||||
|
pub nresults: NresultsElement,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<u64> for LimitElement {
|
||||||
|
fn from(value: u64) -> Self {
|
||||||
|
Self {
|
||||||
|
nresults: NresultsElement(value),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<LimitElement> for u64 {
|
||||||
|
fn from(value: LimitElement) -> Self {
|
||||||
|
value.nresults.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(XmlDeserialize, Clone, Debug, PartialEq, Eq)]
|
||||||
|
pub struct NresultsElement(#[xml(ty = "text")] pub u64);
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ mod tests {
|
|||||||
use crate::{
|
use crate::{
|
||||||
address_object::AddressObjectPropName,
|
address_object::AddressObjectPropName,
|
||||||
addressbook::methods::report::addressbook_query::{
|
addressbook::methods::report::addressbook_query::{
|
||||||
Allof, FilterElement, PropFilterElement,
|
Allof, FilterElement, LimitElement, NresultsElement, PropFilterElement,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use rustical_dav::xml::{PropElement, sync_collection::SyncLevel};
|
use rustical_dav::xml::{PropElement, sync_collection::SyncLevel};
|
||||||
@@ -237,6 +237,9 @@ mod tests {
|
|||||||
<card:filter>
|
<card:filter>
|
||||||
<card:prop-filter name="FN"/>
|
<card:prop-filter name="FN"/>
|
||||||
</card:filter>
|
</card:filter>
|
||||||
|
<card:limit>
|
||||||
|
<card:nresults>100</card:nresults>
|
||||||
|
</card:limit>
|
||||||
</card:addressbook-query>
|
</card:addressbook-query>
|
||||||
"#,
|
"#,
|
||||||
)
|
)
|
||||||
@@ -259,8 +262,11 @@ mod tests {
|
|||||||
text_match: vec![],
|
text_match: vec![],
|
||||||
param_filter: vec![],
|
param_filter: vec![],
|
||||||
test: Allof::default()
|
test: Allof::default()
|
||||||
}]
|
}],
|
||||||
}
|
},
|
||||||
|
limit: Some(LimitElement {
|
||||||
|
nresults: NresultsElement(100)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user