aboutsummaryrefslogtreecommitdiff
path: root/src/config.rs
blob: c335e8db3654d9272404d6899a82e3e901d38553 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use std::env;
use anyhow::{Result, Context, anyhow};
use log::*;

pub struct DiplonatConfig {
   pub private_ip: String,
   pub consul_node_name: String,
   pub consul_url: String,
   pub refresh_time: u32,
   pub expiration_time: u32
}

pub fn load_env() -> Result<DiplonatConfig> {
  let epi = "DIPLONAT_PRIVATE_IP";
  let ert = "DIPLONAT_REFRESH_TIME";
  let eet = "DIPLONAT_EXPIRATION_TIME";
  let ecnd = "DIPLONAT_CONSUL_NODE_NAME";
  let ecu = "DIPLONAT_CONSUL_URL";

  let config = DiplonatConfig { 
    consul_url: match env::var(ecu) { Ok(e) => e, Err(_) => "http://127.0.0.1:8500".to_string() },
    private_ip: env::var(epi)
                  .with_context(|| format!("{} env var must be defined, eg: 192.168.0.18", epi))?, 
    refresh_time: env::var(ert)
                    .with_context(|| format!("{} env var must be defined, eg: 60", ert))?
                    .parse()
                    .with_context(|| format!("{} env var must be an integer, eg: 60", ert))?, 
    expiration_time: env::var(eet)
                       .with_context(|| format!("{} env var must be defined, eg: 300", eet))?
                       .parse()
                       .with_context(|| format!("{} env var must be an integer, eg: 300", eet))?, 
    consul_node_name: env::var(ecnd)
                        .with_context(|| format!("{} env var must be defined", ecnd))?
  };

  if config.refresh_time * 2 > config.expiration_time {
    return Err(anyhow!("Expiration time (currently: {}s) must be twice bigger than refresh time (currently: {}s)", config.expiration_time, config.refresh_time))
  }

  info!("Consul URL: {}", config.consul_url);
  info!("Consul node name: {}", config.consul_node_name);
  info!("Private IP address: {}", config.private_ip);
  info!("Refresh time: {} seconds", config.refresh_time);
  info!("Expiration time: {} seconds", config.expiration_time);
  return Ok(config);
}