Skip to main content

actix_limitation/
errors.rs

1use derive_more::{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(fmt = "Redis client failed to connect or run a query")]
10    Client(redis::RedisError),
11
12    /// Limit is exceeded for a key.
13    #[display(fmt = "Limit is exceeded for a key")]
14    #[from(ignore)]
15    LimitExceeded(#[error(not(source))] Status),
16
17    /// Time conversion failed.
18    #[display(fmt = "Time conversion failed")]
19    Time(time::error::ComponentRange),
20
21    /// Generic error.
22    #[display(fmt = "Generic error")]
23    #[from(ignore)]
24    Other(#[error(not(source))] String),
25}
26
27#[cfg(test)]
28mod tests {
29    use super::*;
30
31    static_assertions::assert_impl_all! {
32        Error:
33        From<redis::RedisError>,
34        From<time::error::ComponentRange>,
35    }
36
37    static_assertions::assert_not_impl_any! {
38        Error:
39        From<String>,
40        From<Status>,
41    }
42}