Pumpkin/pumpkin/src/error.rs
Snowiiii cbf9e63329 Remove ByteBuffer struct
Replaced trough trait's which implement bytes::Buf and bytes::BufMut.
Closes https://github.com/Snowiiii/Pumpkin/issues/396
2024-12-13 15:42:04 +01:00

68 lines
1.8 KiB
Rust

use log::log;
use pumpkin_inventory::InventoryError;
use pumpkin_protocol::bytebuf::ReadingError;
use std::fmt::Display;
pub trait PumpkinError: Send + std::error::Error + Display {
fn is_kick(&self) -> bool;
fn log(&self) {
log!(self.severity(), "{}", self.to_string());
}
fn severity(&self) -> log::Level;
fn client_kick_reason(&self) -> Option<String>;
}
impl<ErrorType: PumpkinError + 'static> From<ErrorType> for Box<dyn PumpkinError> {
fn from(error: ErrorType) -> Self {
Box::new(error)
}
}
impl PumpkinError for InventoryError {
fn is_kick(&self) -> bool {
use InventoryError::{
ClosedContainerInteract, InvalidPacket, InvalidSlot, LockError,
MultiplePlayersDragging, OutOfOrderDragging, PermissionError,
};
match self {
InvalidSlot | ClosedContainerInteract(..) | InvalidPacket | PermissionError => true,
LockError | OutOfOrderDragging | MultiplePlayersDragging => false,
}
}
fn severity(&self) -> log::Level {
use InventoryError::{
ClosedContainerInteract, InvalidPacket, InvalidSlot, LockError,
MultiplePlayersDragging, OutOfOrderDragging, PermissionError,
};
match self {
LockError
| InvalidSlot
| ClosedContainerInteract(..)
| InvalidPacket
| PermissionError => log::Level::Error,
OutOfOrderDragging => log::Level::Info,
MultiplePlayersDragging => log::Level::Warn,
}
}
fn client_kick_reason(&self) -> Option<String> {
None
}
}
impl PumpkinError for ReadingError {
fn is_kick(&self) -> bool {
true
}
fn severity(&self) -> log::Level {
log::Level::Error
}
fn client_kick_reason(&self) -> Option<String> {
None
}
}