save progress: Move from serde::Serialize to XmlSerialize

This commit is contained in:
Lennart
2024-12-28 12:47:33 +01:00
parent 759bb1f1be
commit c16a5214bc
16 changed files with 230 additions and 200 deletions

View File

@@ -1,25 +1,30 @@
use rustical_xml::XmlSerialize;
use serde::Serialize;
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub struct SupportedCalendarComponent {
#[serde(rename = "@name")]
#[xml(ty = "attr")]
pub name: String,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub struct SupportedCalendarComponentSet {
#[serde(rename = "C:comp")]
#[xml(flatten)]
pub comp: Vec<SupportedCalendarComponent>,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub struct CalendarData {
#[serde(rename = "@content-type")]
#[xml(ty = "attr")]
content_type: String,
#[serde(rename = "@version")]
#[xml(ty = "attr")]
version: String,
}
@@ -32,14 +37,14 @@ impl Default for CalendarData {
}
}
#[derive(Debug, Clone, Serialize, Default, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, Default, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub struct SupportedCalendarData {
#[serde(rename = "C:calendar-data", alias = "calendar-data")]
calendar_data: CalendarData,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub enum ReportMethod {
CalendarQuery,
@@ -47,14 +52,15 @@ pub enum ReportMethod {
SyncCollection,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub struct ReportWrapper {
#[serde(rename = "$value")]
#[xml(ty = "untagged")]
report: ReportMethod,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub struct SupportedReportWrapper {
report: ReportWrapper,
@@ -69,9 +75,10 @@ impl From<ReportMethod> for SupportedReportWrapper {
}
// RFC 3253 section-3.1.5
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub struct SupportedReportSet {
#[xml(flatten)]
supported_report: Vec<SupportedReportWrapper>,
}
@@ -87,27 +94,29 @@ impl Default for SupportedReportSet {
}
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub enum Transport {
#[serde(rename = "P:web-push")]
WebPush,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub struct TransportWrapper {
#[serde(rename = "$value")]
#[xml(ty = "untagged")]
transport: Transport,
}
#[derive(Debug, Clone, Serialize, PartialEq)]
#[derive(Debug, Clone, XmlSerialize, Serialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub struct Transports {
// NOTE: Here we implement an older version of the spec since the new property name is not reflected
// in DAVx5 yet
// https://github.com/bitfireAT/webdav-push/commit/461259a2f2174454b2b00033419b11fac52b79e3
#[serde(rename = "P:transport")]
#[xml(flatten)]
transports: Vec<TransportWrapper>,
}

View File

@@ -19,8 +19,7 @@ use rustical_dav::resource::{Resource, ResourceService};
use rustical_dav::xml::HrefElement;
use rustical_store::auth::User;
use rustical_store::{Calendar, CalendarStore};
use rustical_xml::XmlDeserialize;
use serde::Serialize;
use rustical_xml::{XmlDeserialize, XmlSerialize};
use sha2::{Digest, Sha256};
use std::str::FromStr;
use std::sync::Arc;
@@ -32,13 +31,12 @@ pub struct CalendarResourceService<C: CalendarStore + ?Sized> {
calendar_id: String,
}
#[derive(XmlDeserialize, Serialize, PartialEq, EnumDiscriminants, Clone)]
#[derive(XmlDeserialize, XmlSerialize, PartialEq, EnumDiscriminants, Clone)]
#[strum_discriminants(
name(CalendarPropName),
derive(EnumString, VariantNames, IntoStaticStr),
strum(serialize_all = "kebab-case")
)]
#[serde(rename_all = "kebab-case")]
pub enum CalendarProp {
// WebDAV (RFC 2518)
Displayname(Option<String>),
@@ -48,37 +46,28 @@ pub enum CalendarProp {
// NOTE: Here we implement an older version of the spec since the new property name is not reflected
// in DAVx5 yet
// https://github.com/bitfireAT/webdav-push/commit/461259a2f2174454b2b00033419b11fac52b79e3
#[serde(skip_deserializing)]
#[xml(skip_deserializing)]
#[serde(rename = "P:push-transports", alias = "push-transports")]
// #[serde(rename = "P:push-transports", alias = "push-transports")]
Transports(Transports),
Topic(String),
// CalDAV (RFC 4791)
#[serde(rename = "IC:calendar-color", alias = "calendar-color")]
// #[serde(rename = "IC:calendar-color", alias = "calendar-color")]
CalendarColor(Option<String>),
#[serde(rename = "C:calendar-description", alias = "calendar-description")]
// #[serde(rename = "C:calendar-description", alias = "calendar-description")]
CalendarDescription(Option<String>),
#[serde(rename = "C:calendar-timezone", alias = "calendar-timezone")]
// #[serde(rename = "C:calendar-timezone", alias = "calendar-timezone")]
CalendarTimezone(Option<String>),
#[serde(rename = "IC:calendar-order", alias = "calendar-order")]
// #[serde(rename = "IC:calendar-order", alias = "calendar-order")]
CalendarOrder(Option<i64>),
#[serde(
rename = "C:supported-calendar-component-set",
alias = "supported-calendar-component-set"
)]
// #[serde(rename = "C:supported-calendar-component-set")]
// TODO: Re-add
#[xml(skip_deserializing)]
SupportedCalendarComponentSet(SupportedCalendarComponentSet),
#[serde(
rename = "C:supported-calendar-data",
alias = "supported-calendar-data"
)]
#[serde(skip_deserializing)]
// #[serde(rename = "C:supported-calendar-data")]
#[xml(skip_deserializing)]
SupportedCalendarData(SupportedCalendarData),
MaxResourceSize(i64),
#[serde(skip_deserializing)]
#[xml(skip_deserializing)]
SupportedReportSet(SupportedReportSet),
@@ -86,9 +75,9 @@ pub enum CalendarProp {
SyncToken(String),
// CalendarServer
#[serde(rename = "CS:getctag", alias = "getctag")]
// #[serde(rename = "CS:getctag", alias = "getctag")]
Getctag(String),
#[serde(rename = "CS:source", alias = "source")]
// #[serde(rename = "CS:source", alias = "source")]
Source(Option<HrefElement>),
}

View File

@@ -8,8 +8,8 @@ use rustical_dav::{
resource::{Resource, ResourceService},
};
use rustical_store::{auth::User, CalendarObject, CalendarStore};
use rustical_xml::XmlDeserialize;
use serde::{Deserialize, Serialize};
use rustical_xml::{XmlDeserialize, XmlSerialize};
use serde::Deserialize;
use std::sync::Arc;
use strum::{EnumDiscriminants, EnumString, IntoStaticStr, VariantNames};
@@ -20,20 +20,19 @@ pub struct CalendarObjectResourceService<C: CalendarStore + ?Sized> {
object_id: String,
}
#[derive(XmlDeserialize, Serialize, PartialEq, EnumDiscriminants, Clone)]
#[derive(XmlDeserialize, XmlSerialize, PartialEq, EnumDiscriminants, Clone)]
#[strum_discriminants(
name(CalendarObjectPropName),
derive(EnumString, VariantNames, IntoStaticStr),
strum(serialize_all = "kebab-case")
)]
#[serde(rename_all = "kebab-case")]
pub enum CalendarObjectProp {
// WebDAV (RFC 2518)
Getetag(String),
Getcontenttype(String),
// CalDAV (RFC 4791)
#[serde(rename = "C:calendar-data")]
// #[serde(rename = "C:calendar-data")]
CalendarData(String),
}

View File

@@ -9,8 +9,7 @@ use rustical_dav::resource::{Resource, ResourceService};
use rustical_dav::xml::HrefElement;
use rustical_store::auth::User;
use rustical_store::CalendarStore;
use rustical_xml::XmlDeserialize;
use serde::Serialize;
use rustical_xml::{XmlDeserialize, XmlSerialize};
use std::sync::Arc;
use strum::{EnumDiscriminants, EnumString, IntoStaticStr, VariantNames};
@@ -24,23 +23,21 @@ pub struct PrincipalResource {
principal: String,
}
#[derive(XmlDeserialize, Serialize, PartialEq, EnumDiscriminants, Clone)]
#[derive(XmlDeserialize, XmlSerialize, PartialEq, EnumDiscriminants, Clone)]
#[strum_discriminants(
name(PrincipalPropName),
derive(EnumString, VariantNames, IntoStaticStr),
strum(serialize_all = "kebab-case")
)]
#[serde(rename_all = "kebab-case")]
pub enum PrincipalProp {
// WebDAV Access Control (RFC 3744)
#[serde(rename = "principal-URL")]
#[strum_discriminants(strum(serialize = "principal-URL"))]
PrincipalUrl(HrefElement),
// CalDAV (RFC 4791)
#[serde(rename = "C:calendar-home-set")]
// #[serde(rename = "C:calendar-home-set")]
CalendarHomeSet(HrefElement),
#[serde(rename = "C:calendar-user-address-set")]
// #[serde(rename = "C:calendar-user-address-set")]
CalendarUserAddressSet(HrefElement),
}