ical: Remove abstraction structs around journal and todo

This commit is contained in:
Lennart
2025-09-19 14:47:44 +02:00
parent 53f30fce3f
commit b6bfb5a620
5 changed files with 20 additions and 51 deletions

View File

@@ -8,7 +8,7 @@ use http::{HeaderValue, Method, StatusCode, header};
use ical::generator::{Emitter, IcalCalendarBuilder};
use ical::property::Property;
use percent_encoding::{CONTROLS, utf8_percent_encode};
use rustical_ical::{CalendarObjectComponent, EventObject, JournalObject, TodoObject};
use rustical_ical::{CalendarObjectComponent, EventObject};
use rustical_store::{CalendarStore, SubscriptionStore, auth::Principal};
use std::collections::HashMap;
use std::str::FromStr;
@@ -83,16 +83,16 @@ pub async fn route_get<C: CalendarStore, S: SubscriptionStore>(
ical_calendar_builder.add_event(_override.event.clone());
}
}
CalendarObjectComponent::Todo(TodoObject(todo), overrides) => {
CalendarObjectComponent::Todo(todo, overrides) => {
ical_calendar_builder = ical_calendar_builder.add_todo(todo.clone());
for _override in overrides {
ical_calendar_builder = ical_calendar_builder.add_todo(_override.0.clone());
ical_calendar_builder = ical_calendar_builder.add_todo(_override.clone());
}
}
CalendarObjectComponent::Journal(JournalObject(journal), overrides) => {
CalendarObjectComponent::Journal(journal, overrides) => {
ical_calendar_builder = ical_calendar_builder.add_journal(journal.clone());
for _override in overrides {
ical_calendar_builder = ical_calendar_builder.add_journal(_override.0.clone());
ical_calendar_builder = ical_calendar_builder.add_journal(_override.clone());
}
}
}

View File

@@ -1,11 +0,0 @@
use derive_more::From;
use ical::parser::ical::component::IcalJournal;
#[derive(Debug, Clone, From)]
pub struct JournalObject(pub IcalJournal);
impl JournalObject {
pub fn get_uid(&self) -> &str {
self.0.get_uid()
}
}

View File

@@ -1,9 +1,5 @@
mod event;
mod journal;
mod object;
mod todo;
pub use event::*;
pub use journal::*;
pub use object::*;
pub use todo::*;

View File

@@ -1,11 +1,13 @@
use super::{EventObject, JournalObject, TodoObject};
use super::EventObject;
use crate::CalDateTime;
use crate::Error;
use chrono::DateTime;
use chrono::Utc;
use derive_more::Display;
use ical::generator::{Emitter, IcalCalendar};
use ical::parser::ical::component::IcalJournal;
use ical::parser::ical::component::IcalTimeZone;
use ical::parser::ical::component::IcalTodo;
use ical::property::Property;
use serde::Deserialize;
use serde::Serialize;
@@ -57,8 +59,8 @@ impl rustical_xml::ValueDeserialize for CalendarObjectType {
#[derive(Debug, Clone)]
pub enum CalendarObjectComponent {
Event(EventObject, Vec<EventObject>),
Todo(TodoObject, Vec<TodoObject>),
Journal(JournalObject, Vec<JournalObject>),
Todo(IcalTodo, Vec<IcalTodo>),
Journal(IcalJournal, Vec<IcalJournal>),
}
impl CalendarObjectComponent {
@@ -82,9 +84,9 @@ impl CalendarObjectComponent {
}
Ok(Self::Event(main_event, overrides))
}
fn from_todos(mut todos: Vec<TodoObject>) -> Result<Self, Error> {
fn from_todos(mut todos: Vec<IcalTodo>) -> Result<Self, Error> {
let main_todo = todos
.extract_if(.., |todo| todo.0.get_recurrence_id().is_none())
.extract_if(.., |todo| todo.get_recurrence_id().is_none())
.next()
.expect("there must be one main event");
let overrides = todos;
@@ -94,7 +96,7 @@ impl CalendarObjectComponent {
"Calendar object contains multiple UIDs".to_owned(),
));
}
if todo.0.get_recurrence_id().is_none() {
if todo.get_recurrence_id().is_none() {
return Err(Error::InvalidData(
"Calendar object can only contain one main component".to_owned(),
));
@@ -102,9 +104,9 @@ impl CalendarObjectComponent {
}
Ok(Self::Todo(main_todo, overrides))
}
fn from_journals(mut journals: Vec<JournalObject>) -> Result<Self, Error> {
fn from_journals(mut journals: Vec<IcalJournal>) -> Result<Self, Error> {
let main_journal = journals
.extract_if(.., |journal| journal.0.get_recurrence_id().is_none())
.extract_if(.., |journal| journal.get_recurrence_id().is_none())
.next()
.expect("there must be one main event");
let overrides = journals;
@@ -114,7 +116,7 @@ impl CalendarObjectComponent {
"Calendar object contains multiple UIDs".to_owned(),
));
}
if journal.0.get_recurrence_id().is_none() {
if journal.get_recurrence_id().is_none() {
return Err(Error::InvalidData(
"Calendar object can only contain one main component".to_owned(),
));
@@ -179,16 +181,9 @@ impl CalendarObject {
.collect(),
)?
} else if !cal.todos.is_empty() {
CalendarObjectComponent::from_todos(
cal.todos.into_iter().map(|todo| todo.into()).collect(),
)?
CalendarObjectComponent::from_todos(cal.todos)?
} else if !cal.journals.is_empty() {
CalendarObjectComponent::from_journals(
cal.journals
.into_iter()
.map(|journal| journal.into())
.collect(),
)?
CalendarObjectComponent::from_journals(cal.journals)?
} else {
return Err(Error::InvalidData(
"iCalendar component type not supported :(".to_owned(),
@@ -215,9 +210,9 @@ impl CalendarObject {
match &self.data {
// We've made sure before that the first component exists and all components share the
// same UID
CalendarObjectComponent::Todo(todo, _) => todo.0.get_uid(),
CalendarObjectComponent::Todo(todo, _) => todo.get_uid(),
CalendarObjectComponent::Event(event, _) => event.event.get_uid(),
CalendarObjectComponent::Journal(journal, _) => journal.0.get_uid(),
CalendarObjectComponent::Journal(journal, _) => journal.get_uid(),
}
}

View File

@@ -1,11 +0,0 @@
use derive_more::From;
use ical::parser::ical::component::IcalTodo;
#[derive(Debug, Clone, From)]
pub struct TodoObject(pub IcalTodo);
impl TodoObject {
pub fn get_uid(&self) -> &str {
self.0.get_uid()
}
}