rust_cutil/cutil/
meta.rs

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}