From b586b4c88d203b21b827f063dc13177ab5cbe003 Mon Sep 17 00:00:00 2001 From: Ben Grant Date: Mon, 15 May 2023 20:11:41 +1000 Subject: [PATCH] More helpful error messages when creating adaptors --- backend/Cargo.lock | 8 +------- backend/Cargo.toml | 2 +- backend/adaptors/datastore/src/lib.rs | 17 ++++++++++------- backend/adaptors/sql/src/lib.rs | 13 +++++++++---- backend/src/main.rs | 2 +- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 025bf58..04eb650 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -617,7 +617,7 @@ dependencies = [ "chrono", "common", "datastore-adaptor", - "dotenv", + "dotenvy", "memory-adaptor", "punycode", "rand", @@ -814,12 +814,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "dotenv" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" - [[package]] name = "dotenvy" version = "0.15.7" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 2d55a2a..dadb128 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -20,7 +20,7 @@ common = { path = "common" } sql-adaptor = { path = "adaptors/sql" } datastore-adaptor = { path = "adaptors/datastore" } memory-adaptor = { path = "adaptors/memory" } -dotenv = "0.15.0" +dotenvy = "0.15.7" serde_json = "1.0.96" rand = "0.8.5" punycode = "0.4.1" diff --git a/backend/adaptors/datastore/src/lib.rs b/backend/adaptors/datastore/src/lib.rs index d5bbc7c..9402cb8 100644 --- a/backend/adaptors/datastore/src/lib.rs +++ b/backend/adaptors/datastore/src/lib.rs @@ -203,19 +203,22 @@ impl Adaptor for DatastoreAdaptor { impl DatastoreAdaptor { pub async fn new() -> Self { - let project_name = env::var("GCP_PROJECT_NAME").unwrap(); - // Load credentials - let credentials: ApplicationCredentials = - serde_json::from_str(&env::var("GCP_CREDENTIALS").unwrap()).unwrap(); + let credentials: ApplicationCredentials = serde_json::from_str( + &env::var("GCP_CREDENTIALS").expect("Expected GCP_CREDENTIALS environment variable"), + ) + .expect("GCP_CREDENTIALS environment variable is not valid JSON"); // Connect to datastore - let client = Client::from_credentials(project_name.clone(), credentials) + let client = Client::from_credentials(credentials.project_id.clone(), credentials.clone()) .await - .unwrap(); + .expect("Failed to setup datastore client"); let client = Mutex::new(client); - println!("🎛ïļ Connected to datastore in project {}", project_name); + println!( + "🎛ïļ Connected to datastore in project {}", + credentials.project_id + ); Self { client } } diff --git a/backend/adaptors/sql/src/lib.rs b/backend/adaptors/sql/src/lib.rs index 7d691dc..f0a9137 100644 --- a/backend/adaptors/sql/src/lib.rs +++ b/backend/adaptors/sql/src/lib.rs @@ -158,23 +158,28 @@ async fn get_stats_row(db: &DatabaseConnection) -> Result Self { - let connection_string = env::var("DATABASE_URL").unwrap(); + let connection_string = + env::var("DATABASE_URL").expect("Expected DATABASE_URL environment variable"); // Connect to the database - let db = Database::connect(&connection_string).await.unwrap(); + let db = Database::connect(&connection_string) + .await + .expect("Failed to connect to SQL database"); println!( "{} Connected to database at {}", match db { DatabaseConnection::SqlxMySqlPoolConnection(_) => "🐎", DatabaseConnection::SqlxPostgresPoolConnection(_) => "🐘", DatabaseConnection::SqlxSqlitePoolConnection(_) => "ðŸŠķ", - DatabaseConnection::Disconnected => panic!("Failed to connect"), + DatabaseConnection::Disconnected => panic!("Failed to connect to SQL database"), }, connection_string ); // Setup tables - Migrator::up(&db, None).await.unwrap(); + Migrator::up(&db, None) + .await + .expect("Failed to set up tables in the database"); Self { db } } diff --git a/backend/src/main.rs b/backend/src/main.rs index ee9924a..2dd0788 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -35,7 +35,7 @@ async fn main() { tracing_subscriber::fmt::init(); // Load env - dotenv::dotenv().ok(); + dotenvy::dotenv().ok(); let shared_state = Arc::new(Mutex::new(ApiState { adaptor: create_adaptor().await,