use std::{ env::{self, VarError}, error::Error, fs, path::PathBuf, sync::LazyLock, }; use crate::db; pub static STORE_DIR: LazyLock = LazyLock::new(|| { env::var("PERSISTENT_STORE") .map(PathBuf::from) .unwrap_or_else(|_| PathBuf::from("./store")) }); pub static DATABASE: LazyLock = LazyLock::new(|| STORE_DIR.join("database.sqlite")); pub static BLOB_STORE: LazyLock = LazyLock::new(|| STORE_DIR.join("blobs")); pub static FEATURES_FILE: LazyLock = LazyLock::new(|| STORE_DIR.join("features.json")); pub fn setup() -> Result<(), Box> { tracing_subscriber::fmt::init(); fs::create_dir_all(&*STORE_DIR)?; fs::create_dir_all(&*BLOB_STORE)?; db::run_migrations()?; Ok(()) } pub fn port() -> u16 { match env::var("PORT") { Ok(p) => match p.parse::() { Ok(port) => return port, _ => log::error!("Failed to parse port."), }, Err(VarError::NotPresent) => log::warn!("No port set, using default."), Err(VarError::NotUnicode(payload)) => log::error!("Invalid port: {:?}", payload), }; 2004 }