axum-cometd 0.9.0-alpha.4

Framework for CometD server creation
Documentation
use crate::messages::Message;
use axum::{
    http::StatusCode,
    response::{IntoResponse, Response},
    Json,
};

pub(crate) type HandlerResult<T> = Result<T, HandlerError>;

#[derive(Debug)]
pub(crate) enum HandlerError {
    StatusCode(StatusCode),
    Message(Message),
}

impl IntoResponse for HandlerError {
    #[inline(always)]
    fn into_response(self) -> Response {
        match self {
            HandlerError::StatusCode(code) => code.into_response(),
            HandlerError::Message(message) => Json([message]).into_response(),
        }
    }
}

impl From<StatusCode> for HandlerError {
    #[inline(always)]
    fn from(code: StatusCode) -> Self {
        Self::StatusCode(code)
    }
}

impl From<Message> for HandlerError {
    #[inline(always)]
    fn from(message: Message) -> Self {
        Self::Message(message)
    }
}