surrealml_core/errors/
error.rs1use serde::{Deserialize, Serialize};
3use thiserror::Error;
4use std::fmt;
5
6
7#[macro_export]
8macro_rules! safe_eject {
9 ($e:expr, $err_status:expr, $msg:expr) => {
11 $e.map_err(|x| {let file_track = format!("{}:{}", file!(), line!()); let formatted_error = format!("{} => {}", file_track, x.to_string()); SurrealError::new(formatted_error, $err_status)})?
12 };
13 ($e:expr, $err_status:expr) => {
15 $e.map_err(|x| {let file_track = format!("{}:{}", file!(), line!()); let formatted_error = format!("{} => {}", file_track, x.to_string()); SurrealError::new(formatted_error, $err_status)})?
16 };
17}
18
19
20#[macro_export]
21macro_rules! safe_eject_internal {
22 ($e:expr, $err_status:expr, $msg:expr) => {
24 $e.map_err(|x| {let file_track = format!("{}:{}", file!(), line!()); let formatted_error = format!("{} => {}", file_track, x.to_string()); SurrealError::new(formatted_error, SurrealErrorStatus::Unknown)})?
25 };
26 ($e:expr) => {
28 $e.map_err(|x| {let file_track = format!("{}:{}", file!(), line!()); let formatted_error = format!("{} => {}", file_track, x.to_string()); SurrealError::new(formatted_error, SurrealErrorStatus::Unknown)})?
29 };
30}
31
32
33#[macro_export]
34macro_rules! safe_eject_option {
35 ($check:expr) => {
36 match $check {Some(x) => x, None => {let file_track = format!("{}:{}", file!(), line!());let message = format!("{}=>The value is not found", file_track);return Err(SurrealError::new(message, SurrealErrorStatus::NotFound))}}
37 };
38}
39
40
41#[derive(Error, Debug, Serialize, Deserialize, PartialEq)]
50pub enum SurrealErrorStatus {
51 #[error("not found")]
52 NotFound,
53 #[error("You are forbidden to access resource")]
54 Forbidden,
55 #[error("Unknown Internal Error")]
56 Unknown,
57 #[error("Bad Request")]
58 BadRequest,
59 #[error("Conflict")]
60 Conflict,
61 #[error("Unauthorized")]
62 Unauthorized
63}
64
65
66#[derive(Serialize, Deserialize, Debug, Error)]
72pub struct SurrealError {
73 pub message: String,
74 pub status: SurrealErrorStatus
75}
76
77
78impl SurrealError {
79
80 pub fn new(message: String, status: SurrealErrorStatus) -> Self {
89 SurrealError {
90 message,
91 status
92 }
93 }
94}
95
96
97impl fmt::Display for SurrealError {
98 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
99 write!(f, "{}", self.message)
100 }
101}