rustical_dav/xml/
resourcetype.rs1use rustical_xml::XmlSerialize;
2
3#[derive(Debug, Clone, PartialEq, Eq, XmlSerialize)]
4pub struct Resourcetype(#[xml(flatten, ty = "untagged")] pub &'static [ResourcetypeInner]);
5
6#[macro_export]
7macro_rules! resourcetype {
8 ($(($ns:expr, $name:expr)),* $(,)?) => {
9 ::rustical_dav::xml::Resourcetype(&[
10 $(::rustical_dav::xml::ResourcetypeInner(Some($ns), $name)),*
11 ])
12 };
13}
14
15pub use resourcetype;
16
17#[derive(Debug, Clone, PartialEq, Eq, XmlSerialize)]
18pub struct ResourcetypeInner(
19 #[xml(ty = "namespace")] pub Option<quick_xml::name::Namespace<'static>>,
20 #[xml(ty = "tag_name")] pub &'static str,
21);
22
23#[cfg(test)]
24mod tests {
25 use rustical_xml::{XmlRootTag, XmlSerialize, XmlSerializeRoot};
26
27 use crate::namespace::{NS_CALENDARSERVER, NS_DAV};
28
29 use super::{Resourcetype, ResourcetypeInner};
30
31 #[derive(XmlSerialize, XmlRootTag)]
32 #[xml(root = "document")]
33 struct Document {
34 resourcetype: Resourcetype,
35 }
36
37 #[test]
38 fn test_serialize_resourcetype() {
39 let out = Document {
40 resourcetype: Resourcetype(&[
41 ResourcetypeInner(Some(NS_DAV), "displayname"),
42 ResourcetypeInner(Some(NS_CALENDARSERVER), "calendar-color"),
43 ]),
44 }
45 .serialize_to_string()
46 .unwrap();
47 assert_eq!(
48 out,
49 r#"<?xml version="1.0" encoding="utf-8"?>
50<document>
51 <resourcetype>
52 <displayname xmlns="DAV:"/>
53 <calendar-color xmlns="http://calendarserver.org/ns/"/>
54 </resourcetype>
55</document>"#
56 );
57 }
58}