diff --git a/Cargo.lock b/Cargo.lock index 86c1c12..194825f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2784,7 +2784,7 @@ dependencies = [ [[package]] name = "pyth-stream" -version = "0.1.1" +version = "0.1.2" dependencies = [ "anyhow", "async-nats", diff --git a/Cargo.toml b/Cargo.toml index 4596f37..7a50708 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pyth-stream" -version = "0.1.1" +version = "0.1.2" edition = "2021" [lib] diff --git a/src/bin/pyth_reader.rs b/src/bin/pyth_reader.rs index 7bc0421..2500ca8 100644 --- a/src/bin/pyth_reader.rs +++ b/src/bin/pyth_reader.rs @@ -1,4 +1,4 @@ -use anyhow::Result; +use anyhow::{Context, Result}; use async_nats::jetstream::{self}; use async_nats::HeaderMap; use clap::Parser; @@ -212,33 +212,30 @@ async fn fetch_price_updates(jetstream: jetstream::Context, config: &AppConfig) } fn load_config(args: &Args) -> Result { - let mut config = Config::builder(); + let mut builder = Config::builder(); if let Some(config_path) = args.config.as_ref() { info!("Loading configuration from file: {:?}", config_path); - config = config.add_source(config::File::from(config_path.clone())); + builder = builder.add_source(config::File::from(config_path.clone())); } else { info!("No config file specified, using default 'config.toml'"); - config = config.add_source(config::File::with_name("config.toml").required(false)); + builder = builder.add_source(config::File::with_name("config.toml").required(false)); } // Add environment variables info!("Adding environment variables to configuration"); - config = config.add_source(config::Environment::with_prefix("PYTH")); + builder = builder.add_source(config::Environment::with_prefix("PYTH").separator("__")); // Build the configuration info!("Building configuration"); - let config: AppConfig = match config.build()?.try_deserialize() { - Ok(cfg) => { - debug!("Configuration loaded successfully: {:?}", cfg); - cfg - } - Err(e) => { - error!("Failed to deserialize configuration: {}", e); - return Err(anyhow::anyhow!("Configuration error: {}", e)); - } - }; + let config = builder.build()?; + + debug!("Raw config: {:?}", config); + let app_config: AppConfig = config + .try_deserialize() + .context("Failed to deserialize configuration")?; - Ok(config) + debug!("Parsed config: {:?}", app_config); + Ok(app_config) } #[tokio::main] diff --git a/src/bin/websocket_server.rs b/src/bin/websocket_server.rs index 93d06e9..28f6d7b 100644 --- a/src/bin/websocket_server.rs +++ b/src/bin/websocket_server.rs @@ -102,14 +102,21 @@ async fn main() -> Result<()> { } fn load_config(args: &Args) -> Result { - let mut config = Config::builder(); + let mut builder = Config::builder(); if let Some(config_path) = &args.config { - config = config.add_source(config::File::from(config_path.clone())); + builder = builder.add_source(config::File::from(config_path.clone())); } else { - config = config.add_source(config::File::with_name("config.toml").required(false)); + builder = builder.add_source(config::File::with_name("config.toml").required(false)); } - config = config.add_source(config::Environment::with_prefix("PYTH")); - Ok(config.build()?.try_deserialize()?) + builder = builder.add_source(config::Environment::with_prefix("PYTH").separator("__")); + + let config = builder.build()?; + let app_config: AppConfig = config + .try_deserialize() + .context("Failed to deserialize config")?; + + debug!("Parsed config: {:?}", app_config); + Ok(app_config) } async fn handle_connection(stream: TcpStream, clients: Clients) -> Result<()> {