use serde::Deserialize;
use crate::permission::{Permission, UserPermission};
#[derive(Deserialize, Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[serde(tag = "type")]
pub enum ApiError {
LabelMe,
AlreadyOnboarded,
UsernameTaken,
InvalidUsername,
UnknownUser,
AlreadyFriends,
AlreadySentRequest,
Blocked,
BlockedByOther,
NotFriends,
UnknownChannel,
UnknownAttachment,
UnknownMessage,
CannotEditMessage,
CannotJoinCall,
TooManyAttachments,
TooManyReplies,
EmptyMessage,
PayloadTooLarge,
CannotRemoveYourself,
GroupTooLarge { max: usize },
AlreadyInGroup,
NotInGroup,
UnknownServer,
InvalidRole,
Banned,
TooManyServers { max: usize },
TooManyEmoji,
ReachedMaximumBots,
IsBot,
BotIsPrivate,
MissingPermission { permission: Permission },
MissingUserPermission { permission: UserPermission },
NotElevated,
CannotGiveMissingPermissions,
NotOwner,
DatabaseError { operation: String, with: String },
InternalError,
InvalidOperation,
InvalidCredentials,
InvalidSession,
DuplicateNonce,
VosoUnavailable,
NotFound,
NoEffect,
FailedValidation,
Unauthenticated,
}