diff --git a/src/db/mod.rs b/src/db/mod.rs index 723df9e..6364a6c 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -57,12 +57,12 @@ impl From for PixivDownloaderDbError { } #[cfg(all(feature = "db_sqlite", feature = "server"))] -pub trait Optional2Extension { - fn optional2(self) -> Result, PixivDownloaderDbError>; +pub trait Optional2Extension { + fn optional2(self) -> Result, E>; } #[cfg(all(feature = "db_sqlite", feature = "server"))] -impl Optional2Extension for Result { +impl Optional2Extension for Result { fn optional2(self) -> Result, PixivDownloaderDbError> { match self { Ok(v) => Ok(Some(v)), @@ -80,6 +80,22 @@ impl Optional2Extension for Result { } } +#[cfg(all(feature = "db_sqlite", feature = "server"))] +impl Optional2Extension for Result { + fn optional2(self) -> Result, SqliteError> { + match self { + Ok(v) => Ok(Some(v)), + Err(e) => match e { + SqliteError::DbError(e) => match e { + rusqlite::Error::QueryReturnedNoRows => Ok(None), + _ => Err(SqliteError::DbError(e)), + }, + _ => Err(e), + }, + } + } +} + #[cfg(not(feature = "db_sqlite"))] compile_error!("No database backend is enabled."); diff --git a/src/db/sqlite/db.rs b/src/db/sqlite/db.rs index 967f5d7..259f178 100644 --- a/src/db/sqlite/db.rs +++ b/src/db/sqlite/db.rs @@ -383,9 +383,9 @@ impl PixivDownloaderSqlite { } #[cfg(feature = "server")] - async fn get_push_task(&self, id: u64) -> Result, PixivDownloaderDbError> { + async fn get_push_task(&self, id: u64) -> Result, SqliteError> { let con = self.db.lock().await; - con.query_row_and_then::( + con.query_row_and_then::( "SELECT * FROM push_task WHERE id = ?;", [id], |row| { diff --git a/src/db/sqlite/error.rs b/src/db/sqlite/error.rs index ef0ca2a..b62753f 100644 --- a/src/db/sqlite/error.rs +++ b/src/db/sqlite/error.rs @@ -3,4 +3,5 @@ pub enum SqliteError { DbError(rusqlite::Error), DatabaseVersionTooNew, UserNameAlreadyExists, + SerdeError(serde_json::Error), } diff --git a/src/server/push/index.rs b/src/server/push/index.rs index 5436441..d731e55 100644 --- a/src/server/push/index.rs +++ b/src/server/push/index.rs @@ -105,7 +105,8 @@ impl PushContext { .db .get_push_task(id) .await - .try_err3(500, "Failed to get push task:")?; + .try_err3(500, "Failed to get push task:")? + .try_err3(404, "Push task not found.")?; Ok(serde_json::to_value(re).try_err3(500, "Failed to serialize result:")?) } },