rust_cutil/cutil/
meta.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
use std::error::Error;
use std::fmt;

use serde::{Deserialize, Serialize};

#[macro_export]
macro_rules! meta {
  ($name: expr) => {
    Meta {
      name: $name.to_string(),
      message: "".to_string(),
      error: None,
    }
    .into()
  };
  ($name: expr, $message: expr) => {
    Meta {
      name: $name.to_string(),
      message: $message.to_string(),
      error: None,
    }
    .into()
  };
  ($name: expr, $message: expr, $error: expr) => {
    Meta {
      name: $name.to_string(),
      message: $message.to_string(),
      error: Some(Box::new($error)),
    }
    .into()
  };
}

pub type R<T> = std::result::Result<T, Meta>;

#[derive(Debug, Serialize, Deserialize)]
pub struct Meta {
  pub name: String,
  pub message: String,
  #[serde(skip)]
  pub error: Option<Box<dyn Error>>,
}

unsafe impl Send for Meta {}

unsafe impl Sync for Meta {}

impl Error for Meta {}

impl fmt::Display for Meta {
  fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    write!(f, "Meta: name={}, message={}", self.name, self.message)
  }
}