actix_limiter/
errors.rs

1use derive_more::derive::{Display, Error, From};
2
3use crate::status::Status;
4
5/// Failure modes of the rate limiter.
6#[derive(Debug, Display, Error, From)]
7pub enum Error {
8    /// Redis client failed to connect or run a query.
9    #[display("Redis client failed to connect or run a query")]
10    Client(redis::RedisError),
11
12    #[display("Redis pool error")]
13    Pool(deadpool_redis::PoolError),
14
15    /// Limit is exceeded for a key.
16    #[display("Limit is exceeded for a key")]
17    #[from(ignore)]
18    LimitExceeded(#[error(not(source))] Status),
19
20    /// Time conversion failed.
21    #[display("Time conversion failed")]
22    Time(time::error::ComponentRange),
23
24    /// Generic error.
25    #[display("Generic error")]
26    #[from(ignore)]
27    Other(#[error(not(source))] String),
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    static_assertions::assert_impl_all! {
35        Error:
36        From<redis::RedisError>,
37        From<time::error::ComponentRange>,
38    }
39
40    static_assertions::assert_not_impl_any! {
41        Error:
42        From<String>,
43        From<Status>,
44    }
45}