Skip to content

Commit 8844093

Browse files
upgrade in reading config file
1 parent 3c3b69f commit 8844093

File tree

5 files changed

+45
-19
lines changed

5 files changed

+45
-19
lines changed

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ target/
33
.gitignore
44
.github/
55
.vscode/
6+
.env

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/target/
22
.envrc
33
indexer.toml
4+
.env
45
# These are backup files generated by rustfmt
56
**/*.rs.bk
67
**/*.idea

Cargo.lock

Lines changed: 18 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ serde_with = { version = "3.8.1", default-features = false }
1515
serde_repr = "0.1.19"
1616
serde_ignored = "0.1.10"
1717
url = { version = "2.5.0", features = ["serde"] }
18+
regex = "1.11.0"
1819

1920
[dev-dependencies]
2021
sealed_test = "1.1.0"

config/src/config.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ use tracing::warn;
1313

1414
use alloy::primitives::Address;
1515
use bip39::Mnemonic;
16+
use regex::Regex;
1617
use serde::Deserialize;
1718
use serde_with::serde_as;
19+
use std::env;
1820
use thegraph_core::DeploymentId;
1921
use url::Url;
2022

@@ -71,17 +73,37 @@ impl Config {
7173
pub fn parse(prefix: ConfigPrefix, filename: &PathBuf) -> Result<Self, String> {
7274
let config_defaults = include_str!("../default_values.toml");
7375

76+
let mut config_content = std::fs::read_to_string(filename)
77+
.map_err(|e| format!("Failed to read config file: {}", e))?;
78+
79+
config_content = Self::substitute_env_vars(config_content)?;
80+
7481
let config: ConfigWrapper = Figment::new()
7582
.merge(Toml::string(config_defaults))
76-
.merge(Toml::file(filename))
83+
.merge(Toml::string(&config_content))
7784
.merge(Env::prefixed(prefix.get_prefix()).split("__"))
7885
.extract()
7986
.map_err(|e| e.to_string())?;
80-
config.0.validate()?;
8187

88+
config.0.validate()?;
8289
Ok(config.0)
8390
}
8491

92+
fn substitute_env_vars(content: String) -> Result<String, String> {
93+
let re = Regex::new(r"\$\{([A-Z_][A-Z0-9_]*)\}").map_err(|e| e.to_string())?;
94+
95+
let result = re.replace_all(&content, |caps: &regex::Captures| {
96+
let var_name = &caps[1];
97+
// only substitues the value if the env variable is found else the same is kept
98+
match env::var(var_name) {
99+
Ok(value) => value,
100+
Err(_) => format!("${{{}}}", var_name),
101+
}
102+
});
103+
104+
Ok(result.into_owned())
105+
}
106+
85107
// custom validation of the values
86108
fn validate(&self) -> Result<(), String> {
87109
match &self.tap.rav_request.trigger_value_divisor {

0 commit comments

Comments
 (0)