Switch db from json to toml

This commit is contained in:
Lennart
2023-09-07 18:45:28 +02:00
parent 82f15733fa
commit 4da1507919
3 changed files with 13 additions and 13 deletions

View File

@@ -49,15 +49,15 @@ pub trait CalendarStore: Send + Sync + 'static {
} }
#[derive(Debug, Deserialize, Serialize)] #[derive(Debug, Deserialize, Serialize)]
pub struct JsonCalendarStore { pub struct TomlCalendarStore {
calendars: HashMap<String, Calendar>, calendars: HashMap<String, Calendar>,
events: HashMap<String, Event>, events: HashMap<String, HashMap<String, Event>>,
path: String, path: String,
} }
impl JsonCalendarStore { impl TomlCalendarStore {
pub fn new(path: String) -> Self { pub fn new(path: String) -> Self {
JsonCalendarStore { TomlCalendarStore {
calendars: HashMap::new(), calendars: HashMap::new(),
events: HashMap::new(), events: HashMap::new(),
path, path,
@@ -66,8 +66,8 @@ impl JsonCalendarStore {
pub async fn save(&self) -> Result<()> { pub async fn save(&self) -> Result<()> {
let mut file = File::create(&self.path).await?; let mut file = File::create(&self.path).await?;
let json = serde_json::to_string_pretty(&self)?; let output = toml::to_string_pretty(&self)?;
file.write_all(json.as_bytes()).await?; file.write_all(output.as_bytes()).await?;
Ok(()) Ok(())
} }
} }

View File

@@ -1,14 +1,14 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)] #[derive(Debug, Deserialize, Serialize)]
pub struct JsonCalendarStoreConfig { pub struct TomlCalendarStoreConfig {
pub db_path: String, pub db_path: String,
} }
#[derive(Debug, Deserialize, Serialize)] #[derive(Debug, Deserialize, Serialize)]
#[serde(tag = "backend", rename_all = "snake_case")] #[serde(tag = "backend", rename_all = "snake_case")]
pub enum CalendarStoreConfig { pub enum CalendarStoreConfig {
Json(JsonCalendarStoreConfig), Toml(TomlCalendarStoreConfig),
} }
#[derive(Debug, Deserialize, Serialize)] #[derive(Debug, Deserialize, Serialize)]

View File

@@ -6,11 +6,11 @@ use actix_web::middleware::{Logger, NormalizePath};
use actix_web::{web, App, HttpServer}; use actix_web::{web, App, HttpServer};
use anyhow::Result; use anyhow::Result;
use clap::Parser; use clap::Parser;
use config::{CalendarStoreConfig, JsonCalendarStoreConfig}; use config::{CalendarStoreConfig, TomlCalendarStoreConfig};
use rustical_api::configure_api; use rustical_api::configure_api;
use rustical_dav::{configure_dav, configure_well_known}; use rustical_dav::{configure_dav, configure_well_known};
use rustical_frontend::configure_frontend; use rustical_frontend::configure_frontend;
use rustical_store::calendar::JsonCalendarStore; use rustical_store::calendar::TomlCalendarStore;
use tokio::sync::RwLock; use tokio::sync::RwLock;
mod config; mod config;
@@ -30,10 +30,10 @@ async fn main() -> Result<()> {
let config: Config = toml::from_str(&fs::read_to_string(&args.config_file)?)?; let config: Config = toml::from_str(&fs::read_to_string(&args.config_file)?)?;
let cal_store = Arc::new(RwLock::new(match &config.calendar_store { let cal_store = Arc::new(RwLock::new(match &config.calendar_store {
CalendarStoreConfig::Json(JsonCalendarStoreConfig { db_path }) => { CalendarStoreConfig::Toml(TomlCalendarStoreConfig { db_path }) => {
match fs::read_to_string(db_path) { match fs::read_to_string(db_path) {
Ok(json) => serde_json::from_str::<JsonCalendarStore>(&json).unwrap(), Ok(content) => toml::from_str::<TomlCalendarStore>(&content).unwrap(),
Err(_) => JsonCalendarStore::new(db_path.to_string()), Err(_) => TomlCalendarStore::new(db_path.to_string()),
} }
} }
})); }));