/* 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) 2023 metamuffin */ #![feature(lazy_cell)] pub mod cache; pub mod database; pub mod federation; pub mod permission; pub mod temp; use jellycommon::{ config::{GlobalConfig, SecretsConfig}, AssetLocation, }; use std::{fs::File, path::PathBuf, sync::LazyLock}; pub static CONF: LazyLock = LazyLock::new(|| { serde_yaml::from_reader( File::open(std::env::var("JELLYTHING_CONFIG").unwrap_or_else(|_| { std::env::args().nth(1).expect( "First argument or JELLYTHING_CONFIG must specify the configuration to use.", ) })) .expect("config cannot be read"), ) .expect("config invalid") }); pub static SECRETS: LazyLock = LazyLock::new(|| { serde_yaml::from_reader(File::open(&CONF.secrets_path).expect("secrets file missing")) .expect("secrets config invalid") }); pub trait AssetLocationExt { fn path(&self) -> PathBuf; } impl AssetLocationExt for AssetLocation { fn path(&self) -> PathBuf { match self { AssetLocation::Assets(p) => CONF.asset_path.join(p), AssetLocation::Cache(p) => CONF.cache_path.join(p), AssetLocation::Library(p) => CONF.library_path.join(p), AssetLocation::Temp(p) => CONF.temp_path.join(p), AssetLocation::Media(p) => CONF.media_path.join(p), } } }