Commit Diff


commit - 7c30f9b4f8d2c8b8d8957aa7fcae4d176b343999
commit + 5dff7b9dbddb1c169d94afab1b6be7750d4a8d51
blob - e51b0580ebdb438787ae9c3c43c394c317fae02a
blob + 90ed941fb643996268fc37fdb2a957f20aa4bc92
--- src/db.rs
+++ src/db.rs
@@ -1,10 +1,32 @@
+use std::str::FromStr;
+
 use snafu::prelude::*;
 use sqlx::pool::PoolConnection;
-use sqlx::Sqlite;
+use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions};
+use sqlx::{ConnectOptions, Sqlite};
 
 use crate::models::Post;
-use crate::{Error, GeneralDatabaseSnafu};
+use crate::{Error, GeneralDatabaseSnafu, MigrationSnafu};
 
+pub async fn init_db(db_path: &str) -> Result<sqlx::Pool<Sqlite>, Error> {
+    let mut options = SqliteConnectOptions::from_str(db_path).context(GeneralDatabaseSnafu)?;
+    options.log_statements(log::LevelFilter::Trace);
+
+    log::debug!("Establishing connection to database at {:?}", db_path);
+    let pool = SqlitePoolOptions::new()
+        .max_connections(5)
+        .connect_with(options)
+        .await
+        .context(GeneralDatabaseSnafu)?;
+
+    sqlx::migrate!("./migrations")
+        .run(&pool)
+        .await
+        .context(MigrationSnafu)?;
+
+    Ok(pool)
+}
+
 /// Insert a new post or update an old one with the same GUID.
 ///
 /// # Errors
blob - 98a61c615d01506bbdbe3ae8811ea46fd6d7f12f
blob + 4d2cb027064564aeef0b4eb645e702809adb82c2
--- src/main.rs
+++ src/main.rs
@@ -25,6 +25,7 @@ pub mod models;
 
 use crate::{
     config::AppConfig,
+    db::{init_db, insert_item},
     mail::{get_mailer, Mail},
 };
 use lettre::{AsyncSmtpTransport, Tokio1Executor};
@@ -35,7 +36,7 @@ use std::{
     sync::Arc,
 };
 
-use sqlx::{sqlite::SqlitePoolOptions, Sqlite};
+use sqlx::Sqlite;
 use tokio::task::JoinSet;
 
 #[derive(Debug, Snafu)]
@@ -76,19 +77,8 @@ async fn app_main() -> Result<(), Error> {
         .filter(|l| !l.starts_with('#'))
         .collect();
 
-    let db_path = &config.database_path;
-    debug!("Establishing connection to database at {:?}", db_path);
-    let pool = SqlitePoolOptions::new()
-        .max_connections(5)
-        .connect(db_path.as_str())
-        .await
-        .context(GeneralDatabaseSnafu)?;
+    let pool = init_db(&config.database_path).await?;
 
-    sqlx::migrate!("./migrations")
-        .run(&pool)
-        .await
-        .context(MigrationSnafu)?;
-
     if config.no_fetch {
         info!("Not fetching any feeds as \"--no-fetch\" has been passed");
     } else {
@@ -157,7 +147,7 @@ async fn fetch_feeds(urls: Vec<String>, pool: &sqlx::P
 
         for i in posts {
             let conn = pool.acquire().await.context(GeneralDatabaseSnafu)?;
-            db::insert_item(conn, &i).await?;
+            insert_item(conn, &i).await?;
         }
     }