1
2use std::error;
3use std::fmt;
4use std::convert;
5use std::clone::Clone;
6
7#[derive(Clone)]
8pub struct GenericError {
9 pub msg: String,
10}
11
12
13pub type Result<T> = std::result::Result<T, GenericError>;
14
15
16#[macro_export]
18macro_rules! GenErr {
19 ($arg:expr) => {
20 Err(
21 GenericError {
22 msg: String::from($arg),
23 }
24 )
25 };
26 ($($args:expr),+) => {
27 Err(
28 GenericError {
29 msg: format!($($args),+),
30 }
31 )
32 };
33}
34
35
36impl fmt::Display for GenericError {
37 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
38 write!(f, "{}", &self.msg)
39 }
40}
41
42
43impl fmt::Debug for GenericError {
44 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
45 write!(f, "{}", &self.msg)
46 }
47}
48
49
50impl<T> convert::From<T> for GenericError where T: error::Error {
51 fn from(error: T) -> Self {
52 let desc = format!("{:?}", error);
53 GenericError {
54 msg: desc,
55 }
56 }
57}
58