feat: scaffold services/january

This commit is contained in:
Paul Makles
2024-08-30 19:48:58 +01:00
parent acbc1b8956
commit c1b92ef56e
16 changed files with 678 additions and 16 deletions

View File

@@ -0,0 +1,81 @@
use axum::{http::StatusCode, response::IntoResponse, Json};
use crate::{Error, ErrorType};
/// HTTP response builder for Error enum
impl IntoResponse for Error {
fn into_response(self) -> axum::response::Response {
let status = match self.error_type {
ErrorType::LabelMe => StatusCode::INTERNAL_SERVER_ERROR,
ErrorType::AlreadyOnboarded => StatusCode::FORBIDDEN,
ErrorType::UnknownUser => StatusCode::NOT_FOUND,
ErrorType::InvalidUsername => StatusCode::BAD_REQUEST,
ErrorType::UsernameTaken => StatusCode::CONFLICT,
ErrorType::DiscriminatorChangeRatelimited => StatusCode::TOO_MANY_REQUESTS,
ErrorType::AlreadyFriends => StatusCode::CONFLICT,
ErrorType::AlreadySentRequest => StatusCode::CONFLICT,
ErrorType::Blocked => StatusCode::CONFLICT,
ErrorType::BlockedByOther => StatusCode::FORBIDDEN,
ErrorType::NotFriends => StatusCode::FORBIDDEN,
ErrorType::TooManyPendingFriendRequests { .. } => StatusCode::BAD_REQUEST,
ErrorType::UnknownChannel => StatusCode::NOT_FOUND,
ErrorType::UnknownMessage => StatusCode::NOT_FOUND,
ErrorType::UnknownAttachment => StatusCode::BAD_REQUEST,
ErrorType::CannotEditMessage => StatusCode::FORBIDDEN,
ErrorType::CannotJoinCall => StatusCode::BAD_REQUEST,
ErrorType::TooManyAttachments { .. } => StatusCode::BAD_REQUEST,
ErrorType::TooManyReplies { .. } => StatusCode::BAD_REQUEST,
ErrorType::EmptyMessage => StatusCode::UNPROCESSABLE_ENTITY,
ErrorType::PayloadTooLarge => StatusCode::UNPROCESSABLE_ENTITY,
ErrorType::CannotRemoveYourself => StatusCode::BAD_REQUEST,
ErrorType::GroupTooLarge { .. } => StatusCode::FORBIDDEN,
ErrorType::AlreadyInGroup => StatusCode::CONFLICT,
ErrorType::NotInGroup => StatusCode::NOT_FOUND,
ErrorType::AlreadyPinned => StatusCode::BAD_REQUEST,
ErrorType::NotPinned => StatusCode::BAD_REQUEST,
ErrorType::UnknownServer => StatusCode::NOT_FOUND,
ErrorType::InvalidRole => StatusCode::NOT_FOUND,
ErrorType::Banned => StatusCode::FORBIDDEN,
ErrorType::AlreadyInServer => StatusCode::CONFLICT,
ErrorType::TooManyServers { .. } => StatusCode::BAD_REQUEST,
ErrorType::TooManyEmbeds { .. } => StatusCode::BAD_REQUEST,
ErrorType::TooManyEmoji { .. } => StatusCode::BAD_REQUEST,
ErrorType::TooManyChannels { .. } => StatusCode::BAD_REQUEST,
ErrorType::TooManyRoles { .. } => StatusCode::BAD_REQUEST,
ErrorType::ReachedMaximumBots => StatusCode::BAD_REQUEST,
ErrorType::IsBot => StatusCode::BAD_REQUEST,
ErrorType::BotIsPrivate => StatusCode::FORBIDDEN,
ErrorType::CannotReportYourself => StatusCode::BAD_REQUEST,
ErrorType::MissingPermission { .. } => StatusCode::FORBIDDEN,
ErrorType::MissingUserPermission { .. } => StatusCode::FORBIDDEN,
ErrorType::NotElevated => StatusCode::FORBIDDEN,
ErrorType::NotPrivileged => StatusCode::FORBIDDEN,
ErrorType::CannotGiveMissingPermissions => StatusCode::FORBIDDEN,
ErrorType::NotOwner => StatusCode::FORBIDDEN,
ErrorType::DatabaseError { .. } => StatusCode::INTERNAL_SERVER_ERROR,
ErrorType::InternalError => StatusCode::INTERNAL_SERVER_ERROR,
ErrorType::InvalidOperation => StatusCode::BAD_REQUEST,
ErrorType::InvalidCredentials => StatusCode::UNAUTHORIZED,
ErrorType::InvalidProperty => StatusCode::BAD_REQUEST,
ErrorType::InvalidSession => StatusCode::UNAUTHORIZED,
ErrorType::DuplicateNonce => StatusCode::CONFLICT,
ErrorType::VosoUnavailable => StatusCode::BAD_REQUEST,
ErrorType::NotFound => StatusCode::NOT_FOUND,
ErrorType::NoEffect => StatusCode::OK,
ErrorType::FailedValidation { .. } => StatusCode::BAD_REQUEST,
ErrorType::ProxyError => StatusCode::BAD_REQUEST,
};
(status, Json(&self)).into_response()
}
}