lafere_api/
error.rs

1use std::borrow::Cow;
2use std::error::Error as StdError;
3use std::fmt;
4
5pub use lafere::error::RequestError;
6
7/// The error that is sent if something goes wrong while responding
8/// to a request.
9pub 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	// Protobuf
41	#[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 {}