nimble_client/
err.rs

1/*
2 * Copyright (c) Peter Bjorklund. All rights reserved. https://github.com/nimble-rust/nimble
3 * Licensed under the MIT License. See LICENSE in the project root for license information.
4 */
5use 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:?}") // TODO: Provide proper display for each error
29    }
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}