From d11d663c5c7ff12d1eb737c9e073d50f5c3f5a53 Mon Sep 17 00:00:00 2001 From: BlackDex Date: Thu, 12 Nov 2020 13:40:26 +0100 Subject: [PATCH] Added error handling during dotenv loading Some issue people report are because of misconfiguration or bad .env files. To mittigate this i added error handling for this. - Panic/Quit on a LineParse error, which indicates bad .env file format. - Emits a info message when there is no .env file found. - Emits a warning message when there is a .env file, but not no permissions. - Emits a warning on every other message not specifically catched. --- src/config.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/config.rs b/src/config.rs index 09f4ae2..b23dd67 100644 --- a/src/config.rs +++ b/src/config.rs @@ -53,7 +53,32 @@ macro_rules! make_config { impl ConfigBuilder { fn from_env() -> Self { - dotenv::from_path(".env").ok(); + match dotenv::from_path(".env") { + Ok(_) => (), + Err(e) => match e { + dotenv::Error::LineParse(msg, pos) => { + panic!("Error loading the .env file:\nNear {:?} on position {}\nPlease fix and restart!\n", msg, pos); + }, + dotenv::Error::Io(ioerr) => match ioerr.kind() { + std::io::ErrorKind::NotFound => { + println!("[INFO] No .env file found.\n"); + () + }, + std::io::ErrorKind::PermissionDenied => { + println!("[WARNING] Permission Denied while trying to read the .env file!\n"); + () + }, + _ => { + println!("[WARNING] Reading the .env file failed:\n{:?}\n", ioerr); + () + } + }, + _ => { + println!("[WARNING] Reading the .env file failed:\n{:?}\n", e); + () + } + } + }; let mut builder = ConfigBuilder::default(); $($(