error_status 0.1.0

Model common error context with HTTP 4xx and 5xx code
Documentation
use http::StatusCode;

use crate::{ErrorKind, ErrorStatus};

impl From<ErrorStatus> for StatusCode {
    fn from(value: ErrorStatus) -> Self {
        match value.inner.kind {
            ErrorKind::BadRequest => StatusCode::BAD_REQUEST,
            ErrorKind::Unauthorized => StatusCode::UNAUTHORIZED,
            ErrorKind::Forbidden => StatusCode::FORBIDDEN,
            ErrorKind::NotFound => StatusCode::NOT_FOUND,
            ErrorKind::MethodNotAllowed => StatusCode::METHOD_NOT_ALLOWED,
            ErrorKind::RequestTimeout => StatusCode::REQUEST_TIMEOUT,
            ErrorKind::Gone => StatusCode::GONE,
            ErrorKind::PreconditionFailed => StatusCode::PRECONDITION_FAILED,
            ErrorKind::PayloadTooLarge => StatusCode::PAYLOAD_TOO_LARGE,
            ErrorKind::Unsupported => StatusCode::UNSUPPORTED_MEDIA_TYPE,
            ErrorKind::UnprocessableEntity => StatusCode::UNPROCESSABLE_ENTITY,
            ErrorKind::TooManyRequests => StatusCode::TOO_MANY_REQUESTS,
            ErrorKind::InternalError => StatusCode::INTERNAL_SERVER_ERROR,
            ErrorKind::NotImplemented => StatusCode::NOT_IMPLEMENTED,
            ErrorKind::Unavailable => StatusCode::SERVICE_UNAVAILABLE,
        }
    }
}

impl From<ErrorStatus> for (StatusCode, String) {
    fn from(value: ErrorStatus) -> Self {
        let code = match value.inner.kind {
            ErrorKind::BadRequest => StatusCode::BAD_REQUEST,
            ErrorKind::Unauthorized => StatusCode::UNAUTHORIZED,
            ErrorKind::Forbidden => StatusCode::FORBIDDEN,
            ErrorKind::NotFound => StatusCode::NOT_FOUND,
            ErrorKind::MethodNotAllowed => StatusCode::METHOD_NOT_ALLOWED,
            ErrorKind::RequestTimeout => StatusCode::REQUEST_TIMEOUT,
            ErrorKind::Gone => StatusCode::GONE,
            ErrorKind::PreconditionFailed => StatusCode::PRECONDITION_FAILED,
            ErrorKind::PayloadTooLarge => StatusCode::PAYLOAD_TOO_LARGE,
            ErrorKind::Unsupported => StatusCode::UNSUPPORTED_MEDIA_TYPE,
            ErrorKind::UnprocessableEntity => StatusCode::UNPROCESSABLE_ENTITY,
            ErrorKind::TooManyRequests => StatusCode::TOO_MANY_REQUESTS,
            ErrorKind::InternalError => StatusCode::INTERNAL_SERVER_ERROR,
            ErrorKind::NotImplemented => StatusCode::NOT_IMPLEMENTED,
            ErrorKind::Unavailable => StatusCode::SERVICE_UNAVAILABLE,
        };
        (code, value.inner.context)
    }
}