diff --git a/CHANGELOG.md b/CHANGELOG.md index 11d24a0d..24fd3825 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Storage::get_dialogue` to obtain a dialogue indexed by a chat ID. - `RedisStorageError::RowNotFound` to be returned from `RedisStorage::remove_dialogue`. - - `InMemStorageError` with a single variant `RowNotFound` to be returned from `InMemStorage::remove_dialogue`. + - `InMemStorageError` with a single variant `DialogueNotFound` to be returned from `InMemStorage::remove_dialogue`. + - `RedisStorageError::DialogueNotFound` and `SqliteStorageError::DialogueNotFound` to be returned from `Storage::remove_dialogue`. ### Changed diff --git a/src/dispatching/dialogue/storage/in_mem_storage.rs b/src/dispatching/dialogue/storage/in_mem_storage.rs index c01498ff..2407792f 100644 --- a/src/dispatching/dialogue/storage/in_mem_storage.rs +++ b/src/dispatching/dialogue/storage/in_mem_storage.rs @@ -9,7 +9,7 @@ use tokio::sync::Mutex; pub enum InMemStorageError { /// Returned from [`InMemStorage::remove_dialogue`]. #[error("row not found")] - RowNotFound, + DialogueNotFound, } /// A dialogue storage based on [`std::collections::HashMap`]. @@ -46,7 +46,7 @@ where .lock() .await .remove(&chat_id) - .map_or_else(|| Err(InMemStorageError::RowNotFound), |_| Ok(())) + .map_or_else(|| Err(InMemStorageError::DialogueNotFound), |_| Ok(())) }) } diff --git a/src/dispatching/dialogue/storage/redis_storage.rs b/src/dispatching/dialogue/storage/redis_storage.rs index 0b1219a0..5e2eb843 100644 --- a/src/dispatching/dialogue/storage/redis_storage.rs +++ b/src/dispatching/dialogue/storage/redis_storage.rs @@ -25,7 +25,7 @@ where /// Returned from [`RedisStorage::remove_dialogue`]. #[error("row not found")] - RowNotFound, + DialogueNotFound, } /// A dialogue storage based on [Redis](https://redis.io/). @@ -66,15 +66,15 @@ where .await?; if let redis::Value::Bulk(values) = deleted_rows_count { - if let redis::Value::Int(deleted_rows_count) = values[0] { - match deleted_rows_count { - 0 => return Err(RedisStorageError::RowNotFound), - _ => return Ok(()) - } - } - } - - unreachable!("Must return redis::Value::Bulk(redis::Value::Int(_))"); + if let redis::Value::Int(deleted_rows_count) = values[0] { + match deleted_rows_count { + 0 => return Err(RedisStorageError::DialogueNotFound), + _ => return Ok(()), + } + } + } + + unreachable!("Must return redis::Value::Bulk(redis::Value::Int(_))"); }) } diff --git a/src/dispatching/dialogue/storage/sqlite_storage.rs b/src/dispatching/dialogue/storage/sqlite_storage.rs index 10a1b403..a562b5e5 100644 --- a/src/dispatching/dialogue/storage/sqlite_storage.rs +++ b/src/dispatching/dialogue/storage/sqlite_storage.rs @@ -27,6 +27,10 @@ where #[error("sqlite error: {0}")] SqliteError(#[from] sqlx::Error), + + /// Returned from [`SqliteStorage::remove_dialogue`]. + #[error("row not found")] + DialogueNotFound, } impl SqliteStorage { @@ -73,7 +77,7 @@ where .rows_affected(); if deleted_rows_count == 0 { - return Err(SqliteStorageError::SqliteError(sqlx::Error::RowNotFound)); + return Err(SqliteStorageError::DialogueNotFound); } Ok(()) diff --git a/tests/redis.rs b/tests/redis.rs index ab2466f1..2e011596 100644 --- a/tests/redis.rs +++ b/tests/redis.rs @@ -74,6 +74,6 @@ where // Check that a try to remove a non-existing dialogue results in an error. assert!(matches!( Arc::clone(&storage).remove_dialogue(1).await.unwrap_err(), - RedisStorageError::RowNotFound + RedisStorageError::DialogueNotFound )); } diff --git a/tests/sqlite.rs b/tests/sqlite.rs index f8b76fb4..a66c745f 100644 --- a/tests/sqlite.rs +++ b/tests/sqlite.rs @@ -68,9 +68,8 @@ where test_dialogues!(storage, None, None, None); // Check that a try to remove a non-existing dialogue results in an error. - let err = Arc::clone(&storage).remove_dialogue(1).await.unwrap_err(); - match err { - SqliteStorageError::SqliteError(err) => assert!(matches!(err, sqlx::Error::RowNotFound)), - _ => panic!("Must be sqlx::Error::RowNotFound"), - } + assert!(matches!( + Arc::clone(&storage).remove_dialogue(1).await.unwrap_err(), + SqliteStorageError::DialogueNotFound + )); }