1use serde_json::error::Error as SerdeError;
2use std::error::Error as StdError;
3use std::num::TryFromIntError;
4use std::str::Utf8Error;
5
6type BoxedError = Box<dyn StdError + Send + Sync + 'static>;
7
8#[derive(Debug, Clone, Eq, PartialEq, thiserror::Error)]
9#[non_exhaustive]
10pub enum ErrorOperation {
11 #[error("Operation delayed: {0}")]
12 Delay(String),
13 #[error("Operation failed: {0}")]
14 Fail(String),
15}
16
17#[derive(Debug, thiserror::Error)]
18#[non_exhaustive]
19pub enum Error {
20 #[error("Database error: {0}")]
21 DatabaseError(#[source] BoxedError),
22
23 #[error("Conversion error: {0}")]
24 ConversionError(#[source] BoxedError),
25}
26
27impl From<Utf8Error> for Error {
28 fn from(err: Utf8Error) -> Self {
29 Self::ConversionError(Box::new(err))
30 }
31}
32
33impl From<SerdeError> for Error {
34 fn from(err: SerdeError) -> Self {
35 Self::ConversionError(Box::new(err))
36 }
37}
38
39impl From<TryFromIntError> for Error {
40 fn from(value: TryFromIntError) -> Self {
41 Self::ConversionError(Box::new(value))
42 }
43}