xapi_rs/
error.rs

1// SPDX-License-Identifier: GPL-3.0-or-later
2
3use crate::data::DataError;
4use std::{borrow::Cow, io};
5use thiserror::Error;
6use tracing::error;
7
8/// Enumeration of different error types raised by this crate.
9#[derive(Debug, Error)]
10pub enum MyError {
11    /// xAPI format violation error.
12    #[error("Failed matching '{input:?}' to {name:?} format pattern")]
13    Format {
14        #[doc(hidden)]
15        input: Cow<'static, str>,
16        #[doc(hidden)]
17        name: Cow<'static, str>,
18    },
19
20    /// Data serialization/deserialization, parsing and validation errors.
21    #[error("General data error: {0}")]
22    Data(
23        #[doc(hidden)]
24        #[from]
25        DataError,
26    ),
27
28    /// Base64 decoding error.
29    #[error("Base64 decode error: {0}")]
30    Base64(
31        #[doc(hidden)]
32        #[from]
33        base64::DecodeError,
34    ),
35
36    /// UTF-8 string conversion error.
37    #[error("UTF8 conversion error: {0}")]
38    UTF8(
39        #[doc(hidden)]
40        #[from]
41        std::str::Utf8Error,
42    ),
43
44    /// Rocket Multipart error.
45    #[error("Multipart/mixed parse error: {0}")]
46    MULTIPART(
47        #[doc(hidden)]
48        #[from]
49        rocket_multipart::Error,
50    ),
51
52    /// DB pool/connection error.
53    #[error("DB error: {0}")]
54    DB(
55        #[doc(hidden)]
56        #[from]
57        sqlx::Error,
58    ),
59
60    /// DB migration error.
61    #[error("DB migration error: {0}")]
62    DBMigrate(
63        #[doc(hidden)]
64        #[from]
65        sqlx::migrate::MigrateError,
66    ),
67
68    /// Unexpected runtime error.
69    #[error("{0}")]
70    Runtime(#[doc(hidden)] Cow<'static, str>),
71
72    /// I/O error.
73    #[error("I/O error: {0}")]
74    IO(
75        #[doc(hidden)]
76        #[from]
77        io::Error,
78    ),
79
80    /// OpenSSL error.
81    #[error("OpenSSL error: {0}")]
82    OSSL(
83        #[doc(hidden)]
84        #[from]
85        openssl::error::ErrorStack,
86    ),
87
88    /// JOSE error.
89    #[error("JOSE error: {0}")]
90    JOSE(
91        #[doc(hidden)]
92        #[from]
93        josekit::JoseError,
94    ),
95}