Error on failed env substitution
This commit is contained in:
parent
d06c0b6980
commit
cbcbd05613
|
@ -1,7 +1,7 @@
|
||||||
use std::{fs, error::Error, collections::HashMap, net::{Ipv4Addr, SocketAddr}};
|
use std::{fs, error::Error, collections::HashMap, net::{Ipv4Addr, SocketAddr}};
|
||||||
|
|
||||||
use regex::{Regex, Captures};
|
use regex::{Regex, Captures};
|
||||||
use tracing::{debug, trace, warn};
|
use tracing::{debug, trace, error};
|
||||||
use rumqttc::AsyncClient;
|
use rumqttc::AsyncClient;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
@ -158,19 +158,24 @@ impl Config {
|
||||||
|
|
||||||
// Substitute in environment variables
|
// Substitute in environment variables
|
||||||
let re = Regex::new(r"\$\{(.*)\}").unwrap();
|
let re = Regex::new(r"\$\{(.*)\}").unwrap();
|
||||||
|
let mut failure = false;
|
||||||
let file = re.replace_all(&file, |caps: &Captures| {
|
let file = re.replace_all(&file, |caps: &Captures| {
|
||||||
let key = caps.get(1).unwrap().as_str();
|
let key = caps.get(1).unwrap().as_str();
|
||||||
debug!("Substituting '{key}' in config");
|
debug!("Substituting '{key}' in config");
|
||||||
match std::env::var(key) {
|
match std::env::var(key) {
|
||||||
Ok(value) => value,
|
Ok(value) => value,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
// @TODO Would be nice if we could propagate this error upwards
|
failure = true;
|
||||||
warn!("Environment variable '{key}' is not set, using empty string as default");
|
error!("Environment variable '{key}' is not set");
|
||||||
"".to_string()
|
"".to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if failure {
|
||||||
|
return Err("Missing environment variables".into());
|
||||||
|
}
|
||||||
|
|
||||||
let config = toml::from_str(&file)?;
|
let config = toml::from_str(&file)?;
|
||||||
Ok(config)
|
Ok(config)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user