iron_os_packages_api/
error.rs1use crate::packages::Channel;
2
3use std::fmt;
4
5use serde::{Serialize, Deserialize};
6
7use stream_api::{IntoMessage, FromMessage};
8use stream_api::error::{ApiError, RequestError, MessageError};
9
10pub type Result<T> = std::result::Result<T, Error>;
11
12
13#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
15#[derive(IntoMessage, FromMessage)]
16#[message(json)]
17#[non_exhaustive]
18pub enum Error {
19 ConnectionClosed,
21 RequestDropped,
23 AuthKeyUnknown,
24 NoSignKeyForChannel(Channel),
25 NotAuthenticated,
26 SignatureIncorrect,
27 VersionNotFound,
28 StartUnreachable,
29 FileNotFound,
30 Internal(String),
31 Request(String),
32 Response(String),
34 Other(String)
35}
36
37impl ApiError for Error {
38 fn from_request_error(e: RequestError) -> Self {
39 match e {
40 RequestError::ConnectionAlreadyClosed => Self::ConnectionClosed,
41 RequestError::NoResponse => Self::RequestDropped,
42 RequestError::ResponsePacket(p) => Self::Response(p.to_string()),
43 e => Self::Request(e.to_string())
44 }
45 }
46
47 fn from_message_error(e: MessageError) -> Self {
48 Self::Other(e.to_string())
49 }
50}
51
52impl std::error::Error for Error {}
53
54impl fmt::Display for Error {
55 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
56 fmt::Debug::fmt(self, f)
57 }
58}