generic_error/
lib.rs

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// GenErr!("this went wrong: {}", "thing")  ->  Err(GenericError("this went wrong: thing"))
17#[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