iron_os_packages_api/
error.rs

1use 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// todo i don't wan't to change the enum at the moment
14#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
15#[derive(IntoMessage, FromMessage)]
16#[message(json)]
17#[non_exhaustive]
18pub enum Error {
19	// deprecated
20	ConnectionClosed,
21	// deprecated
22	RequestDropped,
23	AuthKeyUnknown,
24	NoSignKeyForChannel(Channel),
25	NotAuthenticated,
26	SignatureIncorrect,
27	VersionNotFound,
28	StartUnreachable,
29	FileNotFound,
30	Internal(String),
31	Request(String),
32	// deprecated
33	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}