1use std::borrow::Cow;
2use std::error::Error as StdError;
3use std::fmt;
4
5pub use lafere::error::RequestError;
6
7pub trait ApiError: StdError {
10 fn from_request_error(e: RequestError) -> Self;
11
12 fn from_message_error(e: MessageError) -> Self;
13}
14
15#[derive(Debug)]
16#[non_exhaustive]
17pub enum Error {
18 MessageError(MessageError),
19}
20
21impl From<MessageError> for Error {
22 fn from(e: MessageError) -> Self {
23 Self::MessageError(e)
24 }
25}
26
27impl fmt::Display for Error {
28 fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
29 fmt::Debug::fmt(self, fmt)
30 }
31}
32
33impl StdError for Error {}
34
35#[derive(Debug)]
36#[non_exhaustive]
37pub enum MessageError {
38 #[cfg(feature = "json")]
39 Json(serde_json::Error),
40 #[cfg(feature = "protobuf")]
42 EncodeError(protopuffer::encode::EncodeError),
43 #[cfg(feature = "protobuf")]
44 DecodeError(protopuffer::decode::DecodeError),
45 Other(Cow<'static, str>),
46}
47
48impl fmt::Display for MessageError {
49 fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
50 fmt::Debug::fmt(self, fmt)
51 }
52}
53
54impl StdError for MessageError {}