switchgear-service 0.1.13

Service layer and API implementations for Switchgear LNURL load balancer
Documentation
pub use axum::http::StatusCode;
use std::error::Error;
use std::fmt;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ServiceErrorSource {
    Upstream,
    Downstream,
    Internal,
}

impl fmt::Display for ServiceErrorSource {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            ServiceErrorSource::Upstream => write!(f, "Upstream"),
            ServiceErrorSource::Downstream => write!(f, "Downstream"),
            ServiceErrorSource::Internal => write!(f, "Internal"),
        }
    }
}

impl Error for ServiceErrorSource {}

impl ServiceErrorSource {
    pub fn to_http_status(&self) -> StatusCode {
        match self {
            ServiceErrorSource::Downstream => StatusCode::BAD_REQUEST,
            ServiceErrorSource::Upstream => StatusCode::BAD_GATEWAY,
            ServiceErrorSource::Internal => StatusCode::INTERNAL_SERVER_ERROR,
        }
    }
}

pub trait HasServiceErrorSource {
    fn get_service_error_source(&self) -> ServiceErrorSource;
}