diff --git a/crates/caldav/src/calendar/methods/delete.rs b/crates/caldav/src/calendar/methods/delete.rs index 8c2d678..93821fc 100644 --- a/crates/caldav/src/calendar/methods/delete.rs +++ b/crates/caldav/src/calendar/methods/delete.rs @@ -5,7 +5,7 @@ use actix_web::{ HttpResponse, }; use rustical_auth::{AuthInfoExtractor, CheckAuthentication}; -use rustical_store::calendar::CalendarStore; +use rustical_store::store::CalendarStore; pub async fn route_delete_calendar( context: Data>, diff --git a/crates/caldav/src/calendar/methods/mkcalendar.rs b/crates/caldav/src/calendar/methods/mkcalendar.rs index dc8ab26..c0c0bcf 100644 --- a/crates/caldav/src/calendar/methods/mkcalendar.rs +++ b/crates/caldav/src/calendar/methods/mkcalendar.rs @@ -4,8 +4,8 @@ use actix_web::web::{Data, Path}; use actix_web::HttpResponse; use anyhow::Result; use rustical_auth::{AuthInfoExtractor, CheckAuthentication}; -use rustical_dav::xml::tag_list::TagList; -use rustical_store::calendar::{Calendar, CalendarStore}; +use rustical_store::calendar::Calendar; +use rustical_store::store::CalendarStore; use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, Clone, Debug)] diff --git a/crates/caldav/src/calendar/methods/report.rs b/crates/caldav/src/calendar/methods/report.rs index de6f229..bd3f149 100644 --- a/crates/caldav/src/calendar/methods/report.rs +++ b/crates/caldav/src/calendar/methods/report.rs @@ -9,7 +9,8 @@ use rustical_dav::{ propfind::{MultistatusElement, PropElement, PropfindType, ServicePrefix}, resource::HandlePropfind, }; -use rustical_store::{calendar::CalendarStore, event::Event}; +use rustical_store::event::Event; +use rustical_store::store::CalendarStore; use serde::{Deserialize, Serialize}; use tokio::sync::RwLock; diff --git a/crates/caldav/src/calendar/resource.rs b/crates/caldav/src/calendar/resource.rs index 0cbf282..d7517bd 100644 --- a/crates/caldav/src/calendar/resource.rs +++ b/crates/caldav/src/calendar/resource.rs @@ -5,7 +5,8 @@ use rustical_auth::AuthInfo; use rustical_dav::error::Error; use rustical_dav::resource::{Resource, ResourceService}; use rustical_dav::xml_snippets::{HrefElement, TextNode}; -use rustical_store::calendar::{Calendar, CalendarStore}; +use rustical_store::calendar::Calendar; +use rustical_store::store::CalendarStore; use serde::Serialize; use std::sync::Arc; use strum::{EnumString, IntoStaticStr, VariantNames}; diff --git a/crates/caldav/src/event/methods.rs b/crates/caldav/src/event/methods.rs index b093a78..84fa42a 100644 --- a/crates/caldav/src/event/methods.rs +++ b/crates/caldav/src/event/methods.rs @@ -3,7 +3,7 @@ use actix_web::http::StatusCode; use actix_web::web::{Data, Path}; use actix_web::{HttpResponse, ResponseError}; use rustical_auth::{AuthInfoExtractor, CheckAuthentication}; -use rustical_store::calendar::CalendarStore; +use rustical_store::store::CalendarStore; use thiserror::Error; #[derive(Debug, Error)] diff --git a/crates/caldav/src/event/resource.rs b/crates/caldav/src/event/resource.rs index 90f657a..5d06cd4 100644 --- a/crates/caldav/src/event/resource.rs +++ b/crates/caldav/src/event/resource.rs @@ -5,8 +5,8 @@ use rustical_auth::AuthInfo; use rustical_dav::error::Error; use rustical_dav::resource::{Resource, ResourceService}; use rustical_dav::xml_snippets::TextNode; -use rustical_store::calendar::CalendarStore; use rustical_store::event::Event; +use rustical_store::store::CalendarStore; use serde::Serialize; use std::sync::Arc; use strum::{EnumString, IntoStaticStr, VariantNames}; diff --git a/crates/caldav/src/lib.rs b/crates/caldav/src/lib.rs index 0df8175..7407ee8 100644 --- a/crates/caldav/src/lib.rs +++ b/crates/caldav/src/lib.rs @@ -8,7 +8,7 @@ use root::RootResource; use rustical_auth::CheckAuthentication; use rustical_dav::error::Error; use rustical_dav::propfind::{route_propfind, ServicePrefix}; -use rustical_store::calendar::CalendarStore; +use rustical_store::store::CalendarStore; use std::str::FromStr; use std::sync::Arc; use tokio::sync::RwLock; diff --git a/crates/caldav/src/principal/mod.rs b/crates/caldav/src/principal/mod.rs index 35c251a..a7121e4 100644 --- a/crates/caldav/src/principal/mod.rs +++ b/crates/caldav/src/principal/mod.rs @@ -7,7 +7,7 @@ use async_trait::async_trait; use rustical_auth::AuthInfo; use rustical_dav::resource::{Resource, ResourceService}; use rustical_dav::xml_snippets::HrefElement; -use rustical_store::calendar::CalendarStore; +use rustical_store::store::CalendarStore; use serde::Serialize; use strum::{EnumString, IntoStaticStr, VariantNames}; use tokio::sync::RwLock; diff --git a/crates/store/src/calendar.rs b/crates/store/src/calendar.rs index 579bc8c..5cf9b1f 100644 --- a/crates/store/src/calendar.rs +++ b/crates/store/src/calendar.rs @@ -1,6 +1,3 @@ -use crate::event::Event; -use anyhow::Result; -use async_trait::async_trait; use serde::{Deserialize, Serialize}; #[derive(Debug, Default, Clone, Deserialize, Serialize)] @@ -12,16 +9,3 @@ pub struct Calendar { pub color: Option, pub timezone: Option, } - -#[async_trait] -pub trait CalendarStore: Send + Sync + 'static { - async fn get_calendar(&self, id: &str) -> Result; - async fn get_calendars(&self, owner: &str) -> Result>; - async fn insert_calendar(&mut self, cid: String, calendar: Calendar) -> Result<()>; - async fn delete_calendar(&mut self, cid: &str) -> Result<()>; - - async fn get_events(&self, cid: &str) -> Result>; - async fn get_event(&self, cid: &str, uid: &str) -> Result; - async fn upsert_event(&mut self, cid: String, uid: String, ics: String) -> Result<()>; - async fn delete_event(&mut self, cid: &str, uid: &str) -> Result<()>; -} diff --git a/crates/store/src/lib.rs b/crates/store/src/lib.rs index 938ac8c..5a45150 100644 --- a/crates/store/src/lib.rs +++ b/crates/store/src/lib.rs @@ -1,5 +1,6 @@ pub mod calendar; pub mod event; pub mod sqlite_store; +pub mod store; pub mod timestamps; pub mod toml_store; diff --git a/crates/store/src/sqlite_store.rs b/crates/store/src/sqlite_store.rs index d2b6d7e..6ee507a 100644 --- a/crates/store/src/sqlite_store.rs +++ b/crates/store/src/sqlite_store.rs @@ -2,10 +2,7 @@ use anyhow::Result; use async_trait::async_trait; use sqlx::{sqlite::SqliteConnectOptions, Pool, Sqlite, SqlitePool}; -use crate::{ - calendar::{Calendar, CalendarStore}, - event::Event, -}; +use crate::{calendar::Calendar, event::Event, store::CalendarStore}; #[derive(Debug)] pub struct SqliteCalendarStore { diff --git a/crates/store/src/store.rs b/crates/store/src/store.rs new file mode 100644 index 0000000..8a3f206 --- /dev/null +++ b/crates/store/src/store.rs @@ -0,0 +1,17 @@ +use anyhow::Result; +use async_trait::async_trait; + +use crate::{calendar::Calendar, event::Event}; + +#[async_trait] +pub trait CalendarStore: Send + Sync + 'static { + async fn get_calendar(&self, id: &str) -> Result; + async fn get_calendars(&self, owner: &str) -> Result>; + async fn insert_calendar(&mut self, cid: String, calendar: Calendar) -> Result<()>; + async fn delete_calendar(&mut self, cid: &str) -> Result<()>; + + async fn get_events(&self, cid: &str) -> Result>; + async fn get_event(&self, cid: &str, uid: &str) -> Result; + async fn upsert_event(&mut self, cid: String, uid: String, ics: String) -> Result<()>; + async fn delete_event(&mut self, cid: &str, uid: &str) -> Result<()>; +} diff --git a/crates/store/src/toml_store.rs b/crates/store/src/toml_store.rs index a5c0f65..49290ce 100644 --- a/crates/store/src/toml_store.rs +++ b/crates/store/src/toml_store.rs @@ -1,5 +1,6 @@ -use crate::calendar::{Calendar, CalendarStore}; +use crate::calendar::Calendar; use crate::event::Event; +use crate::store::CalendarStore; use anyhow::{anyhow, Result}; use async_trait::async_trait; use serde::{Deserialize, Serialize}; diff --git a/crates/store/tests/test_calendar.rs b/crates/store/tests/test_calendar.rs index d55bcac..63e89b0 100644 --- a/crates/store/tests/test_calendar.rs +++ b/crates/store/tests/test_calendar.rs @@ -1,7 +1,7 @@ use rstest::rstest; use rstest_reuse::{self, apply, template}; -use rustical_store::calendar::CalendarStore; use rustical_store::sqlite_store::create_test_store; +use rustical_store::store::CalendarStore; use rustical_store::toml_store::TomlCalendarStore; const TIMEZONE: &str = include_str!("examples/timezone.ics"); diff --git a/src/app.rs b/src/app.rs index 1c99074..d376cb6 100644 --- a/src/app.rs +++ b/src/app.rs @@ -5,7 +5,7 @@ use actix_web::dev::{ServiceFactory, ServiceRequest, ServiceResponse}; use actix_web::middleware::{Logger, NormalizePath}; use actix_web::{web, App}; use rustical_auth::CheckAuthentication; -use rustical_store::calendar::CalendarStore; +use rustical_store::store::CalendarStore; use tokio::sync::RwLock; pub fn make_app( diff --git a/src/main.rs b/src/main.rs index 6740007..b5ebdd1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,8 +5,8 @@ use app::make_app; use clap::Parser; use config::{CalendarStoreConfig, SqliteCalendarStoreConfig, TomlCalendarStoreConfig}; use rustical_auth::AuthProvider; -use rustical_store::calendar::CalendarStore; use rustical_store::sqlite_store::{create_db_pool, SqliteCalendarStore}; +use rustical_store::store::CalendarStore; use rustical_store::toml_store::TomlCalendarStore; use std::fs; use std::sync::Arc;