mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 19:22:26 +00:00
Refactoring that will hopefully make life easier
This commit is contained in:
@@ -1,16 +1,60 @@
|
||||
use crate::xml::TagList;
|
||||
use actix_web::{
|
||||
body::BoxBody, http::header::ContentType, HttpRequest, HttpResponse, Responder, ResponseError,
|
||||
};
|
||||
use log::debug;
|
||||
use serde::Serialize;
|
||||
|
||||
// Intermediate struct because of a serde limitation, see following article:
|
||||
// https://stackoverflow.com/questions/78444158/unsupportedcannot-serialize-enum-newtype-variant-exampledata
|
||||
#[derive(Serialize)]
|
||||
#[serde(rename = "multistatus")]
|
||||
pub struct PropTagWrapper<T: Serialize> {
|
||||
#[serde(rename = "$value")]
|
||||
pub prop: Vec<T>,
|
||||
}
|
||||
|
||||
// #[derive(Serialize)]
|
||||
// #[serde(untagged)]
|
||||
// pub enum PropWrapper<T: Serialize> {
|
||||
// Prop(Vec<T>),
|
||||
// TagList(TagList),
|
||||
// }
|
||||
|
||||
// RFC 2518
|
||||
// <!ELEMENT propstat (prop, status, responsedescription?) >
|
||||
#[derive(Serialize)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub struct PropstatElement<PropType: Serialize> {
|
||||
pub prop: PropType,
|
||||
pub status: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
#[serde(untagged)]
|
||||
pub enum PropstatWrapper<T: Serialize> {
|
||||
Normal(PropstatElement<PropTagWrapper<T>>),
|
||||
TagList(PropstatElement<TagList>),
|
||||
}
|
||||
|
||||
// RFC 2518
|
||||
// <!ELEMENT response (href, ((href*, status)|(propstat+)),
|
||||
// responsedescription?) >
|
||||
#[derive(Serialize)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
pub struct ResponseElement<PropstatType: Serialize> {
|
||||
pub href: String,
|
||||
pub propstat: Vec<PropstatType>,
|
||||
}
|
||||
|
||||
// RFC 2518
|
||||
// <!ELEMENT multistatus (response+, responsedescription?) >
|
||||
#[derive(Serialize)]
|
||||
#[serde(rename = "multistatus", rename_all = "kebab-case")]
|
||||
pub struct MultistatusElement<T1: Serialize, T2: Serialize> {
|
||||
#[serde(rename = "response")]
|
||||
pub responses: Vec<T1>,
|
||||
pub responses: Vec<ResponseElement<T1>>,
|
||||
#[serde(rename = "response")]
|
||||
pub member_responses: Vec<T2>,
|
||||
pub member_responses: Vec<ResponseElement<T2>>,
|
||||
#[serde(rename = "@xmlns")]
|
||||
pub ns_dav: &'static str,
|
||||
#[serde(rename = "@xmlns:C")]
|
||||
|
||||
Reference in New Issue
Block a user