Skip to content

Commit 501924b

Browse files
authored
fix: correctly load config from env vars (#3)
1 parent e66cedf commit 501924b

File tree

4 files changed

+27
-23
lines changed

4 files changed

+27
-23
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "pyth-stream"
3-
version = "0.1.1"
3+
version = "0.1.2"
44
edition = "2021"
55

66
[lib]

src/bin/pyth_reader.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::Result;
1+
use anyhow::{Context, Result};
22
use async_nats::jetstream::{self};
33
use async_nats::HeaderMap;
44
use clap::Parser;
@@ -212,33 +212,30 @@ async fn fetch_price_updates(jetstream: jetstream::Context, config: &AppConfig)
212212
}
213213

214214
fn load_config(args: &Args) -> Result<AppConfig> {
215-
let mut config = Config::builder();
215+
let mut builder = Config::builder();
216216
if let Some(config_path) = args.config.as_ref() {
217217
info!("Loading configuration from file: {:?}", config_path);
218-
config = config.add_source(config::File::from(config_path.clone()));
218+
builder = builder.add_source(config::File::from(config_path.clone()));
219219
} else {
220220
info!("No config file specified, using default 'config.toml'");
221-
config = config.add_source(config::File::with_name("config.toml").required(false));
221+
builder = builder.add_source(config::File::with_name("config.toml").required(false));
222222
}
223223

224224
// Add environment variables
225225
info!("Adding environment variables to configuration");
226-
config = config.add_source(config::Environment::with_prefix("PYTH"));
226+
builder = builder.add_source(config::Environment::with_prefix("PYTH").separator("__"));
227227

228228
// Build the configuration
229229
info!("Building configuration");
230-
let config: AppConfig = match config.build()?.try_deserialize() {
231-
Ok(cfg) => {
232-
debug!("Configuration loaded successfully: {:?}", cfg);
233-
cfg
234-
}
235-
Err(e) => {
236-
error!("Failed to deserialize configuration: {}", e);
237-
return Err(anyhow::anyhow!("Configuration error: {}", e));
238-
}
239-
};
230+
let config = builder.build()?;
231+
232+
debug!("Raw config: {:?}", config);
233+
let app_config: AppConfig = config
234+
.try_deserialize()
235+
.context("Failed to deserialize configuration")?;
240236

241-
Ok(config)
237+
debug!("Parsed config: {:?}", app_config);
238+
Ok(app_config)
242239
}
243240

244241
#[tokio::main]

src/bin/websocket_server.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,21 @@ async fn main() -> Result<()> {
102102
}
103103

104104
fn load_config(args: &Args) -> Result<AppConfig> {
105-
let mut config = Config::builder();
105+
let mut builder = Config::builder();
106106
if let Some(config_path) = &args.config {
107-
config = config.add_source(config::File::from(config_path.clone()));
107+
builder = builder.add_source(config::File::from(config_path.clone()));
108108
} else {
109-
config = config.add_source(config::File::with_name("config.toml").required(false));
109+
builder = builder.add_source(config::File::with_name("config.toml").required(false));
110110
}
111-
config = config.add_source(config::Environment::with_prefix("PYTH"));
112-
Ok(config.build()?.try_deserialize()?)
111+
builder = builder.add_source(config::Environment::with_prefix("PYTH").separator("__"));
112+
113+
let config = builder.build()?;
114+
let app_config: AppConfig = config
115+
.try_deserialize()
116+
.context("Failed to deserialize config")?;
117+
118+
debug!("Parsed config: {:?}", app_config);
119+
Ok(app_config)
113120
}
114121

115122
async fn handle_connection(stream: TcpStream, clients: Clients) -> Result<()> {

0 commit comments

Comments
 (0)