commit df1a5a44600e1f0aa0820c59f32d2fc59a194734
parent cb0e3705551167533a63848c622300d72504375c
Author: Silas Brack <silasbrack@gmail.com>
Date: Sat, 13 Jun 2026 13:35:40 +0200
refactor: use addr/smtp_addr instead of separate host+port fields
Config computes the full address once at startup. Handlers and
main.rs use the composed address directly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Diffstat:
3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/src/config.rs b/src/config.rs
@@ -4,9 +4,8 @@ pub struct Config {
pub db_path: String,
pub jwt_secret: String,
pub debug: bool,
- pub port: u16,
- pub smtp_host: String,
- pub smtp_port: u16,
+ pub addr: String,
+ pub smtp_addr: String,
pub smtp_from: String,
pub site_url: String,
}
@@ -25,6 +24,10 @@ where
impl Config {
pub fn from_env() -> Self {
+ let port: u16 = require_parse("PORT");
+ let smtp_host = require("SMTP_HOST");
+ let smtp_port: u16 = require_parse("SMTP_PORT");
+
Self {
db_path: require("DB_PATH"),
jwt_secret: {
@@ -33,9 +36,8 @@ impl Config {
bytes.iter().map(|b| format!("{:02x}", b)).collect()
},
debug: require_parse("DEBUG"),
- port: require_parse("PORT"),
- smtp_host: require("SMTP_HOST"),
- smtp_port: require_parse("SMTP_PORT"),
+ addr: format!("0.0.0.0:{port}"),
+ smtp_addr: format!("{smtp_host}:{smtp_port}"),
smtp_from: require("SMTP_FROM"),
site_url: require("SITE_URL"),
}
diff --git a/src/handlers/auth.rs b/src/handlers/auth.rs
@@ -39,7 +39,7 @@ fn send_verification_email(state: &AppState, email: &str, token: &str) -> Result
let verify_url = format!("{}/verify-email?token={}", state.config.site_url, token);
- let mut stream = TcpStream::connect(format!("{}:{}", state.config.smtp_host, state.config.smtp_port))
+ let mut stream = TcpStream::connect(&*state.config.smtp_addr)
.map_err(|e| format!("SMTP connect failed: {e}"))?;
stream
.set_read_timeout(Some(std::time::Duration::from_secs(10)))
diff --git a/src/main.rs b/src/main.rs
@@ -31,8 +31,8 @@ async fn async_main() -> Result<(), Box<dyn std::error::Error>> {
eprintln!("Starting server with DEBUG={}", config.debug);
eprintln!("Database path: {}", config.db_path);
- let addr = format!("0.0.0.0:{}", config.port);
let db = Database::new(&config.db_path)?;
+ let addr = config.addr.clone();
let state = AppState::new(config, db);
let app = routes::create_router(state);