mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 22:52:22 +00:00
ical: Remove abstraction structs around journal and todo
This commit is contained in:
@@ -8,7 +8,7 @@ use http::{HeaderValue, Method, StatusCode, header};
|
|||||||
use ical::generator::{Emitter, IcalCalendarBuilder};
|
use ical::generator::{Emitter, IcalCalendarBuilder};
|
||||||
use ical::property::Property;
|
use ical::property::Property;
|
||||||
use percent_encoding::{CONTROLS, utf8_percent_encode};
|
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 rustical_store::{CalendarStore, SubscriptionStore, auth::Principal};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::str::FromStr;
|
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());
|
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());
|
ical_calendar_builder = ical_calendar_builder.add_todo(todo.clone());
|
||||||
for _override in overrides {
|
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());
|
ical_calendar_builder = ical_calendar_builder.add_journal(journal.clone());
|
||||||
for _override in overrides {
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
mod event;
|
mod event;
|
||||||
mod journal;
|
|
||||||
mod object;
|
mod object;
|
||||||
mod todo;
|
|
||||||
|
|
||||||
pub use event::*;
|
pub use event::*;
|
||||||
pub use journal::*;
|
|
||||||
pub use object::*;
|
pub use object::*;
|
||||||
pub use todo::*;
|
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
use super::{EventObject, JournalObject, TodoObject};
|
use super::EventObject;
|
||||||
use crate::CalDateTime;
|
use crate::CalDateTime;
|
||||||
use crate::Error;
|
use crate::Error;
|
||||||
use chrono::DateTime;
|
use chrono::DateTime;
|
||||||
use chrono::Utc;
|
use chrono::Utc;
|
||||||
use derive_more::Display;
|
use derive_more::Display;
|
||||||
use ical::generator::{Emitter, IcalCalendar};
|
use ical::generator::{Emitter, IcalCalendar};
|
||||||
|
use ical::parser::ical::component::IcalJournal;
|
||||||
use ical::parser::ical::component::IcalTimeZone;
|
use ical::parser::ical::component::IcalTimeZone;
|
||||||
|
use ical::parser::ical::component::IcalTodo;
|
||||||
use ical::property::Property;
|
use ical::property::Property;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
@@ -57,8 +59,8 @@ impl rustical_xml::ValueDeserialize for CalendarObjectType {
|
|||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum CalendarObjectComponent {
|
pub enum CalendarObjectComponent {
|
||||||
Event(EventObject, Vec<EventObject>),
|
Event(EventObject, Vec<EventObject>),
|
||||||
Todo(TodoObject, Vec<TodoObject>),
|
Todo(IcalTodo, Vec<IcalTodo>),
|
||||||
Journal(JournalObject, Vec<JournalObject>),
|
Journal(IcalJournal, Vec<IcalJournal>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CalendarObjectComponent {
|
impl CalendarObjectComponent {
|
||||||
@@ -82,9 +84,9 @@ impl CalendarObjectComponent {
|
|||||||
}
|
}
|
||||||
Ok(Self::Event(main_event, overrides))
|
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
|
let main_todo = todos
|
||||||
.extract_if(.., |todo| todo.0.get_recurrence_id().is_none())
|
.extract_if(.., |todo| todo.get_recurrence_id().is_none())
|
||||||
.next()
|
.next()
|
||||||
.expect("there must be one main event");
|
.expect("there must be one main event");
|
||||||
let overrides = todos;
|
let overrides = todos;
|
||||||
@@ -94,7 +96,7 @@ impl CalendarObjectComponent {
|
|||||||
"Calendar object contains multiple UIDs".to_owned(),
|
"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(
|
return Err(Error::InvalidData(
|
||||||
"Calendar object can only contain one main component".to_owned(),
|
"Calendar object can only contain one main component".to_owned(),
|
||||||
));
|
));
|
||||||
@@ -102,9 +104,9 @@ impl CalendarObjectComponent {
|
|||||||
}
|
}
|
||||||
Ok(Self::Todo(main_todo, overrides))
|
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
|
let main_journal = journals
|
||||||
.extract_if(.., |journal| journal.0.get_recurrence_id().is_none())
|
.extract_if(.., |journal| journal.get_recurrence_id().is_none())
|
||||||
.next()
|
.next()
|
||||||
.expect("there must be one main event");
|
.expect("there must be one main event");
|
||||||
let overrides = journals;
|
let overrides = journals;
|
||||||
@@ -114,7 +116,7 @@ impl CalendarObjectComponent {
|
|||||||
"Calendar object contains multiple UIDs".to_owned(),
|
"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(
|
return Err(Error::InvalidData(
|
||||||
"Calendar object can only contain one main component".to_owned(),
|
"Calendar object can only contain one main component".to_owned(),
|
||||||
));
|
));
|
||||||
@@ -179,16 +181,9 @@ impl CalendarObject {
|
|||||||
.collect(),
|
.collect(),
|
||||||
)?
|
)?
|
||||||
} else if !cal.todos.is_empty() {
|
} else if !cal.todos.is_empty() {
|
||||||
CalendarObjectComponent::from_todos(
|
CalendarObjectComponent::from_todos(cal.todos)?
|
||||||
cal.todos.into_iter().map(|todo| todo.into()).collect(),
|
|
||||||
)?
|
|
||||||
} else if !cal.journals.is_empty() {
|
} else if !cal.journals.is_empty() {
|
||||||
CalendarObjectComponent::from_journals(
|
CalendarObjectComponent::from_journals(cal.journals)?
|
||||||
cal.journals
|
|
||||||
.into_iter()
|
|
||||||
.map(|journal| journal.into())
|
|
||||||
.collect(),
|
|
||||||
)?
|
|
||||||
} else {
|
} else {
|
||||||
return Err(Error::InvalidData(
|
return Err(Error::InvalidData(
|
||||||
"iCalendar component type not supported :(".to_owned(),
|
"iCalendar component type not supported :(".to_owned(),
|
||||||
@@ -215,9 +210,9 @@ impl CalendarObject {
|
|||||||
match &self.data {
|
match &self.data {
|
||||||
// We've made sure before that the first component exists and all components share the
|
// We've made sure before that the first component exists and all components share the
|
||||||
// same UID
|
// same UID
|
||||||
CalendarObjectComponent::Todo(todo, _) => todo.0.get_uid(),
|
CalendarObjectComponent::Todo(todo, _) => todo.get_uid(),
|
||||||
CalendarObjectComponent::Event(event, _) => event.event.get_uid(),
|
CalendarObjectComponent::Event(event, _) => event.event.get_uid(),
|
||||||
CalendarObjectComponent::Journal(journal, _) => journal.0.get_uid(),
|
CalendarObjectComponent::Journal(journal, _) => journal.get_uid(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user