rust_cutil/cutil/
meta.rs

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