From 1420cf104ec9ceb08505c5a25614774ba8048eb9 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Sun, 8 Dec 2024 10:57:13 +0000 Subject: [PATCH] Add server config --- backend/sync_server/src/config.rs | 51 +++++++++++++++++++++++++++++++ backend/sync_server/src/consts.rs | 6 ++++ 2 files changed, 57 insertions(+) create mode 100644 backend/sync_server/src/config.rs create mode 100644 backend/sync_server/src/consts.rs diff --git a/backend/sync_server/src/config.rs b/backend/sync_server/src/config.rs new file mode 100644 index 0000000..fb5b6f8 --- /dev/null +++ b/backend/sync_server/src/config.rs @@ -0,0 +1,51 @@ +use std::path::Path; + +use anyhow::{Context, Result}; +use database_config::DatabaseConfig; +use log::debug; +use serde::{Deserialize, Serialize}; +use server_config::ServerConfig; +use tokio::fs; +use user_config::UserConfig; + +pub mod database_config; +pub mod server_config; +pub mod user_config; + +use crate::{ + consts::{DEFAULT_HOST, DEFAULT_MAX_CONNECTIONS, DEFAULT_PORT, DEFAULT_SQLITE_URL}, + errors::SyncServerError, +}; + +#[derive(Debug, Deserialize, Serialize, Clone)] +pub struct Config { + pub database: DatabaseConfig, + pub server: ServerConfig, + pub users: UserConfig, +} + +impl Config { + pub async fn read(path: &Path) -> Result { + Self::load_from_file(path) + .await + .with_context(|| format!("Cannot load configuration from disk from ({path:?})")) + } + + pub async fn load_from_file(path: &Path) -> Result { + let contents = fs::read_to_string(path) + .await + .context("Failed to read configuration file")?; + + let config = serde_yaml::from_str(&contents).context("Failed to parse configuration")?; + + Ok(config) + } + + pub async fn write(&self, path: &Path) -> Result<()> { + let contents = serde_yaml::to_string(&self).context("Failed to serialize configuration")?; + + fs::write(path, contents) + .await + .context("Failed to write configuration to disk") + } +} diff --git a/backend/sync_server/src/consts.rs b/backend/sync_server/src/consts.rs new file mode 100644 index 0000000..a4f4361 --- /dev/null +++ b/backend/sync_server/src/consts.rs @@ -0,0 +1,6 @@ +pub const CONFIG_PATH: &str = "config.yaml"; +pub const DEFAULT_SQLITE_URL: &str = "db.sqlite3"; +pub const DEFAULT_HOST: &str = "127.0.0.1"; +pub const DEFAULT_PORT: u16 = 3000; +pub const DEFAULT_MAX_CONNECTIONS: u32 = 12; +pub const DEFAULT_MAX_BODY_SIZE_MB: usize = 4096;