atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
3f9091557ec3a198324147b05397e1bf5c50247a
1
ssh://brewery@pls.lobotomise.me:33/atagen/jelq.git

Blame: src/config.rs

782069860236atagen2026-10-10 12:44 UTC1
use std::time::Duration;
782069860236atagen2026-10-10 12:44 UTC2
3f9091557ec3atagen2026-10-11 11:43 UTC3
use crate::game::oracle::OracleTemplate;
782069860236atagen2026-10-10 12:44 UTC4
use crate::secret::Secret;
782069860236atagen2026-10-10 12:44 UTC5
782069860236atagen2026-10-10 12:44 UTC6
pub struct Config {
782069860236atagen2026-10-10 12:44 UTC7
    pub addr: String,
782069860236atagen2026-10-10 12:44 UTC8
    pub refractory: Duration,
782069860236atagen2026-10-10 12:44 UTC9
    pub secret: Secret,
782069860236atagen2026-10-10 12:44 UTC10
    pub max_runs: usize,
782069860236atagen2026-10-10 12:44 UTC11
    pub idle_ttl: Duration,
3f9091557ec3atagen2026-10-11 11:43 UTC12
    pub(crate) oracle: OracleTemplate,
782069860236atagen2026-10-10 12:44 UTC13
}
782069860236atagen2026-10-10 12:44 UTC14
782069860236atagen2026-10-10 12:44 UTC15
impl Default for Config {
782069860236atagen2026-10-10 12:44 UTC16
    fn default() -> Self {
782069860236atagen2026-10-10 12:44 UTC17
        Self {
782069860236atagen2026-10-10 12:44 UTC18
            addr: "127.0.0.1:6969".into(),
782069860236atagen2026-10-10 12:44 UTC19
            refractory: Duration::from_secs(30),
782069860236atagen2026-10-10 12:44 UTC20
            secret: Secret::random(),
782069860236atagen2026-10-10 12:44 UTC21
            max_runs: 10_000,
782069860236atagen2026-10-10 12:44 UTC22
            idle_ttl: Duration::from_secs(6 * 60 * 60),
3f9091557ec3atagen2026-10-11 11:43 UTC23
            oracle: OracleTemplate::Rng,
782069860236atagen2026-10-10 12:44 UTC24
        }
782069860236atagen2026-10-10 12:44 UTC25
    }
782069860236atagen2026-10-10 12:44 UTC26
}
782069860236atagen2026-10-10 12:44 UTC27
782069860236atagen2026-10-10 12:44 UTC28
impl Config {
782069860236atagen2026-10-10 12:44 UTC29
    pub fn from_env() -> Self {
782069860236atagen2026-10-10 12:44 UTC30
        let var = |name| std::env::var(name).ok();
782069860236atagen2026-10-10 12:44 UTC31
        let defaults = Self::default();
782069860236atagen2026-10-10 12:44 UTC32
        Self {
782069860236atagen2026-10-10 12:44 UTC33
            addr: var("JELQD_ADDR").unwrap_or(defaults.addr),
782069860236atagen2026-10-10 12:44 UTC34
            refractory: var("JELQD_REFRACTORY_SECS")
782069860236atagen2026-10-10 12:44 UTC35
                .and_then(|s| s.parse().ok())
782069860236atagen2026-10-10 12:44 UTC36
                .map_or(defaults.refractory, Duration::from_secs),
782069860236atagen2026-10-10 12:44 UTC37
            secret: var("JELQD_SECRET").map_or(defaults.secret, |s| Secret::new(s.into_bytes())),
3f9091557ec3atagen2026-10-11 11:43 UTC38
            oracle: match var("JELQD_ORACLE").as_deref() {
3f9091557ec3atagen2026-10-11 11:43 UTC39
                Some("clm") => OracleTemplate::Clm {
3f9091557ec3atagen2026-10-11 11:43 UTC40
                    url: var("JELQD_CLM_URL")
3f9091557ec3atagen2026-10-11 11:43 UTC41
                        .unwrap_or_else(|| "http://127.0.0.1:8700/v1/systemone".into()),
3f9091557ec3atagen2026-10-11 11:43 UTC42
                },
3f9091557ec3atagen2026-10-11 11:43 UTC43
                _ => defaults.oracle,
3f9091557ec3atagen2026-10-11 11:43 UTC44
            },
782069860236atagen2026-10-10 12:44 UTC45
            ..defaults
782069860236atagen2026-10-10 12:44 UTC46
        }
782069860236atagen2026-10-10 12:44 UTC47
    }
782069860236atagen2026-10-10 12:44 UTC48
}