diff options
| author | Fuwn <[email protected]> | 2026-01-21 15:02:28 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-01-21 15:02:28 +0000 |
| commit | d815570db78e4d06283e4b09c2a6b0106ebfa3e0 (patch) | |
| tree | e5df63cc0e9b92567d103d220e35489e4a5c0e28 /src/environment.rs | |
| parent | fix(main): Remove deprecated std::env::set_var use (diff) | |
| download | september-d815570db78e4d06283e4b09c2a6b0106ebfa3e0.tar.xz september-d815570db78e4d06283e4b09c2a6b0106ebfa3e0.zip | |
perf: Cache environment variables at startup
Diffstat (limited to 'src/environment.rs')
| -rw-r--r-- | src/environment.rs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/environment.rs b/src/environment.rs new file mode 100644 index 0000000..dd10171 --- /dev/null +++ b/src/environment.rs @@ -0,0 +1,56 @@ +use std::sync::LazyLock; + +pub static ENVIRONMENT: LazyLock<Environment> = + LazyLock::new(Environment::from_environment); + +pub struct Environment { + pub root: String, + pub css_external: Option<String>, + pub primary_colour: Option<String>, + pub favicon_external: Option<String>, + pub mathjax: bool, + pub head: Option<String>, + pub header: Option<String>, + pub plain_text_route: Option<String>, + pub condense_links: Vec<String>, + pub condense_links_at_headings: Vec<String>, + pub proxy_by_default: bool, + pub keep_gemini: Option<Vec<String>>, + pub embed_images: Option<String>, +} + +impl Environment { + fn from_environment() -> Self { + Self { + root: std::env::var("ROOT").unwrap_or_else(|_| { + log::warn!( + "could not use ROOT from environment variables, proceeding with \ + default root: gemini://fuwn.me" + ); + "gemini://fuwn.me".to_string() + }), + css_external: std::env::var("CSS_EXTERNAL").ok(), + primary_colour: std::env::var("PRIMARY_COLOUR").ok(), + favicon_external: std::env::var("FAVICON_EXTERNAL").ok(), + mathjax: std::env::var("MATHJAX") + .map(|v| v.to_lowercase() == "true") + .unwrap_or(true), + head: std::env::var("HEAD").ok(), + header: std::env::var("HEADER").ok(), + plain_text_route: std::env::var("PLAIN_TEXT_ROUTE").ok(), + condense_links: std::env::var("CONDENSE_LINKS") + .map(|s| s.split(',').map(String::from).collect()) + .unwrap_or_default(), + condense_links_at_headings: std::env::var("CONDENSE_LINKS_AT_HEADINGS") + .map(|s| s.split(',').map(String::from).collect()) + .unwrap_or_default(), + proxy_by_default: std::env::var("PROXY_BY_DEFAULT") + .map(|v| v.to_lowercase() == "true") + .unwrap_or(true), + keep_gemini: std::env::var("KEEP_GEMINI") + .ok() + .map(|s| s.split(',').map(String::from).collect()), + embed_images: std::env::var("EMBED_IMAGES").ok(), + } + } +} |