From d5892ab56bd73bb9f48b15143ab2e82ec5371818 Mon Sep 17 00:00:00 2001 From: Lennart K <18233294+lennart-k@users.noreply.github.com> Date: Thu, 22 Jan 2026 11:01:00 +0100 Subject: [PATCH] Migrate ical-rs to caldata-rs --- Cargo.lock | 47 ++++++++++--------- Cargo.toml | 6 +-- crates/caldav/Cargo.toml | 2 +- crates/caldav/src/calendar/methods/get.rs | 6 +-- crates/caldav/src/calendar/methods/import.rs | 5 +- .../caldav/src/calendar/methods/mkcalendar.rs | 2 +- .../report/calendar_query/comp_filter.rs | 26 ++++------ .../methods/report/calendar_query/elements.rs | 2 +- .../report/calendar_query/prop_filter.rs | 2 +- crates/caldav/src/calendar/resource.rs | 4 +- crates/caldav/src/calendar_object/resource.rs | 2 +- crates/carddav/Cargo.toml | 2 +- crates/carddav/src/address_object/resource.rs | 2 +- .../carddav/src/addressbook/methods/import.rs | 11 +++-- .../report/addressbook_query/elements.rs | 2 +- .../report/addressbook_query/prop_filter.rs | 2 +- crates/dav/Cargo.toml | 4 +- crates/dav/src/xml/text_match.rs | 2 +- crates/ical/Cargo.toml | 2 +- crates/ical/src/address_object.rs | 33 +++++++------ crates/ical/src/calendar_object.rs | 9 ++-- crates/ical/src/lib.rs | 2 +- crates/store/Cargo.toml | 2 +- crates/store/src/error.rs | 2 +- crates/store_sqlite/Cargo.toml | 2 +- .../store_sqlite/src/addressbook_store/mod.rs | 2 +- crates/store_sqlite/src/calendar_store.rs | 4 +- 27 files changed, 93 insertions(+), 94 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3d0c9f0..7502491 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -565,6 +565,23 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +[[package]] +name = "caldata" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ae67018b0b95d01f20a5f6869810e83969baa94b2ff768de7f90a8a9e38efd" +dependencies = [ + "chrono", + "chrono-tz", + "derive_more", + "itertools 0.14.0", + "lazy_static", + "phf 0.13.1", + "regex", + "rrule", + "thiserror 2.0.18", +] + [[package]] name = "cast" version = "0.3.0" @@ -1768,22 +1785,6 @@ dependencies = [ "cc", ] -[[package]] -name = "ical" -version = "0.12.0-dev" -source = "git+https://github.com/lennart-k/ical-rs?rev=f1ad6456fd6cbd1e6da095297febddd2cfe61422#f1ad6456fd6cbd1e6da095297febddd2cfe61422" -dependencies = [ - "chrono", - "chrono-tz", - "derive_more", - "itertools 0.14.0", - "lazy_static", - "phf 0.13.1", - "regex", - "rrule", - "thiserror 2.0.18", -] - [[package]] name = "icu_collections" version = "2.1.1" @@ -3324,11 +3325,11 @@ dependencies = [ "async-trait", "axum", "axum-extra", + "caldata", "clap", "figment", "headers", "http", - "ical", "insta", "opentelemetry", "opentelemetry-otlp", @@ -3371,13 +3372,13 @@ dependencies = [ "axum", "axum-extra", "base64 0.22.1", + "caldata", "chrono", "chrono-tz", "derive_more", "futures-util", "headers", "http", - "ical", "insta", "percent-encoding", "quick-xml", @@ -3412,11 +3413,11 @@ dependencies = [ "axum", "axum-extra", "base64 0.22.1", + "caldata", "chrono", "derive_more", "futures-util", "http", - "ical", "insta", "percent-encoding", "quick-xml", @@ -3445,11 +3446,11 @@ dependencies = [ "async-trait", "axum", "axum-extra", + "caldata", "derive_more", "futures-util", "headers", "http", - "ical", "itertools 0.14.0", "log", "matchit 0.9.1", @@ -3530,10 +3531,10 @@ name = "rustical_ical" version = "0.12.1" dependencies = [ "axum", + "caldata", "chrono", "chrono-tz", "derive_more", - "ical", "regex", "rrule", "rstest", @@ -3567,6 +3568,7 @@ dependencies = [ "anyhow", "async-trait", "axum", + "caldata", "chrono", "chrono-tz", "clap", @@ -3574,7 +3576,6 @@ dependencies = [ "futures-core", "headers", "http", - "ical", "regex", "rrule", "rstest", @@ -3598,10 +3599,10 @@ name = "rustical_store_sqlite" version = "0.12.1" dependencies = [ "async-trait", + "caldata", "chrono", "criterion", "derive_more", - "ical", "password-auth", "password-hash", "pbkdf2", diff --git a/Cargo.toml b/Cargo.toml index f3cff7f..185a4c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -107,9 +107,7 @@ strum = "0.27" strum_macros = "0.27" serde_json = { version = "1.0", features = ["raw_value"] } sqlx-sqlite = { version = "0.8", features = ["bundled"] } -ical = { git = "https://github.com/lennart-k/ical-rs", rev = "f1ad6456fd6cbd1e6da095297febddd2cfe61422", features = [ - "chrono-tz", -] } +caldata = { version = "0.12.1", features = ["chrono-tz"] } toml = "0.9" tower = "0.5" tower-http = { version = "0.6", features = [ @@ -161,7 +159,7 @@ rustical_store_sqlite.workspace = true rustical_caldav.workspace = true rustical_carddav.workspace = true rustical_frontend.workspace = true -ical.workspace = true +caldata.workspace = true toml.workspace = true serde.workspace = true tokio.workspace = true diff --git a/crates/caldav/Cargo.toml b/crates/caldav/Cargo.toml index cde976d..3263e97 100644 --- a/crates/caldav/Cargo.toml +++ b/crates/caldav/Cargo.toml @@ -34,7 +34,7 @@ rustical_store.workspace = true chrono.workspace = true chrono-tz.workspace = true sha2.workspace = true -ical.workspace = true +caldata.workspace = true percent-encoding.workspace = true rustical_xml.workspace = true uuid.workspace = true diff --git a/crates/caldav/src/calendar/methods/get.rs b/crates/caldav/src/calendar/methods/get.rs index c00cf72..f33433f 100644 --- a/crates/caldav/src/calendar/methods/get.rs +++ b/crates/caldav/src/calendar/methods/get.rs @@ -3,11 +3,11 @@ use crate::calendar::CalendarResourceService; use axum::body::Body; use axum::extract::State; use axum::{extract::Path, response::Response}; +use caldata::component::IcalCalendar; +use caldata::generator::Emitter; +use caldata::parser::ContentLine; use headers::{ContentType, HeaderMapExt}; use http::{HeaderValue, Method, StatusCode, header}; -use ical::component::IcalCalendar; -use ical::generator::Emitter; -use ical::property::ContentLine; use percent_encoding::{CONTROLS, utf8_percent_encode}; use rustical_store::{CalendarStore, SubscriptionStore, auth::Principal}; use std::str::FromStr; diff --git a/crates/caldav/src/calendar/methods/import.rs b/crates/caldav/src/calendar/methods/import.rs index d6370a3..f40881a 100644 --- a/crates/caldav/src/calendar/methods/import.rs +++ b/crates/caldav/src/calendar/methods/import.rs @@ -4,8 +4,9 @@ use axum::{ extract::{Path, State}, response::{IntoResponse, Response}, }; +use caldata::IcalParser; +use caldata::component::{Component, ComponentMut}; use http::StatusCode; -use ical::parser::{Component, ComponentMut}; use rustical_dav::header::Overwrite; use rustical_ical::CalendarObjectType; use rustical_store::{ @@ -25,7 +26,7 @@ pub async fn route_import( return Err(Error::Unauthorized); } - let parser = ical::IcalParser::from_slice(body.as_bytes()); + let parser = IcalParser::from_slice(body.as_bytes()); let mut cal = match parser.expect_one() { Ok(cal) => cal.mutable(), Err(err) => return Ok((StatusCode::BAD_REQUEST, err.to_string()).into_response()), diff --git a/crates/caldav/src/calendar/methods/mkcalendar.rs b/crates/caldav/src/calendar/methods/mkcalendar.rs index aae6a15..4104803 100644 --- a/crates/caldav/src/calendar/methods/mkcalendar.rs +++ b/crates/caldav/src/calendar/methods/mkcalendar.rs @@ -6,8 +6,8 @@ use crate::calendar::prop::SupportedCalendarComponentSet; use crate::error::Precondition; use axum::extract::{Path, State}; use axum::response::{IntoResponse, Response}; +use caldata::IcalParser; use http::{Method, StatusCode}; -use ical::IcalParser; use rustical_dav::xml::HrefElement; use rustical_ical::CalendarObjectType; use rustical_store::auth::Principal; diff --git a/crates/caldav/src/calendar/methods/report/calendar_query/comp_filter.rs b/crates/caldav/src/calendar/methods/report/calendar_query/comp_filter.rs index 57d08a6..806ee86 100644 --- a/crates/caldav/src/calendar/methods/report/calendar_query/comp_filter.rs +++ b/crates/caldav/src/calendar/methods/report/calendar_query/comp_filter.rs @@ -2,9 +2,12 @@ use crate::calendar::methods::report::calendar_query::{ TimeRangeElement, prop_filter::{PropFilterElement, PropFilterable}, }; -use ical::{ - component::{CalendarInnerData, IcalAlarm, IcalCalendarObject, IcalEvent, IcalTodo}, - parser::{Component, ical::component::IcalTimeZone}, +use caldata::{ + component::{ + CalendarInnerData, Component, IcalAlarm, IcalCalendarObject, IcalEvent, IcalTimeZone, + IcalTodo, + }, + parser::ContentLine, }; use rustical_xml::XmlDeserialize; @@ -112,10 +115,7 @@ impl CompFilterable for CalendarInnerData { } impl PropFilterable for IcalAlarm { - fn get_named_properties<'a>( - &'a self, - name: &'a str, - ) -> impl Iterator { + fn get_named_properties<'a>(&'a self, name: &'a str) -> impl Iterator { Component::get_named_properties(self, name) } } @@ -139,7 +139,7 @@ impl PropFilterable for CalendarInnerData { fn get_named_properties<'a>( &'a self, name: &'a str, - ) -> Box + 'a> { + ) -> Box + 'a> { // TODO: If we were pedantic, we would have to do recurrence expansion first // and take into account the overrides :( match self { @@ -151,10 +151,7 @@ impl PropFilterable for CalendarInnerData { } impl PropFilterable for IcalCalendarObject { - fn get_named_properties<'a>( - &'a self, - name: &'a str, - ) -> impl Iterator { + fn get_named_properties<'a>(&'a self, name: &'a str) -> impl Iterator { Component::get_named_properties(self, name) } } @@ -185,10 +182,7 @@ impl CompFilterable for IcalCalendarObject { } impl PropFilterable for IcalTimeZone { - fn get_named_properties<'a>( - &'a self, - name: &'a str, - ) -> impl Iterator { + fn get_named_properties<'a>(&'a self, name: &'a str) -> impl Iterator { Component::get_named_properties(self, name) } } diff --git a/crates/caldav/src/calendar/methods/report/calendar_query/elements.rs b/crates/caldav/src/calendar/methods/report/calendar_query/elements.rs index 48f1c59..f5bb8cd 100644 --- a/crates/caldav/src/calendar/methods/report/calendar_query/elements.rs +++ b/crates/caldav/src/calendar/methods/report/calendar_query/elements.rs @@ -1,6 +1,6 @@ use super::comp_filter::{CompFilterElement, CompFilterable}; use crate::calendar_object::CalendarObjectPropWrapperName; -use ical::{component::IcalCalendarObject, property::ContentLine}; +use caldata::{component::IcalCalendarObject, parser::ContentLine}; use rustical_dav::xml::{PropfindType, TextMatchElement}; use rustical_ical::UtcDateTime; use rustical_store::calendar_store::CalendarQuery; diff --git a/crates/caldav/src/calendar/methods/report/calendar_query/prop_filter.rs b/crates/caldav/src/calendar/methods/report/calendar_query/prop_filter.rs index cb7a7f0..020a088 100644 --- a/crates/caldav/src/calendar/methods/report/calendar_query/prop_filter.rs +++ b/crates/caldav/src/calendar/methods/report/calendar_query/prop_filter.rs @@ -1,5 +1,5 @@ use super::{ParamFilterElement, TimeRangeElement}; -use ical::{property::ContentLine, types::CalDateTime}; +use caldata::{parser::ContentLine, types::CalDateTime}; use rustical_dav::xml::TextMatchElement; use rustical_ical::UtcDateTime; use rustical_xml::XmlDeserialize; diff --git a/crates/caldav/src/calendar/resource.rs b/crates/caldav/src/calendar/resource.rs index 5c8c54a..e1877ed 100644 --- a/crates/caldav/src/calendar/resource.rs +++ b/crates/caldav/src/calendar/resource.rs @@ -1,10 +1,10 @@ use super::prop::{SupportedCalendarComponentSet, SupportedCalendarData}; use crate::Error; use crate::calendar::prop::{ReportMethod, SupportedCollationSet}; +use caldata::IcalParser; +use caldata::types::CalDateTime; use chrono::{DateTime, Utc}; use derive_more::derive::{From, Into}; -use ical::IcalParser; -use ical::types::CalDateTime; use rustical_dav::extensions::{ CommonPropertiesExtension, CommonPropertiesProp, SyncTokenExtension, SyncTokenExtensionProp, }; diff --git a/crates/caldav/src/calendar_object/resource.rs b/crates/caldav/src/calendar_object/resource.rs index 0bb74d7..2ac71f5 100644 --- a/crates/caldav/src/calendar_object/resource.rs +++ b/crates/caldav/src/calendar_object/resource.rs @@ -3,8 +3,8 @@ use super::prop::{ CalendarObjectPropWrapperName, }; use crate::Error; +use caldata::generator::Emitter; use derive_more::derive::{From, Into}; -use ical::generator::Emitter; use rustical_dav::{ extensions::CommonPropertiesExtension, privileges::UserPrivilegeSet, diff --git a/crates/carddav/Cargo.toml b/crates/carddav/Cargo.toml index e081e1f..eb67fa7 100644 --- a/crates/carddav/Cargo.toml +++ b/crates/carddav/Cargo.toml @@ -32,7 +32,7 @@ rustical_ical.workspace = true http.workspace = true tower-http.workspace = true percent-encoding.workspace = true -ical.workspace = true +caldata.workspace = true strum.workspace = true strum_macros.workspace = true rstest.workspace = true diff --git a/crates/carddav/src/address_object/resource.rs b/crates/carddav/src/address_object/resource.rs index 56f5b89..0efbbd5 100644 --- a/crates/carddav/src/address_object/resource.rs +++ b/crates/carddav/src/address_object/resource.rs @@ -7,8 +7,8 @@ use crate::{ AddressObjectPropWrapperName, }, }; +use caldata::property::VcardFNProperty; use derive_more::derive::{From, Into}; -use ical::parser::VcardFNProperty; use rustical_dav::{ extensions::CommonPropertiesExtension, privileges::UserPrivilegeSet, diff --git a/crates/carddav/src/addressbook/methods/import.rs b/crates/carddav/src/addressbook/methods/import.rs index cb7bff2..dd311e1 100644 --- a/crates/carddav/src/addressbook/methods/import.rs +++ b/crates/carddav/src/addressbook/methods/import.rs @@ -4,11 +4,12 @@ use axum::{ extract::{Path, State}, response::{IntoResponse, Response}, }; -use http::StatusCode; -use ical::{ - parser::{Component, ComponentMut, vcard}, - property::ContentLine, +use caldata::{ + VcardParser, + component::{Component, ComponentMut}, + parser::ContentLine, }; +use http::StatusCode; use rustical_store::{Addressbook, AddressbookStore, SubscriptionStore, auth::Principal}; use tracing::instrument; @@ -23,7 +24,7 @@ pub async fn route_import( return Err(Error::Unauthorized); } - let parser = vcard::VcardParser::from_slice(body.as_bytes()); + let parser = VcardParser::from_slice(body.as_bytes()); let mut objects = vec![]; for res in parser { diff --git a/crates/carddav/src/addressbook/methods/report/addressbook_query/elements.rs b/crates/carddav/src/addressbook/methods/report/addressbook_query/elements.rs index b89985b..2fcb932 100644 --- a/crates/carddav/src/addressbook/methods/report/addressbook_query/elements.rs +++ b/crates/carddav/src/addressbook/methods/report/addressbook_query/elements.rs @@ -2,8 +2,8 @@ use crate::{ address_object::AddressObjectPropWrapperName, addressbook::methods::report::addressbook_query::PropFilterElement, }; +use caldata::parser::ContentLine; use derive_more::{From, Into}; -use ical::property::ContentLine; use rustical_dav::xml::{PropfindType, TextMatchElement}; use rustical_ical::{AddressObject, UtcDateTime}; use rustical_xml::{ValueDeserialize, XmlDeserialize, XmlRootTag}; diff --git a/crates/carddav/src/addressbook/methods/report/addressbook_query/prop_filter.rs b/crates/carddav/src/addressbook/methods/report/addressbook_query/prop_filter.rs index b10b03c..0f9f794 100644 --- a/crates/carddav/src/addressbook/methods/report/addressbook_query/prop_filter.rs +++ b/crates/carddav/src/addressbook/methods/report/addressbook_query/prop_filter.rs @@ -1,5 +1,5 @@ use super::{Allof, ParamFilterElement}; -use ical::{parser::Component, property::ContentLine}; +use caldata::{component::Component, parser::ContentLine}; use rustical_dav::xml::TextMatchElement; use rustical_ical::AddressObject; use rustical_xml::XmlDeserialize; diff --git a/crates/dav/Cargo.toml b/crates/dav/Cargo.toml index 3cbab40..f123b62 100644 --- a/crates/dav/Cargo.toml +++ b/crates/dav/Cargo.toml @@ -28,7 +28,7 @@ headers.workspace = true strum.workspace = true matchit.workspace = true matchit-serde.workspace = true -ical = { workspace = true, optional = true } +caldata = { workspace = true, optional = true } [features] -ical = ["dep:ical"] +ical = ["dep:caldata"] diff --git a/crates/dav/src/xml/text_match.rs b/crates/dav/src/xml/text_match.rs index 2188fe5..77a617a 100644 --- a/crates/dav/src/xml/text_match.rs +++ b/crates/dav/src/xml/text_match.rs @@ -1,4 +1,4 @@ -use ical::property::ContentLine; +use caldata::parser::ContentLine; use rustical_xml::{ValueDeserialize, XmlDeserialize}; use std::borrow::Cow; diff --git a/crates/ical/Cargo.toml b/crates/ical/Cargo.toml index 3a14828..16c44d9 100644 --- a/crates/ical/Cargo.toml +++ b/crates/ical/Cargo.toml @@ -15,7 +15,7 @@ chrono-tz.workspace = true thiserror.workspace = true derive_more.workspace = true rustical_xml.workspace = true -ical.workspace = true +caldata.workspace = true regex.workspace = true rrule.workspace = true serde.workspace = true diff --git a/crates/ical/src/address_object.rs b/crates/ical/src/address_object.rs index ad1e943..66cb13d 100644 --- a/crates/ical/src/address_object.rs +++ b/crates/ical/src/address_object.rs @@ -1,18 +1,21 @@ use crate::{CalendarObject, Error}; +use caldata::{ + VcardParser, + component::{ + CalendarInnerDataBuilder, ComponentMut, IcalAlarmBuilder, IcalCalendarObjectBuilder, + IcalEventBuilder, VcardContact, + }, + generator::Emitter, + parser::ContentLine, + property::{ + Calscale, IcalCALSCALEProperty, IcalDTENDProperty, IcalDTSTAMPProperty, + IcalDTSTARTProperty, IcalPRODIDProperty, IcalRRULEProperty, IcalSUMMARYProperty, + IcalUIDProperty, IcalVERSIONProperty, IcalVersion, VcardANNIVERSARYProperty, + VcardBDAYProperty, VcardFNProperty, + }, + types::{CalDate, PartialDate, Timezone}, +}; use chrono::{NaiveDate, Utc}; -use ical::component::{ - CalendarInnerDataBuilder, IcalAlarmBuilder, IcalCalendarObjectBuilder, IcalEventBuilder, -}; -use ical::generator::Emitter; -use ical::parser::vcard::{self, component::VcardContact}; -use ical::parser::{ - Calscale, ComponentMut, IcalCALSCALEProperty, IcalDTENDProperty, IcalDTSTAMPProperty, - IcalDTSTARTProperty, IcalPRODIDProperty, IcalRRULEProperty, IcalSUMMARYProperty, - IcalUIDProperty, IcalVERSIONProperty, IcalVersion, VcardANNIVERSARYProperty, VcardBDAYProperty, - VcardFNProperty, -}; -use ical::property::ContentLine; -use ical::types::{CalDate, PartialDate}; use sha2::{Digest, Sha256}; use std::collections::HashMap; use std::str::FromStr; @@ -32,7 +35,7 @@ impl From for AddressObject { impl AddressObject { pub fn from_vcf(vcf: String) -> Result { - let parser = vcard::VcardParser::from_slice(vcf.as_bytes()); + let parser = VcardParser::from_slice(vcf.as_bytes()); let vcard = parser.expect_one()?; Ok(Self { vcf, vcard }) } @@ -70,7 +73,7 @@ impl AddressObject { let Some(dtstart) = NaiveDate::from_ymd_opt(year.unwrap_or(1900), month, day) else { return Ok(None); }; - let start_date = CalDate(dtstart, ical::types::Timezone::Local); + let start_date = CalDate(dtstart, Timezone::Local); let Some(end_date) = start_date.succ_opt() else { // start_date is MAX_DATE, this should never happen but FAPP also not raise an error return Ok(None); diff --git a/crates/ical/src/calendar_object.rs b/crates/ical/src/calendar_object.rs index e0114f7..b5e2a1d 100644 --- a/crates/ical/src/calendar_object.rs +++ b/crates/ical/src/calendar_object.rs @@ -1,9 +1,10 @@ use crate::Error; +use caldata::{ + IcalObjectParser, + component::{CalendarInnerData, IcalCalendarObject}, + generator::Emitter, +}; use derive_more::Display; -use ical::IcalObjectParser; -use ical::component::CalendarInnerData; -use ical::component::IcalCalendarObject; -use ical::generator::Emitter; use serde::Deserialize; use serde::Serialize; use sha2::{Digest, Sha256}; diff --git a/crates/ical/src/lib.rs b/crates/ical/src/lib.rs index 68782f3..e855b33 100644 --- a/crates/ical/src/lib.rs +++ b/crates/ical/src/lib.rs @@ -1,7 +1,7 @@ #![warn(clippy::all, clippy::pedantic, clippy::nursery)] #![allow(clippy::missing_errors_doc, clippy::missing_panics_doc)] mod timestamp; -use ical::parser::ParserError; +use caldata::parser::ParserError; pub use timestamp::*; mod calendar_object; diff --git a/crates/store/Cargo.toml b/crates/store/Cargo.toml index eaaba56..ca722b6 100644 --- a/crates/store/Cargo.toml +++ b/crates/store/Cargo.toml @@ -13,7 +13,7 @@ anyhow.workspace = true async-trait.workspace = true serde.workspace = true sha2.workspace = true -ical.workspace = true +caldata.workspace = true chrono.workspace = true regex.workspace = true thiserror.workspace = true diff --git a/crates/store/src/error.rs b/crates/store/src/error.rs index 35960cf..11d9aba 100644 --- a/crates/store/src/error.rs +++ b/crates/store/src/error.rs @@ -26,7 +26,7 @@ pub enum Error { Other(#[from] anyhow::Error), #[error(transparent)] - IcalError(#[from] ical::parser::ParserError), + IcalError(#[from] caldata::parser::ParserError), } impl Error { diff --git a/crates/store_sqlite/Cargo.toml b/crates/store_sqlite/Cargo.toml index 8c3b7fc..6afc125 100644 --- a/crates/store_sqlite/Cargo.toml +++ b/crates/store_sqlite/Cargo.toml @@ -20,7 +20,7 @@ rstest.workspace = true criterion.workspace = true [dependencies] -ical.workspace = true +caldata.workspace = true tokio.workspace = true rustical_store.workspace = true async-trait.workspace = true diff --git a/crates/store_sqlite/src/addressbook_store/mod.rs b/crates/store_sqlite/src/addressbook_store/mod.rs index be71439..ec19285 100644 --- a/crates/store_sqlite/src/addressbook_store/mod.rs +++ b/crates/store_sqlite/src/addressbook_store/mod.rs @@ -1,8 +1,8 @@ use super::ChangeOperation; use crate::BEGIN_IMMEDIATE; use async_trait::async_trait; +use caldata::parser::ParserError; use derive_more::derive::Constructor; -use ical::parser::ParserError; use rustical_ical::AddressObject; use rustical_store::{ Addressbook, AddressbookStore, CollectionMetadata, CollectionOperation, diff --git a/crates/store_sqlite/src/calendar_store.rs b/crates/store_sqlite/src/calendar_store.rs index 7e84236..0b89567 100644 --- a/crates/store_sqlite/src/calendar_store.rs +++ b/crates/store_sqlite/src/calendar_store.rs @@ -1,10 +1,10 @@ use super::ChangeOperation; use crate::BEGIN_IMMEDIATE; use async_trait::async_trait; +use caldata::parser::ParserError; +use caldata::types::CalDateTime; use chrono::TimeDelta; use derive_more::derive::Constructor; -use ical::parser::ParserError; -use ical::types::CalDateTime; use regex::Regex; use rustical_ical::{CalendarObject, CalendarObjectType}; use rustical_store::calendar_store::CalendarQuery;