use redis_interface as redis; use thiserror::Error; #[derive(Debug, Error)] pub enum DrainerError { #[error("Error in parsing config : {0}")] ConfigParsingError(String), #[error("Error during redis operation : {0:?}")] RedisError(error_stack::Report), #[error("Application configuration error: {0}")] ConfigurationError(config::ConfigError), #[error("Error while configuring signals: {0}")] SignalError(String), #[error("Error while parsing data from the stream: {0:?}")] ParsingError(error_stack::Report), #[error("Unexpected error occurred: {0}")] UnexpectedError(String), #[error("I/O: {0}")] IoError(std::io::Error), } #[derive(Debug, Error, Clone, serde::Serialize)] pub enum HealthCheckError { #[error("Database health check is failing with error: {message}")] DbError { message: String }, #[error("Redis health check is failing with error: {message}")] RedisError { message: String }, } impl From for DrainerError { fn from(err: std::io::Error) -> Self { Self::IoError(err) } } pub type DrainerResult = error_stack::Result; impl From for DrainerError { fn from(err: config::ConfigError) -> Self { Self::ConfigurationError(err) } } impl From> for DrainerError { fn from(err: error_stack::Report) -> Self { Self::RedisError(err) } } impl actix_web::ResponseError for HealthCheckError { fn status_code(&self) -> reqwest::StatusCode { use reqwest::StatusCode; match self { Self::DbError { .. } | Self::RedisError { .. } => StatusCode::INTERNAL_SERVER_ERROR, } } }