aboutsummaryrefslogtreecommitdiff
path: root/server/src/config.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-04-30 10:47:54 +0200
committermetamuffin <metamuffin@disroot.org>2025-04-30 10:47:54 +0200
commita2ef3f6ec4c830611fde1a2e935588ccbbc61c03 (patch)
treeddcc1cb501e6c7237edd491aa7136d02150d03d3 /server/src/config.rs
parent212a0f23bc894faf88e159560c113f504349cc05 (diff)
downloadjellything-a2ef3f6ec4c830611fde1a2e935588ccbbc61c03.tar
jellything-a2ef3f6ec4c830611fde1a2e935588ccbbc61c03.tar.bz2
jellything-a2ef3f6ec4c830611fde1a2e935588ccbbc61c03.tar.zst
config works
Diffstat (limited to 'server/src/config.rs')
-rw-r--r--server/src/config.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/server/src/config.rs b/server/src/config.rs
new file mode 100644
index 0000000..27074b4
--- /dev/null
+++ b/server/src/config.rs
@@ -0,0 +1,43 @@
+/*
+ This file is part of jellything (https://codeberg.org/metamuffin/jellything)
+ which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
+ Copyright (C) 2025 metamuffin <metamuffin.org>
+*/
+
+use anyhow::{anyhow, Context, Result};
+use serde::Deserialize;
+use std::env::{args, var};
+use tokio::fs::read_to_string;
+
+#[derive(Debug, Deserialize)]
+struct Config {
+ transcoder: jellytranscoder::Config,
+ ui: jellyui::Config,
+ stream: jellystream::Config,
+ cache: jellycache::Config,
+ server: crate::Config,
+ base: jellybase::Config,
+ logic: jellylogic::Config,
+}
+
+pub async fn load_config() -> Result<()> {
+ let path = args()
+ .nth(1)
+ .or_else(|| var("JELLYTHING_CONFIG").ok())
+ .ok_or(anyhow!(
+ "No config supplied. Use first argument or JELLYTHING_CONFIG environment variable."
+ ))?;
+
+ let config_raw = read_to_string(path).await.context("reading main config")?;
+ let config: Config = serde_yml::from_str(&config_raw).context("parsing main config")?;
+
+ *jellystream::CONF_PRELOAD.lock().unwrap() = Some(config.stream);
+ *jellytranscoder::CONF_PRELOAD.lock().unwrap() = Some(config.transcoder);
+ *jellycache::CONF_PRELOAD.lock().unwrap() = Some(config.cache);
+ *jellylogic::CONF_PRELOAD.lock().unwrap() = Some(config.logic);
+ *jellybase::CONF_PRELOAD.lock().unwrap() = Some(config.base);
+ *crate::CONF_PRELOAD.lock().unwrap() = Some(config.server);
+ *jellyui::CONF_PRELOAD.lock().unwrap() = Some(config.ui);
+
+ Ok(())
+}