1use std::error::Error;
2use std::fmt;
3
4use serde::{Deserialize, Serialize};
5use utoipa::ToSchema;
6
7#[macro_export]
8macro_rules! meta {
9 ($name: expr) => {
10 Meta {
11 name: $name.to_string(),
12 message: "".to_string(),
13 error: None,
14 }
15 .into()
16 };
17 ($name: expr, $message: expr) => {
18 Meta {
19 name: $name.to_string(),
20 message: $message.to_string(),
21 error: None,
22 }
23 .into()
24 };
25 ($name: expr, $message: expr, $error: expr) => {
26 Meta {
27 name: $name.to_string(),
28 message: $message.to_string(),
29 error: Some(Box::new($error)),
30 }
31 .into()
32 };
33}
34
35pub type R<T> = std::result::Result<T, Meta>;
36
37#[derive(Debug, Serialize, Deserialize, ToSchema)]
38pub struct Meta {
39 pub name: String,
40 pub message: String,
41 #[serde(skip)]
42 pub error: Option<Box<dyn Error>>,
43}
44
45unsafe impl Send for Meta {}
46
47unsafe impl Sync for Meta {}
48
49impl Error for Meta {}
50
51impl fmt::Display for Meta {
52 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
53 write!(f, "Meta: name={}, message={}", self.name, self.message)
54 }
55}