atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
e807266c323bcc1fd00f59aa160b3b94d8168beb
1
ssh://brewery@pls.lobotomise.me:33/atagen/jelq.git
src/config.rsRust48 lines1.4 KB
1
use std::time::Duration;
2
3
use crate::game::oracle::OracleTemplate;
4
use crate::secret::Secret;
5
6
pub struct Config {
7
    pub addr: String,
8
    pub refractory: Duration,
9
    pub secret: Secret,
10
    pub max_runs: usize,
11
    pub idle_ttl: Duration,
12
    pub(crate) oracle: OracleTemplate,
13
}
14
15
impl Default for Config {
16
    fn default() -> Self {
17
        Self {
18
            addr: "127.0.0.1:6969".into(),
19
            refractory: Duration::from_secs(30),
20
            secret: Secret::random(),
21
            max_runs: 10_000,
22
            idle_ttl: Duration::from_secs(6 * 60 * 60),
23
            oracle: OracleTemplate::Rng,
24
        }
25
    }
26
}
27
28
impl Config {
29
    pub fn from_env() -> Self {
30
        let var = |name| std::env::var(name).ok();
31
        let defaults = Self::default();
32
        Self {
33
            addr: var("JELQD_ADDR").unwrap_or(defaults.addr),
34
            refractory: var("JELQD_REFRACTORY_SECS")
35
                .and_then(|s| s.parse().ok())
36
                .map_or(defaults.refractory, Duration::from_secs),
37
            secret: var("JELQD_SECRET").map_or(defaults.secret, |s| Secret::new(s.into_bytes())),
38
            oracle: match var("JELQD_ORACLE").as_deref() {
39
                Some("clm") => OracleTemplate::Clm {
40
                    url: var("JELQD_CLM_URL")
41
                        .unwrap_or_else(|| "http://127.0.0.1:8700/v1/systemone".into()),
42
                },
43
                _ => defaults.oracle,
44
            },
45
            ..defaults
46
        }
47
    }
48
}