1use datagram_chunker::DatagramChunkerError;
6use err_rs::{ErrorLevel, ErrorLevelProvider};
7use nimble_client_logic::err::ClientLogicError;
8use nimble_layer::NimbleLayerError;
9use nimble_rectify::RectifyError;
10use seq_map::SeqMapError;
11use std::fmt::Display;
12use tick_queue::QueueError;
13
14#[derive(Debug)]
15pub enum ClientError {
16 IoError(std::io::Error),
17 RectifyError(RectifyError),
18 ClientLogicErrorKind(ClientLogicError),
19 QueueError(QueueError),
20 DatagramChunkerError(DatagramChunkerError),
21 NimbleLayerError(NimbleLayerError),
22 PredictionQueueOverflow,
23 SeqMapError(SeqMapError),
24}
25
26impl Display for ClientError {
27 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
28 write!(f, "{self:?}") }
30}
31
32impl From<SeqMapError> for ClientError {
33 fn from(err: SeqMapError) -> Self {
34 Self::SeqMapError(err)
35 }
36}
37
38impl From<DatagramChunkerError> for ClientError {
39 fn from(value: DatagramChunkerError) -> Self {
40 Self::DatagramChunkerError(value)
41 }
42}
43
44impl From<NimbleLayerError> for ClientError {
45 fn from(value: NimbleLayerError) -> Self {
46 Self::NimbleLayerError(value)
47 }
48}
49
50impl ErrorLevelProvider for ClientError {
51 fn error_level(&self) -> ErrorLevel {
52 match self {
53 Self::IoError(_)
54 | Self::ClientLogicErrorKind(_)
55 | Self::QueueError(_)
56 | Self::DatagramChunkerError(_)
57 | Self::NimbleLayerError(_) => ErrorLevel::Info,
58 Self::RectifyError(err) => err.error_level(),
59 Self::PredictionQueueOverflow | Self::SeqMapError(_) => ErrorLevel::Critical,
60 }
61 }
62}
63
64impl From<RectifyError> for ClientError {
65 fn from(err: RectifyError) -> Self {
66 Self::RectifyError(err)
67 }
68}
69
70impl From<QueueError> for ClientError {
71 fn from(err: QueueError) -> Self {
72 Self::QueueError(err)
73 }
74}
75
76impl From<std::io::Error> for ClientError {
77 fn from(err: std::io::Error) -> Self {
78 Self::IoError(err)
79 }
80}
81
82impl From<ClientLogicError> for ClientError {
83 fn from(err: ClientLogicError) -> Self {
84 Self::ClientLogicErrorKind(err)
85 }
86}