env_lang/
struct_envlang_error.rs1use std::fmt;
2use core::fmt::Display;
3use failure::{Backtrace, Context, Fail};
4
5#[derive(Debug)]
9pub struct EnvLangError {
10 pub inner: Context<EnvLangErrorKind>,
11}
12
13#[derive(Fail, Debug, Clone, Eq, PartialEq)]
14pub enum EnvLangErrorKind {
15 SpaceNotAllow,
16 TooManyPoint,
17 TooManyUnderscore,
18 TooManyArobase,
19}
20
21impl fmt::Display for EnvLangErrorKind {
22 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
23 match *self {
24 EnvLangErrorKind::SpaceNotAllow => { write!(f, "space not allow") },
25 EnvLangErrorKind::TooManyPoint => { write!(f, "split by point return more than 2 chunks") },
26 EnvLangErrorKind::TooManyUnderscore => { write!(f, "split by underscore return more than 2 chunks") },
27 EnvLangErrorKind::TooManyArobase => { write!(f, "split by arobase return more than 2 chunks") },
28 }
29 }
30}
31
32#[cfg_attr(tarpaulin, skip)]
33impl Fail for EnvLangError {
34 fn cause(&self) -> Option<&Fail> {
35 self.inner.cause()
36 }
37 fn backtrace(&self) -> Option<&Backtrace> {
38 self.inner.backtrace()
39 }
40}
41
42impl Display for EnvLangError {
43 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
44 Display::fmt(&self.inner, f)
45 }
46}
47
48impl EnvLangError {
49 pub fn kind(&self) -> &EnvLangErrorKind {
50 &*self.inner.get_context()
51 }
52}
53
54impl From<EnvLangErrorKind> for EnvLangError {
55 fn from(kind: EnvLangErrorKind) -> EnvLangError {
56 EnvLangError { inner: Context::new(kind)}
57 }
58}