-
Notifications
You must be signed in to change notification settings - Fork 1
/
error.rs
98 lines (94 loc) · 3.6 KB
/
error.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// use axum::{http::StatusCode, Json};
// use serde::Serialize;
// #[derive(thiserror::Error, Debug)]
// pub enum MyError {
// #[error("MongoDB error")]
// MongoError(#[from] mongodb::error::Error),
// #[error("duplicate key error: {0}")]
// MongoErrorKind(mongodb::error::ErrorKind),
// #[error("duplicate key error: {0}")]
// MongoDuplicateError(mongodb::error::Error),
// #[error("error during mongodb query: {0}")]
// MongoQueryError(mongodb::error::Error),
// #[error("error serializing BSON")]
// MongoSerializeBsonError(#[from] mongodb::bson::ser::Error),
// #[error("validation error")]
// MongoDataError(#[from] mongodb::bson::document::ValueAccessError),
// #[error("invalid ID: {0}")]
// InvalidIDError(String),
// #[error("Note with ID: {0} not found")]
// NotFoundError(String),
// }
// #[derive(Serialize)]
// struct ErrorResponse {
// status: &'static str,
// message: String,
// }
// impl Into<(axum::http::StatusCode, Json<serde_json::Value>)> for MyError {
// fn into(self) -> (axum::http::StatusCode, Json<serde_json::Value>) {
// let (status, error_response) = match self {
// MyError::MongoErrorKind(e) => (
// StatusCode::INTERNAL_SERVER_ERROR,
// ErrorResponse {
// status: "error",
// message: format!("MongoDB error kind: {}", e),
// },
// ),
// MyError::MongoDuplicateError(_) => (
// StatusCode::CONFLICT,
// ErrorResponse {
// status: "fail",
// message: "Note with that title already exists".to_string(),
// },
// ),
// MyError::InvalidIDError(id) => (
// StatusCode::BAD_REQUEST,
// ErrorResponse {
// status: "fail",
// message: format!("invalid ID: {}", id),
// },
// ),
// MyError::NotFoundError(id) => (
// StatusCode::NOT_FOUND,
// ErrorResponse {
// status: "fail",
// message: format!("Note with ID: {} not found", id),
// },
// ),
// MyError::MongoError(e) => (
// StatusCode::INTERNAL_SERVER_ERROR,
// ErrorResponse {
// status: "error",
// message: format!("MongoDB error: {}", e),
// },
// ),
// MyError::MongoQueryError(e) => (
// StatusCode::INTERNAL_SERVER_ERROR,
// ErrorResponse {
// status: "error",
// message: format!("MongoDB error: {}", e),
// },
// ),
// MyError::MongoSerializeBsonError(e) => (
// StatusCode::INTERNAL_SERVER_ERROR,
// ErrorResponse {
// status: "error",
// message: format!("MongoDB error: {}", e),
// },
// ),
// MyError::MongoDataError(e) => (
// StatusCode::INTERNAL_SERVER_ERROR,
// ErrorResponse {
// status: "error",
// message: format!("MongoDB error: {}", e),
// },
// ),
// };
// (status, Json(serde_json::to_value(error_response).unwrap()))
// }
// }
// impl From<MyError> for (StatusCode, ErrorResponse) {
// fn from(err: MyError) -> (StatusCode, ErrorResponse) {
// err.into()
// }
// }