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
use super::error::Error;

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

pub trait ResultExt<T> {

    fn error_message_prefixed(self, prefix: impl AsRef<str>) -> Result<T>;

    fn error_path_prefixed(self, prefix: impl AsRef<str>) -> Result<T>;

    fn alter_error_code(self, code: u16) -> Result<T>;
}

impl<T> ResultExt<T> for std::result::Result<T, Error> {

    fn error_message_prefixed(self, prefix: impl AsRef<str>) -> Self {
        match self {
            Ok(t) => Ok(t),
            Err(e) => Err(e.message_prefixed(prefix)),
        }
    }

    fn error_path_prefixed(self, prefix: impl AsRef<str>) -> Self {
        match self {
            Ok(t) => Ok(t),
            Err(e) => Err(e.path_prefixed(prefix)),
        }
    }

    fn alter_error_code(self, code: u16) -> Self {
        match self {
            Ok(t) => Ok(t),
            Err(mut e) => Err({
                e.code = code;
                e
            }),
        }
    }
}