Skip to main content

over_there/core/client/
error.rs

1use crate::core::Reply;
2use derive_more::Display;
3use serde::{Deserialize, Serialize};
4use std::error::Error;
5use std::io;
6
7#[derive(Serialize, Deserialize, Debug, Display, PartialEq, Eq)]
8pub enum SendError {
9    EncodingFailed,
10    SendFailed,
11}
12
13impl Error for SendError {}
14
15impl From<AskError> for Option<SendError> {
16    fn from(error: AskError) -> Self {
17        match error {
18            AskError::EncodingFailed => Some(SendError::EncodingFailed),
19            AskError::SendFailed => Some(SendError::SendFailed),
20            _ => None,
21        }
22    }
23}
24
25#[derive(Serialize, Deserialize, Debug, Display, PartialEq, Eq)]
26pub enum AskError {
27    #[display(fmt = "Failed: {}", msg)]
28    Failure {
29        msg: String,
30    },
31    #[display(fmt = "Invalid Response: {:?}", reply)]
32    InvalidResponse {
33        reply: Reply,
34    },
35    Timeout,
36    EncodingFailed,
37    SendFailed,
38    CallbackLost,
39}
40
41impl Error for AskError {}
42
43impl From<SendError> for AskError {
44    fn from(error: SendError) -> Self {
45        match error {
46            SendError::EncodingFailed => Self::EncodingFailed,
47            SendError::SendFailed => Self::SendFailed,
48        }
49    }
50}
51
52#[derive(Serialize, Deserialize, Debug, Display)]
53pub enum FileAskError {
54    #[display(fmt = "{}", "_0")]
55    GeneralAskFailed(AskError),
56
57    #[display(fmt = "IO Error: {}", "_0")]
58    #[serde(
59        serialize_with = "crate::utils::serializers::io_error::serialize",
60        deserialize_with = "crate::utils::serializers::io_error::deserialize"
61    )]
62    IoError(io::Error),
63
64    #[display(fmt = "File signature changed: {}", id)]
65    FileSignatureChanged { id: u32 },
66}
67
68impl Error for FileAskError {}
69
70impl From<AskError> for FileAskError {
71    fn from(error: AskError) -> Self {
72        Self::GeneralAskFailed(error)
73    }
74}
75
76impl From<io::Error> for FileAskError {
77    fn from(error: io::Error) -> Self {
78        Self::IoError(error)
79    }
80}
81
82#[derive(Debug, Display)]
83pub enum ExecAskError {
84    #[display(fmt = "{}", "_0")]
85    GeneralAskFailed(AskError),
86
87    #[display(fmt = "IO Error: {}", "_0")]
88    IoError(io::Error),
89
90    FailedToKill,
91}
92
93impl Error for ExecAskError {}
94
95impl From<AskError> for ExecAskError {
96    fn from(error: AskError) -> Self {
97        Self::GeneralAskFailed(error)
98    }
99}
100
101impl From<io::Error> for ExecAskError {
102    fn from(error: io::Error) -> Self {
103        Self::IoError(error)
104    }
105}