limitador 0.11.0

Rate limiting library
Documentation
use crate::limit::EvaluationError;
use crate::limit::ParseError;
use crate::storage::StorageErr;
use std::convert::Infallible;
use std::error::Error;
use std::fmt::{Display, Formatter};

#[derive(Debug)]
pub enum LimitadorError {
    StorageError(StorageErr),
    InterpreterError(EvaluationError),
}

impl Display for LimitadorError {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        match self {
            LimitadorError::StorageError(err) => {
                write!(f, "error while accessing the limits storage: {err:?}")
            }
            LimitadorError::InterpreterError(err) => {
                write!(f, "error parsing condition: {err:?}")
            }
        }
    }
}

impl Error for LimitadorError {
    fn source(&self) -> Option<&(dyn Error + 'static)> {
        match self {
            LimitadorError::StorageError(err) => Some(err),
            LimitadorError::InterpreterError(err) => Some(err),
        }
    }
}

impl From<StorageErr> for LimitadorError {
    fn from(e: StorageErr) -> Self {
        Self::StorageError(e)
    }
}

impl From<EvaluationError> for LimitadorError {
    fn from(err: EvaluationError) -> Self {
        LimitadorError::InterpreterError(err)
    }
}

impl From<Infallible> for ParseError {
    fn from(value: Infallible) -> Self {
        unreachable!("unexpected infallible value: {:?}", value)
    }
}